能力值:
( LV2,RANK:10 )
|
-
-
2 楼
manifest requireAdministrator?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这个没办法啊,只有在编译时,把整个程序编译成需要管理员权限,然后在运行这个程序的时候,一开始就弹出UAC要求管理员权限。
如果不是一开始就要求管理员权限,而是以普通用户运行,进行到一半的时候,你的RegCreateKey要求弹出UAC窗口,这样恐怕不行。
但是有另一个方法,那就是你的程序新创建一个进程,新进程马上要求管理员权限,就会弹出UAC窗口,然后在新的进程里面RegCreateKey
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
提示权限的com.自己百度的.
|
能力值:
( LV6,RANK:80 )
|
-
-
5 楼
2 3楼的方法我知道,要重启进程。4楼说的com是哪个?我知道操作文件可以用IFileOperation 这个com对象,可以动态提权。
|
能力值:
( LV6,RANK:80 )
|
-
-
6 楼
没人知道怎么动态提权,让用户确认,修改注册表吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
你怎么还不明白啊,我在2楼说得很清楚了。按你说的想动态提权是不可能的,你的进程在一开始运行,没有uac,没有选择管理员权限,那么就是普通权限,任何时候都是普通权限。所以只能新开一个进程,在一开始就申请管理员权限运行。普通权限的进程运行中途想动态提权是不可能的。
|
能力值:
( LV6,RANK:80 )
|
-
-
8 楼
我的意思是有没有类似IFileOperation的com对象可以临时操作系统目录的读写注册表com对象
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
只能说有的.就是xxxxx!
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
有的com可以被标记为提权操作Elevation:Administrator!new.只能说到这里了.!
|
能力值:
( 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);
|
能力值:
( 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 能操作注册表,但是不能提权,不知道为什么
|