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.

763 lines
20 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. #define CONN_OBJ_QUARANTINE_PRESENT 0x00000040
  170. //
  171. // Device object flags
  172. //
  173. #define DEV_OBJ_IS_ADVANCED_SERVER 0x00000001
  174. #define DEV_OBJ_IS_PPP 0x00000002
  175. #define DEV_OBJ_OPENED_FOR_DIALOUT 0x00000004
  176. #define DEV_OBJ_MARKED_AS_INUSE 0x00000008
  177. #define DEV_OBJ_NOTIFY_OF_DISCONNECTION 0x00000020
  178. #define DEV_OBJ_ALLOW_ROUTERS 0x00000040
  179. #define DEV_OBJ_ALLOW_CLIENTS 0x00000080
  180. #define DEV_OBJ_BAP_CALLBACK 0x00000200
  181. #define DEV_OBJ_PNP_DELETE 0x00000400
  182. #define DEV_OBJ_SECURITY_DLL_USED 0x00000800
  183. #define DEV_OBJ_PPP_IS_ACTIVE 0x00001000
  184. #define DEV_OBJ_RECEIVE_ACTIVE 0x00002000
  185. #define DEV_OBJ_AUTH_ACTIVE 0x00004000
  186. #define DEV_OBJ_IPSEC_ERROR_LOGGED 0x00008000
  187. //
  188. // Global DDM config flags
  189. //
  190. #define DDM_USING_RADIUS_AUTHENTICATION 0x00000001
  191. #define DDM_USING_RADIUS_ACCOUNTING 0x00000002
  192. #define DDM_USING_NT_AUTHENTICATION 0x00000004
  193. #define DDM_NO_CERTIFICATE_LOGGED 0x00000008
  194. //
  195. // Global DDM disconnect reasons
  196. //
  197. #define DDM_IDLE_DISCONNECT 4
  198. #define DDM_SESSION_TIMEOUT 5
  199. //
  200. // ******************** Data structure definitions for DDM ********************
  201. //
  202. //
  203. // Table of Event Numbers and Event Handlers
  204. //
  205. typedef VOID (*EVENTHANDLER)( VOID );
  206. typedef struct _EVENT_HANDLER
  207. {
  208. DWORD EventId;
  209. EVENTHANDLER EventHandler;
  210. } EVENT_HANDLER, *PEVENT_HANDLER;
  211. typedef struct _NOTIFICATION_EVENT
  212. {
  213. LIST_ENTRY ListEntry;
  214. HANDLE hEventClient;
  215. HANDLE hEventRouter;
  216. } NOTIFICATION_EVENT, *PNOTIFICATION_EVENT;
  217. //
  218. // Callbacks provided by extension admin dlls
  219. //
  220. typedef struct _ADMIN_DLL_CALLBACKS
  221. {
  222. HINSTANCE hInstAdminModule;
  223. LPVOID lpfnMprAdminGetIpAddressForUser;
  224. LPVOID lpfnMprAdminReleaseIpAddress;
  225. LPVOID lpfnRasAdminAcceptNewConnection;
  226. LPVOID lpfnRasAdminAcceptNewConnection2;
  227. LPVOID lpfnRasAdminAcceptNewLink;
  228. LPVOID lpfnRasAdminConnectionHangupNotification;
  229. LPVOID lpfnRasAdminConnectionHangupNotification2;
  230. LPVOID lpfnRasAdminLinkHangupNotification;
  231. LPVOID lpfnRasAdminTerminateDll;
  232. } ADMIN_DLL_CALLBACKS, *PADMIN_DLL_CALLBACKS;
  233. //
  234. // Configuration information for DDM
  235. //
  236. typedef struct _DDM_CONFIG_INFO
  237. {
  238. DWORD dwAuthenticateTime;
  239. DWORD dwCallbackTime;
  240. DWORD dwAutoDisconnectTime;
  241. DWORD dwSecurityTime;
  242. DWORD dwSystemTime;
  243. DWORD dwAuthenticateRetries;
  244. DWORD dwClientsPerProc;
  245. DWORD dwCallbackRetries;
  246. DWORD fFlags;
  247. DWORD dwLoggingLevel;
  248. BOOL fArapAllowed;
  249. BOOL fRemoteListen;
  250. DWORD dwServerFlags;
  251. DWORD dwNumRouterManagers;
  252. DWORD dwAnnouncePresenceTimer;
  253. SERVICE_STATUS* pServiceStatus;
  254. DWORD dwTraceId;
  255. HANDLE hHeap;
  256. HINSTANCE hInstSecurityModule;
  257. BOOL fRasSrvrInitialized;
  258. HANDLE hIpHlpApi;
  259. ALLOCATEANDGETIFTABLEFROMSTACK lpfnAllocateAndGetIfTableFromStack;
  260. ALLOCATEANDGETIPADDRTABLEFROMSTACK lpfnAllocateAndGetIpAddrTableFromStack;
  261. HANDLE hLogEvents;
  262. HKEY hkeyParameters;
  263. HKEY hkeyAccounting;
  264. HKEY hkeyAuthentication;
  265. LPDWORD lpdwNumThreadsRunning;
  266. LPVOID lpfnIfObjectAllocateAndInit;
  267. LPVOID lpfnIfObjectGetPointerByName;
  268. LPVOID lpfnIfObjectGetPointer;
  269. LPVOID lpfnIfObjectRemove;
  270. LPVOID lpfnIfObjectInsertInTable;
  271. LPVOID lpfnIfObjectWANDeviceInstalled;
  272. PADMIN_DLL_CALLBACKS AdminDllCallbacks;
  273. DWORD NumAdminDlls;
  274. LPVOID lpfnRouterIdentityObjectUpdate;
  275. DWORD (*lpfnRasAuthProviderTerminate)( VOID );
  276. HINSTANCE hinstAuthModule;
  277. DWORD (*lpfnRasAcctProviderTerminate)( VOID );
  278. HINSTANCE hinstAcctModule;
  279. DWORD (*lpfnRasAcctConfigChangeNotification)( DWORD );
  280. DWORD (*lpfnRasAuthConfigChangeNotification)( DWORD );
  281. CRITICAL_SECTION CSAccountingSessionId;
  282. DWORD dwAccountingSessionId;
  283. RASSECURITYPROC lpfnRasBeginSecurityDialog;
  284. RASSECURITYPROC lpfnRasEndSecurityDialog;
  285. LIST_ENTRY NotificationEventListHead;
  286. DWORD dwIndex;
  287. DWORD cAnalogIPAddresses;
  288. LPWSTR *apAnalogIPAddresses;
  289. DWORD cDigitalIPAddresses;
  290. LPWSTR *apDigitalIPAddresses;
  291. BOOL fRasmanReferenced;
  292. } DDM_CONFIG_INFO, *PDDM_CONFIG_INFO;
  293. //
  294. // The represents a device in the DDM
  295. //
  296. typedef struct _DEVICE_OBJECT
  297. {
  298. struct _DEVICE_OBJECT * pNext;
  299. HPORT hPort; // port handle returned by Ras Manager
  300. HRASCONN hRasConn; // Handle to an outgoing call
  301. HCONN hConnection; // Handle to the connection bundle
  302. HCONN hBapConnection; // Used to notify BAP of callback failure
  303. DEV_OBJ_STATE DeviceState; // DCB FSM states
  304. RASMAN_STATE ConnectionState;// state of connection, used by rasman if
  305. SECURITY_STATE SecurityState; // state of 3rd party security dialog
  306. DWORD fFlags;
  307. DWORD dwDeviceType;
  308. BYTE * pRasmanSendBuffer; //RasMan buffer used for 3rd party secdll
  309. BYTE * pRasmanRecvBuffer; //RasMan buffer used for RasPortReceive
  310. DWORD dwRecvBufferLen;
  311. DWORD dwHwErrorSignalCount; // used in signaling hw error
  312. DWORD dwCallbackDelay;
  313. DWORD dwCallbackRetries;
  314. DWORD dwTotalNumberOfCalls;
  315. DWORD dwIndex; // used for FEP processing in vpn case
  316. DWORD dwDisconnectReason;
  317. SYSTEMTIME ConnectionTime;
  318. ULARGE_INTEGER qwActiveTime;
  319. ULARGE_INTEGER qwTotalConnectionTime;
  320. ULARGE_INTEGER qwTotalBytesSent;
  321. ULARGE_INTEGER qwTotalBytesReceived;
  322. ULARGE_INTEGER qwTotalFramesSent;
  323. ULARGE_INTEGER qwTotalFramesReceived;
  324. WCHAR wchUserName[UNLEN+1]; // Username and domain name in
  325. // this structure are used for 3rd
  326. WCHAR wchDomainName[DNLEN+1]; // party authentication and logging.
  327. WCHAR wchPortName[MAX_PORT_NAME+1];
  328. WCHAR wchMediaName[MAX_MEDIA_NAME+1];
  329. WCHAR wchDeviceType[MAX_DEVICETYPE_NAME+1];
  330. WCHAR wchDeviceName[MAX_DEVICE_NAME+1];
  331. WCHAR wchCallbackNumber[MAX_PHONE_NUMBER_LEN + 1];
  332. }DEVICE_OBJECT, *PDEVICE_OBJECT;
  333. //
  334. // The represents a port bundle in the DDM
  335. //
  336. typedef struct _CONNECTION_OBJECT
  337. {
  338. struct _CONNECTION_OBJECT *pNext;
  339. HCONN hConnection;
  340. HPORT hPort;
  341. HANDLE hDIMInterface; // Handle to the interface
  342. DWORD fFlags;
  343. ULARGE_INTEGER qwActiveTime;
  344. DWORD cActiveDevices; // Count of active devices in this list
  345. DWORD cDeviceListSize; // Size of devices list.
  346. PDEVICE_OBJECT* pDeviceList; // List of connected devices
  347. PBYTE pQuarantineFilter;
  348. PBYTE pFilter;
  349. ROUTER_INTERFACE_TYPE InterfaceType;
  350. GUID guid;
  351. WCHAR wchInterfaceName[MAX_INTERFACE_NAME_LEN+1];
  352. WCHAR wchUserName[UNLEN+1];
  353. WCHAR wchDomainName[DNLEN+1];
  354. BYTE bComputerName[NCBNAMSZ];
  355. PPP_PROJECTION_RESULT PppProjectionResult;
  356. } CONNECTION_OBJECT, *PCONNECTION_OBJECT;
  357. //
  358. // Hash table for devices and connections.
  359. //
  360. typedef struct _DEVICE_TABLE
  361. {
  362. PDEVICE_OBJECT* DeviceBucket; // Array of device buckets.
  363. PCONNECTION_OBJECT* ConnectionBucket; // Array of bundle buckets.
  364. DWORD NumDeviceBuckets; // # of device buckets in array
  365. DWORD NumDeviceNodes; // Total # of devices in the table
  366. DWORD NumDevicesInUse; // Total # of devices in use
  367. DWORD NumConnectionBuckets;// Size of connection Hash Table
  368. DWORD NumConnectionNodes; // # of active connections
  369. CRITICAL_SECTION CriticalSection; // Mutex around this table
  370. } DEVICE_TABLE, *PDEVICE_TABLE;
  371. typedef struct _MEDIA_OBJECT
  372. {
  373. WCHAR wchMediaName[MAX_MEDIA_NAME+1];
  374. DWORD dwNumAvailable;
  375. } MEDIA_OBJECT, *PMEDIA_OBJECT;
  376. typedef struct _MEDIA_TABLE
  377. {
  378. BOOL fCheckInterfaces;
  379. DWORD cMediaListSize; // In number of entries
  380. MEDIA_OBJECT * pMediaList;
  381. CRITICAL_SECTION CriticalSection;
  382. } MEDIA_TABLE;
  383. //
  384. // ********************** Globals variables for DDM **************************
  385. //
  386. #ifdef _ALLOCATE_DDM_GLOBALS_
  387. #define DDM_EXTERN
  388. #else
  389. #define DDM_EXTERN extern
  390. #endif
  391. DDM_EXTERN
  392. DDM_CONFIG_INFO gblDDMConfigInfo;
  393. DDM_EXTERN
  394. DEVICE_TABLE gblDeviceTable; // Hash table of Devices
  395. DDM_EXTERN
  396. MEDIA_TABLE gblMediaTable; // Table of resources available
  397. DDM_EXTERN
  398. ROUTER_MANAGER_OBJECT * gblRouterManagers; // List of Router Managers.
  399. DDM_EXTERN
  400. ROUTER_INTERFACE_TABLE* gblpInterfaceTable; // Hash table of Router Interfaces
  401. DDM_EXTERN
  402. HANDLE * gblSupervisorEvents; // Array of supervisor events
  403. DDM_EXTERN
  404. HANDLE * gblphEventDDMServiceState; //Notifys DDM of DIM change
  405. DDM_EXTERN
  406. HANDLE * gblphEventDDMTerminated; //Notifys DIM of termination
  407. DDM_EXTERN
  408. EVENT_HANDLER gblEventHandlerTable[NUM_DDM_EVENTS];
  409. DDM_EXTERN
  410. LPWSTR gblpRouterPhoneBook;
  411. DDM_EXTERN
  412. LPWSTR gblpszAdminRequest;
  413. DDM_EXTERN
  414. LPWSTR gblpszUserRequest;
  415. DDM_EXTERN
  416. LPWSTR gblpszHardwareFailure;
  417. DDM_EXTERN
  418. LPWSTR gblpszUnknownReason;
  419. DDM_EXTERN
  420. LPWSTR gblpszPm;
  421. DDM_EXTERN
  422. LPWSTR gblpszAm;
  423. DDM_EXTERN
  424. LPWSTR gblpszUnknown;
  425. DDM_EXTERN
  426. LPWSTR gblpszIdleDisconnect;
  427. DDM_EXTERN
  428. LPWSTR gblpszSessionTimeout;
  429. #ifdef MEM_LEAK_CHECK
  430. #define DDM_MEM_TABLE_SIZE 100
  431. PVOID DdmMemTable[DDM_MEM_TABLE_SIZE];
  432. #define LOCAL_ALLOC DebugAlloc
  433. #define LOCAL_FREE DebugFree
  434. #define LOCAL_REALLOC DebugReAlloc
  435. LPVOID
  436. DebugAlloc( DWORD Flags, DWORD dwSize );
  437. BOOL
  438. DebugFree( PVOID pMem );
  439. LPVOID
  440. DebugReAlloc( PVOID pMem, DWORD dwSize );
  441. #else
  442. #define LOCAL_ALLOC(Flags,dwSize) HeapAlloc( gblDDMConfigInfo.hHeap, \
  443. HEAP_ZERO_MEMORY, dwSize )
  444. #define LOCAL_FREE(hMem) HeapFree( gblDDMConfigInfo.hHeap, 0, hMem )
  445. #define LOCAL_REALLOC(hMem,dwSize) HeapReAlloc( gblDDMConfigInfo.hHeap, \
  446. HEAP_ZERO_MEMORY,hMem,dwSize)
  447. #endif
  448. //
  449. // ************************* Function Prototypes for DDM ********************
  450. //
  451. VOID
  452. SignalHwError(
  453. IN PDEVICE_OBJECT
  454. );
  455. DWORD
  456. LoadDDMParameters(
  457. IN HKEY hkeyParameters,
  458. IN BOOL * pfIpAllowed
  459. );
  460. DWORD
  461. LoadSecurityModule(
  462. VOID
  463. );
  464. DWORD
  465. LoadAdminModule(
  466. VOID
  467. );
  468. DWORD
  469. LoadAndInitAuthOrAcctProvider(
  470. IN BOOL fAuthenticationProvider,
  471. IN DWORD dwNASIpAddress,
  472. OUT DWORD * lpdwStartAccountingSessionId,
  473. OUT LPVOID * plpfnRasAuthProviderAuthenticateUser,
  474. OUT LPVOID * plpfnRasAuthProviderFreeAttributes,
  475. OUT LPVOID * plpfnRasAuthConfigChangeNotification,
  476. OUT LPVOID * plpfnRasAcctProviderStartAccounting,
  477. OUT LPVOID * plpfnRasAcctProviderInterimAccounting,
  478. OUT LPVOID * plpfnRasAcctProviderStopAccounting,
  479. OUT LPVOID * plpfnRasAcctProviderFreeAttributes,
  480. OUT LPVOID * plpfnRasAcctConfigChangeNotification
  481. );
  482. DWORD
  483. DdmFindBoundProtocols(
  484. OUT BOOL * pfBoundToIp,
  485. OUT BOOL * pfBoundToIpx,
  486. OUT BOOL * pfBoundToATalk
  487. );
  488. VOID
  489. AnnouncePresence(
  490. VOID
  491. );
  492. VOID
  493. InitializeMessageQs(
  494. IN HANDLE hEventSecurity,
  495. IN HANDLE hEventPPP
  496. );
  497. VOID
  498. DeleteMessageQs(
  499. VOID
  500. );
  501. DWORD
  502. AddressPoolInit(
  503. VOID
  504. );
  505. DWORD
  506. lProtocolEnabled(
  507. IN HKEY hKey,
  508. IN DWORD dwPid,
  509. IN BOOL fRasSrv,
  510. IN BOOL fRouter,
  511. IN BOOL * pfEnabled
  512. );
  513. #endif