다음을 통해 공유


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. FileObjectNULL이어야 합니다. 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)

추가 정보

IoReportTargetDeviceChange

TARGET_DEVICE_CUSTOM_NOTIFICATION