当前位置:  开发笔记 > 编程语言 > 正文

Vista UAC,Access Elevation和.Net

如何解决《VistaUAC,AccessElevation和.Net》经验,为你挑选了2个好方法。

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

不幸的是,我遇到的所有信息都只涉及启动具有提升权限的新进程.



1> Andrei Belog..:

由于高程级别是每进程属性,因此无法仅提升单个进程的一个函数或任何其他部分.就像怀孕一样,您的过程可以升高与否.如果您需要部分代码运行提升,则必须启动一个单独的进程.

但是,如果您可以将您的函数实现为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);
}



2> uzbones..:

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

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

它解释了当现有的微软应用程序提出UAC提示时,幕后工作的细节,以及一些如何自己动手,或者至少你会知道你的反对是什么让它起作用. ..

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

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有