Регистрация для уведомления приложения
Приложение пользовательского режима вызывает функцию RegisterDeviceNotification , чтобы зарегистрировать себя, чтобы получать уведомления о динамическом добавлении процессора или модуля памяти в аппаратный раздел. Приложение вызывает функцию RegisterDeviceNotification два раза: один раз для регистрации для уведомления о событиях процессора и второй раз для регистрации уведомления о событиях памяти. Приложение указывает один из следующих идентификаторов GUID при регистрации для уведомления об этих событиях:
GUID_DEVICE_PROCESSOR
Регистрирует приложение для получения уведомлений при динамическом добавлении процессора в аппаратный раздел.
GUID_DEVICE_MEMORY
Регистрирует приложение для получения уведомлений о динамическом добавлении памяти в раздел оборудования.
Эти GUID определяются в файле заголовка Poclass.h.
В следующем примере кода показано, как зарегистрировать оба уведомления:
HWND hWnd;
DEV_BROADCAST_DEVICEINTERFACE ProcessorFilter;
DEV_BROADCAST_DEVICEINTERFACE MemoryFilter;
HDEVNOTIFY ProcessorNotifyHandle;
HDEVNOTIFY MemoryNotifyHandle;
// The following example assumes that hWnd already
// contains a handle to the application window that
// is to receive the WM_DEVICECHANGE messages.
// Initialize the filter for processor event notification
ZeroMemory(
&ProcessorFilter,
sizeof(ProcessorFilter)
);
ProcessorFilter.dbcc_size =
sizeof(DEV_BROADCAST_DEVICEINTERFACE);
ProcessorFilter.dbcc_devicetype =
DBT_DEVTYP_DEVICEINTERFACE;
ProcessorFilter.dbcc_classguid =
GUID_DEVICE_PROCESSOR;
// Register the application window to receive
// WM_DEVICECHANGE messages for processor events.
ProcessorNotifyHandle =
RegisterDeviceNotification(
hWnd,
&ProcessorFilter,
DEVICE_NOTIFY_WINDOW_HANDLE
);
// Initialize the filter for memory event notification
ZeroMemory(
&MemoryFilter,
sizeof(MemoryFilter)
);
MemoryFilter.dbcc_size =
sizeof(DEV_BROADCAST_DEVICEINTERFACE);
MemoryFilter.dbcc_devicetype =
DBT_DEVTYP_DEVICEINTERFACE;
MemoryFilter.dbcc_classguid =
GUID_DEVICE_MEMORY;
// Register the application's window to receive
// WM_DEVICECHANGE messages for memory events.
MemoryNotifyHandle =
RegisterDeviceNotification(
hWnd,
&MemoryFilter,
DEVICE_NOTIFY_WINDOW_HANDLE
);
Примечание Если приложение должно получать уведомления только о процессорах, ему не нужно регистрироваться для уведомления о событиях памяти. Аналогичным образом, если приложение должно получать уведомления только о памяти, ему не нужно регистрироваться для уведомления о событиях процессора.
Если приложению больше не нужно получать уведомления о событиях процессора или памяти, оно может отменить регистрацию окна от получения WM_DEVICECHANGE сообщений для этих событий, вызвав функцию UnregisterDeviceNotification . В следующем примере кода показано, как отменить регистрацию уведомлений приложения:
// Unregister the application window from receiving
// WM_DEVICECHANGE messages for processor events.
UnregisterDeviceNotification(ProcessorNotifyHandle);
// Unregister the application window from receiving
// WM_DEVICECHANGE messages for memory events.
UnregisterDeviceNotification(MemoryNotifyHandle);
Дополнительные сведения о функциях RegisterDeviceNotification и UnregisterDeviceNotification см. в документации по Microsoft Windows SDK.