初始化一般 I/O 目標

當驅動程式呼叫 WdfDeviceCreate時,架構會初始化裝置的驅動程式本機 I/O 目標。 若要擷取裝置本機 I/O 目標的控制碼,驅動程式會呼叫 WdfDeviceGetIoTarget

大部分驅動程式只會將要求傳送至其本機 I/O 目標。

若要初始化裝置的遠端 I/O 目標,驅動程式必須:

  1. 呼叫 WdfIoTargetCreate 以建立 I/O 目標物件。

  2. 呼叫 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;
    }