一般 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;
}