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.

730 lines
19 KiB

  1. /********************************************************************/
  2. /** Copyright(c) 1995 Microsoft Corporation. **/
  3. /********************************************************************/
  4. //***
  5. //
  6. // Filename: ddm.h
  7. //
  8. // Description: This module contains the definitions for Demand Dial Manager
  9. // component.
  10. //
  11. // History: May 11,1995 NarenG Created original version.
  12. //
  13. #ifndef _DDM_
  14. #define _DDM_
  15. #include <nt.h>
  16. #include <ntrtl.h> // For ASSERT
  17. #include <nturtl.h> // needed for winbase.h
  18. #include <windows.h> // Win32 base API's
  19. #include <rtutils.h>
  20. #include <lmcons.h>
  21. #include <ras.h> // For HRASCONN
  22. #include <rasman.h> // For HPORT
  23. #include <rasppp.h> // For PPP_INTERFACE_INFO
  24. #include <dim.h>
  25. #include <mprlog.h>
  26. #include <raserror.h>
  27. #include <mprerror.h>
  28. #include <stdlib.h>
  29. #include <stdio.h>
  30. #include <tchar.h>
  31. #include <string.h>
  32. #include <dimif.h>
  33. #include <nb30.h>
  34. #include <rasppp.h> // For PPP_PROJECTION_INFO
  35. #include <pppcp.h>
  36. #include <srvauth.h>
  37. #include <sechost.h> // RASSECURITYPROC
  38. #include <iprtrmib.h>
  39. #include <mprapip.h>
  40. typedef
  41. DWORD
  42. (*ALLOCATEANDGETIFTABLEFROMSTACK)(
  43. OUT MIB_IFTABLE **ppIfTable,
  44. IN BOOL bOrder,
  45. IN HANDLE hHeap,
  46. IN DWORD dwFlags,
  47. IN BOOL bForceUpdate
  48. );
  49. typedef
  50. DWORD
  51. (*ALLOCATEANDGETIPADDRTABLEFROMSTACK)(
  52. OUT MIB_IPADDRTABLE **ppIpAddrTable,
  53. IN BOOL bOrder,
  54. IN HANDLE hHeap,
  55. IN DWORD dwFlags
  56. );
  57. //
  58. // Macros for DDM
  59. //
  60. #define DDMLogError( LogId, NumStrings, lpwsSubStringArray, dwRetCode ) \
  61. if ( gblDDMConfigInfo.dwLoggingLevel > 0 ) { \
  62. RouterLogError( gblDDMConfigInfo.hLogEvents, LogId, \
  63. NumStrings, lpwsSubStringArray, dwRetCode ); }
  64. #define DDMLogWarning( LogId, NumStrings, lpwsSubStringArray ) \
  65. if ( gblDDMConfigInfo.dwLoggingLevel > 1 ) { \
  66. RouterLogWarning( gblDDMConfigInfo.hLogEvents, LogId, \
  67. NumStrings, lpwsSubStringArray, 0 ); }
  68. #define DDMLogInformation( LogId, NumStrings, lpwsSubStringArray ) \
  69. if ( gblDDMConfigInfo.dwLoggingLevel > 2 ) { \
  70. RouterLogInformation( gblDDMConfigInfo.hLogEvents, \
  71. LogId, NumStrings, lpwsSubStringArray, 0 ); }
  72. #define DDMLogErrorString(LogId,NumStrings,lpwsSubStringArray,dwRetCode, \
  73. dwPos ) \
  74. if ( gblDDMConfigInfo.dwLoggingLevel > 0 ) { \
  75. RouterLogErrorString( gblDDMConfigInfo.hLogEvents, LogId, \
  76. NumStrings, lpwsSubStringArray, dwRetCode, \
  77. dwPos ); }
  78. #define DDMLogWarningString( LogId,NumStrings,lpwsSubStringArray,dwRetCode, \
  79. dwPos ) \
  80. if ( gblDDMConfigInfo.dwLoggingLevel > 1 ) { \
  81. RouterLogWarningString( gblDDMConfigInfo.hLogEvents, LogId, \
  82. NumStrings, lpwsSubStringArray, dwRetCode, \
  83. dwPos ); }
  84. #define DDMLogInformationString( LogId, NumStrings, lpwsSubStringArray, \
  85. dwRetCode, dwPos ) \
  86. if ( gblDDMConfigInfo.dwLoggingLevel > 2 ) { \
  87. RouterLogInformationString( gblDDMConfigInfo.hLogEvents, LogId, \
  88. NumStrings, lpwsSubStringArray, \
  89. dwRetCode,dwPos ); }
  90. #define DDM_PRINT TracePrintfExA
  91. #define DDMTRACE(a) \
  92. TracePrintfExA(gblDDMConfigInfo.dwTraceId, TRACE_FSM, a )
  93. #define DDMTRACE1(a,b) \
  94. TracePrintfExA(gblDDMConfigInfo.dwTraceId, TRACE_FSM, a,b )
  95. #define DDMTRACE2(a,b,c) \
  96. TracePrintfExA(gblDDMConfigInfo.dwTraceId, TRACE_FSM, a,b,c )
  97. #define DDMTRACE3(a,b,c,d) \
  98. TracePrintfExA(gblDDMConfigInfo.dwTraceId, TRACE_FSM, a,b,c,d )
  99. #define DDMTRACE4(a,b,c,d,e) \
  100. TracePrintfExA(gblDDMConfigInfo.dwTraceId, TRACE_FSM, a,b,c,d,e)
  101. #define DDMTRACE5(a,b,c,d,e,f) \
  102. TracePrintfExA(gblDDMConfigInfo.dwTraceId, TRACE_FSM, a,b,c,d,e,f )
  103. //
  104. // Constant defines for DDM
  105. //
  106. #define MAX_PROTOCOLS 2 // IP, IPX
  107. #define HW_FAILURE_WAIT_TIME 10 // Waiting time (sec) before reposting
  108. // listen
  109. #define INIT_GATEWAY_TIMEOUT 10000 //Gateway initialization timeout(msec)
  110. #define MIN_DEVICE_TABLE_SIZE 5 // Smallest device hash table size
  111. #define MAX_DEVICE_TABLE_SIZE 17 // Largest device hash table size
  112. #define HW_FAILURE_CNT 6 //nr of consecutive times a hw failure
  113. //may occur before being reported
  114. #define DISC_TIMEOUT_CALLBACK 10
  115. #define DISC_TIMEOUT_AUTHFAILURE 3
  116. #define ANNOUNCE_PRESENCE_TIMEOUT 120L
  117. #define DDM_HEAP_INITIAL_SIZE 20000 // approx 20K
  118. #define DDM_HEAP_MAX_SIZE 0 // Not limited
  119. //
  120. // DDM Events Definitions
  121. //
  122. #define NUM_DDM_EVENTS 9 // All DDM events other than RASMAN
  123. enum
  124. {
  125. DDM_EVENT_SVC = 0,
  126. DDM_EVENT_SVC_TERMINATED,
  127. DDM_EVENT_SECURITY_DLL,
  128. DDM_EVENT_PPP,
  129. DDM_EVENT_TIMER,
  130. DDM_EVENT_CHANGE_NOTIFICATION,
  131. DDM_EVENT_CHANGE_NOTIFICATION1,
  132. DDM_EVENT_CHANGE_NOTIFICATION2
  133. };
  134. //
  135. // Device Object FSM states definitions
  136. //
  137. typedef enum _DEV_OBJ_STATE
  138. {
  139. DEV_OBJ_LISTENING, // waiting for a connection
  140. DEV_OBJ_LISTEN_COMPLETE, // Listen completed but not connected.
  141. DEV_OBJ_RECEIVING_FRAME, // waiting for a frame from the Rasman
  142. DEV_OBJ_HW_FAILURE, // waiting to repost a listen
  143. DEV_OBJ_AUTH_IS_ACTIVE, // auth started
  144. DEV_OBJ_ACTIVE, // connected and auth done
  145. DEV_OBJ_CALLBACK_DISCONNECTING, // wait for disconnect
  146. DEV_OBJ_CALLBACK_DISCONNECTED, // wait for callback TO before reconn.
  147. DEV_OBJ_CALLBACK_CONNECTING, // wait for reconnection
  148. DEV_OBJ_CLOSING, // wait for closing to complete
  149. DEV_OBJ_CLOSED // staying idle, waiting for service to
  150. // resume or to stop
  151. }DEV_OBJ_STATE;
  152. //
  153. // 3rd party security dialog state
  154. //
  155. typedef enum _SECURITY_STATE
  156. {
  157. DEV_OBJ_SECURITY_DIALOG_ACTIVE,
  158. DEV_OBJ_SECURITY_DIALOG_STOPPING,
  159. DEV_OBJ_SECURITY_DIALOG_INACTIVE
  160. } SECURITY_STATE;
  161. //
  162. // Connection object flags
  163. //
  164. #define CONN_OBJ_IS_PPP 0x00000001
  165. #define CONN_OBJ_MESSENGER_PRESENT 0x00000004
  166. #define CONN_OBJ_PROJECTIONS_NOTIFIED 0x00000008
  167. #define CONN_OBJ_NOTIFY_OF_DISCONNECTION 0x00000010
  168. #define CONN_OBJ_DISCONNECT_INITIATED 0x00000020
  169. //
  170. // Device object flags
  171. //
  172. #define DEV_OBJ_IS_ADVANCED_SERVER 0x00000001
  173. #define DEV_OBJ_IS_PPP 0x00000002
  174. #define DEV_OBJ_OPENED_FOR_DIALOUT 0x00000004
  175. #define DEV_OBJ_MARKED_AS_INUSE 0x00000008
  176. #define DEV_OBJ_NOTIFY_OF_DISCONNECTION 0x00000020
  177. #define DEV_OBJ_ALLOW_ROUTERS 0x00000040
  178. #define DEV_OBJ_ALLOW_CLIENTS 0x00000080
  179. #define DEV_OBJ_BAP_CALLBACK 0x00000200
  180. #define DEV_OBJ_PNP_DELETE 0x00000400
  181. #define DEV_OBJ_SECURITY_DLL_USED 0x00000800
  182. #define DEV_OBJ_PPP_IS_ACTIVE 0x00001000
  183. #define DEV_OBJ_RECEIVE_ACTIVE 0x00002000
  184. #define DEV_OBJ_AUTH_ACTIVE 0x00004000
  185. #define DEV_OBJ_IPSEC_ERROR_LOGGED 0x00008000
  186. //
  187. // Global DDM config flags
  188. //
  189. #define DDM_USING_RADIUS_AUTHENTICATION 0x00000001
  190. #define DDM_USING_RADIUS_ACCOUNTING 0x00000002
  191. #define DDM_USING_NT_AUTHENTICATION 0x00000004
  192. #define DDM_NO_CERTIFICATE_LOGGED 0x00000008
  193. //
  194. // ******************** Data structure definitions for DDM ********************
  195. //
  196. //
  197. // Table of Event Numbers and Event Handlers
  198. //
  199. typedef VOID (*EVENTHANDLER)( VOID );
  200. typedef struct _EVENT_HANDLER
  201. {
  202. DWORD EventId;
  203. EVENTHANDLER EventHandler;
  204. } EVENT_HANDLER, *PEVENT_HANDLER;
  205. typedef struct _NOTIFICATION_EVENT
  206. {
  207. LIST_ENTRY ListEntry;
  208. HANDLE hEventClient;
  209. HANDLE hEventRouter;
  210. } NOTIFICATION_EVENT, *PNOTIFICATION_EVENT;
  211. //
  212. // Configuration information for DDM
  213. //
  214. typedef struct _DDM_CONFIG_INFO
  215. {
  216. DWORD dwAuthenticateTime;
  217. DWORD dwCallbackTime;
  218. DWORD dwAutoDisconnectTime;
  219. DWORD dwSecurityTime;
  220. DWORD dwSystemTime;
  221. DWORD dwAuthenticateRetries;
  222. DWORD dwClientsPerProc;
  223. DWORD dwCallbackRetries;
  224. DWORD fFlags;
  225. DWORD dwLoggingLevel;
  226. BOOL fArapAllowed;
  227. BOOL fRemoteListen;
  228. DWORD dwServerFlags;
  229. DWORD dwNumRouterManagers;
  230. DWORD dwAnnouncePresenceTimer;
  231. SERVICE_STATUS* pServiceStatus;
  232. DWORD dwTraceId;
  233. HANDLE hHeap;
  234. HINSTANCE hInstAdminModule;
  235. HINSTANCE hInstSecurityModule;
  236. BOOL fRasSrvrInitialized;
  237. HANDLE hIpHlpApi;
  238. ALLOCATEANDGETIFTABLEFROMSTACK lpfnAllocateAndGetIfTableFromStack;
  239. ALLOCATEANDGETIPADDRTABLEFROMSTACK lpfnAllocateAndGetIpAddrTableFromStack;
  240. HANDLE hLogEvents;
  241. HKEY hkeyParameters;
  242. HKEY hkeyAccounting;
  243. HKEY hkeyAuthentication;
  244. LPDWORD lpdwNumThreadsRunning;
  245. LPVOID lpfnIfObjectAllocateAndInit;
  246. LPVOID lpfnIfObjectGetPointerByName;
  247. LPVOID lpfnIfObjectGetPointer;
  248. LPVOID lpfnIfObjectRemove;
  249. LPVOID lpfnIfObjectInsertInTable;
  250. LPVOID lpfnIfObjectWANDeviceInstalled;
  251. LPVOID lpfnMprAdminGetIpAddressForUser;
  252. LPVOID lpfnMprAdminReleaseIpAddress;
  253. LPVOID lpfnRasAdminAcceptNewConnection;
  254. LPVOID lpfnRasAdminAcceptNewConnection2;
  255. LPVOID lpfnRasAdminAcceptNewLink;
  256. LPVOID lpfnRasAdminConnectionHangupNotification;
  257. LPVOID lpfnRasAdminConnectionHangupNotification2;
  258. LPVOID lpfnRasAdminLinkHangupNotification;
  259. LPVOID lpfnRasAdminTerminateDll;
  260. LPVOID lpfnRouterIdentityObjectUpdate;
  261. DWORD (*lpfnRasAuthProviderTerminate)( VOID );
  262. HINSTANCE hinstAuthModule;
  263. DWORD (*lpfnRasAcctProviderTerminate)( VOID );
  264. HINSTANCE hinstAcctModule;
  265. DWORD (*lpfnRasAcctConfigChangeNotification)( DWORD );
  266. DWORD (*lpfnRasAuthConfigChangeNotification)( DWORD );
  267. CRITICAL_SECTION CSAccountingSessionId;
  268. DWORD dwAccountingSessionId;
  269. RASSECURITYPROC lpfnRasBeginSecurityDialog;
  270. RASSECURITYPROC lpfnRasEndSecurityDialog;
  271. LIST_ENTRY NotificationEventListHead;
  272. DWORD dwIndex;
  273. DWORD cAnalogIPAddresses;
  274. LPWSTR *apAnalogIPAddresses;
  275. DWORD cDigitalIPAddresses;
  276. LPWSTR *apDigitalIPAddresses;
  277. BOOL fRasmanReferenced;
  278. } DDM_CONFIG_INFO, *PDDM_CONFIG_INFO;
  279. //
  280. // The represents a device in the DDM
  281. //
  282. typedef struct _DEVICE_OBJECT
  283. {
  284. struct _DEVICE_OBJECT * pNext;
  285. HPORT hPort; // port handle returned by Ras Manager
  286. HRASCONN hRasConn; // Handle to an outgoing call
  287. HCONN hConnection; // Handle to the connection bundle
  288. HCONN hBapConnection; // Used to notify BAP of callback failure
  289. DEV_OBJ_STATE DeviceState; // DCB FSM states
  290. RASMAN_STATE ConnectionState;// state of connection, used by rasman if
  291. SECURITY_STATE SecurityState; // state of 3rd party security dialog
  292. DWORD fFlags;
  293. DWORD dwDeviceType;
  294. BYTE * pRasmanSendBuffer; //RasMan buffer used for 3rd party secdll
  295. BYTE * pRasmanRecvBuffer; //RasMan buffer used for RasPortReceive
  296. DWORD dwRecvBufferLen;
  297. DWORD dwHwErrorSignalCount; // used in signaling hw error
  298. DWORD dwCallbackDelay;
  299. DWORD dwCallbackRetries;
  300. DWORD dwTotalNumberOfCalls;
  301. DWORD dwIndex; // used for FEP processing in vpn case
  302. SYSTEMTIME ConnectionTime;
  303. ULARGE_INTEGER qwActiveTime;
  304. ULARGE_INTEGER qwTotalConnectionTime;
  305. ULARGE_INTEGER qwTotalBytesSent;
  306. ULARGE_INTEGER qwTotalBytesReceived;
  307. ULARGE_INTEGER qwTotalFramesSent;
  308. ULARGE_INTEGER qwTotalFramesReceived;
  309. WCHAR wchUserName[UNLEN+1]; // Username and domain name in
  310. // this structure are used for 3rd
  311. WCHAR wchDomainName[DNLEN+1]; // party authentication and logging.
  312. WCHAR wchPortName[MAX_PORT_NAME+1];
  313. WCHAR wchMediaName[MAX_MEDIA_NAME+1];
  314. WCHAR wchDeviceType[MAX_DEVICETYPE_NAME+1];
  315. WCHAR wchDeviceName[MAX_DEVICE_NAME+1];
  316. WCHAR wchCallbackNumber[MAX_PHONE_NUMBER_LEN + 1];
  317. }DEVICE_OBJECT, *PDEVICE_OBJECT;
  318. //
  319. // The represents a port bundle in the DDM
  320. //
  321. typedef struct _CONNECTION_OBJECT
  322. {
  323. struct _CONNECTION_OBJECT *pNext;
  324. HCONN hConnection;
  325. HPORT hPort;
  326. HANDLE hDIMInterface; // Handle to the interface
  327. DWORD fFlags;
  328. ULARGE_INTEGER qwActiveTime;
  329. DWORD cActiveDevices; // Count of active devices in this list
  330. DWORD cDeviceListSize; // Size of devices list.
  331. PDEVICE_OBJECT* pDeviceList; // List of connected devices
  332. ROUTER_INTERFACE_TYPE InterfaceType;
  333. GUID guid;
  334. WCHAR wchInterfaceName[MAX_INTERFACE_NAME_LEN+1];
  335. WCHAR wchUserName[UNLEN+1];
  336. WCHAR wchDomainName[DNLEN+1];
  337. BYTE bComputerName[NCBNAMSZ];
  338. PPP_PROJECTION_RESULT PppProjectionResult;
  339. } CONNECTION_OBJECT, *PCONNECTION_OBJECT;
  340. //
  341. // Hash table for devices and connections.
  342. //
  343. typedef struct _DEVICE_TABLE
  344. {
  345. PDEVICE_OBJECT* DeviceBucket; // Array of device buckets.
  346. PCONNECTION_OBJECT* ConnectionBucket; // Array of bundle buckets.
  347. DWORD NumDeviceBuckets; // # of device buckets in array
  348. DWORD NumDeviceNodes; // Total # of devices in the table
  349. DWORD NumDevicesInUse; // Total # of devices in use
  350. DWORD NumConnectionBuckets;// Size of connection Hash Table
  351. DWORD NumConnectionNodes; // # of active connections
  352. CRITICAL_SECTION CriticalSection; // Mutex around this table
  353. } DEVICE_TABLE, *PDEVICE_TABLE;
  354. typedef struct _MEDIA_OBJECT
  355. {
  356. WCHAR wchMediaName[MAX_MEDIA_NAME+1];
  357. DWORD dwNumAvailable;
  358. } MEDIA_OBJECT, *PMEDIA_OBJECT;
  359. typedef struct _MEDIA_TABLE
  360. {
  361. BOOL fCheckInterfaces;
  362. DWORD cMediaListSize; // In number of entries
  363. MEDIA_OBJECT * pMediaList;
  364. CRITICAL_SECTION CriticalSection;
  365. } MEDIA_TABLE;
  366. //
  367. // ********************** Globals variables for DDM **************************
  368. //
  369. #ifdef _ALLOCATE_DDM_GLOBALS_
  370. #define DDM_EXTERN
  371. #else
  372. #define DDM_EXTERN extern
  373. #endif
  374. DDM_EXTERN
  375. DDM_CONFIG_INFO gblDDMConfigInfo;
  376. DDM_EXTERN
  377. DEVICE_TABLE gblDeviceTable; // Hash table of Devices
  378. DDM_EXTERN
  379. MEDIA_TABLE gblMediaTable; // Table of resources available
  380. DDM_EXTERN
  381. ROUTER_MANAGER_OBJECT * gblRouterManagers; // List of Router Managers.
  382. DDM_EXTERN
  383. ROUTER_INTERFACE_TABLE* gblpInterfaceTable; // Hash table of Router Interfaces
  384. DDM_EXTERN
  385. HANDLE * gblSupervisorEvents; // Array of supervisor events
  386. DDM_EXTERN
  387. HANDLE * gblphEventDDMServiceState; //Notifys DDM of DIM change
  388. DDM_EXTERN
  389. HANDLE * gblphEventDDMTerminated; //Notifys DIM of termination
  390. DDM_EXTERN
  391. EVENT_HANDLER gblEventHandlerTable[NUM_DDM_EVENTS];
  392. DDM_EXTERN
  393. LPWSTR gblpRouterPhoneBook;
  394. DDM_EXTERN
  395. LPWSTR gblpszAdminRequest;
  396. DDM_EXTERN
  397. LPWSTR gblpszUserRequest;
  398. DDM_EXTERN
  399. LPWSTR gblpszHardwareFailure;
  400. DDM_EXTERN
  401. LPWSTR gblpszUnknownReason;
  402. DDM_EXTERN
  403. LPWSTR gblpszPm;
  404. DDM_EXTERN
  405. LPWSTR gblpszAm;
  406. DDM_EXTERN
  407. LPWSTR gblpszUnknown;
  408. #ifdef MEM_LEAK_CHECK
  409. #define DDM_MEM_TABLE_SIZE 100
  410. PVOID DdmMemTable[DDM_MEM_TABLE_SIZE];
  411. #define LOCAL_ALLOC DebugAlloc
  412. #define LOCAL_FREE DebugFree
  413. #define LOCAL_REALLOC DebugReAlloc
  414. LPVOID
  415. DebugAlloc( DWORD Flags, DWORD dwSize );
  416. BOOL
  417. DebugFree( PVOID pMem );
  418. LPVOID
  419. DebugReAlloc( PVOID pMem, DWORD dwSize );
  420. #else
  421. #define LOCAL_ALLOC(Flags,dwSize) HeapAlloc( gblDDMConfigInfo.hHeap, \
  422. HEAP_ZERO_MEMORY, dwSize )
  423. #define LOCAL_FREE(hMem) HeapFree( gblDDMConfigInfo.hHeap, 0, hMem )
  424. #define LOCAL_REALLOC(hMem,dwSize) HeapReAlloc( gblDDMConfigInfo.hHeap, \
  425. HEAP_ZERO_MEMORY,hMem,dwSize)
  426. #endif
  427. //
  428. // ************************* Function Prototypes for DDM ********************
  429. //
  430. VOID
  431. SignalHwError(
  432. IN PDEVICE_OBJECT
  433. );
  434. DWORD
  435. LoadDDMParameters(
  436. IN HKEY hkeyParameters,
  437. IN BOOL * pfIpAllowed
  438. );
  439. DWORD
  440. LoadSecurityModule(
  441. VOID
  442. );
  443. DWORD
  444. LoadAdminModule(
  445. VOID
  446. );
  447. DWORD
  448. LoadAndInitAuthOrAcctProvider(
  449. IN BOOL fAuthenticationProvider,
  450. IN DWORD dwNASIpAddress,
  451. OUT DWORD * lpdwStartAccountingSessionId,
  452. OUT LPVOID * plpfnRasAuthProviderAuthenticateUser,
  453. OUT LPVOID * plpfnRasAuthProviderFreeAttributes,
  454. OUT LPVOID * plpfnRasAuthConfigChangeNotification,
  455. OUT LPVOID * plpfnRasAcctProviderStartAccounting,
  456. OUT LPVOID * plpfnRasAcctProviderInterimAccounting,
  457. OUT LPVOID * plpfnRasAcctProviderStopAccounting,
  458. OUT LPVOID * plpfnRasAcctProviderFreeAttributes,
  459. OUT LPVOID * plpfnRasAcctConfigChangeNotification
  460. );
  461. DWORD
  462. DdmFindBoundProtocols(
  463. OUT BOOL * pfBoundToIp,
  464. OUT BOOL * pfBoundToIpx,
  465. OUT BOOL * pfBoundToATalk
  466. );
  467. VOID
  468. AnnouncePresence(
  469. VOID
  470. );
  471. VOID
  472. InitializeMessageQs(
  473. IN HANDLE hEventSecurity,
  474. IN HANDLE hEventPPP
  475. );
  476. VOID
  477. DeleteMessageQs(
  478. VOID
  479. );
  480. DWORD
  481. AddressPoolInit(
  482. VOID
  483. );
  484. DWORD
  485. lProtocolEnabled(
  486. IN HKEY hKey,
  487. IN DWORD dwPid,
  488. IN BOOL fRasSrv,
  489. IN BOOL fRouter,
  490. IN BOOL * pfEnabled
  491. );
  492. #endif