Поделиться через


Регистрация для уведомления приложения

Приложение пользовательского режима вызывает функцию 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.