IoAttachDeviceToDeviceStack 함수(wdm.h)
IoAttachDeviceToDeviceStack 루틴은 호출자의 디바이스 개체를 체인에서 가장 높은 디바이스 개체에 연결하고 이전에 가장 높은 디바이스 개체에 대한 포인터를 반환합니다.
통사론
PDEVICE_OBJECT IoAttachDeviceToDeviceStack(
[in] PDEVICE_OBJECT SourceDevice,
[in] PDEVICE_OBJECT TargetDevice
);
매개 변수
[in] SourceDevice
호출자가 만든 디바이스 개체에 대한 포인터입니다.
[in] TargetDevice
IoGetDeviceObjectPointer대한 이전 호출에서 반환된 포인터와 같은 다른 드라이버의 디바이스 개체에 대한 포인터입니다.
반환 값
IoAttachDeviceToDeviceStackSourceDevice 연결된 디바이스 개체에 대한 포인터를 반환합니다. 반환된 디바이스 개체 포인터는 TargetDevice 위에 추가 드라이버가 겹쳐진 경우 TargetDevice 다를 수 있습니다.
IoAttachDeviceToDeviceStack 대상 디바이스가 언로드되어 디바이스 개체를 연결할 수 없는 경우 NULL 반환합니다.
발언
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) |