Я пытаюсь получить SID основного домена компьютера на Windows, используя C ++. Я сумел сделать это с помощью LsaQueryInformationPolicy
с PolicyPrimaryDomainInformation
параметр. Я открыл политику LSA для этой операции как дано:
auto lsaStatus = LsaOpenPolicy(Server, &ObjectAttributes, GENERIC_READ | POLICY_VIEW_LOCAL_INFORMATION, &PolicyHandle);
К сожалению, используя LSAOpenPolicy
Запрашивает права администратора для запуска, и для проекта, над которым я работаю, это невозможно, поскольку у большинства пользователей его нет. У меня вопрос — есть ли способ получить SID основного домена текущего компьютера без вызова прав администратора? Если есть, как я должен делать это с помощью Visual C ++ / MFC?
Я нашел решение этой проблемы. Оказывается, я сделал неверное предположение, основываясь на неправильном описании API в MSDN.
Как мы можем читать Вот, LsaOpenPolicy
Кажется, требуются права администратора и статья о Маски доступа не сказал и не привел меня никуда, где я мог найти информацию о необходимых привилегиях. Однако благодаря пользователю переполнения стека TripShock и его комментарий на похожую тему Вот Я узнал, что на самом деле, используя только POLICY_VIEW_LOCAL_INFORMATION
Флаг доступа не вызывает права администратора. Протестировал его в моей программе и на виртуальной машине и оказалось правдой.