IoReportTargetDeviceChangeAsynchronous 함수(wdm.h)
IoReportTargetDeviceChangeAsynchronous 루틴은 PnP 관리자에게 디바이스에서 사용자 지정 이벤트가 발생했음을 알릴 수 있습니다.
구문
NTSTATUS IoReportTargetDeviceChangeAsynchronous(
[in] PDEVICE_OBJECT PhysicalDeviceObject,
[in] PVOID NotificationStructure,
[in, optional] PDEVICE_CHANGE_COMPLETE_CALLBACK Callback,
[in, out] PVOID Context
);
매개 변수
[in] PhysicalDeviceObject
보고되는 디바이스의 PDO에 대한 포인터입니다.
[in] NotificationStructure
사용자 지정 이벤트를 설명하는 호출자가 제공한 TARGET_DEVICE_CUSTOM_NOTIFICATION 구조체에 대한 포인터입니다. PnP 관리자는 이벤트 알림을 위해 등록된 드라이버에 이 구조를 보냅니다.
PnP 관리자가 단순 복사본을 만들고 복사본을 사용하여 드라이버에 알리기 때문에 이 호출자 제공 구조는 루틴이 반환되면 해제할 수 있습니다. 더 이상 필요하지 않은 경우 PnP 관리자가 복사본을 자동으로 해제합니다. 할당 풀 요구 사항에 대한 설명 섹션을 참조하세요.
NotificationStructure. FileObject 는 NULL이어야 합니다. NotificationStructure. 이벤트에는 이벤트에 대한 사용자 지정 GUID가 포함되어야 합니다. NotificationStructure의 다른 필드는 사용자 지정 이벤트에 맞게 채워야 합니다.
PnP 관리자는 NotificationStructure를 채웁니다. 등록자에게 알림을 보낼 때 FileObject 필드입니다.
[in, optional] Callback
필요에 따라 PnP 관리자가 이 사용자 지정 이벤트에 등록된 드라이버에 대한 알림을 완료한 후 호출하는 호출자 제공 루틴을 가리킵니다.
콜백 루틴의 형식은 다음과 같습니다.
typedef
VOID
(*PDEVICE_CHANGE_COMPLETE_CALLBACK)(
IN PVOID Context
);
디바이스 변경 완료 콜백 루틴은 차단해서는 안 되며 PnP 이벤트를 생성하는 동기 루틴을 호출해서는 안 됩니다.
PnP 관리자는 IRQL = PASSIVE_LEVEL 디바이스 변경 완료 콜백 루틴을 호출합니다.
[in, out] Context
필요에 따라 PnP 관리자가 콜백 루틴에 전달하는 호출자 제공 컨텍스트 구조를 가리킵니다. 호출자는 페이지가 없는 메모리에서 이 구조를 할당해야 합니다.
반환 값
반환 코드 | 설명 |
---|---|
STATUS_INVALID_DEVICE_REQUEST | 호출자가 시스템 PnP 이벤트(예: GUID_TARGET_DEVICE_QUERY_REMOVE)를 지정했습니다. 이 루틴은 사용자 지정 이벤트에만 사용됩니다. |
설명
IoReportTargetDeviceChangeAsynchronous 루틴이 PnP 관리자에게 디바이스에서 사용자 지정 이벤트가 발생했음을 알리면 루틴이 즉시 반환됩니다. PnP 관리자가 디바이스에서 알림을 위해 등록된 드라이버에 이벤트 알림을 보내는 동안 기다리지 않습니다. 이 루틴을 사용하여 GUID_TARGET_DEVICE_REMOVE_COMPLETE 같은 시스템 PnP 이벤트를 보고하지 마세요.
사용자 지정 디바이스 이벤트를 정의하는 드라이버는 IoReportTargetDeviceChangeAsynchronous 를 호출하여 PnP 관리자에게 사용자 지정 이벤트가 발생했음을 알릴 수 있습니다. 사용자 지정 알림은 볼륨 레이블 변경과 같은 이벤트에 사용할 수 있습니다.
사용자 지정 알림 구조에는 자체 GUID가 있는 드라이버 정의 이벤트가 포함됩니다. 드라이버 작성기는 Microsoft Windows SDK 포함된 Uuidgen.exe 또는 Guidgen.exe 사용하여 GUID를 생성할 수 있습니다.
드라이버가 이벤트, IRP_MN_REMOVE_DEVICE 또는 IRP_MN_SURPRISE_REMOVAL 처리하는 동안 이 루틴을 호출하는 경우 PnP 관리자는 드라이버가 반환되고 스택이 해제된 후 드라이버의 콜백 루틴을 호출합니다.
IoReportTargetDeviceChangeAsynchronous의 호출자는 IRQL <= DISPATCH_LEVEL 실행되어야 합니다. 드라이버 작성기가 IRQL = DISPATCH_LEVEL 이 루틴을 호출하는 경우 NotificationStructure 는 비페이지 메모리에서 할당되어야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL(주의 섹션 참조) |
DDI 규정 준수 규칙 | HwStorPortProhibitedDDIs(storport) |