次の方法で共有


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を返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。

リターン コード 説明
STATUS_INVALID_DEVICE_STATE
指定した I/O ターゲットは既に開いています。
STATUS_INSUFFICIENT_RESOURCES
使用可能なシステム リソースが、操作を完了するには不十分でした。
STATUS_INFO_LENGTH_MISMATCH
OpenParams が指定したWDF_IO_TARGET_OPEN_PARAMS構造体のサイズが正しくありません。
STATUS_NO_SUCH_DEVICE
呼び出し元の WDF_IO_TARGET_OPEN_PARAMS 構造体の TargetFileObject メンバーが無効なファイル オブジェクトを指定しました。
STATUS_INVALID_PARAMETER
無効なパラメーターが検出されました。
STATUS_NOT_FOUND
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)

こちらもご覧ください

DEVICE_OBJECT

WDF_IO_TARGET_OPEN_PARAMS

WdfDeviceGetIoTarget

WdfIoTargetClose

WdfIoTargetCreate

WdfIoTargetOpen

WdfObjectDelete