462 lines
12 KiB
Plaintext
462 lines
12 KiB
Plaintext
/*++
|
|
|
|
Copyright (c) 1991-1998 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
nspapi.h
|
|
|
|
Abstract:
|
|
|
|
Name Space Provider API prototypes and manifests. See the
|
|
"Windows NT NameSpace Provider Specification" document for
|
|
details.
|
|
|
|
|
|
Environment:
|
|
|
|
User Mode -Win32
|
|
|
|
Notes:
|
|
|
|
You must include "basetyps.h" first. Some types should
|
|
use definitions from base files rather than redefine here.
|
|
Unfortunately, so such base file exists.
|
|
|
|
--*/
|
|
|
|
#ifndef _NSPAPI_INCLUDED
|
|
#define _NSPAPI_INCLUDED
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
#ifndef _tagBLOB_DEFINED
|
|
#define _tagBLOB_DEFINED
|
|
#define _BLOB_DEFINED
|
|
#define _LPBLOB_DEFINED
|
|
typedef struct _BLOB {
|
|
ULONG cbSize ;
|
|
#ifdef MIDL_PASS
|
|
[size_is(cbSize)] BYTE *pBlobData;
|
|
#else // MIDL_PASS
|
|
BYTE *pBlobData ;
|
|
#endif // MIDL_PASS
|
|
} BLOB, *LPBLOB ;
|
|
#endif
|
|
|
|
#ifndef GUID_DEFINED
|
|
#define GUID_DEFINED
|
|
typedef struct _GUID
|
|
{
|
|
unsigned long Data1;
|
|
unsigned short Data2;
|
|
unsigned short Data3;
|
|
unsigned char Data4[8];
|
|
} GUID;
|
|
#endif /* GUID_DEFINED */
|
|
|
|
#ifndef __LPGUID_DEFINED__
|
|
#define __LPGUID_DEFINED__
|
|
typedef GUID *LPGUID;
|
|
#endif
|
|
|
|
|
|
//
|
|
// Service categories
|
|
//
|
|
#define SERVICE_RESOURCE (0x00000001)
|
|
#define SERVICE_SERVICE (0x00000002)
|
|
#define SERVICE_LOCAL (0x00000004)
|
|
|
|
//
|
|
// Operation used when calling SetService()
|
|
//
|
|
#define SERVICE_REGISTER (0x00000001)
|
|
#define SERVICE_DEREGISTER (0x00000002)
|
|
#define SERVICE_FLUSH (0x00000003)
|
|
#define SERVICE_ADD_TYPE (0x00000004)
|
|
#define SERVICE_DELETE_TYPE (0x00000005)
|
|
|
|
//
|
|
// Flags that affect the operations above
|
|
//
|
|
#define SERVICE_FLAG_DEFER (0x00000001)
|
|
#define SERVICE_FLAG_HARD (0x00000002)
|
|
|
|
//
|
|
// Used as input to GetService() for setting the dwProps parameter
|
|
//
|
|
#define PROP_COMMENT (0x00000001)
|
|
#define PROP_LOCALE (0x00000002)
|
|
#define PROP_DISPLAY_HINT (0x00000004)
|
|
#define PROP_VERSION (0x00000008)
|
|
#define PROP_START_TIME (0x00000010)
|
|
#define PROP_MACHINE (0x00000020)
|
|
#define PROP_ADDRESSES (0x00000100)
|
|
#define PROP_SD (0x00000200)
|
|
#define PROP_ALL (0x80000000)
|
|
|
|
//
|
|
// Flags that describe attributes of Service Addresses
|
|
//
|
|
|
|
#define SERVICE_ADDRESS_FLAG_RPC_CN (0x00000001)
|
|
#define SERVICE_ADDRESS_FLAG_RPC_DG (0x00000002)
|
|
#define SERVICE_ADDRESS_FLAG_RPC_NB (0x00000004)
|
|
|
|
//
|
|
// Name Spaces
|
|
//
|
|
|
|
#define NS_DEFAULT (0)
|
|
|
|
#define NS_SAP (1)
|
|
#define NS_NDS (2)
|
|
#define NS_PEER_BROWSE (3)
|
|
|
|
#define NS_TCPIP_LOCAL (10)
|
|
#define NS_TCPIP_HOSTS (11)
|
|
#define NS_DNS (12)
|
|
#define NS_NETBT (13)
|
|
#define NS_WINS (14)
|
|
|
|
#define NS_NBP (20)
|
|
|
|
#define NS_MS (30)
|
|
#define NS_STDA (31)
|
|
#define NS_NTDS (32)
|
|
|
|
#define NS_X500 (40)
|
|
#define NS_NIS (41)
|
|
|
|
#define NS_VNS (50)
|
|
|
|
//
|
|
// Name space attributes.
|
|
//
|
|
#define NSTYPE_HIERARCHICAL (0x00000001)
|
|
#define NSTYPE_DYNAMIC (0x00000002)
|
|
#define NSTYPE_ENUMERABLE (0x00000004)
|
|
#define NSTYPE_WORKGROUP (0x00000008)
|
|
|
|
//
|
|
// Transport attributes.
|
|
//
|
|
#define XP_CONNECTIONLESS (0x00000001)
|
|
#define XP_GUARANTEED_DELIVERY (0x00000002)
|
|
#define XP_GUARANTEED_ORDER (0x00000004)
|
|
#define XP_MESSAGE_ORIENTED (0x00000008)
|
|
#define XP_PSEUDO_STREAM (0x00000010)
|
|
#define XP_GRACEFUL_CLOSE (0x00000020)
|
|
#define XP_EXPEDITED_DATA (0x00000040)
|
|
#define XP_CONNECT_DATA (0x00000080)
|
|
#define XP_DISCONNECT_DATA (0x00000100)
|
|
#define XP_SUPPORTS_BROADCAST (0x00000200)
|
|
#define XP_SUPPORTS_MULTICAST (0x00000400)
|
|
#define XP_BANDWIDTH_ALLOCATION (0x00000800)
|
|
#define XP_FRAGMENTATION (0x00001000)
|
|
#define XP_ENCRYPTS (0x00002000)
|
|
|
|
//
|
|
// Resolution flags for GetAddressByName().
|
|
//
|
|
#define RES_SOFT_SEARCH (0x00000001)
|
|
#define RES_FIND_MULTIPLE (0x00000002)
|
|
#define RES_SERVICE (0x00000004)
|
|
|
|
//
|
|
// Well known value names for Service Types
|
|
//
|
|
|
|
#define SERVICE_TYPE_VALUE_SAPIDA "SapId"
|
|
#define SERVICE_TYPE_VALUE_SAPIDW L"SapId"
|
|
|
|
#define SERVICE_TYPE_VALUE_CONNA "ConnectionOriented"
|
|
#define SERVICE_TYPE_VALUE_CONNW L"ConnectionOriented"
|
|
|
|
#define SERVICE_TYPE_VALUE_TCPPORTA "TcpPort"
|
|
#define SERVICE_TYPE_VALUE_TCPPORTW L"TcpPort"
|
|
|
|
#define SERVICE_TYPE_VALUE_UDPPORTA "UdpPort"
|
|
#define SERVICE_TYPE_VALUE_UDPPORTW L"UdpPort"
|
|
|
|
#ifdef UNICODE
|
|
|
|
#define SERVICE_TYPE_VALUE_SAPID SERVICE_TYPE_VALUE_SAPIDW
|
|
#define SERVICE_TYPE_VALUE_CONN SERVICE_TYPE_VALUE_CONNW
|
|
#define SERVICE_TYPE_VALUE_TCPPORT SERVICE_TYPE_VALUE_TCPPORTW
|
|
#define SERVICE_TYPE_VALUE_UDPPORT SERVICE_TYPE_VALUE_UDPPORTW
|
|
|
|
#else // not UNICODE
|
|
|
|
#define SERVICE_TYPE_VALUE_SAPID SERVICE_TYPE_VALUE_SAPIDA
|
|
#define SERVICE_TYPE_VALUE_CONN SERVICE_TYPE_VALUE_CONNA
|
|
#define SERVICE_TYPE_VALUE_TCPPORT SERVICE_TYPE_VALUE_TCPPORTA
|
|
#define SERVICE_TYPE_VALUE_UDPPORT SERVICE_TYPE_VALUE_UDPPORTA
|
|
|
|
#endif
|
|
|
|
|
|
//
|
|
// status flags returned by SetService
|
|
//
|
|
#define SET_SERVICE_PARTIAL_SUCCESS (0x00000001)
|
|
|
|
//
|
|
// Name Space Information
|
|
//
|
|
typedef struct _NS_INFO% {
|
|
DWORD dwNameSpace ;
|
|
DWORD dwNameSpaceFlags ;
|
|
LPTSTR% lpNameSpace ;
|
|
} NS_INFO%, * PNS_INFO%, FAR * LPNS_INFO%;
|
|
|
|
//
|
|
// Service Type Values. The structures are used to define named Service
|
|
// Type specific values. This structure is self relative and has no pointers.
|
|
//
|
|
typedef struct _SERVICE_TYPE_VALUE {
|
|
DWORD dwNameSpace ;
|
|
DWORD dwValueType ;
|
|
DWORD dwValueSize ;
|
|
DWORD dwValueNameOffset ;
|
|
DWORD dwValueOffset ;
|
|
} SERVICE_TYPE_VALUE, *PSERVICE_TYPE_VALUE, FAR *LPSERVICE_TYPE_VALUE ;
|
|
|
|
//
|
|
// An absolute version of above. This structure does contain pointers.
|
|
//
|
|
typedef struct _SERVICE_TYPE_VALUE_ABS% {
|
|
DWORD dwNameSpace ;
|
|
DWORD dwValueType ;
|
|
DWORD dwValueSize ;
|
|
LPTSTR% lpValueName ;
|
|
PVOID lpValue ;
|
|
} SERVICE_TYPE_VALUE_ABS%,
|
|
*PSERVICE_TYPE_VALUE_ABS%,
|
|
FAR *LPSERVICE_TYPE_VALUE_ABS%;
|
|
|
|
//
|
|
// Service Type Information. Contains the name of the Service Type and
|
|
// and an array of SERVICE_NS_TYPE_VALUE structures. This structure is self
|
|
// relative and has no pointers in it.
|
|
//
|
|
typedef struct _SERVICE_TYPE_INFO {
|
|
DWORD dwTypeNameOffset ;
|
|
DWORD dwValueCount ;
|
|
SERVICE_TYPE_VALUE Values[1] ;
|
|
} SERVICE_TYPE_INFO, *PSERVICE_TYPE_INFO, FAR *LPSERVICE_TYPE_INFO ;
|
|
|
|
typedef struct _SERVICE_TYPE_INFO_ABS% {
|
|
LPTSTR% lpTypeName ;
|
|
DWORD dwValueCount ;
|
|
SERVICE_TYPE_VALUE_ABS% Values[1] ;
|
|
} SERVICE_TYPE_INFO_ABS%,
|
|
*PSERVICE_TYPE_INFO_ABS%,
|
|
FAR *LPSERVICE_TYPE_INFO_ABS% ;
|
|
|
|
|
|
//
|
|
// A Single Address definition.
|
|
//
|
|
typedef struct _SERVICE_ADDRESS {
|
|
DWORD dwAddressType ;
|
|
DWORD dwAddressFlags ;
|
|
DWORD dwAddressLength ;
|
|
DWORD dwPrincipalLength ;
|
|
#ifdef MIDL_PASS
|
|
[size_is(dwAddressLength)] BYTE *lpAddress;
|
|
#else // MIDL_PASS
|
|
BYTE *lpAddress ;
|
|
#endif // MIDL_PASS
|
|
#ifdef MIDL_PASS
|
|
[size_is(dwPrincipalLength)] BYTE *lpPrincipal;
|
|
#else // MIDL_PASS
|
|
BYTE *lpPrincipal ;
|
|
#endif // MIDL_PASS
|
|
} SERVICE_ADDRESS, *PSERVICE_ADDRESS, *LPSERVICE_ADDRESS;
|
|
|
|
//
|
|
// Addresses used by the service. Contains array of SERVICE_ADDRESS.
|
|
//
|
|
typedef struct _SERVICE_ADDRESSES {
|
|
DWORD dwAddressCount ;
|
|
#ifdef MIDL_PASS
|
|
[size_is(dwAddressCount)] SERVICE_ADDRESS Addressses[*];
|
|
#else // MIDL_PASS
|
|
SERVICE_ADDRESS Addresses[1] ;
|
|
#endif // MIDL_PASS
|
|
} SERVICE_ADDRESSES, *PSERVICE_ADDRESSES, *LPSERVICE_ADDRESSES;
|
|
|
|
|
|
//
|
|
// Service Information.
|
|
//
|
|
typedef struct _SERVICE_INFO% {
|
|
LPGUID lpServiceType ;
|
|
LPTSTR% lpServiceName ;
|
|
LPTSTR% lpComment ;
|
|
LPTSTR% lpLocale ;
|
|
DWORD dwDisplayHint ;
|
|
DWORD dwVersion ;
|
|
DWORD dwTime ;
|
|
LPTSTR% lpMachineName ;
|
|
LPSERVICE_ADDRESSES lpServiceAddress ;
|
|
BLOB ServiceSpecificInfo ;
|
|
} SERVICE_INFO%, *PSERVICE_INFO%, FAR * LPSERVICE_INFO% ;
|
|
|
|
|
|
//
|
|
// Name Space & Service Information
|
|
//
|
|
typedef struct _NS_SERVICE_INFO% {
|
|
DWORD dwNameSpace ;
|
|
SERVICE_INFO% ServiceInfo ;
|
|
} NS_SERVICE_INFO%, *PNS_SERVICE_INFO%, FAR * LPNS_SERVICE_INFO% ;
|
|
|
|
#ifndef __CSADDR_DEFINED__
|
|
#define __CSADDR_DEFINED__
|
|
|
|
//
|
|
// SockAddr Information
|
|
//
|
|
typedef struct _SOCKET_ADDRESS {
|
|
LPSOCKADDR lpSockaddr ;
|
|
INT iSockaddrLength ;
|
|
} SOCKET_ADDRESS, *PSOCKET_ADDRESS, FAR * LPSOCKET_ADDRESS ;
|
|
|
|
//
|
|
// CSAddr Information
|
|
//
|
|
typedef struct _CSADDR_INFO {
|
|
SOCKET_ADDRESS LocalAddr ;
|
|
SOCKET_ADDRESS RemoteAddr ;
|
|
INT iSocketType ;
|
|
INT iProtocol ;
|
|
} CSADDR_INFO, *PCSADDR_INFO, FAR * LPCSADDR_INFO ;
|
|
|
|
#endif
|
|
|
|
//
|
|
// Protocol Information
|
|
//
|
|
typedef struct _PROTOCOL_INFO% {
|
|
DWORD dwServiceFlags ;
|
|
INT iAddressFamily ;
|
|
INT iMaxSockAddr ;
|
|
INT iMinSockAddr ;
|
|
INT iSocketType ;
|
|
INT iProtocol ;
|
|
DWORD dwMessageSize ;
|
|
LPTSTR% lpProtocol ;
|
|
} PROTOCOL_INFO%, *PPROTOCOL_INFO%, FAR * LPPROTOCOL_INFO% ;
|
|
|
|
//
|
|
// NETRESOURCE2 Structure
|
|
//
|
|
typedef struct _NETRESOURCE2% {
|
|
DWORD dwScope ;
|
|
DWORD dwType ;
|
|
DWORD dwUsage ;
|
|
DWORD dwDisplayType ;
|
|
LPTSTR% lpLocalName ;
|
|
LPTSTR% lpRemoteName ;
|
|
LPTSTR% lpComment ;
|
|
NS_INFO ns_info ;
|
|
GUID ServiceType ;
|
|
DWORD dwProtocols ;
|
|
LPINT lpiProtocols ;
|
|
} NETRESOURCE2%, *PNETRESOURCE2%, FAR * LPNETRESOURCE2% ;
|
|
|
|
typedef DWORD (* LPFN_NSPAPI) (VOID ) ;
|
|
|
|
//
|
|
// Structures for using the service routines asynchronously.
|
|
//
|
|
typedef
|
|
VOID
|
|
(*LPSERVICE_CALLBACK_PROC) (
|
|
IN LPARAM lParam,
|
|
IN HANDLE hAsyncTaskHandle
|
|
);
|
|
|
|
typedef struct _SERVICE_ASYNC_INFO {
|
|
LPSERVICE_CALLBACK_PROC lpServiceCallbackProc;
|
|
LPARAM lParam;
|
|
HANDLE hAsyncTaskHandle;
|
|
} SERVICE_ASYNC_INFO, *PSERVICE_ASYNC_INFO, FAR * LPSERVICE_ASYNC_INFO;
|
|
|
|
//
|
|
// Public NSP API prototypes.
|
|
//
|
|
INT
|
|
APIENTRY
|
|
EnumProtocols% (
|
|
IN LPINT lpiProtocols,
|
|
IN OUT LPVOID lpProtocolBuffer,
|
|
IN OUT LPDWORD lpdwBufferLength
|
|
);
|
|
|
|
INT
|
|
APIENTRY
|
|
GetAddressByName% (
|
|
IN DWORD dwNameSpace,
|
|
IN LPGUID lpServiceType,
|
|
IN LPTSTR% lpServiceName OPTIONAL,
|
|
IN LPINT lpiProtocols OPTIONAL,
|
|
IN DWORD dwResolution,
|
|
IN LPSERVICE_ASYNC_INFO lpServiceAsyncInfo OPTIONAL,
|
|
IN OUT LPVOID lpCsaddrBuffer,
|
|
IN OUT LPDWORD lpdwBufferLength,
|
|
IN OUT LPTSTR% lpAliasBuffer OPTIONAL,
|
|
IN OUT LPDWORD lpdwAliasBufferLength OPTIONAL
|
|
);
|
|
|
|
INT
|
|
APIENTRY
|
|
GetTypeByName% (
|
|
IN LPTSTR% lpServiceName,
|
|
IN OUT LPGUID lpServiceType
|
|
);
|
|
|
|
INT
|
|
APIENTRY
|
|
GetNameByType% (
|
|
IN LPGUID lpServiceType,
|
|
IN OUT LPTSTR% lpServiceName,
|
|
IN DWORD dwNameLength
|
|
);
|
|
|
|
INT
|
|
APIENTRY
|
|
SetService% (
|
|
IN DWORD dwNameSpace,
|
|
IN DWORD dwOperation,
|
|
IN DWORD dwFlags,
|
|
IN LPSERVICE_INFO% lpServiceInfo,
|
|
IN LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,
|
|
IN OUT LPDWORD lpdwStatusFlags
|
|
);
|
|
|
|
INT
|
|
APIENTRY
|
|
GetService% (
|
|
IN DWORD dwNameSpace,
|
|
IN LPGUID lpGuid,
|
|
IN LPTSTR% lpServiceName,
|
|
IN DWORD dwProperties,
|
|
IN OUT LPVOID lpBuffer,
|
|
IN OUT LPDWORD lpdwBufferSize,
|
|
IN LPSERVICE_ASYNC_INFO lpServiceAsyncInfo
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif // _NSPAPI_INCLUDED
|
|
|
|
|