Source code of Windows XP (NT5)
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.

473 lines
10 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. //
  127. // Globals variables for DIM
  128. //
  129. #ifdef _ALLOCATE_DIM_GLOBALS_
  130. #define DIM_EXTERN
  131. DDM_FUNCTION_TABLE gblDDMFunctionTable[] =
  132. {
  133. "DDMServiceInitialize",
  134. NULL,
  135. "DDMConnectInterface",
  136. NULL,
  137. "DDMDisconnectInterface",
  138. NULL,
  139. "DDMAdminInterfaceConnect",
  140. NULL,
  141. "DDMAdminInterfaceDisconnect",
  142. NULL,
  143. "DDMAdminServerGetInfo",
  144. NULL,
  145. "DDMAdminConnectionEnum",
  146. NULL,
  147. "DDMAdminConnectionGetInfo",
  148. NULL,
  149. "DDMAdminConnectionClearStats",
  150. NULL,
  151. "DDMAdminPortEnum",
  152. NULL,
  153. "DDMAdminPortGetInfo",
  154. NULL,
  155. "DDMAdminPortClearStats",
  156. NULL,
  157. "DDMAdminPortReset",
  158. NULL,
  159. "DDMAdminPortDisconnect",
  160. NULL,
  161. "IfObjectInitiatePersistentConnections",
  162. NULL,
  163. "DDMServicePostListens",
  164. NULL,
  165. "IfObjectLoadPhonebookInfo",
  166. NULL,
  167. "IfObjectNotifyOfReachabilityChange",
  168. NULL,
  169. "IfObjectSetDialoutHoursRestriction",
  170. NULL,
  171. "DDMGetIdentityAttributes",
  172. NULL,
  173. "DDMRegisterConnectionNotification",
  174. NULL,
  175. "DDMSendUserMessage",
  176. NULL,
  177. "DDMTransportCreate",
  178. NULL,
  179. NULL,
  180. NULL
  181. };
  182. #else
  183. #define DIM_EXTERN extern
  184. extern
  185. DDM_FUNCTION_TABLE gblDDMFunctionTable[];
  186. #endif
  187. DIM_EXTERN
  188. DIM_CONFIG_INFO gblDIMConfigInfo;
  189. DIM_EXTERN
  190. ROUTER_MANAGER_OBJECT * gblRouterManagers; // List of Router Managers.
  191. DIM_EXTERN
  192. ROUTER_INTERFACE_TABLE gblInterfaceTable; // Hash table of Router Interfaces
  193. DIM_EXTERN
  194. HANDLE gblhEventDDMServiceState;
  195. DIM_EXTERN
  196. HANDLE gblhEventDDMTerminated;
  197. DIM_EXTERN
  198. HANDLE gblhEventRMState;
  199. DIM_EXTERN
  200. HANDLE gblhEventTerminateDIM;
  201. DIM_EXTERN
  202. HMODULE gblhModuleDDM;
  203. DIM_EXTERN
  204. DWORD gbldwDIMComponentsLoaded;
  205. #ifdef MEM_LEAK_CHECK
  206. #define DIM_MEM_TABLE_SIZE 100
  207. DIM_EXTERN
  208. PVOID DimMemTable[DIM_MEM_TABLE_SIZE];
  209. #define LOCAL_ALLOC DebugAlloc
  210. #define LOCAL_FREE DebugFree
  211. #define LOCAL_REALLOC DebugReAlloc
  212. LPVOID
  213. DebugAlloc( DWORD Flags, DWORD dwSize );
  214. BOOL
  215. DebugFree( PVOID pMem );
  216. LPVOID
  217. DebugReAlloc( PVOID pMem, DWORD dwSize );
  218. #else
  219. #define LOCAL_ALLOC(Flags,dwSize) HeapAlloc( gblDIMConfigInfo.hHeap, \
  220. HEAP_ZERO_MEMORY, dwSize )
  221. #define LOCAL_FREE(hMem) HeapFree( gblDIMConfigInfo.hHeap, 0, hMem )
  222. #endif
  223. #define LOCAL_REALLOC(hMem,dwSize) HeapReAlloc( gblDIMConfigInfo.hHeap, \
  224. HEAP_ZERO_MEMORY,hMem,dwSize)
  225. //
  226. // Function Prototypes for RPC
  227. //
  228. VOID
  229. DimTerminateRPC(
  230. VOID
  231. );
  232. DWORD
  233. DimInitializeRPC(
  234. IN BOOL fLanOnlyMode
  235. );
  236. //
  237. // Function prototypes for Loading router managers and registry parameters.
  238. DWORD
  239. RegLoadDimParameters(
  240. VOID
  241. );
  242. DWORD
  243. RegLoadRouterManagers(
  244. VOID
  245. );
  246. VOID
  247. DimUnloadRouterManagers(
  248. VOID
  249. );
  250. DWORD
  251. RegLoadDDM(
  252. VOID
  253. );
  254. DWORD
  255. RegLoadInterfaces(
  256. IN LPWSTR lpwsInterfaceName,
  257. IN BOOL fAllTransports
  258. );
  259. DWORD
  260. RegLoadInterface(
  261. IN LPWSTR lpwsInterfaceName,
  262. IN HKEY hKeyInterface,
  263. IN BOOL fAllTransports
  264. );
  265. DWORD
  266. RegOpenAppropriateKey(
  267. IN LPWSTR wchInterfaceName,
  268. IN DWORD dwProtocolId,
  269. IN OUT HKEY * phKeyRM
  270. );
  271. DWORD
  272. RegOpenAppropriateRMKey(
  273. IN DWORD dwProtocolId,
  274. IN OUT HKEY * phKeyRM
  275. );
  276. //
  277. // Function prototypes for calls made by the various router managers into
  278. // DIM.
  279. //
  280. DWORD
  281. DIMConnectInterface(
  282. IN HANDLE hDIMInterface,
  283. IN DWORD dwProtocolId
  284. );
  285. DWORD
  286. DIMDisconnectInterface(
  287. IN HANDLE hDDMInterface,
  288. IN DWORD dwProtocolId
  289. );
  290. DWORD
  291. DIMSaveInterfaceInfo(
  292. IN HANDLE hDDMInterface,
  293. IN DWORD dwProtocolId,
  294. IN LPVOID pInterfaceInfo,
  295. IN DWORD cbInterfaceInfoSize
  296. );
  297. DWORD
  298. DIMRestoreInterfaceInfo(
  299. IN HANDLE hDIMInterface,
  300. IN DWORD dwProtocolId,
  301. IN LPVOID lpInterfaceInfo OPTIONAL,
  302. IN LPDWORD lpcbInterfaceInfoSize
  303. );
  304. VOID
  305. DIMRouterStopped(
  306. IN DWORD dwProtocolId,
  307. IN DWORD dwError
  308. );
  309. DWORD
  310. DIMSaveGlobalInfo(
  311. IN DWORD dwProtocolId,
  312. IN LPVOID pGlobalInfo,
  313. IN DWORD cbGlobalInfoSize
  314. );
  315. DWORD
  316. DIMInterfaceEnabled(
  317. IN HANDLE hDIMInterface,
  318. IN DWORD dwProtocolId,
  319. IN BOOL fEnabled
  320. );
  321. //
  322. // Utility function prototypes
  323. //
  324. DWORD
  325. AddInterfacesToRouterManager(
  326. IN LPWSTR lpwsInterfaceName,
  327. IN DWORD dwTransportId
  328. );
  329. DWORD
  330. GetTransportIndex(
  331. IN DWORD dwProtocolId
  332. );
  333. FARPROC
  334. GetDDMEntryPoint(
  335. IN LPSTR lpEntryPoint
  336. );
  337. DWORD
  338. GetSizeOfDialoutHoursRestriction(
  339. IN LPWSTR lpwsDialoutHoursRestriction
  340. );
  341. BOOL
  342. IsInterfaceRoleAcceptable(
  343. IN ROUTER_INTERFACE_OBJECT* pIfObject,
  344. IN DWORD dwTransportId);
  345. //
  346. // Security object functions
  347. //
  348. DWORD
  349. DimSecObjCreate(
  350. VOID
  351. );
  352. DWORD
  353. DimSecObjDelete(
  354. VOID
  355. );
  356. DWORD
  357. DimSecObjAccessCheck(
  358. IN DWORD DesiredAccess,
  359. OUT LPDWORD lpdwAccessStatus
  360. );
  361. #endif