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를 체인의 각 드라이버에 보낼 수 있도록 드라이버 간에 계층을 설정합니다.
이 루틴은 초기화 중에 중간 드라이버에서 사용됩니다. 이러한 드라이버는 원래 디바이스에 대해 수행되는 모든 요청이 먼저 중간 드라이버에 부여되는 방식으로 다른 디바이스에 자체 디바이스 개체를 연결할 수 있습니다.
호출자는 계층화된 드라이버의 기존 체인 맨 위에만 계층화할 수 있습니다. IoAttachDeviceTargetDevice 계층화된 가장 높은 디바이스 개체를 검색하고 해당 개체(TargetDevice수)에 연결합니다. 따라서 상위 수준이어야 하는 드라이버가 이미 대상 디바이스를 통해 계층화된 경우 이 루틴을 호출해서는 안 됩니다.
스토리지 스택의 파일 시스템 드라이버 및 드라이버의 경우 IoAttachDevice FILE_READ_ATTRIBUTES 대상 디바이스를 연 다음 IoGetRelatedDeviceObject호출합니다. 이렇게 하면 파일 시스템이 탑재되지 않습니다. 따라서 IoAttachDevice 성공적으로 호출하면 파일 시스템 드라이버가 아닌 스토리지 드라이버의 디바이스 개체가 반환됩니다.
이 루틴은 SourceDeviceAlignmentRequirement 다음 하위 디바이스 개체의 값으로 설정하고 StackSize 다음 하위 개체의 값에 1을 더한 값으로 설정합니다.
경고
AttachedDevice 드라이버의 디바이스 확장과 같은 전역 메모리 위치를 가리킵니다. IoAttachDevice 대상 디바이스에 대한 파일 개체를 열고, AttachedDevice 업데이트하고, 연결을 수행한 다음, 파일 개체를 닫습니다. 따라서 원본 디바이스는 IoAttachDevice 반환하기 전에 파일 개체에 대한 IRP_MJ_CLEANUP 및 IRP_MJ_CLOSE 요청을 받습니다. 드라이버는 이러한 요청을 대상 디바이스에 전달해야 하며, AttachedDevice 드라이버의 DispatchCleanup 및 DispatchClose 루틴에 액세스할 수 있는 메모리 위치여야 합니다.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 규정 준수 규칙 | HwStorPortProhibitedDDIs(storport), IrqlIoPassive1(wdm) |