#c #c #com #wmi
Вопрос:
Я пытаюсь создать удаленное соединение WMI, используя олицетворенный токен, без изменения безопасности всего процесса. Маркер процесса не имеет разрешений на доступ к WMI в удаленной системе, но маркер потока имеет. В настоящее время я использую следующие функции:
- CoInitializeEx()
- Совместное создание()
- Соединительный сервер()
- CoSetProxyBlanket()
Мой вызов функции CoCreateInstance() выглядит следующим образом:
hr = CoCreateInstance( amp;CLSID_WbemLocator_local, NULL, CLSCTX_INPROC_SERVER | CLSCTX_ENABLE_CLOAKING, amp;IID_IWbemLocator_local, (LPVOID *) amp;pLocator);
Как я понимаю, флаг контекста CLS CLSCTX_ENABLE_CLOAKING должен указывать локатору на использование маркера потока.
Мой вызов ConnectServer() выглядит следующим образом:
hr = pLocator-gt;lpVtbl-gt;ConnectServer( pLocator, bstrResource, NULL, NULL, NULL, WBEM_FLAG_CONNECT_USE_MAX_WAIT, NULL, NULL, amp;pServices);
Это возвращает 0x80070005 (ERROR_ACCESS_DENIED) при запуске процесса от имени пользователя без прав в удаленной системе, но с токеном потока, который это делает.
Поскольку я не хочу изменять разрешения всего процесса, я не могу использовать CoInitializeSecurity() для настройки безопасности перед вызовом ConnectServer(). Из того, что я могу найти, CoSetProxyBlanket() можно вызвать только после ConnectServer (), так как для этого требуется прокси-служба в качестве аргумента.
- Мне не хватает каких-либо соответствующих параметров для CoInitializeEx(), CoCreateInstance() или ConnectServer()?
- Может ли CoSetProxyBlanket() быть вызван до ConnectServer()?
- Есть ли что-нибудь еще, чего мне не хватает?