Registrera dig för programmeddelande

Ett användarlägesprogram anropar funktionen RegisterDeviceNotification för att registrera sig för att meddelas när en processor eller minnesmodul läggs till dynamiskt i maskinvarupartitionen. Ett program anropar funktionen RegisterDeviceNotification två gånger, en gång för att registrera sig för meddelande om processorhändelser och en andra gång för att registrera sig för meddelande om minneshändelser. Programmet anger ett av följande GUID:er när det registreras för meddelande om dessa händelser:

GUID_DEVICE_PROCESSOR
Registrerar programmet som ska meddelas när en processor läggs till dynamiskt i maskinvarupartitionen.

GUID_DEVICE_MEMORY
Registrerar programmet som ska meddelas när minnet läggs till dynamiskt i maskinvarupartitionen.

Dessa GUID:er definieras i huvudfilen Poclass.h.

Följande kodexempel visar hur du registrerar dig för båda meddelandena:

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
    );

Not Om ett program bara behöver meddelas om processorer behöver det inte registrera sig för meddelanden om minneshändelser. På samma sätt, om ett program bara behöver meddelas om minne, behöver det inte registrera sig för meddelande om processorhändelser.

När ett program inte längre behöver ta emot meddelanden om processor- eller minneshändelser kan det avregistrera fönstret från att ta emot WM_DEVICECHANGE meddelanden för dessa händelser genom att anropa funktionen UnregisterDeviceNotification . Följande kodexempel visar hur du avregistrerar för programaviseringar:

// 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);

Mer information om funktionerna RegisterDeviceNotification och UnregisterDeviceNotification finns i Microsoft Windows SDK-dokumentationen.