【发布时间】:2011-09-20 00:17:13
【问题描述】:
我的程序的某些部分需要管理访问权限(影响所有用户的设置,存储在 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 作为管道的名称)。
通过这个管道我会告诉我提升的克隆是什么数据库,例如:
- 它应该连接到哪个服务器数据库
- 应该说是用户进行更改
- 应该添加/编辑/删除的东西
那时我担心的是任何人都可以启动myapp.exe,然后向它提供各种请求 - 我不希望它做的事情,因为 i 没有启动它,例如:
MaliciousProgram.exe:
ShellExecute("myapp.exe /uac HahaYouDoWhatISayNow")
我记得在 Longhorn 测试版期间,有一个 Channel9 视频或一篇文章,谈论 UAC 以及错误执行 IPC(进程间通信)的危险。
我不想重新发明轮子,制造已经解决的安全错误。但我找不到任何关于“正确”方式使用 UAC 提升进行 IPC 的现有指导。
他不接受什么模式来执行 IPC 以与生成的提升进程进行通信以进行临时提升操作?
编辑: uac 和 ipc 标签的联合关注者:53
【问题讨论】:
-
我想知道 - 你问这个问题已经有五年了。你有没有得到满意的解决方案?
标签: windows security design-patterns ipc uac