master
  1/**
  2 * This file has no copyright assigned and is placed in the Public Domain.
  3 * This file is part of the mingw-w64 runtime package.
  4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5 */
  6#ifndef _INC_WDSPXE
  7#define _INC_WDSPXE
  8#if (_WIN32_WINNT >= 0x0600)
  9
 10#ifdef __cplusplus
 11extern "C" {
 12#endif
 13
 14#define PXE_ADDR_BROADCAST 0x0001
 15#define PXE_ADDR_USE_PORT 0x0002
 16#define PXE_ADDR_USE_ADDR 0x0004
 17#define PXE_ADDR_USE_DHCP_RULES 0x0008
 18
 19#ifndef PXEAPI
 20#define PXEAPI WINAPI
 21#endif
 22
 23typedef ULONG PXE_BOOT_ACTION;
 24typedef ULONG PXE_REG_INDEX;
 25typedef ULONG PXE_PROVIDER_ATTRIBUTE;
 26
 27typedef struct tagPXE_ADDRESS {
 28  ULONG  uFlags;
 29  __C89_NAMELESS union {
 30    BYTE  bAddress[PXE_MAX_ADDRESS];
 31    ULONG uIpAddress;
 32  } DUMMYUNIONNAME;
 33  ULONG  uAddrLen;
 34  USHORT uPort;
 35} PXE_ADDRESS, *PPXE_ADDRESS;
 36
 37typedef struct _PXE_DHCP_MESSAGE {
 38  BYTE  Operation;
 39  BYTE  HardwareAddressType;
 40  BYTE  HardwareAddressLength;
 41  BYTE  HopCount;
 42  DWORD TransactionID;
 43  WORD  SecondsSinceBoot;
 44  WORD  Reserved;
 45  ULONG ClientIpAddress;
 46  ULONG YourIPAddress;
 47  ULONG BootstrapServerAddress;
 48  ULONG RelayAgentIpAddress;
 49  BYTE  HardwareAddress[PXE_DHCP_HWAADR_SIZE];
 50  BYTE  HostName[PXE_DHCP_SERVER_SIZE];
 51  BYTE  BootFileName;
 52  __C89_NAMELESS union {
 53    BYTE  bMagicCookie[PXE_DHCP_MAGIC_COOKIE_SIZE];
 54    ULONG uMagicCookie;
 55  } DUMMYUNIONNAME;
 56} PXE_DHCP_MESSAGE, *PPXE_DHCP_MESSAGE;
 57
 58typedef struct _PXE_DHCP_OPTION {
 59  BYTE OptionType;
 60  BYTE OptionLength;
 61  BYTE OptionValue[1];
 62} PXE_DHCP_OPTION, *PPXE_DHCP_OPTION;
 63
 64#define PXE_BA_NBP 1
 65#define PXE_BA_CUSTOM 2
 66#define PXE_BA_IGNORE 3
 67#define PXE_BA_REJECTED 4
 68
 69typedef struct tagPXE_PROVIDER {
 70  ULONG  uSizeOfStruct;
 71  LPWSTR pwszName;
 72  LPWSTR pwszFilePath;
 73  WINBOOL   bIsCritical;
 74  ULONG  uIndex;
 75} PXE_PROVIDER, *PPXE_PROVIDER;
 76
 77DWORD PXEAPI PxeDhcpAppendOption(PVOID pReplyPacket,ULONG uMaxReplyPacketLen,PULONG puReplyPacketLen,BYTE bOption,BYTE bOptionLen,PVOID pValue);
 78DWORD PXEAPI PxeDhcpGetOptionValue(PVOID pPacket,ULONG uPacketLen,ULONG uInstance,BYTE bOption,PBYTE pbOptionLen,PVOID *ppOptionValue);
 79DWORD PXEAPI PxeDhcpGetVendorOptionValue(PVOID pPacket,ULONG uPacketLen,BYTE bOption,ULONG uInstance,PBYTE pbOptionLen,PVOID *ppOptionValue);
 80DWORD PXEAPI PxeDhcpInitialize(PVOID pRecvPacket,ULONG uRecvPacketLen,PVOID pReplyPacket,ULONG uMaxReplyPacketLen,PULONG puReplyPacketLen);
 81DWORD PXEAPI PxeDhcpIsValid(PVOID pPacket,ULONG uPacketLen,WINBOOL bRequestPacket,PBOOL pbPxeOptionPresent);
 82
 83typedef enum _PXE_GSI_TYPE {
 84  PXE_GSI_TRACE_ENABLED = 1
 85} PXE_GSI_TYPE;
 86
 87DWORD PXEAPI PxeGetServerInfo(PXE_GSI_TYPE uInfoType,PVOID pBuffer,ULONG uBufferLen);
 88PVOID PXEAPI PxePacketAllocate(HANDLE hProvider,HANDLE hClientRequest,ULONG uSize);
 89DWORD PXEAPI PxePacketFree(HANDLE hProvider,HANDLE hClientRequest,PVOID pPacket);
 90DWORD PXEAPI PxeProviderEnumClose(HANDLE hEnum);
 91DWORD PXEAPI PxeProviderEnumFirst(HANDLE *phEnum);
 92DWORD PXEAPI PxeProviderEnumNext(HANDLE hEnum,PPXE_PROVIDER *ppProvider);
 93DWORD PXEAPI PxeProviderFreeInfo(PPXE_PROVIDER pProvider);
 94DWORD PXEAPI PxeProviderInitialize(HANDLE hProvider,HKEY hProviderKey);
 95DWORD PXEAPI PxeProviderQueryIndex(LPCWSTR pszProviderName,PULONG puIndex);
 96DWORD PXEAPI PxeProviderRecvRequest(HANDLE hClientRequest,PVOID pPacket,ULONG uPacketLen,PXE_ADDRESS *pLocalAddress,PXE_ADDRESS *pRemoteAddress,PXE_BOOT_ACTION pAction,PVOID pContext);
 97
 98#define PXE_REG_INDEX_TOP	__MSABI_LONG(0U)
 99#define PXE_REG_INDEX_BOTTOM	__MSABI_LONG(0xFFFFFFFFU)
100
101DWORD PXEAPI PxeProviderRegister(LPCWSTR pszProviderName,LPCWSTR pszModulePath,PXE_REG_INDEX Index,WINBOOL bIsCritical,PHKEY phProviderKey);
102DWORD PXEAPI PxeProviderServiceControl(PVOID pContext,DWORD dwControl);
103DWORD PXEAPI PxeProviderSetAttribute(HANDLE hProvider,PXE_PROVIDER_ATTRIBUTE Attribute,PVOID pParameterBuffer,ULONG uParamLen);
104
105#define PXE_PROV_ATTR_FILTER 0
106
107#define PXE_PROV_FILTER_ALL 0x0000
108#define PXE_PROV_FILTER_DHCP_ONLY 0x0001
109#define PXE_PROV_FILTER_PXE_ONLY 0x0002
110
111DWORD PXEAPI PxeProviderSetAttribute(HANDLE hProvider,PXE_PROVIDER_ATTRIBUTE Attribute,PVOID pParameterBuffer,ULONG uParamLen);
112DWORD PXEAPI PxeProviderShutdown(PVOID pContext);
113DWORD PXEAPI PxeProviderUnRegister(LPCWSTR pszProviderName);
114
115typedef enum _PXE_CALLBACK_TYPE {
116  PXE_CALLBACK_RECV_REQUEST = 0,
117  PXE_CALLBACK_SHUTDOWN,
118  PXE_CALLBACK_SERVICE_CONTROL,
119  PXE_CALLBACK_MAX
120} PXE_CALLBACK_TYPE;
121
122DWORD PXEAPI PxeSendReply(HANDLE hClientRequest,PVOID pPacket,ULONG uPacketLen,PXE_ADDRESS *pAddress);
123DWORD PXEAPI PxeRegisterCallback(HANDLE hProvider,PXE_CALLBACK_TYPE CallbackType,PVOID pCallbackFunction,PVOID pContext);
124
125typedef DWORD PXE_SEVERITY;
126
127#define PXE_TRACE_VERBOSE 0x00010000
128#define PXE_TRACE_INFO 0x00020000
129#define PXE_TRACE_WARNING 0x00040000
130#define PXE_TRACE_ERROR 0x00080000
131#define PXE_TRACE_FATAL 0x00100000
132
133DWORD WINAPIV PxeTrace(HANDLE hProvider,PXE_SEVERITY Severity,LPCWSTR pszFormat,...);
134
135#ifdef __cplusplus
136}
137#endif
138#endif /*(_WIN32_WINNT >= 0x0600)*/
139#endif /*_INC_WDSPXE*/