2015-07-03 5 views
1

У меня есть необходимость как на C#, так и на C++, где клиентскому приложению Windows нужно делать такие вещи, как запрос WMI и функции доступа в криптографическом API через DLL. Некоторым вещам, таким как доступ к состоянию шифрования диска, требуется доступ администратора. Возможно ли, чтобы DLL имела права доступа администратора, где клиент связывания остается на привилегиях пользовательского уровня? Если да, то как мне это сделать?У вас есть DLL с правами администратора, которые связаны с клиентским приложением только с правами пользователя?

+0

Возможно, проще всего выключить UAC. В противном случае вам нужно, чтобы код выполнялся в другом процессе, потому что проверка доступа выполняется для каждого процесса. Один из способов - использовать COM-интерфейс, который Microsoft предоставляет для этой цели. Извините, я забыл его имя, но вы можете это сделать. Другой и, вероятно, гораздо более простой способ - просто запустить другой процесс. –

+0

О, я искал его для вас. (https://msdn.microsoft.com/en-us/library/windows/desktop/ms679687%28v=vs.85%29.aspx) –

+0

Таким образом, это звучит как другой процесс (который будет обеспечивать функциональность DLL) будет работать как служба. Правильно ли я это интерпретирую? – crayguy

ответ

1

Нет, сам код не имеет привилегий Windows.

Как указано в комментариях, вы можете использовать 2 процесса, работающие под разными учетными записями (что сразу добавляет много интересных вопросов, как общаться между двумя).

Или вы можете олицетворять учетную запись своим кодом, но разрешения Windows будут применяться к любому коду, который выполняется при олицетворении, а не просто коду из конкретной сборной DLL/.Net.