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를 보낼 수 있도록 드라이버 간에 계층을 설정합니다.
이 루틴은 초기화 중에 중간 드라이버에서 사용됩니다. 이러한 드라이버를 사용하면 원래 디바이스에 대한 모든 요청이 먼저 중간 드라이버에 제공되도록 자체 디바이스 개체를 다른 디바이스에 연결할 수 있습니다.
호출자는 계층화된 드라이버의 기존 체인 맨 위에만 계층화할 수 있습니다. IoAttachDevice는 TargetDevice 위에 계층화된 가장 높은 디바이스 개체를 검색하고 해당 개체(TargetDevice일 수 있습니다)에 연결합니다. 따라서 상위 수준이어야 하는 드라이버가 이미 대상 디바이스 위에 계층화된 경우 이 루틴을 호출해서는 안 됩니다.
스토리지 스택의 파일 시스템 드라이버 및 드라이버에 대해 IoAttachDevice 는 FILE_READ_ATTRIBUTES 사용하여 대상 디바이스를 연 다음 IoGetRelatedDeviceObject를 호출합니다. 이렇게 하면 파일 시스템이 탑재되지 않습니다. 따라서 IoAttachDevice 를 성공적으로 호출하면 파일 시스템 드라이버가 아닌 스토리지 드라이버의 디바이스 개체가 반환됩니다.
이 루틴은 SourceDevice의 AlignmentRequirement를 다음 하위 디바이스 개체의 값으로 설정하고 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) |