mirror of https://github.com/UMSKT/xpmgr.git
393 lines
6.9 KiB
C
393 lines
6.9 KiB
C
/*++
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
wdspxe.h
|
|
|
|
Abstract:
|
|
|
|
Contains functions used to write Providers for WDSPXE Server
|
|
|
|
--*/
|
|
|
|
#ifndef __WDSPXE_H__
|
|
#define __WDSPXE_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// Calling convention for WDSPXE APIs.
|
|
//
|
|
#define PXEAPI __stdcall
|
|
|
|
//
|
|
// PXE_REG_INDEX
|
|
//
|
|
typedef ULONG PXE_REG_INDEX;
|
|
|
|
#define PXE_REG_INDEX_TOP (0)
|
|
#define PXE_REG_INDEX_BOTTOM 0xFFFFFFFF
|
|
|
|
//
|
|
// PXE_PROVIDER
|
|
//
|
|
typedef __struct_bcount(uSizeOfStruct) struct tagPXE_PROVIDER
|
|
{
|
|
ULONG uSizeOfStruct;
|
|
LPWSTR pwszName;
|
|
LPWSTR pwszFilePath;
|
|
BOOL bIsCritical;
|
|
ULONG uIndex;
|
|
} PXE_PROVIDER, *PPXE_PROVIDER;
|
|
|
|
//
|
|
// PXE_CALLBACK_TYPE
|
|
//
|
|
typedef ULONG PXE_CALLBACK_TYPE;
|
|
|
|
#define PXE_CALLBACK_RECV_REQUEST 0
|
|
#define PXE_CALLBACK_SHUTDOWN 1
|
|
#define PXE_CALLBACK_SERVICE_CONTROL 2
|
|
|
|
#define PXE_CALLBACK_MAX 3
|
|
|
|
//
|
|
// PXE_GSI_TYPE
|
|
//
|
|
typedef ULONG PXE_GSI_TYPE;
|
|
|
|
#define PXE_GSI_TRACE_ENABLED 1
|
|
|
|
//
|
|
// PXE_ADDRESS
|
|
//
|
|
#define PXE_MAX_ADDRESS 16
|
|
|
|
#define PXE_ADDR_BROADCAST 0x0001
|
|
#define PXE_ADDR_USE_PORT 0x0002
|
|
#define PXE_ADDR_USE_ADDR 0x0004
|
|
#define PXE_ADDR_USE_DHCP_RULES 0x0008
|
|
|
|
typedef struct tagPXE_ADDRESS
|
|
{
|
|
ULONG uFlags;
|
|
|
|
union
|
|
{
|
|
BYTE bAddress[PXE_MAX_ADDRESS];
|
|
ULONG uIpAddress;
|
|
};
|
|
|
|
ULONG uAddrLen;
|
|
USHORT uPort;
|
|
} PXE_ADDRESS, *PPXE_ADDRESS;
|
|
|
|
//
|
|
// PXE_BOOT_ACTION
|
|
//
|
|
typedef ULONG PXE_BOOT_ACTION;
|
|
|
|
#define PXE_BA_NBP 1
|
|
#define PXE_BA_CUSTOM 2
|
|
#define PXE_BA_IGNORE 3
|
|
#define PXE_BA_REJECTED 4
|
|
|
|
//
|
|
// PXE_SEVERITY
|
|
//
|
|
typedef ULONG PXE_SEVERITY;
|
|
|
|
#define PXE_TRACE_VERBOSE 0x00010000
|
|
#define PXE_TRACE_INFO 0x00020000
|
|
#define PXE_TRACE_WARNING 0x00040000
|
|
#define PXE_TRACE_ERROR 0x00080000
|
|
#define PXE_TRACE_FATAL 0x00100000
|
|
|
|
//
|
|
// PXE_PROVIDER_ATTRIBUTE
|
|
//
|
|
typedef ULONG PXE_PROVIDER_ATTRIBUTE;
|
|
|
|
#define PXE_PROV_ATTR_FILTER 0
|
|
|
|
#define PXE_PROV_FILTER_ALL 0x0000
|
|
#define PXE_PROV_FILTER_DHCP_ONLY 0x0001
|
|
#define PXE_PROV_FILTER_PXE_ONLY 0x0002
|
|
//
|
|
// Provider Registration and Enumeration APIs
|
|
//
|
|
DWORD
|
|
PXEAPI
|
|
PxeProviderRegister(
|
|
__in LPCWSTR pszProviderName,
|
|
__in LPCWSTR pszModulePath,
|
|
__in PXE_REG_INDEX Index,
|
|
__in BOOL bIsCritical,
|
|
__out_opt PHKEY phProviderKey
|
|
);
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxeProviderUnRegister(
|
|
__in LPCWSTR pszProviderName
|
|
);
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxeProviderQueryIndex(
|
|
__in LPCWSTR pszProviderName,
|
|
__out PULONG puIndex
|
|
);
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxeProviderEnumFirst(
|
|
__out HANDLE *phEnum
|
|
);
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxeProviderEnumNext(
|
|
__in HANDLE hEnum,
|
|
__out PPXE_PROVIDER *ppProvider
|
|
);
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxeProviderEnumClose(
|
|
__in HANDLE hEnum
|
|
);
|
|
|
|
DWORD
|
|
PxeProviderFreeInfo(
|
|
__in PPXE_PROVIDER pProvider
|
|
);
|
|
|
|
//
|
|
// Callback Registration
|
|
//
|
|
DWORD
|
|
PXEAPI
|
|
PxeRegisterCallback(
|
|
__in HANDLE hProvider,
|
|
__in PXE_CALLBACK_TYPE CallbackType,
|
|
__in PVOID pCallbackFunction,
|
|
__in_opt PVOID pContext
|
|
);
|
|
|
|
//
|
|
// UDP Send/Boot Action
|
|
//
|
|
DWORD
|
|
PXEAPI
|
|
PxeSendReply(
|
|
__in HANDLE hClientRequest,
|
|
__in_bcount(uPacketLen) PVOID pPacket,
|
|
__in ULONG uPacketLen,
|
|
__in PXE_ADDRESS *pAddress
|
|
);
|
|
|
|
//
|
|
// Notify of Async Processing
|
|
//
|
|
DWORD
|
|
PXEAPI
|
|
PxeAsyncRecvDone(
|
|
__in HANDLE hClientRequest,
|
|
__in PXE_BOOT_ACTION Action
|
|
);
|
|
|
|
//
|
|
// Trace
|
|
//
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxeTrace(
|
|
__in HANDLE hProvider,
|
|
__in PXE_SEVERITY Severity,
|
|
__in LPCWSTR pszFormat,
|
|
...
|
|
);
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxeTraceV(
|
|
__in HANDLE hProvider,
|
|
__in PXE_SEVERITY Severity,
|
|
__in LPCWSTR pszFormat,
|
|
__in va_list Params
|
|
);
|
|
|
|
//
|
|
// Packet Allocation
|
|
//
|
|
PVOID
|
|
PXEAPI
|
|
PxePacketAllocate(
|
|
__in HANDLE hProvider,
|
|
__in HANDLE hClientRequest,
|
|
__in ULONG uSize
|
|
);
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxePacketFree(
|
|
__in HANDLE hProvider,
|
|
__in HANDLE hClientRequest,
|
|
__in PVOID pPacket
|
|
);
|
|
|
|
//
|
|
// Provider Attributes
|
|
//
|
|
DWORD
|
|
PXEAPI
|
|
PxeProviderSetAttribute(
|
|
__in HANDLE hProvider,
|
|
__in PXE_PROVIDER_ATTRIBUTE Attribute,
|
|
__in_bcount(uParamLen) PVOID pParameterBuffer,
|
|
__in ULONG uParamLen
|
|
);
|
|
|
|
//
|
|
// Dhcp Functions
|
|
//
|
|
DWORD
|
|
PXEAPI
|
|
PxeDhcpInitialize(
|
|
__in_bcount(uRecvPacketLen) PVOID pRecvPacket,
|
|
__in ULONG uRecvPacketLen,
|
|
__inout_bcount(uMaxReplyPacketLen) PVOID pReplyPacket,
|
|
__in ULONG uMaxReplyPacketLen,
|
|
__out PULONG puReplyPacketLen
|
|
);
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxeDhcpAppendOption(
|
|
__inout_bcount(uMaxReplyPacketLen) PVOID pReplyPacket,
|
|
__in ULONG uMaxReplyPacketLen,
|
|
__inout PULONG puReplyPacketLen,
|
|
__in BYTE bOption,
|
|
__in BYTE bOptionLen,
|
|
__in_bcount_opt(bOptionLen) PVOID pValue
|
|
);
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxeDhcpAppendOptionRaw(
|
|
__inout_bcount(uMaxReplyPacketLen) PVOID pReplyPacket,
|
|
__in ULONG uMaxReplyPacketLen,
|
|
__inout PULONG puReplyPacketLen,
|
|
__in USHORT uBufferLen,
|
|
__in_bcount(uBufferLen) PVOID pBuffer
|
|
);
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxeDhcpIsValid(
|
|
__in_bcount(uPacketLen) PVOID pPacket,
|
|
__in ULONG uPacketLen,
|
|
__in BOOL bRequestPacket,
|
|
__out_opt PBOOL pbPxeOptionPresent
|
|
);
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxeDhcpGetOptionValue(
|
|
__in_bcount(uPacketLen) PVOID pPacket,
|
|
__in ULONG uPacketLen,
|
|
__in ULONG uInstance,
|
|
__in BYTE bOption,
|
|
__out PBYTE pbOptionLen,
|
|
__out PVOID *ppOptionValue
|
|
);
|
|
|
|
DWORD
|
|
PXEAPI
|
|
PxeDhcpGetVendorOptionValue(
|
|
__in_bcount(uPacketLen) PVOID pPacket,
|
|
__in ULONG uPacketLen,
|
|
__in BYTE bOption,
|
|
__in ULONG uInstance,
|
|
__out PBYTE pbOptionLen,
|
|
__out PVOID *ppOptionValue
|
|
);
|
|
|
|
//
|
|
// Server Information
|
|
//
|
|
DWORD
|
|
PXEAPI
|
|
PxeGetServerInfo(
|
|
__in PXE_GSI_TYPE uInfoType,
|
|
__out_bcount(uBufferLen) PVOID pBuffer,
|
|
__in ULONG uBufferLen
|
|
);
|
|
|
|
//
|
|
// Ports for WDS PXE Server
|
|
//
|
|
#define PXE_DHCP_SERVER_PORT 67
|
|
#define PXE_DHCP_CLIENT_PORT 68
|
|
#define PXE_SERVER_PORT 4011
|
|
|
|
//
|
|
// PXE_DHCP_MESSAGE
|
|
//
|
|
#define PXE_DHCP_FILE_SIZE 128
|
|
#define PXE_DHCP_SERVER_SIZE 64
|
|
#define PXE_DHCP_HWAADR_SIZE 16
|
|
|
|
#define PXE_DHCP_MAGIC_COOKIE_SIZE 4
|
|
#define PXEDHCP_MAGIC_COOKIE (ULONG)0x63538263
|
|
|
|
//
|
|
// PXE_DHCP_OPTION
|
|
//
|
|
typedef struct tagPXE_DHCP_OPTION
|
|
{
|
|
BYTE OptionType;
|
|
BYTE OptionLength;
|
|
BYTE OptionValue[1];
|
|
} PXE_DHCP_OPTION, *PPXE_DHCP_OPTION;
|
|
|
|
typedef struct tagPXE_DHCP_MESSAGE
|
|
{
|
|
BYTE Operation;
|
|
BYTE HardwareAddressType;
|
|
BYTE HardwareAddressLength;
|
|
BYTE HopCount;
|
|
DWORD TransactionID;
|
|
WORD SecondsSinceBoot;
|
|
WORD Reserved;
|
|
ULONG ClientIpAddress;
|
|
ULONG YourIpAddress;
|
|
ULONG BootstrapServerAddress;
|
|
ULONG RelayAgentIpAddress;
|
|
BYTE HardwareAddress[PXE_DHCP_HWAADR_SIZE];
|
|
BYTE HostName[PXE_DHCP_SERVER_SIZE];
|
|
BYTE BootFileName[PXE_DHCP_FILE_SIZE];
|
|
|
|
union
|
|
{
|
|
BYTE bMagicCookie[PXE_DHCP_MAGIC_COOKIE_SIZE];
|
|
ULONG uMagicCookie;
|
|
};
|
|
|
|
PXE_DHCP_OPTION Option;
|
|
} PXE_DHCP_MESSAGE, *PPXE_DHCP_MESSAGE;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|