使用 Windows 部署服務伺服器 API
在無法使用標準 Windows 部署服務 (WDS) 解決方案的環境中,WDS 伺服器會公開 API,讓開發人員能夠撰寫稱為提供者的外掛程式,以處理 PXE (PXE) 要求的預先啟動執行環境。 撰寫適用于 WDS 的 PXE 提供者時,開發人員應遵守下列指導方針。
在伺服器上安裝 WDS 角色
- Windows 部署服務 (WDS) 是遠端安裝服務 (RIS) 的修訂版本,您需要 WDS 伺服器角色來實作 WDS PXE 伺服器和提供者。
- WDS 會以 Windows Server 2008 和 Windows Server 2003 Service Pack 2 (SP2) 取代為標準元件。
- 您必須使用 Service Pack 1 (SP1) ,將 RIS 伺服器更新為 Windows Server 2003 上的 WDS。 您可以使用 Windows 自動化安裝套件 (一) 來 安裝 WDS 伺服器角色。
註冊提供者
在安裝期間註冊提供者動態連結程式庫 (DLL) ,並將提供者插入已註冊提供者的已排序清單中。
注意
當您安裝新的或修改過的提供者時,您必須重新開機 WDS PXE 服務,變更才會生效。
使用 PxeProviderRegister 函式來註冊提供者,並將其新增至清單。 使用 PxeProviderUnRegister 函 式來取消註冊已註冊的提供者,並將它從清單中移除。
在排序清單中指定提供者的順序。 無法保證清單中的提供者索引,因為之後可能會先註冊另一個提供者。 若要在另一個已註冊的提供者之前或之後于清單中插入提供者,請先使用 PxeProviderQueryIndex 函式來取得已註冊提供者的索引,然後在指定較大或較小的索引值時註冊新的提供者。
安裝可以在登錄提供者時傳回的登錄機碼下儲存提供者組態資訊。 登錄機碼的位址是由PxeProviderRegister的phProviderKey所接收。 提供者會收到這個與 hProviderKey 參數相同的金鑰控制碼至其 PxeProviderInitialize 回 呼。 提供者應該儲存此金鑰的位址。
請一律在伺服器的 Program Files 資料夾中安裝提供者動態連結程式庫 (DLL) 。
Initialize
- 在提供者中包含匯出 PxeProviderInitialize 回呼函式的 DLL。 每個提供者都需要 PxeProviderInitialize 回 呼。 當 WDS 載入提供者時,它會呼叫提供者的 PxeProviderInitialize 函式,並將控制碼傳遞給在提供者註冊期間用來儲存組態資訊的相同金鑰。
- 當 PxeProviderInitialize 回呼傳回且成功時,提供者應該完整初始化並準備好處理要求。
- 在處理 PxeProviderInitialize 函式期間,註冊提供者中的每個回呼。 回呼應該向 PxeRegisterCallback 函式註冊。
- 在 PxeProviderInitialize 函式的處理中,初始化提供者的所有內部資源。
Shutdown
- 實作 PxeProviderShutdown 回 呼。 每個提供者都必須有 PxeProviderShutdown回呼。
- PxeProviderShutdown回呼函式應該完全關閉提供者並釋放其所有資源。
- 在 PxeProviderShutdown回呼傳回之後,傳遞至PxeProviderInitialize函式的hProvider控制碼已不再有效,不應用來呼叫 WDS。
- 在PxeProviderInitialize回呼處理期間,使用PXE_CALLBACK_SHUTDOWN呼叫PxeRegisterCallback函式,以註冊PxeProviderShutdown回呼。 如果PxeProviderInitialize函式失敗,請勿呼叫PxeProviderShutdown回呼。
處理要求封包
實作提供者的 PxeProviderRecvRequest 回呼。 每個提供者都必須有 PxeProviderRecvRequest 回呼。 當 WDS 收到要求時,它會針對已註冊提供者清單中的第一個提供者呼叫 PxeProviderRecvRequest 回呼。
如果提供者會同步處理此要求, PxeProviderRecvRequest 函式應該會傳回 值 ERROR_SUCCESS。 如果提供者會以非同步方式處理此要求, PxeProviderRecvRequest 回呼應該會 傳回ERROR_IO_PENDING ,並在處理要求時呼叫 PxeAsyncRecvDone 函式。
PxeProviderRecvRequest回呼和PxeAsyncRecvDone函式會傳回描述提供者處理要求之動作的PXE_BOOT_ACTION列舉位址。
提供者有四種方式可以處理要求:
- 提供者會以標準 DHCP 回應封包回復用戶端,其中包含網路開機程式的路徑。 傳回 列舉的PXE_BA_NBP 值表示提供者已成功處理要求封包,並藉由呼叫 PxePacketAllocate 和 PxeSendReply 函式來傳送回應封包來完成要求。
- 提供者會以不符合 DHCP 的自訂回應封包來回複用戶端。 傳回列舉 的PXE_BA_CUSTOM 值表示提供者已成功處理要求封包,並藉由呼叫 PxePacketAllocate 和 PxeSendReply 函式來傳送自訂回應封包來完成要求。
- 提供者決定應該忽略要求。 傳回列舉 的PXE_BA_IGNORE 值表示提供者已釋放與要求相關聯的所有資源,而且要求不會傳遞至已註冊提供者清單中的下一個提供者。 如果提供者偵測到要求封包無效,則可能會使用此選項。
- 提供者拒絕服務要求。 傳回 列舉的PXE_BA_REJECT 值會指示系統將要求傳遞給已註冊提供者清單中的下一個提供者。 如果這是清單中的最後一個提供者,這會釋放與要求相關聯的所有資源,並忽略要求。
- 在PxeProviderInitialize回呼處理期間,使用PXE_CALLBACK_RECV_REQUEST呼叫PxeRegisterCallback函式,以註冊PxeProviderRequest回呼。
產生回應封包
- 使用 API 來寫入提供者來處理 DHCP 要求並產生回應封包。
- PxeProviderSetAttribute函式會指定提供者用來篩選封包的屬性。 您可以指定提供者的屬性,讓提供者看到所有封包、提供者只會看到 DHCP 封包,或提供者只會看到指定 DHCP 廠商類別識別碼選項的 DHCP 封包, (60) 為 「PXEClient」。
- PxeDhcpIsValid函式會檢查封包是否為有效的 DHCP 封包。 當使用PxeProviderSetAttribute 函式設定的篩選設定為 PxeProviderSetAttribute函式時,提供者可以使用PxeDhcpIsValid函式來檢查來自用戶端的封包是否為 DHCP 封包。
- PxeDhcpInitialize函式會將回應封包初始化為 DHCP 回復封包,該封包是以從用戶端接收的封包中的資訊為基礎。 PxeProviderInitialize函式會採用PxeProviderRecvRequest回呼中從用戶端接收的有效 DHCP 封包位址。 PxeDhcpInitialize函式會使用PxePacketAllocate函式所配置的回復封包指標。
- PxeDhcpGetOptionValue函式會從 DHCP 封包擷取選項值。 PxeDhcpGetVendorOptionValue函式會從 DHCP 封包的 [廠商特定資訊] 欄位擷取選項值 (43) 。
- 提供者接著可以將資訊填入回復封包,並使用 PxeSendReply 函式將回復封包傳送至用戶端。 PxeDhcpAppendOption函式會將 DHCP 選項附加至回復封包。
- 藉由傳送封包來回複用戶端要求的提供者,必須使用 PxePacketAllocate 函式來配置回應封包。 提供者接著可以將資訊填入回復封包,並使用 PxeSendReply 函式將回復封包傳送至用戶端。
- 當不再需要配置的記憶體時,提供者應該使用 PxePacketFree 函式來釋放它。
列舉已註冊的提供者
- 使用 API 來撰寫列舉及檢查清單中其他已註冊提供者的提供者。
- PxeGetServerInfo函式會傳回 PXE 伺服器的相關資訊。 PxeGetServerInfo函式會傳回BOOL,指出是否啟用伺服器的追蹤。 TRUE 表示已啟用追蹤。
- PxeProviderEnumFirst函式會在已註冊的提供者清單中啟動列舉提供者。 PxeProviderEnumFirst函式會啟動列舉,並傳回呼叫PxeProviderEnumNext函式時應該使用的控制碼位址。 PxeProviderEnumNext函式會傳回包含提供者相關資訊的PXE_PROVIDER結構。 PxeProviderFreeInfo 函式會釋放PxeProviderEnumNext函式為PXE_PROVIDER結構配置的記憶體。 PxeProviderEnumClose函式會關閉已註冊提供者清單中的提供者列舉。
處理服務控制代碼
- 收到服務控制訊息時,WDS 會呼叫 PxeProviderServiceControl 回 呼。
- 提供者可以定義 PxeProviderServiceControl 回呼函式來處理服務控制訊息。
- 在PxeProviderInitialize回呼處理期間,使用PXE_CALLBACK_SERVICE_CONTROL呼叫PxeRegisterCallback函式,以註冊PxeProviderServiceControl回呼。
將追蹤專案新增至 PXE 記錄檔
- PxeTrace函式會將追蹤專案新增至 PXE 記錄檔。 WDSPXE 提供追蹤,以協助系統管理員進行疑難排解。 提供者可以記錄不同嚴重性層級的追蹤專案。 系統管理員可以將 WDSPXE 設定為僅記錄特定嚴重性層級的專案。
相關主題