WdfIoTargetOpen 関数 (wdfiotarget.h)
[KMDF と UMDF に適用]
WdfIoTargetOpen メソッドは、ドライバーが I/O 要求を送信できるように、リモート I/O ターゲットを開きます。
構文
NTSTATUS WdfIoTargetOpen(
[in] WDFIOTARGET IoTarget,
[in] PWDF_IO_TARGET_OPEN_PARAMS OpenParams
);
パラメーター
[in] IoTarget
WdfIoTargetCreate の以前の呼び出しから取得された I/O ターゲット オブジェクトへのハンドル。
[in] OpenParams
呼び出し元によって割り当てられた WDF_IO_TARGET_OPEN_PARAMS 構造体へのポインター。
戻り値
操作が成功した場合、WdfIoTargetOpen はSTATUS_SUCCESSを返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。
リターン コード | 説明 |
---|---|
|
指定した I/O ターゲットは既に開いています。 |
|
使用可能なシステム リソースが、操作を完了するには不十分でした。 |
|
OpenParams が指定したWDF_IO_TARGET_OPEN_PARAMS構造体のサイズが正しくありません。 |
|
呼び出し元の WDF_IO_TARGET_OPEN_PARAMS 構造体の TargetFileObject メンバーが無効なファイル オブジェクトを指定しました。 |
|
無効なパラメーターが検出されました。 |
|
OpenParams パラメーターで識別されるデバイス名が見つかりません。 |
このメソッドは、他の NTSTATUS 値を返す場合もあります。
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
注釈
ドライバーは、 オブジェクト名 を表す Unicode 文字列を指定するか、Windows ドライバー モデル (WDM) DEVICE_OBJECT構造体へのポインターを指定することで、リモート I/O ターゲット を 開くことができます。 (フレームワーク ベースのドライバーには、通常、他のドライバーのDEVICE_OBJECT構造体へのポインターがありません)。
WdfIoTargetOpen を呼び出す前にデバイス インターフェイス名を取得するには、UMDF ドライバーは、インターフェイスの到着と削除の通知を登録するCM_Register_Notificationを呼び出す必要があります。 その後、インターフェイス通知コールバック ルーチンで受け取るインターフェイス シンボリック名を使用して、リモート ターゲットを開くことができます。 ハンドルが開いている間、ドライバーは引き続き削除通知をリッスンする必要があります。 ターゲット ドライバーが失敗した場合、UMDF ドライバーはハンドルを閉じる必要があります。
インターフェイスが既に存在する場合、UMDF ドライバーは CM_Get_Device_Interface_Listを呼び出す必要があります。必要なバッファー サイズを決定するために、最初 に CM_Get_Device_Interface_List_Size を呼び出す可能性があります。
ドライバーでローカル I/O ターゲットを使用する場合、ドライバーは WdfIoTargetOpen ではなく WdfDeviceGetIoTarget を呼び出す必要があります。
WdfIoTargetOpen の呼び出しが失敗した場合、ドライバーは WdfObjectDelete を呼び出して I/O ターゲット オブジェクトを削除する必要があります。
WdfIoTargetOpen の詳細については、「汎用 I/O ターゲットの初期化」を参照してください。
I/O ターゲットの詳細については、「 I/O ターゲットの使用」を参照してください。
例
次の例では、I/O ターゲット オブジェクトを作成し、 WDF_IO_TARGET_OPEN_PARAMS 構造体を初期化し、デバイスのシンボリック リンク名を指定してリモート I/O ターゲットを開きます。
WDF_OBJECT_ATTRIBUTES ioTargetAttrib;
WDFIOTARGET ioTarget;
WDF_IO_TARGET_OPEN_PARAMS openParams;
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
&ioTargetAttrib,
TARGET_DEVICE_INFO
);
status = WdfIoTargetCreate(
device,
&ioTargetAttrib,
&ioTarget
);
if (!NT_SUCCESS(status)) {
return status;
}
WDF_IO_TARGET_OPEN_PARAMS_INIT_OPEN_BY_NAME(
&openParams,
SymbolicLink,
STANDARD_RIGHTS_ALL
);
status = WdfIoTargetOpen(
ioTarget,
&openParams
);
if (!NT_SUCCESS(status)) {
WdfObjectDelete(ioTarget);
return status;
}
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.0 |
最小 UMDF バージョン | 2.0 |
Header | wdfiotarget.h (Wdf.h を含む) |
Library | Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 | DriverCreate(kmdf)、 KmdfIrql(kmdf)、 KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf) |