Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы использовать асинхронное уведомление драйвера, драйвер устройства реализует функции обратного вызова, которые операционная система вызывает при динамическом добавлении процессора или модуля памяти в аппаратный раздел. В следующем примере кода показаны прототипы для таких функций обратного вызова:
// Prototypes for the asynchronous
// notification callback functions
NTSTATUS
AsyncProcessorCallback(
IN PVOID NotificationStructure,
IN PVOID Context
);
NTSTATUS
AsyncMemoryCallback(
IN PVOID NotificationStructure,
IN PVOID Context
);
Драйвер устройства регистрирует асинхронное уведомление, вызывая функцию IoRegisterPlugPlayNotification по одному разу для каждой функции обратного вызова драйвера устройства, указывая указатель на один из следующих GUID для параметра EventCategoryData :
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
);