у меня есть части моей программы, требующие административного доступа (настройки, которые влияют на всех пользователей, хранятся в HKLM и ограничены административным доступом).
у меня есть изменил свое программное обеспечение, чтобы указать, что требуется повышение прав:
В ответ я собираюсь запустить свой исполняемый файл с запросом повышения прав:
SHELLEXECUTEINFO shExecInfo;
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shExecInfo.fMask = NULL;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = L"runas";
shExecInfo.lpFile = L"myapp.exe";
shExecInfo.lpParameters = NULL;
shExecInfo.lpDirectory = NULL;
shExecInfo.nShow = SW_MAXIMIZE;
shExecInfo.hInstApp = NULL;
ShellExecuteEx(&shExecInfo);
Я собирался сделать, чтобы передать имя именованного канала в командной строке, говоря себе, куда он может подключиться, чтобы получить инструкции о том, что он должен делать:
myapp.exe /uac 6C844671-E262-46DD-939E-47517F105FB6
(Да, используя GUID в качестве имени канала).
Через этот канал i сообщит моему клону с повышенными правами, какая база данных, например:
Моя беспокоило то, что кто угодно мог запустить myapp.exe
, а затем передать ему всевозможные запросы - вещи, которые мне не нужны. t сделать, потому что i не запустил его, например:
MaliciousProgram.exe :
ShellExecute("myapp.exe /uac HahaYouDoWhatISayNow")
Я помню, что во время бета-тестирования Longhorn было видео на Channel9 или статья, в которой говорилось о UAC и опасности неправильного выполнения IPC (межпроцессного взаимодействия).
Я не хочу изобретать колесо заново, делая ошибки безопасности, которые уже были исправлены. Но я не могу найти никакого существующего руководства по « правильному » способу выполнения IPC с повышением уровня UAC.
Какой он не принял шаблон для выполнения IPC для связи с порожденным процессом с повышенными правами для временных повышенных действий?
Редактировать: Объединенные последователи uac
и ipc
теги: 53