首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vista UAC、Access Elevation和.Net

Vista UAC、Access Elevation和.Net
EN

Stack Overflow用户
提问于 2008-09-17 00:38:23
回答 6查看 4.6K关注 0票数 5

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

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-17 00:41:53

您真正需要做的是将您的设置存储在Application Data文件夹中。

票数 2
EN

Stack Overflow用户

发布于 2008-09-18 15:02:58

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

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

代码语言:javascript
复制
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);
}
票数 11
EN

Stack Overflow用户

发布于 2008-09-17 00:57:37

我见过的最好的文章是这篇:

http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

它解释了当现有的microsoft应用程序打开UAC提示符时幕后发生的事情的本质,以及一些如何自己做这件事,或者至少你会知道你面对的是什么让它工作……

(请注意,他展示的示例是托管c++)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/78696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档