アプリケーションの通知登録
ユーザーモード アプリケーションは、プロセッサまたはメモリ モジュールがハードウェア パーティションに動的に追加されたときに通知されるように RegisterDeviceNotification 関数を呼び出して、自分自身を登録します。 アプリケーションは RegisterDeviceNotification 関数を 2 回呼び出します。1 回はプロセッサ イベントの通知を登録するためであり、もう 1 回はメモリ イベントの通知に登録するためです。 アプリケーションは、これらのイベントの通知に登録するときに、次のいずれかの 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
);
注: アプリケーションにプロセッサに関する通知のみを受け取る必要がある場合は、メモリ イベントの通知を登録する必要はありません。 同じく、アプリケーションにメモリに関する通知のみを受け取る必要がある場合は、プロセッサ イベントの通知を登録する必要はありません。
アプリケーションは、プロセッサ イベントやメモリ イベントの通知を受信する必要がなくなったら、UnregisterDeviceNotification 関数を呼び出して、これらのイベントの WM_DEVICECHANGE メッセージを受信しないようにウィンドウを登録解除できます。 次のコード サンプルは、アプリケーション通知の登録を解除する方法です。
// 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 のドキュメントを参照してください。