次の方法で共有


IoAttachDeviceToDeviceStackSafe 関数 (ntddk.h)

IoAttachDeviceToDeviceStackSafe ルーチンは、呼び出し元のデバイス オブジェクトをドライバー スタック内の最上位のデバイス オブジェクトにアタッチします。

構文

NTSTATUS IoAttachDeviceToDeviceStackSafe(
  [in]  PDEVICE_OBJECT SourceDevice,
  [in]  PDEVICE_OBJECT TargetDevice,
  [out] PDEVICE_OBJECT *AttachedToDeviceObject
);

パラメーター

[in] SourceDevice

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

[in] TargetDevice

SourceDevice オブジェクトがアタッチされるスタック内のデバイス オブジェクトへのポインター。

[out] AttachedToDeviceObject

入力時に、このパラメーター SourceDevice->DeviceExtension->AttachedToDeviceObjectのアドレスを指定します。これには、NULL ポインターを含める必要があります。 出力時に、このパラメーターは、SourceDevice がアタッチされたデバイス オブジェクトへのポインターを受け取ります。

戻り値

TargetDeviceの上 SourceDevice が正常にアタッチされた場合、IoAttachDeviceToDeviceStackSafe はSTATUS_SUCCESSを返します。それ以外の場合は、STATUS_NO_SUCH_DEVICEを返します。

備考

IoAttachDeviceToDeviceStackと同様に、IoAttachDeviceToDeviceStackSafe は、同じ IRP がスタック内の各ドライバーに送信されるように、ドライバー間の階層化を確立します。 ただし、IoAttachDeviceToDeviceStackとは異なり、IoAttachDeviceToDeviceStackSafe には、SourceDevice オブジェクトの AttachedToDeviceObject フィールドのアドレスを渡すためにフィルター ドライバーが使用する AttachedToDeviceObject 追加のパラメーターがあります。 IoAttachDeviceToDeviceStackSafe 、I/O システム データベース ロックを保持しながらこのフィールドを更新します。 このロックを保持するため、IoAttachDeviceToDeviceStackSafe は、SourceDevice オブジェクトが AttachedToDeviceObject フィールドが更新される前に IRP を受け取った場合に発生する可能性がある競合状態を回避します。

ファイル システム フィルター ドライバー IoAttachDeviceToDeviceStackSafe を呼び出して、ファイル システムまたは別のフィルター ドライバーに属するデバイス オブジェクト (TargetDevice) の上に独自のフィルター デバイス オブジェクト (SourceDevice) をアタッチします。 AttachedToDeviceObject に送信された後続の I/O 要求は、最初にフィルター ドライバーによって受信されます。この要求は、それらを処理し、IoCallDriver 呼び出してスタック内の次のドライバーに転送します。

TargetDevice で指定されたデバイス オブジェクトが現在ドライバー スタックの一番上にある場合、SourceDeviceTargetDeviceに直接接続されます。 この場合、TargetDevice し、返される AttachedToDeviceObject ポインターは等しくなります。

ドライバー スタック内の TargetDevice の上に既に 1 つ以上のフィルター デバイス オブジェクトがアタッチされている場合は、IoAttachDeviceToDeviceStackSafe SourceDevice を最上位のフィルター デバイス オブジェクトにアタッチします。 後者へのポインターは、AttachedToDeviceObjectで返されます。

スタックの上部にアタッチされた直後に、SourceDevice がドライバー スタックの最上位を占有します。 ただし、これは必ずしも SourceDevice がドライバー スタックの一番上に残ることを意味するわけではないことに注意してください。 他のフィルターでは、独自のフィルター デバイス オブジェクトをスタック内の SourceDevice の上にアタッチできます。

IoAttachDeviceToDeviceStackSafe SourceDevice が指すデバイス オブジェクトの AlignmentRequirement メンバーを、次の下位デバイス オブジェクトの対応する値に設定し、SourceDeviceStackSize を次の下位オブジェクトの値に設定します。

必要条件

要件 価値
サポートされる最小クライアント このルーチンは、Windows 2000 Service Pack 4 (SP4) および Windows XP 以降の更新プログラムのロールアップで使用できます。
ターゲット プラットフォーム 万国
ヘッダー ntddk.h (Ntddk.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 する hwStorPortProhibitedDDDIs(storport) する

関連項目

IoAttachDeviceToDeviceStack

IoCallDriver