wdspxe.h 4.9 KB

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