This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/MinGW/include/nspapi.h

230 lines
7.5 KiB
C

/*
* nspapi.h
*
* Windows Sockets Namespace Service Provider API definitions.
*
*
* $Id: nspapi.h,v 7258c92e2a48 2017/11/14 20:07:02 keith $
*
* Written by Anders Norlander <anorland@hem2.passagen.se>
* Copyright (C) 1998, 1999, 2002, 2004, 2017, MinGW.org Project
*
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
#ifndef _NSPAPI_H
#pragma GCC system_header
/* <winsock2.h> will include <nspapi.i> selectively, to resolve circular
* definition references; thus...
*/
#ifndef __WINSOCK2_H_SOURCED__
/* ...only when NOT engaged in such selective inclusion, do we process
* the entire content of <nspapi.h>; furthermore, before we DO process
* the full content, we must process the WinSock API declarations from
* <winsock.h> or <winsock2.h>, BEFORE we define the <nspapi.h> repeat
* inclusion guard, so that <winsock2.h> may, if necessary, recurse to
* access the selectively exposed content. Inclusion of the following
* private header will declare the necessary WinSock API, choosing to
* include either <winsock.h> or <winsock2.h> by default, on the same
* basis as the similar choice made in <windows.h>
*/
#include "_winsock.h"
/* We can now be confident that the WinSock API has been appropriately
* declared; we may now define the <nspapi.h> repeat inclusion guard.
*/
#define _NSPAPI_H
#define NS_ALL 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_NISPLUS 42
#define NS_WRQ 50
#define SERVICE_REGISTER 1
#define SERVICE_DEREGISTER 2
#define SERVICE_FLUSH 3
#define SERVICE_FLAG_HARD 0x00000002
#endif /* !__WINSOCK2_H_SOURCED__ */
#ifndef RC_INVOKED
#if ! (defined _NSPAPI_H && defined _WINSOCK2_H)
/* The following definitions are exposed either when <nspapi.h> is included
* directly, or when selectively included by <winsock2.h>, but we must take
* care to define them only on the first time of reading.
*
* We need a complete definition for the BLOB data type, which is provided
* in "wtypes.h", (and possibly exposed due to prior selective inclusion by
* <winsock2.h>); if neither of these have been included previously, we may
* acquire the requisite definition by selective inclusion now.
*/
#define __NSPAPI_H_SOURCED__ 1
#include "wtypes.h"
_BEGIN_C_DECLS
/* Technically, according to MSDN, the SOCKET_ADDRESS structure should be
* defined in <winsock2.h>, which has not necessarily been included by the
* time we get to here, yet the CSADDR_INFO structure, (which is correctly
* defined in this file), requires its full definition. Furthermore, the
* CSADDR_INFO structure is representative of the data which is returned
* by the GetAddressByName() function, (also declared in this file), which
* is declared as deprecated in WinSock v2, (and thus, we would not expect
* any such dependency on this WinSock v2 specific <winsock2.h> data type).
* This Microsoft API design is critically flawed, but we can mitigate the
* fault by defining the SOCKET_ADDRESS structure here, whence we make it
* available to <winsock2.h> via selective inclusion.
*/
typedef
struct _SOCKET_ADDRESS
{ LPSOCKADDR lpSockaddr;
INT iSockaddrLength;
} SOCKET_ADDRESS, *PSOCKET_ADDRESS, *LPSOCKET_ADDRESS;
/* Notwithstanding that, according to MSDN, the CSADDR_INFO structure is
* correctly defined below, (it should not be defined in <winsock2.h>, and
* user code should include <nspapi.h> to obtain the complete definition),
* <winsock2.h> DOES define the WSAQUERYSET data type, which requires at
* least an incomplete type definition for the LPCSADDR_INFO pointer type;
* thus, it is convenient to expose this incomplete definition when this
* file, <nspapi.h>, is selectively included by <winsock2.h>, whereas the
* complete definition of the CSADDR_INFO data type may be deferred until
* the user includes <nspapi.h> directly.
*/
typedef struct _CSADDR_INFO CSADDR_INFO, *PCSADDR_INFO, *LPCSADDR_INFO;
_END_C_DECLS
#undef __NSPAPI_H_SOURCED__
#endif /* ! (_NSPAPI_H && _WINSOCK2_H) */
#ifdef _NSPAPI_H
/* This indicates that <nspapi.h> has been included directly...
*/
_BEGIN_C_DECLS
/* ...thus it is now appropriate to provide the complete type definition
* for the CSADDR_INFO structure...
*/
struct _CSADDR_INFO
{ SOCKET_ADDRESS LocalAddr;
SOCKET_ADDRESS RemoteAddr;
INT iSocketType;
INT iProtocol;
};
/* ...in addition to other data types, and function prototypes, which are
* specific to this header file.
*/
typedef
struct _SERVICE_ADDRESS
{ DWORD dwAddressType;
DWORD dwAddressFlags;
DWORD dwAddressLength;
DWORD dwPrincipalLength;
BYTE *lpAddress;
BYTE *lpPrincipal;
} SERVICE_ADDRESS;
typedef
struct _SERVICE_ADDRESSES
{ DWORD dwAddressCount;
SERVICE_ADDRESS Addresses[1];
} SERVICE_ADDRESSES, *PSERVICE_ADDRESSES, *LPSERVICE_ADDRESSES;
typedef
struct _SERVICE_INFOA
{ LPGUID lpServiceType;
LPSTR lpServiceName;
LPSTR lpComment;
LPSTR lpLocale;
DWORD dwDisplayHint;
DWORD dwVersion;
DWORD dwTime;
LPSTR lpMachineName;
LPSERVICE_ADDRESSES lpServiceAddress;
BLOB ServiceSpecificInfo;
} SERVICE_INFOA, *LPSERVICE_INFOA;
typedef
struct _SERVICE_INFOW
{ LPGUID lpServiceType;
LPWSTR lpServiceName;
LPWSTR lpComment;
LPWSTR lpLocale;
DWORD dwDisplayHint;
DWORD dwVersion;
DWORD dwTime;
LPWSTR lpMachineName;
LPSERVICE_ADDRESSES lpServiceAddress;
BLOB ServiceSpecificInfo;
} SERVICE_INFOW, *LPSERVICE_INFOW;
typedef __AW_ALIAS__(SERVICE_INFO), *LPSERVICE_INFO;
typedef void *LPSERVICE_ASYNC_INFO;
#define SetService __AW_SUFFIXED__(SetService)
INT WINAPI SetServiceA
( DWORD, DWORD, DWORD, LPSERVICE_INFOA, LPSERVICE_ASYNC_INFO, LPDWORD
);
INT WINAPI SetServiceW
( DWORD, DWORD, DWORD, LPSERVICE_INFOW, LPSERVICE_ASYNC_INFO, LPDWORD
);
#define GetAddressByName __AW_SUFFIXED__(GetAddressByName)
INT WINAPI GetAddressByNameA
( DWORD, LPGUID, LPSTR, LPINT, DWORD, LPSERVICE_ASYNC_INFO, LPVOID,
LPDWORD, LPSTR, LPDWORD
);
INT WINAPI GetAddressByNameW
( DWORD, LPGUID, LPWSTR, LPINT, DWORD, LPSERVICE_ASYNC_INFO, LPVOID,
LPDWORD, LPWSTR, LPDWORD
);
#define _SERVICE_INFO __AW_SUFFIXED__(SERVICE_INFO)
_END_C_DECLS
#endif /* _NSPAPI_H */
#endif /* ! RC_INVOKED */
#endif /* _NSPAPI_H: $RCSfile: nspapi.h,v $: end of file */