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 를 성공적으로 호출하면 파일 시스템 드라이버가 아닌 스토리지 드라이버의 디바이스 개체가 반환됩니다.

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

경고

AttachedDevice는 드라이버의 디바이스 확장과 같은 전역 메모리 위치를 가리킵니다. IoAttachDevice 는 대상 디바이스에 대한 파일 개체를 열고 AttachedDevice를 업데이트하고 연결을 수행한 다음 파일 개체를 닫습니다. 따라서 원본 디바이스는 IoAttachDevice가 반환되기 전에 파일 개체에 대한 IRP_MJ_CLEANUP 및 IRP_MJ_CLOSE 요청을 받습니다. 드라이버는 이러한 요청을 대상 디바이스에 전달해야 하며 AttachedDevice는 드라이버의 DispatchCleanupDispatchClose 루틴에 액세스할 수 있는 메모리 위치여야 합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), IrqlIoPassive1(wdm)

추가 정보

DEVICE_OBJECT

IoAttachDeviceToDeviceStack

IoAttachDeviceToDeviceStackSafe

IoCreateDevice

IoDetachDevice

IoGetRelatedDeviceObject