다음을 통해 공유


비동기 드라이버 알림 등록

비동기 드라이버 알림을 사용하기 위해 디바이스 드라이버는 하드웨어 파티션에 프로세서 또는 메모리 모듈을 동적으로 추가할 때 운영 체제에서 호출하는 콜백 함수를 구현합니다. 다음 코드 예제에서는 이러한 콜백 함수에 대한 프로토타입을 보여 줍니다.

// Prototypes for the asynchronous
// notification callback functions
NTSTATUS
  AsyncProcessorCallback(
    IN PVOID NotificationStructure,
    IN PVOID Context
    );

NTSTATUS
  AsyncMemoryCallback(
    IN PVOID NotificationStructure,
    IN PVOID Context
    );

디바이스 드라이버는 각 디바이스 드라이버의 콜백 함수에 대해 IoRegisterPlugPlayNotification 함수를 한 번 호출하고 EventCategoryData 매개 변수에 대해 다음 GUID 중 하나에 대한 포인터를 지정하여 비동기 알림을 등록합니다.

GUID_DEVICE_PROCESSOR
프로세서가 하드웨어 파티션에 동적으로 추가될 때 알림을 받도록 등록합니다.

GUID_DEVICE_MEMORY
메모리가 하드웨어 파티션에 동적으로 추가될 때 알림을 받도록 등록합니다.

이러한 GUID는 헤더 파일 Poclass.h에 정의되어 있습니다.

다음 코드 예제에서는 두 알림 모두에 등록하는 방법을 보여 줍니다.

PVOID ProcessorNotificationEntry;
PVOID MemoryNotificationEntry;
NTSTATUS Status;

Status =
  IoRegisterPlugPlayNotification(
    EventCategoryDeviceInterfaceChange,
    0,
    &GUID_DEVICE_PROCESSOR,
    DriverObject,
    AsyncProcessorCallback,
    NULL,
    &ProcessorNotificationEntry
    );

Status =
  IoRegisterPlugPlayNotification(
    EventCategoryDeviceInterfaceChange,
    0,
    &GUID_DEVICE_MEMORY,
    DriverObject,
    AsyncMemoryCallback,
    NULL,
    &MemoryNotificationEntry
    );

참고 디바이스 드라이버가 프로세서에 대해서만 알림을 수신해야 하는 경우 메모리에 대한 콜백 함수를 구현하거나 메모리에 대한 알림을 등록할 필요가 없습니다. 마찬가지로 디바이스 드라이버에 메모리에 대한 알림만 있어야 하는 경우 프로세서에 대한 콜백 함수를 구현하거나 프로세서에 대한 알림을 등록할 필요가 없습니다.

디바이스 드라이버가 언로드될 때와 같은 비동기 드라이버 알림 수신을 중지해야 하는 경우 IoUnregisterPlugPlayNotification 함수를 호출하여 각 콜백 함수의 등록을 취소해야 합니다. 다음 코드 예제에서는 콜백 함수의 등록을 취소하는 방법을 보여 줍니다.

// Unregister for asynchronous notifications
Status =
  IoUnregisterPlugPlayNotification(
    ProcessorNotificationEntry
    );

Status =
  IoUnregisterPlugPlayNotification(
    MemoryNotificationEntry
    );