程序兼容模式及管理员权限读取

桌面上图标右键->属性->兼容性->(兼容模式、管理员权限)
|
|映射注册表
|
当前用户
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers


32位Windows:
所有用户
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers


64位Windows:
所有用户(64位注册表)
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
所有用户(32位注册表)
HKEY_LOCAL_MACHINE\Software\Wow6432Nod\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers



在64位Windows系统中:
情况一:
本身程序是32位时,当你试图读取注册表下兼容和管理员权限信息时
--->注册表会被重定向到32位注册表
如果需要读取64位的注册表,则需要加上KEY_WOW64_64KEY
LPCTSTR strSubKey = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers");
RegOpenKeyEx(HKEY_LOCAL_MACHINE, strSubKey, 0, KEY_READ | KEY_WOW64_64KEY, &hKey);

情况二:
本身程序是64位时,当你试图读取注册表下兼容和管理员权限信息时
--->注册表会被重定向到64位注册表
如果需要读取32位的注册表,则需要加上KEY_WOW64_32KE
LPCTSTR strSubKey = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers");
RegOpenKeyEx(HKEY_LOCAL_MACHINE, strSubKey, 0, KEY_READ | KEY_WOW64_32KE, &hKey);



注:
1、看了哈其他人的文章,发现Vista系统下的注册表路径是:
HKEY_LOCAL_MACHINE\Software\Wow6432Nod\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
但是,本人没用过Vista,也就不太清楚

2、KEY_WOW64_64KEY与KEY_WOW64_32KE不能共存,同时只能设置一个



以管理员权限运行程序:
SHELLEXECUTEINFO execinfo = {0};
execinfo.lpFile = szFilePath;//程序路径
execinfo.cbSize = sizeof(SHELLEXECUTEINFO);
execinfo.lpVerb = _T("runas");//以特权等级运行程序
execinfo.fMask = SEE_MASK_NO_CONSOLE;
execinfo.nShow = SW_SHOWDEFAULT;
BOOL hRes = ShellExecuteEx(&execinfo);


参考链接:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa384129
http://bbs.51cto.com/thread-935881-1.html
http://www.cnblogs.com/walfud/articles/2311065.html

http://blog.csdn.net/xiunai78/article/details/8208250



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值