Внутренние работы WMI?

Мне интересно, как работает WMI. В частности, в настоящее время я использую WMI для запроса физических мониторов через "Select * from Win32_DesktopMonitor", поскольку он последовательно дает мне правильный результат на нескольких платформах, так как я хочу знать количество физических мониторов, а не виртуальных мониторов, возвращаемых функциями, такими как GetSystemMetrics и EnumDisplays. Я также изучил SetupAPI, который проверяет реестр, как и диспетчер устройств, но может некорректно возвращать фантомные мониторы в до Windows Vista.

Я пытался отследить вызовы API и наблюдать за событиями с помощью procmon.exe, созданного wbemtest.exe, и моих собственных исполняемых файлов, выполняющих запросы, но не нашел много.

Любое понимание внутренней работы WMI, более глубокое отслеживание вызовов API или надежные способы подсчета мониторов приветствуются.

Незначительные замечания: Работа с C++

2 ответа

Также стоит проверить квалификатор MappingStrings (если он есть) для интересующих вас свойств класса. Для Win32_DesktopMonitor, например:

Идентификатор устройства:
Win32API | Windows GDI | HMONITOR

InstallDate:
MIF.DMTF | ComponentID | 001,5

MonitorManufacturer:
Win32Registry

MonitorType:
Win32Registry

PixelsPerXLogicalInch:
Win32API | Функции контекста устройства |GetDeviceCaps

Он говорит с драйверами устройства, никто не знает лучше, какое оборудование доступно. Вы можете прочитать больше об этой статье Microsoft.

Другие вопросы по тегам