次の方法で共有


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 は、ドライバーの DispatchCleanup ルーチンと DispatchClose ルーチンからアクセスできるメモリの場所である必要があります。

要件

要件
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 HwStorPortProhibitedDDIs(storport), IrqlIoPassive1(wdm)

こちらもご覧ください

DEVICE_OBJECT

IoAttachDeviceToDeviceStack

IoAttachDeviceToDeviceStackSafe

IoCreateDevice

IoDetachDevice

IoGetRelatedDeviceObject