IoAttachDeviceToDeviceStack 함수(wdm.h)

IoAttachDeviceToDeviceStack 루틴은 호출자의 디바이스 개체를 체인의 가장 높은 디바이스 개체에 연결하고 이전에 가장 높은 디바이스 개체에 대한 포인터를 반환합니다.

구문

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

매개 변수

[in] SourceDevice

호출자가 만든 디바이스 개체에 대한 포인터입니다.

[in] TargetDevice

IoGetDeviceObjectPointer에 대한 이전 호출에서 반환된 포인터와 같은 다른 드라이버의 디바이스 개체에 대한 포인터입니다.

반환 값

IoAttachDeviceToDeviceStackSourceDevice 가 연결된 디바이스 개체에 대한 포인터를 반환합니다. TargetDevice에 추가 드라이버가 계층화된 경우 반환된 디바이스 개체 포인터가 TargetDevice와 다를 수 있습니다.

예를 들어 대상 디바이스가 언로드되고 있었기 때문에 디바이스 개체를 연결할 수 없는 경우 IoAttachDeviceToDeviceStackNULL을 반환합니다.

설명

IoAttachDeviceToDeviceStack 은 동일한 IRP가 체인의 각 드라이버에 전송되도록 드라이버 간에 계층을 설정합니다.

중간 드라이버는 초기화 중에 이 루틴을 사용하여 자체 디바이스 개체를 다른 드라이버의 디바이스 개체에 연결할 수 있습니다. TargetDevice로 전송된 후속 I/O 요청은 먼저 중간 드라이버로 전송됩니다.

이 루틴은 SourceDeviceAlignmentRequirement를 다음 하위 디바이스 개체의 값으로 설정하고 StackSize를 다음 하위 개체의 값과 1을 더한 값으로 설정합니다.

드라이버 작성기는 드라이버 위에 계층화해야 하는 드라이버 앞에 이 루틴을 호출하는 데 주의해야 합니다. IoAttachDeviceToDeviceStackSourceDevice 를 현재 체인에 계층화된 가장 높은 디바이스 개체에 연결하며 드라이버가 올바른 순서로 계층화되고 있는지 여부를 확인할 방법이 없습니다.

IoGetDeviceObjectPointer를 호출하여 대상 디바이스에 대한 포인터를 획득한 드라이버는 IoGetDeviceObjectPointer에서 반환한 파일 개체 포인터를 사용하여 ObDereferenceObject를 호출하여 파일 개체에 대한 참조를 해제해야 합니다(예: 이러한 상위 수준 드라이버가 언로드된 경우).

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 AddDevice(wdm), HwStorPortProhibitedDDIs(storport), PnpSameDeviceObject(wdm)

추가 정보

IoAttachDevice

IoDetachDevice

IoGetDeviceObjectPointer

ObDereferenceObject