英語で読む

次の方法で共有


IoAttachDevice 関数 (wdm.h)

IoAttachDevice ルーチンは、呼び出し元のデバイス オブジェクトを名前付きターゲット デバイス オブジェクトにアタッチし、ターゲット デバイスにバインドされた I/O 要求が最初に呼び出し元にルーティングされるようにします。

構文

NTSTATUS IoAttachDevice(
  [in]  PDEVICE_OBJECT  SourceDevice,
  [in]  PUNICODE_STRING TargetDevice,
  [out] PDEVICE_OBJECT  *AttachedDevice
);

パラメーター

[in] SourceDevice

呼び出し元によって作成されたデバイス オブジェクトへのポインター。

[in] TargetDevice

指定した SourceDevice がアタッチされるデバイス オブジェクトの名前を含むバッファーへのポインター。

[out] AttachedDevice

ポインターの呼び出し元によって割り当てられたストレージへのポインター。 添付ファイルが成功した場合、戻り値にはターゲット デバイス オブジェクトへのポインターが含まれます。

戻り値

IoAttachDevice は、次のいずれかの NTSTATUS 値を返すことができます。

備考

IoAttachDevice は、チェーン内の各ドライバーに同じ IRP を送信できるように、ドライバー間の階層化を確立します。

このルーチンは、初期化中に中間ドライバーによって使用されます。 これにより、このようなドライバーは、元のデバイスに対して行われているすべての要求が中間ドライバーに最初に与えられるように、別のデバイスに独自のデバイス オブジェクトをアタッチできます。

呼び出し元は、階層化されたドライバーの既存のチェーンの上部にのみ階層化できます。 IoAttachDevice は、TargetDevice に重なって最も高いデバイス オブジェクトを検索し、そのオブジェクト (TargetDevice) にアタッチします。 したがって、上位レベルである必要があるドライバーがターゲット デバイス上に既に階層化されている場合は、このルーチンを呼び出す必要があります。

ストレージ スタック内のファイル システム ドライバーとドライバーの場合、IoAttachDevice はターゲット デバイスをFILE_READ_ATTRIBUTESで開き、IoGetRelatedDeviceObject 呼び出します。 これにより、ファイル システムがマウントされることはありません。 したがって、IoAttachDevice 正常に呼び出されると、ファイル システム ドライバーではなく、ストレージ ドライバーのデバイス オブジェクトが返されます。

このルーチンは、SourceDeviceAlignmentRequirement を次の下位デバイス オブジェクトの値に設定し、StackSize を次の下位オブジェクトの値に 1 を加えた値に設定します。

警告

AttachedDevice は、ドライバーのデバイス拡張機能などのグローバル メモリの場所を指す必要があります。 IoAttachDevice ターゲット デバイスのファイル オブジェクトを開き、AttachedDevice 更新してアタッチを実行し、ファイル オブジェクトを閉じます。 したがって、ソース デバイスは、IoAttachDevice が返 前に、ファイル オブジェクトの IRP_MJ_CLEANUP および IRP_MJ_CLOSE 要求を受け取ります。 ドライバーは、ターゲット デバイスにこれらの要求を転送する必要があります、AttachedDevice は、ドライバーの DispatchCleanupDispatchClose ルーチンにアクセスできるメモリの場所である必要があります。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 する HwStorPortProhibitedDDIs(storport), IrqlIoPassive1(wdm)

関連項目

DEVICE_OBJECT

IoAttachDeviceToDeviceStack

IoAttachDeviceToDeviceStackSafe

IoCreateDevice

IoDetachDevice

IoGetRelatedDeviceObject