在函式驅動程式中建立裝置物件
每個 函式驅動程式 都會為其系統上每個支援的裝置建立架構裝置物件。 由於這些裝置物件是由函式驅動程式所建立,因此稱為功能性裝置物件 (FDO)。 每個 FDO 都是函式驅動程式的裝置表示法。
每當框架呼叫驅動程式的 EvtDriverDeviceAdd 回呼函式時,函式驅動程式必須建立一個框架裝置物件。 架構會呼叫此回呼函式,通知驅動程式其其中一個支援的裝置存在於系統上。
驅動程式的 EvtDriverDeviceAdd 回呼函式會接收 WDFDEVICE_INIT 結構的指標。 驅動程式可以呼叫一組 架構裝置物件初始化方法,該方法會將資訊儲存在WDFDEVICE_INIT結構中。 此外,函式驅動程式可以呼叫 架構 FDO 初始化方法。
在函式驅動程式中建立架構裝置物件通常包含下列步驟:
註冊 PnP、電源和電源原則回呼函式。
大部分的函式驅動程序都會呼叫 WdfDeviceInitSetPnpPowerEventCallbacks 來註冊 PnP 和電源回呼函式。 如需這些回呼函式的詳細資訊,請參閱 在函式驅動程式中支援 PnP 和電源管理。
如果裝置支援低功率閑置或具有喚醒功能,函式驅動程式通常也會呼叫 WdfDeviceInitSetPowerPolicyEventCallbacks 來註冊電源原則回呼函式。 如需這些回呼函式的詳細資訊,請參閱 Power Policy Ownership。
註冊特定於功能驅動程式的回呼函式。
某些功能驅動程式如果必須參與指定裝置所需的系統硬體資源時,會呼叫 WdfFdoInitSetEventCallbacks。 如需硬體資源的詳細資訊,請參閱 Framework-Based 驅動程式的硬體資源。
註冊檔案事件回呼函式。
如果您的驅動程式必須在應用程式開啟或關閉裝置上的檔案時回應,驅動程式必須呼叫 WdfDeviceInitSetFileObjectConfig 來註冊架構檔案物件的回呼函式。 如需詳細資訊,請參閱 使用 Framework 檔案物件。
設定 I/O 要求屬性。
如果您的驅動程式會收到來自架構佇列物件的 I/O 要求,驅動程式可以呼叫 WdfDeviceInitSetRequestAttributes 來設定架構將指派給裝置要求對象的內容記憶體。 如需詳細資訊,請參閱 使用要求對象內容。
設定裝置特性。
一般而言,函式驅動程式會呼叫下列其中一些方法來指定裝置的特性:
- WdfDeviceInitSetDeviceType,用來識別驅動程式支援的硬體類型。
- 如果驅動程式處理來自應用程式的 I/O 要求,則 WdfDeviceInitSetIoType 會識別用來存取數據緩衝區的方法。
- WdfDeviceInitSetCharacteristics 可設定裝置特性,例如裝置是只讀還是支援抽取式媒體。
- 當裝置需要由一個應用程式獨佔存取時,使用 WdfDeviceInitSetExclusive。
- WdfDeviceInitSetPowerInrush,如果裝置從低功率狀態(如從其他 D 標準)轉換為其工作(D0)狀態時需要電流衝入。
- WdfDeviceInitSetPowerPageable 或 WdfDeviceInitSetPowerNotPageable,以表示驅動程式是否必須在系統於睡眠狀態與S0工作狀態間轉換時存取可分頁的資料。
- WdfDeviceInitAssignName,將名稱指派給裝置物件。
- WdfDeviceInitAssignSDDLString,將安全性描述元指派給裝置物件。
- WdfDeviceInitSetDeviceClass,用來識別裝置的安裝類別。
取得裝置屬性。
有時候,函式驅動程序必須取得裝置總線或其他較低層級驅動程式所設定之裝置屬性的相關信息。 驅動程式可以呼叫 WdfFdoInitQueryProperty 或 WdfFdoInitAllocAndQueryProperty 以取得此資訊。 以 Windows 8.1 和更新版本為目標的新驅動程式可以呼叫 WdfFdoInitQueryPropertyEx 和 WdfFdoInitAllocAndQueryPropertyEx。
存取裝置的登錄機碼。
某些函式驅動程序必須取得另一個驅動程式、使用者或安裝套件在登錄中放置之裝置或驅動程式的相關信息。 驅動程式可以呼叫 WdfFdoInitOpenRegistryKey 來開啟裝置或驅動程式的登錄機碼。 如需詳細資訊,請參閱 在 Framework-Based 驅動程式中使用登錄。
建立要用於動態列舉的預設子清單組態。
如果您要為總線撰寫功能驅動程式,而且您的驅動程式將動態列舉連接到總線的子裝置,則驅動程式必須呼叫 WdfFdoInitSetDefaultChildListConfig。 如需詳細資訊,請參閱 列舉總線上的裝置。
建立裝置物件。
建立裝置物件的最後一個步驟是呼叫 WdfDeviceCreate。