共用方式為


使用 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 函式來取得已註冊提供者的索引,然後在指定較大或較小的索引值時註冊新的提供者。

  • 安裝可以在登錄提供者時傳回的登錄機碼下儲存提供者組態資訊。 登錄機碼的位址是由PxeProviderRegisterphProviderKey所接收。 提供者會收到這個與 hProviderKey 參數相同的金鑰控制碼至其 PxeProviderInitialize 回 呼。 提供者應該儲存此金鑰的位址。

  • 請一律在伺服器的 Program Files 資料夾中安裝提供者動態連結程式庫 (DLL) 。

Initialize

  • 在提供者中包含匯出 PxeProviderInitialize 回呼函式的 DLL。 每個提供者都需要 PxeProviderInitialize 回 呼。 當 WDS 載入提供者時,它會呼叫提供者的 PxeProviderInitialize 函式,並將控制碼傳遞給在提供者註冊期間用來儲存組態資訊的相同金鑰。
  • PxeProviderInitialize 回呼傳回且成功時,提供者應該完整初始化並準備好處理要求。
  • 在處理 PxeProviderInitialize 函式期間,註冊提供者中的每個回呼。 回呼應該向 PxeRegisterCallback 函式註冊。
  • PxeProviderInitialize 函式的處理中,初始化提供者的所有內部資源。

Shutdown

處理要求封包

實作提供者的 PxeProviderRecvRequest 回呼。 每個提供者都必須有 PxeProviderRecvRequest 回呼。 當 WDS 收到要求時,它會針對已註冊提供者清單中的第一個提供者呼叫 PxeProviderRecvRequest 回呼。

  • 如果提供者會同步處理此要求, PxeProviderRecvRequest 函式應該會傳回 值 ERROR_SUCCESS。 如果提供者會以非同步方式處理此要求, PxeProviderRecvRequest 回呼應該會 傳回ERROR_IO_PENDING ,並在處理要求時呼叫 PxeAsyncRecvDone 函式。

  • PxeProviderRecvRequest回呼和PxeAsyncRecvDone函式會傳回描述提供者處理要求之動作的PXE_BOOT_ACTION列舉位址。

    提供者有四種方式可以處理要求:

    • 提供者會以標準 DHCP 回應封包回復用戶端,其中包含網路開機程式的路徑。 傳回 列舉的PXE_BA_NBP 值表示提供者已成功處理要求封包,並藉由呼叫 PxePacketAllocatePxeSendReply 函式來傳送回應封包來完成要求。
    • 提供者會以不符合 DHCP 的自訂回應封包來回複用戶端。 傳回列舉 的PXE_BA_CUSTOM 值表示提供者已成功處理要求封包,並藉由呼叫 PxePacketAllocatePxeSendReply 函式來傳送自訂回應封包來完成要求。
    • 提供者決定應該忽略要求。 傳回列舉 的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函式會關閉已註冊提供者清單中的提供者列舉。

處理服務控制代碼

將追蹤專案新增至 PXE 記錄檔

  • PxeTrace函式會將追蹤專案新增至 PXE 記錄檔。 WDSPXE 提供追蹤,以協助系統管理員進行疑難排解。 提供者可以記錄不同嚴重性層級的追蹤專案。 系統管理員可以將 WDSPXE 設定為僅記錄特定嚴重性層級的專案。

關於 Windows 部署服務 API

使用 Windows 部署服務用戶端 API