gpt4 book ai didi

.net - Vista UAC、Access Elevation 和 .Net

转载 作者:行者123 更新时间:2023-12-04 16:20:12 26 4
gpt4 key购买 nike

我试图找出是否有任何方法可以提升应用程序中的特定功能。例如,我有一个系统和用户设置存储在注册表中的应用程序,我只需要在需要更改系统设置时提升。

不幸的是,我遇到的所有信息都在谈论仅以提升的权限启动新进程。

最佳答案

不可能只提升一个功能或单个流程的任何其他部分,因为提升级别是每个流程的属性。就像怀孕一样,您的过程可以升高也可以不升高。如果您需要提升运行代码的某些部分,则必须启动一个单独的进程。

但是,如果您可以将函数实现为 COM 对象,则可以通过创建提升的 COM 对象来间接提升它运行,如下所示:

HRESULT 
CreateElevatedComObject (HWND hwnd, REFGUID guid, REFIID iid, void **ppv)
{
WCHAR monikerName[1024];
WCHAR clsid[1024];
BIND_OPTS3 bo;

StringFromGUID2 (guid, clsid, sizeof (clsid) / 2);

swprintf_s (monikerName, sizeof (monikerName) / 2, L"Elevation:Administrator!new:%s", clsid);

memset (&bo, 0, sizeof (bo));
bo.cbStruct = sizeof (bo);
bo.hwnd = hwnd;
bo.dwClassContext = CLSCTX_LOCAL_SERVER;

// Prevent the GUI from being half-rendered when the UAC prompt "freezes" it
MSG paintMsg;
int MsgCounter = 5000; // Avoid endless processing of paint messages
while (PeekMessage (&paintMsg, hwnd, 0, 0, PM_REMOVE | PM_QS_PAINT) != 0 && --MsgCounter > 0)
{
DispatchMessage (&paintMsg);
}

return CoGetObject (monikerName, &bo, iid, ppv);
}

关于.net - Vista UAC、Access Elevation 和 .Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/78696/

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