初始化一般 I/O 目標
當驅動程式呼叫 WdfDeviceCreate時,架構會初始化裝置的驅動程式本機 I/O 目標。 若要擷取裝置本機 I/O 目標的控制碼,驅動程式會呼叫 WdfDeviceGetIoTarget。
大部分驅動程式只會將要求傳送至其本機 I/O 目標。
若要初始化裝置的遠端 I/O 目標,驅動程式必須:
呼叫 WdfIoTargetCreate 以建立 I/O 目標物件。
呼叫 WdfIoTargetOpen 以開啟 I/O 目標,讓驅動程式可以傳送要求給它。
驅動程式呼叫 WdfIoTargetOpen時,通常會藉由提供代表 物件名稱的 Unicode 字串來識別遠端 I/O 目標。 此名稱可以識別裝置、檔案或裝置介面。 架構會將 I/O 要求傳送至支持對象名稱的驅動程式堆疊頂端。
驅動程式很少會藉由提供 Windows 驅動程式模型 (WDM) DEVICE_OBJECT 結構的指標來識別遠端 I/O 目標。 此指標會識別呼叫驅動程式堆疊內的不同驅動程式。 架構型驅動程式很少使用這項技術,因為它們很少可以存取其他驅動程式 DEVICE_OBJECT 結構。
下列範例示範 Ndisedge 範例驅動程式如何使用上述技術來建立和開啟遠端 I/O 目標:
status = WdfIoTargetCreate(Adapter->WdfDevice,
WDF_NO_OBJECT_ATTRIBUTES,
&Adapter->IoTarget);
if (!NT_SUCCESS(status)) {
DEBUGP(MP_ERROR, ("WdfIoTargetCreate failed 0x%x\n",
status));
return status;
}
WDF_IO_TARGET_OPEN_PARAMS_INIT_CREATE_BY_NAME(&openParams,
&fileName,
STANDARD_RIGHTS_ALL
);
status = WdfIoTargetOpen(Adapter->IoTarget,
&openParams);
if (!NT_SUCCESS(status)) {
DEBUGP(MP_ERROR, ("WdfIoTargetOpen failed 0x%x\n", status));
return status;
}