home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / nspapi.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  19KB  |  691 lines

  1. /*++
  2.  
  3. Copyright 1991-1998 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     nspapi.h
  8.  
  9. Abstract:
  10.  
  11.     Name Space Provider API prototypes and manifests. See the
  12.     "Windows NT NameSpace Provider Specification" document for
  13.     details.
  14.  
  15.  
  16. Environment:
  17.  
  18.     User Mode -Win32
  19.  
  20. Notes:
  21.  
  22.     You must include "basetyps.h" first. Some types should
  23.     use definitions from base files rather than redefine here.
  24.     Unfortunately, so such base file exists.
  25.  
  26. --*/
  27.  
  28. #ifndef _NSPAPI_INCLUDED
  29. #define _NSPAPI_INCLUDED
  30.  
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif /* __cplusplus */
  34.  
  35. #ifndef _tagBLOB_DEFINED
  36. #define _tagBLOB_DEFINED
  37. #define _BLOB_DEFINED
  38. #define _LPBLOB_DEFINED
  39. typedef struct _BLOB {
  40.     ULONG cbSize ;
  41. #ifdef MIDL_PASS
  42.     [size_is(cbSize)] BYTE *pBlobData;
  43. #else  // MIDL_PASS
  44.     BYTE *pBlobData ;
  45. #endif // MIDL_PASS
  46. } BLOB, *LPBLOB ;
  47. #endif
  48.  
  49. #ifndef GUID_DEFINED
  50. #define GUID_DEFINED
  51. typedef struct _GUID
  52. {
  53.     unsigned long  Data1;
  54.     unsigned short Data2;
  55.     unsigned short Data3;
  56.     unsigned char  Data4[8];
  57. } GUID;
  58. #endif /* GUID_DEFINED */
  59.  
  60. #ifndef __LPGUID_DEFINED__
  61. #define __LPGUID_DEFINED__
  62. typedef GUID *LPGUID;
  63. #endif
  64.  
  65.  
  66. //
  67. // Service categories
  68. //
  69. #define SERVICE_RESOURCE            (0x00000001)
  70. #define SERVICE_SERVICE             (0x00000002)
  71. #define SERVICE_LOCAL               (0x00000004)
  72.  
  73. //
  74. // Operation used when calling SetService()
  75. //
  76. #define SERVICE_REGISTER            (0x00000001)
  77. #define SERVICE_DEREGISTER          (0x00000002)
  78. #define SERVICE_FLUSH               (0x00000003)
  79. #define SERVICE_ADD_TYPE            (0x00000004)
  80. #define SERVICE_DELETE_TYPE         (0x00000005)
  81.  
  82. //
  83. // Flags that affect the operations above
  84. //
  85. #define SERVICE_FLAG_DEFER          (0x00000001)
  86. #define SERVICE_FLAG_HARD           (0x00000002)
  87.  
  88. //
  89. // Used as input to GetService() for setting the dwProps parameter
  90. //
  91. #define PROP_COMMENT                (0x00000001)
  92. #define PROP_LOCALE                 (0x00000002)
  93. #define PROP_DISPLAY_HINT           (0x00000004)
  94. #define PROP_VERSION                (0x00000008)
  95. #define PROP_START_TIME             (0x00000010)
  96. #define PROP_MACHINE                (0x00000020)
  97. #define PROP_ADDRESSES              (0x00000100)
  98. #define PROP_SD                     (0x00000200)
  99. #define PROP_ALL                    (0x80000000)
  100.  
  101. //
  102. // Flags that describe attributes of Service Addresses
  103. //
  104.  
  105. #define SERVICE_ADDRESS_FLAG_RPC_CN (0x00000001)
  106. #define SERVICE_ADDRESS_FLAG_RPC_DG (0x00000002)
  107. #define SERVICE_ADDRESS_FLAG_RPC_NB (0x00000004)
  108.  
  109. //
  110. // Name Spaces
  111. //
  112.  
  113. #define NS_DEFAULT                  (0)
  114.  
  115. #define NS_SAP                      (1)
  116. #define NS_NDS                      (2)
  117. #define NS_PEER_BROWSE              (3)
  118.  
  119. #define NS_TCPIP_LOCAL              (10)
  120. #define NS_TCPIP_HOSTS              (11)
  121. #define NS_DNS                      (12)
  122. #define NS_NETBT                    (13)
  123. #define NS_WINS                     (14)
  124.  
  125. #define NS_NBP                      (20)
  126.  
  127. #define NS_MS                       (30)
  128. #define NS_STDA                     (31)
  129. #define NS_NTDS                     (32)
  130.  
  131. #define NS_X500                     (40)
  132. #define NS_NIS                      (41)
  133.  
  134. #define NS_VNS                      (50)
  135.  
  136. //
  137. // Name space attributes.
  138. //
  139. #define NSTYPE_HIERARCHICAL         (0x00000001)
  140. #define NSTYPE_DYNAMIC              (0x00000002)
  141. #define NSTYPE_ENUMERABLE           (0x00000004)
  142. #define NSTYPE_WORKGROUP            (0x00000008)
  143.  
  144. //
  145. // Transport attributes.
  146. //
  147. #define XP_CONNECTIONLESS           (0x00000001)
  148. #define XP_GUARANTEED_DELIVERY      (0x00000002)
  149. #define XP_GUARANTEED_ORDER         (0x00000004)
  150. #define XP_MESSAGE_ORIENTED         (0x00000008)
  151. #define XP_PSEUDO_STREAM            (0x00000010)
  152. #define XP_GRACEFUL_CLOSE           (0x00000020)
  153. #define XP_EXPEDITED_DATA           (0x00000040)
  154. #define XP_CONNECT_DATA             (0x00000080)
  155. #define XP_DISCONNECT_DATA          (0x00000100)
  156. #define XP_SUPPORTS_BROADCAST       (0x00000200)
  157. #define XP_SUPPORTS_MULTICAST       (0x00000400)
  158. #define XP_BANDWIDTH_ALLOCATION     (0x00000800)
  159. #define XP_FRAGMENTATION            (0x00001000)
  160. #define XP_ENCRYPTS                 (0x00002000)
  161.  
  162. //
  163. // Resolution flags for GetAddressByName().
  164. //
  165. #define RES_SOFT_SEARCH             (0x00000001)
  166. #define RES_FIND_MULTIPLE           (0x00000002)
  167. #define RES_SERVICE                 (0x00000004)
  168.  
  169. //
  170. // Well known value names for Service Types
  171. //
  172.  
  173. #define SERVICE_TYPE_VALUE_SAPIDA        "SapId"
  174. #define SERVICE_TYPE_VALUE_SAPIDW       L"SapId"
  175.  
  176. #define SERVICE_TYPE_VALUE_CONNA         "ConnectionOriented"
  177. #define SERVICE_TYPE_VALUE_CONNW        L"ConnectionOriented"
  178.  
  179. #define SERVICE_TYPE_VALUE_TCPPORTA      "TcpPort"
  180. #define SERVICE_TYPE_VALUE_TCPPORTW     L"TcpPort"
  181.  
  182. #define SERVICE_TYPE_VALUE_UDPPORTA      "UdpPort"
  183. #define SERVICE_TYPE_VALUE_UDPPORTW     L"UdpPort"
  184.  
  185. #ifdef UNICODE
  186.  
  187. #define SERVICE_TYPE_VALUE_SAPID        SERVICE_TYPE_VALUE_SAPIDW
  188. #define SERVICE_TYPE_VALUE_CONN         SERVICE_TYPE_VALUE_CONNW
  189. #define SERVICE_TYPE_VALUE_TCPPORT      SERVICE_TYPE_VALUE_TCPPORTW
  190. #define SERVICE_TYPE_VALUE_UDPPORT      SERVICE_TYPE_VALUE_UDPPORTW
  191.  
  192. #else // not UNICODE
  193.  
  194. #define SERVICE_TYPE_VALUE_SAPID        SERVICE_TYPE_VALUE_SAPIDA
  195. #define SERVICE_TYPE_VALUE_CONN         SERVICE_TYPE_VALUE_CONNA
  196. #define SERVICE_TYPE_VALUE_TCPPORT      SERVICE_TYPE_VALUE_TCPPORTA
  197. #define SERVICE_TYPE_VALUE_UDPPORT      SERVICE_TYPE_VALUE_UDPPORTA
  198.  
  199. #endif
  200.  
  201.  
  202. //
  203. // status flags returned by SetService
  204. //
  205. #define SET_SERVICE_PARTIAL_SUCCESS  (0x00000001)
  206.  
  207. //
  208. // Name Space Information
  209. //
  210. typedef struct _NS_INFOA {
  211.     DWORD dwNameSpace ;
  212.     DWORD dwNameSpaceFlags ;
  213.     LPSTR   lpNameSpace ;
  214. } NS_INFOA,  * PNS_INFOA, FAR * LPNS_INFOA;
  215. //
  216. // Name Space Information
  217. //
  218. typedef struct _NS_INFOW {
  219.     DWORD dwNameSpace ;
  220.     DWORD dwNameSpaceFlags ;
  221.     LPWSTR  lpNameSpace ;
  222. } NS_INFOW,  * PNS_INFOW, FAR * LPNS_INFOW;
  223. #ifdef UNICODE
  224. typedef NS_INFOW NS_INFO;
  225. typedef PNS_INFOW PNS_INFO;
  226. typedef LPNS_INFOW LPNS_INFO;
  227. #else
  228. typedef NS_INFOA NS_INFO;
  229. typedef PNS_INFOA PNS_INFO;
  230. typedef LPNS_INFOA LPNS_INFO;
  231. #endif // UNICODE
  232.  
  233. //
  234. // Service Type Values. The structures are used to define named Service
  235. // Type specific values. This structure is self relative and has no pointers.
  236. //
  237. typedef struct _SERVICE_TYPE_VALUE {
  238.     DWORD dwNameSpace ;
  239.     DWORD dwValueType ;
  240.     DWORD dwValueSize ;
  241.     DWORD dwValueNameOffset ;
  242.     DWORD dwValueOffset ;
  243. } SERVICE_TYPE_VALUE, *PSERVICE_TYPE_VALUE, FAR *LPSERVICE_TYPE_VALUE ;
  244.  
  245. //
  246. // An absolute version of above. This structure does contain pointers.
  247. //
  248. typedef struct _SERVICE_TYPE_VALUE_ABSA  {
  249.     DWORD dwNameSpace ;
  250.     DWORD dwValueType ;
  251.     DWORD dwValueSize ;
  252.     LPSTR   lpValueName ;
  253.     PVOID lpValue ;
  254. } SERVICE_TYPE_VALUE_ABSA,
  255.   *PSERVICE_TYPE_VALUE_ABSA,
  256.   FAR *LPSERVICE_TYPE_VALUE_ABSA;
  257. //
  258. // An absolute version of above. This structure does contain pointers.
  259. //
  260. typedef struct _SERVICE_TYPE_VALUE_ABSW  {
  261.     DWORD dwNameSpace ;
  262.     DWORD dwValueType ;
  263.     DWORD dwValueSize ;
  264.     LPWSTR  lpValueName ;
  265.     PVOID lpValue ;
  266. } SERVICE_TYPE_VALUE_ABSW,
  267.   *PSERVICE_TYPE_VALUE_ABSW,
  268.   FAR *LPSERVICE_TYPE_VALUE_ABSW;
  269. #ifdef UNICODE
  270. typedef SERVICE_TYPE_VALUE_ABSW SERVICE_TYPE_VALUE_ABS;
  271. typedef PSERVICE_TYPE_VALUE_ABSW PSERVICE_TYPE_VALUE_ABS;
  272. typedef LPSERVICE_TYPE_VALUE_ABSW LPSERVICE_TYPE_VALUE_ABS;
  273. #else
  274. typedef SERVICE_TYPE_VALUE_ABSA SERVICE_TYPE_VALUE_ABS;
  275. typedef PSERVICE_TYPE_VALUE_ABSA PSERVICE_TYPE_VALUE_ABS;
  276. typedef LPSERVICE_TYPE_VALUE_ABSA LPSERVICE_TYPE_VALUE_ABS;
  277. #endif // UNICODE
  278.  
  279. //
  280. // Service Type Information. Contains the name of the Service Type and
  281. // and an array of SERVICE_NS_TYPE_VALUE structures. This structure is self
  282. // relative and has no pointers in it.
  283. //
  284. typedef struct _SERVICE_TYPE_INFO {
  285.     DWORD dwTypeNameOffset ;
  286.     DWORD dwValueCount ;
  287.     SERVICE_TYPE_VALUE Values[1] ;
  288. } SERVICE_TYPE_INFO, *PSERVICE_TYPE_INFO, FAR *LPSERVICE_TYPE_INFO ;
  289.  
  290. typedef struct _SERVICE_TYPE_INFO_ABSA {
  291.     LPSTR   lpTypeName ;
  292.     DWORD dwValueCount ;
  293.     SERVICE_TYPE_VALUE_ABSA Values[1] ;
  294. } SERVICE_TYPE_INFO_ABSA,
  295.   *PSERVICE_TYPE_INFO_ABSA,
  296.   FAR *LPSERVICE_TYPE_INFO_ABSA ;
  297. typedef struct _SERVICE_TYPE_INFO_ABSW {
  298.     LPWSTR  lpTypeName ;
  299.     DWORD dwValueCount ;
  300.     SERVICE_TYPE_VALUE_ABSW Values[1] ;
  301. } SERVICE_TYPE_INFO_ABSW,
  302.   *PSERVICE_TYPE_INFO_ABSW,
  303.   FAR *LPSERVICE_TYPE_INFO_ABSW ;
  304. #ifdef UNICODE
  305. typedef SERVICE_TYPE_INFO_ABSW SERVICE_TYPE_INFO_ABS;
  306. typedef PSERVICE_TYPE_INFO_ABSW PSERVICE_TYPE_INFO_ABS;
  307. typedef LPSERVICE_TYPE_INFO_ABSW LPSERVICE_TYPE_INFO_ABS;
  308. #else
  309. typedef SERVICE_TYPE_INFO_ABSA SERVICE_TYPE_INFO_ABS;
  310. typedef PSERVICE_TYPE_INFO_ABSA PSERVICE_TYPE_INFO_ABS;
  311. typedef LPSERVICE_TYPE_INFO_ABSA LPSERVICE_TYPE_INFO_ABS;
  312. #endif // UNICODE
  313.  
  314.  
  315. //
  316. // A Single Address definition.
  317. //
  318. typedef struct _SERVICE_ADDRESS {
  319.     DWORD   dwAddressType ;
  320.     DWORD   dwAddressFlags ;
  321.     DWORD   dwAddressLength ;
  322.     DWORD   dwPrincipalLength ;
  323. #ifdef MIDL_PASS
  324.     [size_is(dwAddressLength)] BYTE *lpAddress;
  325. #else  // MIDL_PASS
  326.     BYTE   *lpAddress ;
  327. #endif // MIDL_PASS
  328. #ifdef MIDL_PASS
  329.     [size_is(dwPrincipalLength)] BYTE *lpPrincipal;
  330. #else  // MIDL_PASS
  331.     BYTE   *lpPrincipal ;
  332. #endif // MIDL_PASS
  333. } SERVICE_ADDRESS, *PSERVICE_ADDRESS, *LPSERVICE_ADDRESS;
  334.  
  335. //
  336. // Addresses used by the service. Contains array of SERVICE_ADDRESS.
  337. //
  338. typedef struct _SERVICE_ADDRESSES {
  339.     DWORD           dwAddressCount ;
  340. #ifdef MIDL_PASS
  341.     [size_is(dwAddressCount)] SERVICE_ADDRESS Addressses[*];
  342. #else  // MIDL_PASS
  343.     SERVICE_ADDRESS Addresses[1] ;
  344. #endif // MIDL_PASS
  345. } SERVICE_ADDRESSES, *PSERVICE_ADDRESSES, *LPSERVICE_ADDRESSES;
  346.  
  347.  
  348. //
  349. // Service Information.
  350. //
  351. typedef struct _SERVICE_INFOA {
  352.     LPGUID lpServiceType ;
  353.     LPSTR   lpServiceName ;
  354.     LPSTR   lpComment ;
  355.     LPSTR   lpLocale ;
  356.     DWORD dwDisplayHint ;
  357.     DWORD dwVersion ;
  358.     DWORD dwTime ;
  359.     LPSTR   lpMachineName ;
  360.     LPSERVICE_ADDRESSES lpServiceAddress ;
  361.     BLOB ServiceSpecificInfo ;
  362. } SERVICE_INFOA, *PSERVICE_INFOA, FAR * LPSERVICE_INFOA ;
  363. //
  364. // Service Information.
  365. //
  366. typedef struct _SERVICE_INFOW {
  367.     LPGUID lpServiceType ;
  368.     LPWSTR  lpServiceName ;
  369.     LPWSTR  lpComment ;
  370.     LPWSTR  lpLocale ;
  371.     DWORD dwDisplayHint ;
  372.     DWORD dwVersion ;
  373.     DWORD dwTime ;
  374.     LPWSTR  lpMachineName ;
  375.     LPSERVICE_ADDRESSES lpServiceAddress ;
  376.     BLOB ServiceSpecificInfo ;
  377. } SERVICE_INFOW, *PSERVICE_INFOW, FAR * LPSERVICE_INFOW ;
  378. #ifdef UNICODE
  379. typedef SERVICE_INFOW SERVICE_INFO;
  380. typedef PSERVICE_INFOW PSERVICE_INFO;
  381. typedef LPSERVICE_INFOW LPSERVICE_INFO;
  382. #else
  383. typedef SERVICE_INFOA SERVICE_INFO;
  384. typedef PSERVICE_INFOA PSERVICE_INFO;
  385. typedef LPSERVICE_INFOA LPSERVICE_INFO;
  386. #endif // UNICODE
  387.  
  388.  
  389. //
  390. // Name Space & Service Information
  391. //
  392. typedef struct _NS_SERVICE_INFOA {
  393.     DWORD dwNameSpace ;
  394.     SERVICE_INFOA ServiceInfo ;
  395. } NS_SERVICE_INFOA, *PNS_SERVICE_INFOA, FAR * LPNS_SERVICE_INFOA ;
  396. //
  397. // Name Space & Service Information
  398. //
  399. typedef struct _NS_SERVICE_INFOW {
  400.     DWORD dwNameSpace ;
  401.     SERVICE_INFOW ServiceInfo ;
  402. } NS_SERVICE_INFOW, *PNS_SERVICE_INFOW, FAR * LPNS_SERVICE_INFOW ;
  403. #ifdef UNICODE
  404. typedef NS_SERVICE_INFOW NS_SERVICE_INFO;
  405. typedef PNS_SERVICE_INFOW PNS_SERVICE_INFO;
  406. typedef LPNS_SERVICE_INFOW LPNS_SERVICE_INFO;
  407. #else
  408. typedef NS_SERVICE_INFOA NS_SERVICE_INFO;
  409. typedef PNS_SERVICE_INFOA PNS_SERVICE_INFO;
  410. typedef LPNS_SERVICE_INFOA LPNS_SERVICE_INFO;
  411. #endif // UNICODE
  412.  
  413. #ifndef __CSADDR_DEFINED__
  414. #define __CSADDR_DEFINED__
  415.  
  416. //
  417. // SockAddr Information
  418. //
  419. typedef struct _SOCKET_ADDRESS {
  420.     LPSOCKADDR lpSockaddr ;
  421.     INT iSockaddrLength ;
  422. } SOCKET_ADDRESS, *PSOCKET_ADDRESS, FAR * LPSOCKET_ADDRESS ;
  423.  
  424. //
  425. // CSAddr Information
  426. //
  427. typedef struct _CSADDR_INFO {
  428.     SOCKET_ADDRESS LocalAddr ;
  429.     SOCKET_ADDRESS RemoteAddr ;
  430.     INT iSocketType ;
  431.     INT iProtocol ;
  432. } CSADDR_INFO, *PCSADDR_INFO, FAR * LPCSADDR_INFO ;
  433.  
  434. #endif
  435.  
  436. //
  437. // Protocol Information
  438. //
  439. typedef struct _PROTOCOL_INFOA {
  440.     DWORD dwServiceFlags ;
  441.     INT iAddressFamily ;
  442.     INT iMaxSockAddr ;
  443.     INT iMinSockAddr ;
  444.     INT iSocketType ;
  445.     INT iProtocol ;
  446.     DWORD dwMessageSize ;
  447.     LPSTR   lpProtocol ;
  448. } PROTOCOL_INFOA, *PPROTOCOL_INFOA, FAR * LPPROTOCOL_INFOA ;
  449. //
  450. // Protocol Information
  451. //
  452. typedef struct _PROTOCOL_INFOW {
  453.     DWORD dwServiceFlags ;
  454.     INT iAddressFamily ;
  455.     INT iMaxSockAddr ;
  456.     INT iMinSockAddr ;
  457.     INT iSocketType ;
  458.     INT iProtocol ;
  459.     DWORD dwMessageSize ;
  460.     LPWSTR  lpProtocol ;
  461. } PROTOCOL_INFOW, *PPROTOCOL_INFOW, FAR * LPPROTOCOL_INFOW ;
  462. #ifdef UNICODE
  463. typedef PROTOCOL_INFOW PROTOCOL_INFO;
  464. typedef PPROTOCOL_INFOW PPROTOCOL_INFO;
  465. typedef LPPROTOCOL_INFOW LPPROTOCOL_INFO;
  466. #else
  467. typedef PROTOCOL_INFOA PROTOCOL_INFO;
  468. typedef PPROTOCOL_INFOA PPROTOCOL_INFO;
  469. typedef LPPROTOCOL_INFOA LPPROTOCOL_INFO;
  470. #endif // UNICODE
  471.  
  472. //
  473. // NETRESOURCE2 Structure
  474. //
  475. typedef struct _NETRESOURCE2A {
  476.     DWORD dwScope ;
  477.     DWORD dwType ;
  478.     DWORD dwUsage ;
  479.     DWORD dwDisplayType ;
  480.     LPSTR   lpLocalName ;
  481.     LPSTR   lpRemoteName ;
  482.     LPSTR   lpComment ;
  483.     NS_INFO ns_info ;
  484.     GUID ServiceType ;
  485.     DWORD dwProtocols ;
  486.     LPINT lpiProtocols ;
  487. } NETRESOURCE2A, *PNETRESOURCE2A, FAR * LPNETRESOURCE2A ;
  488. //
  489. // NETRESOURCE2 Structure
  490. //
  491. typedef struct _NETRESOURCE2W {
  492.     DWORD dwScope ;
  493.     DWORD dwType ;
  494.     DWORD dwUsage ;
  495.     DWORD dwDisplayType ;
  496.     LPWSTR  lpLocalName ;
  497.     LPWSTR  lpRemoteName ;
  498.     LPWSTR  lpComment ;
  499.     NS_INFO ns_info ;
  500.     GUID ServiceType ;
  501.     DWORD dwProtocols ;
  502.     LPINT lpiProtocols ;
  503. } NETRESOURCE2W, *PNETRESOURCE2W, FAR * LPNETRESOURCE2W ;
  504. #ifdef UNICODE
  505. typedef NETRESOURCE2W NETRESOURCE2;
  506. typedef PNETRESOURCE2W PNETRESOURCE2;
  507. typedef LPNETRESOURCE2W LPNETRESOURCE2;
  508. #else
  509. typedef NETRESOURCE2A NETRESOURCE2;
  510. typedef PNETRESOURCE2A PNETRESOURCE2;
  511. typedef LPNETRESOURCE2A LPNETRESOURCE2;
  512. #endif // UNICODE
  513.  
  514. typedef  DWORD (* LPFN_NSPAPI) (VOID ) ;
  515.  
  516. //
  517. // Structures for using the service routines asynchronously.
  518. //
  519. typedef
  520. VOID
  521. (*LPSERVICE_CALLBACK_PROC) (
  522.     IN LPARAM lParam,
  523.     IN HANDLE hAsyncTaskHandle
  524.     );
  525.  
  526. typedef struct _SERVICE_ASYNC_INFO {
  527.     LPSERVICE_CALLBACK_PROC lpServiceCallbackProc;
  528.     LPARAM lParam;
  529.     HANDLE hAsyncTaskHandle;
  530. } SERVICE_ASYNC_INFO, *PSERVICE_ASYNC_INFO, FAR * LPSERVICE_ASYNC_INFO;
  531.  
  532. //
  533. // Public NSP API prototypes.
  534. //
  535. INT
  536. APIENTRY
  537. EnumProtocolsA (
  538.     IN     LPINT           lpiProtocols,
  539.     IN OUT LPVOID          lpProtocolBuffer,
  540.     IN OUT LPDWORD         lpdwBufferLength
  541.     );
  542. //
  543. // Public NSP API prototypes.
  544. //
  545. INT
  546. APIENTRY
  547. EnumProtocolsW (
  548.     IN     LPINT           lpiProtocols,
  549.     IN OUT LPVOID          lpProtocolBuffer,
  550.     IN OUT LPDWORD         lpdwBufferLength
  551.     );
  552. #ifdef UNICODE
  553. #define EnumProtocols  EnumProtocolsW
  554. #else
  555. #define EnumProtocols  EnumProtocolsA
  556. #endif // !UNICODE
  557.  
  558. INT
  559. APIENTRY
  560. GetAddressByNameA (
  561.     IN     DWORD                dwNameSpace,
  562.     IN     LPGUID               lpServiceType,
  563.     IN     LPSTR              lpServiceName OPTIONAL,
  564.     IN     LPINT                lpiProtocols OPTIONAL,
  565.     IN     DWORD                dwResolution,
  566.     IN     LPSERVICE_ASYNC_INFO lpServiceAsyncInfo OPTIONAL,
  567.     IN OUT LPVOID               lpCsaddrBuffer,
  568.     IN OUT LPDWORD              lpdwBufferLength,
  569.     IN OUT LPSTR              lpAliasBuffer OPTIONAL,
  570.     IN OUT LPDWORD              lpdwAliasBufferLength OPTIONAL
  571.     );
  572. INT
  573. APIENTRY
  574. GetAddressByNameW (
  575.     IN     DWORD                dwNameSpace,
  576.     IN     LPGUID               lpServiceType,
  577.     IN     LPWSTR              lpServiceName OPTIONAL,
  578.     IN     LPINT                lpiProtocols OPTIONAL,
  579.     IN     DWORD                dwResolution,
  580.     IN     LPSERVICE_ASYNC_INFO lpServiceAsyncInfo OPTIONAL,
  581.     IN OUT LPVOID               lpCsaddrBuffer,
  582.     IN OUT LPDWORD              lpdwBufferLength,
  583.     IN OUT LPWSTR              lpAliasBuffer OPTIONAL,
  584.     IN OUT LPDWORD              lpdwAliasBufferLength OPTIONAL
  585.     );
  586. #ifdef UNICODE
  587. #define GetAddressByName  GetAddressByNameW
  588. #else
  589. #define GetAddressByName  GetAddressByNameA
  590. #endif // !UNICODE
  591.  
  592. INT
  593. APIENTRY
  594. GetTypeByNameA (
  595.     IN     LPSTR         lpServiceName,
  596.     IN OUT LPGUID          lpServiceType
  597.     );
  598. INT
  599. APIENTRY
  600. GetTypeByNameW (
  601.     IN     LPWSTR         lpServiceName,
  602.     IN OUT LPGUID          lpServiceType
  603.     );
  604. #ifdef UNICODE
  605. #define GetTypeByName  GetTypeByNameW
  606. #else
  607. #define GetTypeByName  GetTypeByNameA
  608. #endif // !UNICODE
  609.  
  610. INT
  611. APIENTRY
  612. GetNameByTypeA (
  613.     IN     LPGUID          lpServiceType,
  614.     IN OUT LPSTR         lpServiceName,
  615.     IN     DWORD           dwNameLength
  616.     );
  617. INT
  618. APIENTRY
  619. GetNameByTypeW (
  620.     IN     LPGUID          lpServiceType,
  621.     IN OUT LPWSTR         lpServiceName,
  622.     IN     DWORD           dwNameLength
  623.     );
  624. #ifdef UNICODE
  625. #define GetNameByType  GetNameByTypeW
  626. #else
  627. #define GetNameByType  GetNameByTypeA
  628. #endif // !UNICODE
  629.  
  630. INT
  631. APIENTRY
  632. SetServiceA (
  633.     IN     DWORD                dwNameSpace,
  634.     IN     DWORD                dwOperation,
  635.     IN     DWORD                dwFlags,
  636.     IN     LPSERVICE_INFOA      lpServiceInfo,
  637.     IN     LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,
  638.     IN OUT LPDWORD              lpdwStatusFlags
  639.     );
  640. INT
  641. APIENTRY
  642. SetServiceW (
  643.     IN     DWORD                dwNameSpace,
  644.     IN     DWORD                dwOperation,
  645.     IN     DWORD                dwFlags,
  646.     IN     LPSERVICE_INFOW      lpServiceInfo,
  647.     IN     LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,
  648.     IN OUT LPDWORD              lpdwStatusFlags
  649.     );
  650. #ifdef UNICODE
  651. #define SetService  SetServiceW
  652. #else
  653. #define SetService  SetServiceA
  654. #endif // !UNICODE
  655.  
  656. INT
  657. APIENTRY
  658. GetServiceA (
  659.     IN     DWORD                dwNameSpace,
  660.     IN     LPGUID               lpGuid,
  661.     IN     LPSTR              lpServiceName,
  662.     IN     DWORD                dwProperties,
  663.     IN OUT LPVOID               lpBuffer,
  664.     IN OUT LPDWORD              lpdwBufferSize,
  665.     IN     LPSERVICE_ASYNC_INFO lpServiceAsyncInfo
  666.     );
  667. INT
  668. APIENTRY
  669. GetServiceW (
  670.     IN     DWORD                dwNameSpace,
  671.     IN     LPGUID               lpGuid,
  672.     IN     LPWSTR              lpServiceName,
  673.     IN     DWORD                dwProperties,
  674.     IN OUT LPVOID               lpBuffer,
  675.     IN OUT LPDWORD              lpdwBufferSize,
  676.     IN     LPSERVICE_ASYNC_INFO lpServiceAsyncInfo
  677.     );
  678. #ifdef UNICODE
  679. #define GetService  GetServiceW
  680. #else
  681. #define GetService  GetServiceA
  682. #endif // !UNICODE
  683.  
  684. #ifdef __cplusplus
  685. }
  686. #endif  /* __cplusplus */
  687.  
  688. #endif  // _NSPAPI_INCLUDED
  689.  
  690.  
  691.