Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

489 lines
11 KiB

  1. /********************************************************************/
  2. /** Copyright(c) 1995 Microsoft Corporation. **/
  3. /********************************************************************/
  4. //***
  5. //
  6. // Filename: dimsvcp.h
  7. //
  8. // Description: This module contains the definitions for the Dynamic Interface
  9. // manager service.
  10. //
  11. // History: May 11,1995 NarenG Created original version.
  12. //
  13. #ifndef _DIMSVCP_
  14. #define _DIMSVCP_
  15. #include <nt.h>
  16. #include <ntrtl.h> // For ASSERT
  17. #include <nturtl.h> // needed for winbase.h
  18. #define INC_OLE2
  19. #include <windows.h> // Win32 base API's
  20. #include <rtutils.h>
  21. #include <lmcons.h>
  22. #include <ras.h> // For HRASCONN
  23. #include <rasman.h> // For HPORT
  24. #include <rasppp.h> // For PPP_INTERFACE_INFO
  25. #include <dim.h>
  26. #include <dimif.h>
  27. #include <mprlog.h>
  28. #include <raserror.h>
  29. #include <mprerror.h>
  30. #include <stdlib.h>
  31. #include <string.h>
  32. #include <stdio.h>
  33. //
  34. // Macros for DIM
  35. //
  36. #define DIMLogError( LogId, NumStrings, lpwsSubStringArray, dwRetCode ) \
  37. if ( gblDIMConfigInfo.dwLoggingLevel > 0 ) { \
  38. RouterLogError( gblDIMConfigInfo.hLogEvents, LogId, \
  39. NumStrings, lpwsSubStringArray, dwRetCode ); }
  40. #define DIMLogWarning( LogId, NumStrings, lpwsSubStringArray ) \
  41. if ( gblDIMConfigInfo.dwLoggingLevel > 1 ) { \
  42. RouterLogWarning( gblDIMConfigInfo.hLogEvents, LogId, \
  43. NumStrings, lpwsSubStringArray, 0 ); }
  44. #define DIMLogInformation( LogId, NumStrings, lpwsSubStringArray ) \
  45. if ( gblDIMConfigInfo.dwLoggingLevel > 2 ) { \
  46. RouterLogInformation( gblDIMConfigInfo.hLogEvents, \
  47. LogId, NumStrings, lpwsSubStringArray, 0 ); }
  48. #define DIMLogErrorString(LogId,NumStrings,lpwsSubStringArray,dwRetCode, \
  49. dwPos ) \
  50. if ( gblDIMConfigInfo.dwLoggingLevel > 0 ) { \
  51. RouterLogErrorString( gblDIMConfigInfo.hLogEvents, LogId, NumStrings, \
  52. lpwsSubStringArray, dwRetCode, dwPos ); }
  53. #define DIMTRACE(a) \
  54. TracePrintfExA(gblDIMConfigInfo.dwTraceId, TRACE_DIM, a )
  55. #define DIMTRACE1(a,b) \
  56. TracePrintfExA(gblDIMConfigInfo.dwTraceId, TRACE_DIM, a,b )
  57. #define DIMTRACE2(a,b,c) \
  58. TracePrintfExA(gblDIMConfigInfo.dwTraceId, TRACE_DIM, a,b,c )
  59. #define DIMTRACE3(a,b,c,d) \
  60. TracePrintfExA(gblDIMConfigInfo.dwTraceId, TRACE_DIM, a,b,c,d )
  61. #define DIMTRACE4(a,b,c,d,e) \
  62. TracePrintfExA(gblDIMConfigInfo.dwTraceId, TRACE_DIM, a,b,c,d,e)
  63. #define DimIndexToHandle(_x) ((_x == 0xFFFFFFFF) ? INVALID_HANDLE_VALUE : (HANDLE) UlongToPtr(_x))
  64. //
  65. // Defines for DIM
  66. //
  67. #define DIM_SERVICE_NAME TEXT("RemoteAccess")
  68. #define DIMSVC_ALL_ACCESS 0x0001 // Access mask values
  69. #define DIM_HEAP_INITIAL_SIZE 20000 // Approx 20K
  70. #define DIM_HEAP_MAX_SIZE 0 // Not limited
  71. #define DIM_MAX_LAN_INTERFACES 0xFFFFFFFF
  72. #define DIM_MAX_WAN_INTERFACES 0xFFFFFFFF
  73. #define DIM_MAX_CLIENT_INTERFACES 0xFFFFFFFF
  74. #define ROUTER_ROLE_RAS 0x00000001
  75. #define ROUTER_ROLE_LAN 0x00000002
  76. #define ROUTER_ROLE_WAN 0x00000004
  77. #define DEF_LOGGINGLEVEL 3
  78. #define MIN_LOGGINGLEVEL 0
  79. #define MAX_LOGGINGLEVEL 3
  80. #define DIM_MS_VENDOR_ID 311
  81. #define MAX_NUM_ROUTERMANAGERS 2
  82. #define DIM_MAX_IDENTITY_ATTRS 200
  83. #define DIM_TRACE_FLAGS 0x00010000 | TRACE_USE_MASK | TRACE_USE_MSEC
  84. //
  85. // Data structure definitions for DIM
  86. //
  87. //
  88. // Configuration information for DIM
  89. //
  90. typedef struct _DIM_CONFIG_INFO
  91. {
  92. BOOL dwRouterRole;
  93. DWORD dwNumRouterManagers;
  94. SERVICE_STATUS_HANDLE hServiceStatus;
  95. SERVICE_STATUS ServiceStatus; // DIM service status structure
  96. DWORD dwTraceId;
  97. DWORD dwLoggingLevel;
  98. DWORD dwNumThreadsRunning;
  99. HANDLE hMprConfig;
  100. BOOL fMemberOfDS;
  101. HANDLE hHeap;
  102. HANDLE hLogEvents;
  103. HANDLE hObjectRouterIdentity;
  104. HANDLE hTimerQ;
  105. HANDLE hTimer;
  106. HANDLE hDeviceNotification;
  107. DWORD dwRouterIdentityDueTime;
  108. CRITICAL_SECTION CSRouterIdentity;
  109. NT_PRODUCT_TYPE NtProductType;
  110. ULARGE_INTEGER qwStartTime;
  111. } DIM_CONFIG_INFO, *PDIM_CONFIG_INFO;
  112. //
  113. // Contains pointers to funtions called by the DIM into the DDM DLL if not
  114. // in LANOnly mode.
  115. //
  116. typedef struct _DDM_FUNCTION_TABLE
  117. {
  118. LPSTR lpEntryPointName;
  119. FARPROC pEntryPoint;
  120. } DDM_FUNCTION_TABLE; *PDDM_FUNCTION_TABLE;
  121. #define DIM_RPC_LOADED 0x00000001
  122. #define DIM_RMS_LOADED 0x00000002
  123. #define DIM_DDM_LOADED 0x00000004
  124. #define DIM_SECOBJ_LOADED 0x00000008
  125. #define DIM_SERVICE_STARTED 0x00000010
  126. #define DIM_SERVICE_STOPPED 0x00000020
  127. //
  128. // Globals variables for DIM
  129. //
  130. #ifdef _ALLOCATE_DIM_GLOBALS_
  131. #define DIM_EXTERN
  132. DDM_FUNCTION_TABLE gblDDMFunctionTable[] =
  133. {
  134. "DDMServiceInitialize",
  135. NULL,
  136. "DDMConnectInterface",
  137. NULL,
  138. "DDMDisconnectInterface",
  139. NULL,
  140. "DDMAdminInterfaceConnect",
  141. NULL,
  142. "DDMAdminInterfaceDisconnect",
  143. NULL,
  144. "DDMAdminServerGetInfo",
  145. NULL,
  146. "DDMAdminConnectionEnum",
  147. NULL,
  148. "DDMAdminConnectionGetInfo",
  149. NULL,
  150. "DDMAdminConnectionClearStats",
  151. NULL,
  152. "DDMAdminPortEnum",
  153. NULL,
  154. "DDMAdminPortGetInfo",
  155. NULL,
  156. "DDMAdminPortClearStats",
  157. NULL,
  158. "DDMAdminPortReset",
  159. NULL,
  160. "DDMAdminPortDisconnect",
  161. NULL,
  162. "IfObjectInitiatePersistentConnections",
  163. NULL,
  164. "DDMServicePostListens",
  165. NULL,
  166. "IfObjectLoadPhonebookInfo",
  167. NULL,
  168. "IfObjectNotifyOfReachabilityChange",
  169. NULL,
  170. "IfObjectSetDialoutHoursRestriction",
  171. NULL,
  172. "DDMGetIdentityAttributes",
  173. NULL,
  174. "DDMRegisterConnectionNotification",
  175. NULL,
  176. "DDMSendUserMessage",
  177. NULL,
  178. "DDMTransportCreate",
  179. NULL,
  180. "IfObjectFreePhonebookContext",
  181. NULL,
  182. "DDMAdminRemoveQuarantine",
  183. NULL,
  184. "DDMPostCleanup",
  185. NULL,
  186. NULL,
  187. NULL
  188. };
  189. #else
  190. #define DIM_EXTERN extern
  191. extern
  192. DDM_FUNCTION_TABLE gblDDMFunctionTable[];
  193. #endif
  194. DIM_EXTERN
  195. DIM_CONFIG_INFO gblDIMConfigInfo;
  196. DIM_EXTERN
  197. ROUTER_MANAGER_OBJECT * gblRouterManagers; // List of Router Managers.
  198. DIM_EXTERN
  199. ROUTER_INTERFACE_TABLE gblInterfaceTable; // Hash table of Router Interfaces
  200. DIM_EXTERN
  201. HANDLE gblhEventDDMServiceState;
  202. DIM_EXTERN
  203. HANDLE gblhEventDDMTerminated;
  204. DIM_EXTERN
  205. HANDLE gblhEventRMState;
  206. DIM_EXTERN
  207. HANDLE gblhEventTerminateDIM;
  208. DIM_EXTERN
  209. HMODULE gblhModuleDDM;
  210. DIM_EXTERN
  211. DWORD gbldwDIMComponentsLoaded;
  212. DIM_EXTERN
  213. OSVERSIONINFOEX gblOsVersionInfo;
  214. #ifdef MEM_LEAK_CHECK
  215. #define DIM_MEM_TABLE_SIZE 100
  216. DIM_EXTERN
  217. PVOID DimMemTable[DIM_MEM_TABLE_SIZE];
  218. #define LOCAL_ALLOC DebugAlloc
  219. #define LOCAL_FREE DebugFree
  220. #define LOCAL_REALLOC DebugReAlloc
  221. LPVOID
  222. DebugAlloc( DWORD Flags, DWORD dwSize );
  223. BOOL
  224. DebugFree( PVOID pMem );
  225. LPVOID
  226. DebugReAlloc( PVOID pMem, DWORD dwSize );
  227. #else
  228. #define LOCAL_ALLOC(Flags,dwSize) HeapAlloc( gblDIMConfigInfo.hHeap, \
  229. HEAP_ZERO_MEMORY, dwSize )
  230. #define LOCAL_FREE(hMem) HeapFree( gblDIMConfigInfo.hHeap, 0, hMem )
  231. #endif
  232. #define LOCAL_REALLOC(hMem,dwSize) HeapReAlloc( gblDIMConfigInfo.hHeap, \
  233. HEAP_ZERO_MEMORY,hMem,dwSize)
  234. //
  235. // Function Prototypes for RPC
  236. //
  237. VOID
  238. DimTerminateRPC(
  239. VOID
  240. );
  241. DWORD
  242. DimInitializeRPC(
  243. IN BOOL fLanOnlyMode
  244. );
  245. //
  246. // Function prototypes for Loading router managers and registry parameters.
  247. DWORD
  248. RegLoadDimParameters(
  249. VOID
  250. );
  251. DWORD
  252. RegLoadRouterManagers(
  253. VOID
  254. );
  255. VOID
  256. DimUnloadRouterManagers(
  257. VOID
  258. );
  259. DWORD
  260. RegLoadDDM(
  261. VOID
  262. );
  263. DWORD
  264. RegLoadInterfaces(
  265. IN LPWSTR lpwsInterfaceName,
  266. IN BOOL fAllTransports
  267. );
  268. DWORD
  269. RegLoadInterface(
  270. IN LPWSTR lpwsInterfaceName,
  271. IN HKEY hKeyInterface,
  272. IN BOOL fAllTransports,
  273. IN PVOID * ppvContext
  274. );
  275. DWORD
  276. RegOpenAppropriateKey(
  277. IN LPWSTR wchInterfaceName,
  278. IN DWORD dwProtocolId,
  279. IN OUT HKEY * phKeyRM
  280. );
  281. DWORD
  282. RegOpenAppropriateRMKey(
  283. IN DWORD dwProtocolId,
  284. IN OUT HKEY * phKeyRM
  285. );
  286. //
  287. // Function prototypes for calls made by the various router managers into
  288. // DIM.
  289. //
  290. DWORD
  291. DIMConnectInterface(
  292. IN HANDLE hDIMInterface,
  293. IN DWORD dwProtocolId
  294. );
  295. DWORD
  296. DIMDisconnectInterface(
  297. IN HANDLE hDDMInterface,
  298. IN DWORD dwProtocolId
  299. );
  300. DWORD
  301. DIMSaveInterfaceInfo(
  302. IN HANDLE hDDMInterface,
  303. IN DWORD dwProtocolId,
  304. IN LPVOID pInterfaceInfo,
  305. IN DWORD cbInterfaceInfoSize
  306. );
  307. DWORD
  308. DIMRestoreInterfaceInfo(
  309. IN HANDLE hDIMInterface,
  310. IN DWORD dwProtocolId,
  311. IN LPVOID lpInterfaceInfo OPTIONAL,
  312. IN LPDWORD lpcbInterfaceInfoSize
  313. );
  314. VOID
  315. DIMRouterStopped(
  316. IN DWORD dwProtocolId,
  317. IN DWORD dwError
  318. );
  319. DWORD
  320. DIMSaveGlobalInfo(
  321. IN DWORD dwProtocolId,
  322. IN LPVOID pGlobalInfo,
  323. IN DWORD cbGlobalInfoSize
  324. );
  325. DWORD
  326. DIMInterfaceEnabled(
  327. IN HANDLE hDIMInterface,
  328. IN DWORD dwProtocolId,
  329. IN BOOL fEnabled
  330. );
  331. //
  332. // Utility function prototypes
  333. //
  334. DWORD
  335. AddInterfacesToRouterManager(
  336. IN LPWSTR lpwsInterfaceName,
  337. IN DWORD dwTransportId
  338. );
  339. DWORD
  340. GetTransportIndex(
  341. IN DWORD dwProtocolId
  342. );
  343. FARPROC
  344. GetDDMEntryPoint(
  345. IN LPSTR lpEntryPoint
  346. );
  347. DWORD
  348. GetSizeOfDialoutHoursRestriction(
  349. IN LPWSTR lpwsDialoutHoursRestriction
  350. );
  351. BOOL
  352. IsInterfaceRoleAcceptable(
  353. IN ROUTER_INTERFACE_OBJECT* pIfObject,
  354. IN DWORD dwTransportId);
  355. //
  356. // Security object functions
  357. //
  358. DWORD
  359. DimSecObjCreate(
  360. VOID
  361. );
  362. DWORD
  363. DimSecObjDelete(
  364. VOID
  365. );
  366. DWORD
  367. DimSecObjAccessCheck(
  368. IN DWORD DesiredAccess,
  369. OUT LPDWORD lpdwAccessStatus
  370. );
  371. BOOL
  372. DimIsLocalService(
  373. VOID
  374. );
  375. #endif