代码之家  ›  专栏  ›  技术社区  ›  JoelHess

Vista UAC、访问立面图和.NET

  •  5
  • JoelHess  · 技术社区  · 17 年前

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

    不幸的是,我遇到的所有信息都是关于只使用提升的特权启动一个新进程的。

    6 回复  |  直到 16 年前
        1
  •  2
  •   Joel Coehoorn    17 年前

        2
  •  11
  •   Andrei Belogortseff    17 年前

    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);
    }
    
        5
  •  3
  •   Adrian Clark    17 年前

    %programfiles%

        6
  •  0
  •       17 年前

    推荐文章