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