Home | History | Annotate | Download | only in include
      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
     11 extern "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 
     23 typedef ULONG PXE_BOOT_ACTION;
     24 typedef ULONG PXE_REG_INDEX;
     25 typedef ULONG PXE_PROVIDER_ATTRIBUTE;
     26 
     27 typedef 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 
     37 typedef 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 
     58 typedef 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 
     69 typedef struct tagPXE_PROVIDER {
     70   ULONG  uSizeOfStruct;
     71   LPWSTR pwszName;
     72   LPWSTR pwszFilePath;
     73   WINBOOL   bIsCritical;
     74   ULONG  uIndex;
     75 } PXE_PROVIDER, *PPXE_PROVIDER;
     76 
     77 DWORD PXEAPI PxeDhcpAppendOption(PVOID pReplyPacket,ULONG uMaxReplyPacketLen,PULONG puReplyPacketLen,BYTE bOption,BYTE bOptionLen,PVOID pValue);
     78 DWORD PXEAPI PxeDhcpGetOptionValue(PVOID pPacket,ULONG uPacketLen,ULONG uInstance,BYTE bOption,PBYTE pbOptionLen,PVOID *ppOptionValue);
     79 DWORD PXEAPI PxeDhcpGetVendorOptionValue(PVOID pPacket,ULONG uPacketLen,BYTE bOption,ULONG uInstance,PBYTE pbOptionLen,PVOID *ppOptionValue);
     80 DWORD PXEAPI PxeDhcpInitialize(PVOID pRecvPacket,ULONG uRecvPacketLen,PVOID pReplyPacket,ULONG uMaxReplyPacketLen,PULONG puReplyPacketLen);
     81 DWORD PXEAPI PxeDhcpIsValid(PVOID pPacket,ULONG uPacketLen,WINBOOL bRequestPacket,PBOOL pbPxeOptionPresent);
     82 
     83 typedef enum _PXE_GSI_TYPE {
     84   PXE_GSI_TRACE_ENABLED = 1
     85 } PXE_GSI_TYPE;
     86 
     87 DWORD PXEAPI PxeGetServerInfo(PXE_GSI_TYPE uInfoType,PVOID pBuffer,ULONG uBufferLen);
     88 PVOID PXEAPI PxePacketAllocate(HANDLE hProvider,HANDLE hClientRequest,ULONG uSize);
     89 DWORD PXEAPI PxePacketFree(HANDLE hProvider,HANDLE hClientRequest,PVOID pPacket);
     90 DWORD PXEAPI PxeProviderEnumClose(HANDLE hEnum);
     91 DWORD PXEAPI PxeProviderEnumFirst(HANDLE *phEnum);
     92 DWORD PXEAPI PxeProviderEnumNext(HANDLE hEnum,PPXE_PROVIDER *ppProvider);
     93 DWORD PXEAPI PxeProviderFreeInfo(PPXE_PROVIDER pProvider);
     94 DWORD PXEAPI PxeProviderInitialize(HANDLE hProvider,HKEY hProviderKey);
     95 DWORD PXEAPI PxeProviderQueryIndex(LPCWSTR pszProviderName,PULONG puIndex);
     96 DWORD 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 
    101 DWORD PXEAPI PxeProviderRegister(LPCWSTR pszProviderName,LPCWSTR pszModulePath,PXE_REG_INDEX Index,WINBOOL bIsCritical,PHKEY phProviderKey);
    102 DWORD PXEAPI PxeProviderServiceControl(PVOID pContext,DWORD dwControl);
    103 DWORD 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 
    111 DWORD PXEAPI PxeProviderSetAttribute(HANDLE hProvider,PXE_PROVIDER_ATTRIBUTE Attribute,PVOID pParameterBuffer,ULONG uParamLen);
    112 DWORD PXEAPI PxeProviderShutdown(PVOID pContext);
    113 DWORD PXEAPI PxeProviderUnRegister(LPCWSTR pszProviderName);
    114 
    115 typedef 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 
    122 DWORD PXEAPI PxeSendReply(HANDLE hClientRequest,PVOID pPacket,ULONG uPacketLen,PXE_ADDRESS *pAddress);
    123 DWORD PXEAPI PxeRegisterCallback(HANDLE hProvider,PXE_CALLBACK_TYPE CallbackType,PVOID pCallbackFunction,PVOID pContext);
    124 
    125 typedef 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 
    133 DWORD 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*/
    140