gpt4 book ai didi

c++ - 在运行时提升权限(Windows API C/C++)

转载 作者:可可西里 更新时间:2023-11-01 18:25:24 24 4
gpt4 key购买 nike

我的应用程序并不总是需要“管理员”权限,大部分时间都以当前用户身份运行。有什么办法,我可以在我的程序已经运行后通过在运行时抛出一个 UAC 来升级 privs?这只会在我需要 privs 时发生。而不是必须从高权限开始。

我知道“runas”技术、 list 文件等,但所有这些都是在进程创建之前而不是在运行时按需

最佳答案

恭喜,这正是 UAC 设计的工作方式,而大多数应用程序开发人员要么太懒要么太害怕,以至于根本没有考虑过查看:)

简而言之,您将需要提升的代码放在一个单独的 COM 对象(位于 DLL 中)中,然后使用描述的方法创建它的提升实例 here .

HRESULT CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, __out void ** ppv)
{
BIND_OPTS3 bo;
WCHAR wszCLSID[50];
WCHAR wszMonikerName[300];

StringFromGUID2(rclsid, wszCLSID, sizeof(wszCLSID)/sizeof(wszCLSID[0]));
HRESULT hr = StringCchPrintf(wszMonikerName, sizeof(wszMonikerName)/sizeof(wszMonikerName[0]),\
L"Elevation:Administrator!new:%s", wszCLSID);
if (FAILED(hr))
return hr;
memset(&bo, 0, sizeof(bo));
bo.cbStruct = sizeof(bo);
bo.hwnd = hwnd;
bo.dwClassContext = CLSCTX_LOCAL_SERVER;
return CoGetObject(wszMonikerName, &bo, riid, ppv);
}

关键是名字对象名称的 Elevation:Administrator!new: 前缀。这会导致触发提升提示,并且将使用提升的 token 创建生成的 COM 对象。

关于c++ - 在运行时提升权限(Windows API C/C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26714673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com