Функции управления устройствами Windows «предоставляют способ единообразного уведомления всех приложений и компонентов системы об изменениях, которые могут повлиять на их работу или доступ к ресурсам».
У меня есть служба, которая должна предоставлять уведомления об определенных событиях любым заинтересованным приложениям и службам. Этот API выглядит идеально подходящим, потому что заинтересованные приложения / службы могут выбрать получение широковещательных сообщений с помощью RegisterDeviceNotification (), и отправителю не нужно вести список клиентов.
Тип события DBT_CUSTOMEVENT
представляется правильным, но он может отправляться только драйверами режима ядра. К счастью, есть DBT_USERDEFINED
. Документация говорит, что это должно быть отправлено, используя BroadcastSystemMessage()
.
Но затем коллега напомнил мне о «нулевой изоляции сеанса» в Windows Vista. Сможет ли BroadcastSystemMessage()
из WM_DEVICECHANGE
обращаться к приложениям, работающим во всех сеансах, а также к другим службам?
Похоже, что вопрос не возникает для драйверов ядра, потому что они используют другую функцию для отправки сообщения . Но мои уведомления исходят от службы, а не от драйвера ядра.
Я лаю не на том дереве? Я знаю, что могу использовать именованные каналы, но я действительно хочу, чтобы механизм широковещания делал вещи максимально простыми. Я не хочу, чтобы служба, генерирующая сообщения, беспокоилась о том, куда они направляются. Я также хочу избегать сторонних библиотек. Я хочу сделать это правильным способом, одобренным Microsoft, и не изобретать велосипед заново.