Я хотел бы выполнять запросы WMI от Go. Есть способы вызова функций DLL из Go. Насколько я понимаю, где-то должна быть какая-то DLL, которая при правильном вызове вернет некоторые данные, которые я могу проанализировать и использовать. Я предпочел бы избегать вызова в C или C++, тем более, что я предполагаю, что это обертки над самим Windows API.
Я рассмотрел вывод dumpbin.exe /exports c:\windows\system32\wmi.dll
, и следующая запись выглядит многообещающе:
WmiQueryAllDataA (forwarded to wmiclnt.WmiQueryAllDataA)
Однако я не уверен, что делать отсюда. Какие аргументы принимает эта функция? Что это возвращает? Поиск WmiQueryAllDataA
не помогает. И это имя появляется только в комментарии к c:\program files (x86)\windows kits\8.1\include\shared\wmistr.h
, но без сигнатуры функции.
Есть ли лучшие методы? Есть еще одна DLL? Я что-то пропустил? Должен ли я просто использовать оболочку C?
Выполнение запроса WMI в Linqpad с помощью .NET Reflector показывает использование WmiNetUtilsHelper:ExecQueryWmi
(и версии _f
), но ни один из них не имеет видимой реализации.
Обновление: используйте пакет github.com/StackExchange/wmi, который использует решение в принятом ответе.