次の方法で共有


IoAttachDeviceToDeviceStack 関数 (wdm.h)

IoAttachDeviceToDeviceStack ルーチンは、呼び出し元のデバイス オブジェクトをチェーン内の最も高いデバイス オブジェクトにアタッチし、以前に最も高いデバイス オブジェクトへのポインターを返します。

構文

PDEVICE_OBJECT IoAttachDeviceToDeviceStack(
  [in] PDEVICE_OBJECT SourceDevice,
  [in] PDEVICE_OBJECT TargetDevice
);

パラメーター

[in] SourceDevice

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

[in] TargetDevice

IoGetDeviceObjectPointerの前の呼び出しによって返されるポインターなど、別のドライバーのデバイス オブジェクトへのポインター。

戻り値

IoAttachDeviceToDeviceStack は、SourceDevice がアタッチされたデバイス オブジェクトへのポインターを返します。 返されるデバイス オブジェクト ポインターは、TargetDevice の上に追加のドライバーが重なっていた場合、TargetDevice とは異なる場合があります。

IoAttachDeviceToDeviceStack 、ターゲット デバイスがアンロードされていたためにデバイス オブジェクトをアタッチできなかった場合、NULL を返します。

備考

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

中間ドライバーは、初期化中にこのルーチンを使用して、別のドライバーのデバイス オブジェクトに独自のデバイス オブジェクトをアタッチできます。 TargetDevice に送信された後続の I/O 要求は、最初に中間ドライバーに送信されます。

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

ドライバーライターは、ドライバーの上に重ねて表示する必要があるドライバーを する前に、このルーチン を呼び出す必要があります。 IoAttachDeviceToDeviceStack は、SourceDevice をチェーン内で現在レイヤー化されている最も高いデバイス オブジェクトにアタッチし、ドライバーが正しい順序で階層化されているかどうかを判断する方法はありません。

IoGetDeviceObjectPointer 呼び出してターゲット デバイスへのポインターを取得したドライバーは、IoGetDeviceObjectPointer によって返されたファイル オブジェクト ポインターを使用して、ObDereferenceObject を呼び出して、ファイル オブジェクトへの参照を解放する必要があります(たとえば、上位レベルのドライバーがアンロードされたときなど)。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 以降で使用できます。
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 する AddDevice(wdm)HwStorPortProhibitedDDDIs(storport), pnpSameDeviceObject(wdm)

関連項目

IoAttachDevice

IoDetachDevice

IoGetDeviceObjectPointer

ObDereferenceObject