首页
社区
课程
招聘
[求助]win7 在高UAC等级的情况下,用RegCreateKey会被拒绝
发表于: 2014-11-16 12:33 7182

[求助]win7 在高UAC等级的情况下,用RegCreateKey会被拒绝

2014-11-16 12:33
7182
win7 在高UAC等级的情况下,用RegCreateKey新建项会被UAC拒绝,返回5.怎么让UAC弹出来,让用户确认??????????????????????????????

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 261
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
manifest requireAdministrator?
2014-11-16 13:08
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个没办法啊,只有在编译时,把整个程序编译成需要管理员权限,然后在运行这个程序的时候,一开始就弹出UAC要求管理员权限。
如果不是一开始就要求管理员权限,而是以普通用户运行,进行到一半的时候,你的RegCreateKey要求弹出UAC窗口,这样恐怕不行。
但是有另一个方法,那就是你的程序新创建一个进程,新进程马上要求管理员权限,就会弹出UAC窗口,然后在新的进程里面RegCreateKey
2014-11-16 13:53
0
雪    币: 121
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
提示权限的com.自己百度的.
2014-11-16 14:39
0
雪    币: 1651
活跃值: (1425)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
5
2 3楼的方法我知道,要重启进程。4楼说的com是哪个?我知道操作文件可以用IFileOperation 这个com对象,可以动态提权。
2014-11-16 15:42
0
雪    币: 1651
活跃值: (1425)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
6
没人知道怎么动态提权,让用户确认,修改注册表吗?
2014-11-16 18:14
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你怎么还不明白啊,我在2楼说得很清楚了。按你说的想动态提权是不可能的,你的进程在一开始运行,没有uac,没有选择管理员权限,那么就是普通权限,任何时候都是普通权限。所以只能新开一个进程,在一开始就申请管理员权限运行。普通权限的进程运行中途想动态提权是不可能的。
2014-11-16 18:28
0
雪    币: 1651
活跃值: (1425)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
我的意思是有没有类似IFileOperation的com对象可以临时操作系统目录的读写注册表com对象
2014-11-16 18:37
0
雪    币: 121
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
只能说有的.就是xxxxx!
2014-11-18 10:19
0
雪    币: 121
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
有的com可以被标记为提权操作Elevation:Administrator!new.只能说到这里了.!
2014-11-18 10:20
0
雪    币: 1651
活跃值: (1425)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
11
LPVOID pRet;
                                        char lpOut[50];
                                        GUID Guid;
                                        CLSID rclsid;
                                        CLSID rclsid1;
                                        IID  riid;
                                        HRESULT hResult;
                                        CoInitialize(0);
                                        HRESULT hr1=CLSIDFromProgID(L"WScript.Shell.1",&rclsid);
                                        HINSTANCE hdllInst =LoadLibrary("wshom.ocx");
                                        typedef HRESULT (__stdcall * pfnGCO) (REFCLSID, REFIID, void**);   
                                        pfnGCO fnGCO = NULL;  
                                        fnGCO = (pfnGCO)GetProcAddress(hdllInst, "DllGetClassObject");
                                        IClassFactory* pcf = NULL;  
                                        HRESULT hr=(fnGCO)(rclsid, IID_IClassFactory, (void**)&pcf); //创建工厂  
                                        LPVOID pvObject;
                    IIDFromString(L"{F935DC21-1CF0-11D0-ADB9-00C04FD58A0B}",&riid);
                                        memset(&rclsid1,0,sizeof(CLSID));
                   // memset(pszName+lstrlen(pszName)-1,0,1);
                    //memset(pszName,0,1);
                                        //pszName++;
                                        WCHAR wstrStr[260];
                                        MultiByteToWideChar(0,0,pszName,lstrlen(pszName)+1,wstrStr,260*2);
                                        CLSIDFromString(wstrStr,&rclsid1);
                                        //LPCTSR2GUID(pszName,rclsid1);
                                    //LPCTSR2GUID(str,rclsid);
                    hResult=CoCreateInstanceAsAdmin(NULL,rclsid1,riid,&pvObject);
2014-11-18 13:02
0
雪    币: 1651
活跃值: (1425)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
12
const wchar_t MONIKER_NAME[] = L"Elevation:Administrator!new:%s";
HRESULT CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, void **ppv)
{
        BIND_OPTS3 bo;
        wchar_t wszCLSID[50];
        wchar_t wszMonikerName[300];
       
        StringFromGUID2(rclsid, wszCLSID, sizeof(wszCLSID));
        HRESULT hr = wsprintfW(wszMonikerName,  MONIKER_NAME, wszCLSID);
        if (FAILED(hr))
                return hr;
        memset(&bo, 0, sizeof(bo));
        bo.cbStruct = sizeof(bo);
        bo.hwnd = hwnd;
        bo.dwClassContext = CLSCTX_LOCAL_SERVER;
        if (IsRunningInWin64())
                bo.dwClassContext |= CLSCTX_ACTIVATE_32_BIT_SERVER;
        return CoGetObject(wszMonikerName, &bo, riid, ppv);
}

找到WScript.Shell.1 能操作注册表,但是不能提权,不知道为什么
2014-11-18 13:03
0
游客
登录 | 注册 方可回帖
返回
//