在微软的Vista操作系统中,为了提高安全性IE7运行于保护模式下, 这种模式以高度受限制的权限运行IE进程,也就说IE进程本身的权限很低。因此编写的插件如果使用高完整性资源则会失败,例如修改HKEY_LOCAL_MACHINE下的注册表项,为此微软提供了COM Elevation Moniker。COM Elevation Moniker允许运行在受限用户(LUA)的应用程序激活一个提升权限的COM对象,即在Vista系统上会弹出UAC提示框让用户提升权限(UAC打开状态下)。
要创建提升权限的COM类需要做的工作:
1. COM类必须在注册表中有权限提升支持标识,不论你的COM是DLL还是EXE,都必须得有AppID,格式如下:
HKEY_LOCAL_MACHINE/Software/Classes/CLSID/{CLSID}/Elevation/Enabled = 1
HKEY_LOCAL_MACHINE/Software/Classes/CLSID/{CLSID}/LocalizedString = <displayname>
HKEY_LOCAL_MACHINE/Software/Classes/CLSID/{CLSID}/AppID = {AppID}
HKEY_LOCAL_MACHINE/Software/Classes/AppID/{AppID}/ DllSurrogate= <空字符串>
说明:Enabled为DWORD值,displayname为弹出的UAC中提示的文字。
2. 使用权限提升COM类的客户端程序必须以CoCreateInstanceAsAdmin调用方式来创建COM类。
HRESULT CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, __out void ** ppv)
{
BIND_OPTS3 bo;
WCHAR wszCLSID[50];
WCHAR wszMonikerName[300];
StringFromGUID2(rclsid, wszCLSID, sizeof(wszCLSID)/sizeof(wszCLSID[0]));
HRESULT hr = StringCchPrintf(wszMonikerName, sizeof(wszMonikerName)/sizeof(wszMonikerName[0]), L"Elevation:Administrator!new:%s", wszCLSID);
if (FAILED(hr))
return hr;
memset(&bo, 0, sizeof(bo));
bo.cbStruct = sizeof(bo);
bo.hwnd = hwnd;
bo.dwClassContext = CLSCTX_LOCAL_SERVER;
return CoGetObject(wszMonikerName, &bo, riid, ppv);
}
具体可参考“Vista Compatibility Team Blog-CoCreateInstanceAsAdmin or CreateElevatedComObject sample”和" “MSDN-The COM Elevation Moniker”
对于插件的安装则可通过写INF文件的方式来完成,因为运行在保护模式下的IE是通过启动具有高权限的IEInstal.exe来完成插件的安装的。
INF例子:
[Version]
Signature="$Chicago$"
AdvancedINF=2.5
[DefaultInstall]
CopyFiles=MyCtrlFiles
AddReg=MyCtrlAddReg
[DefaultUninstall]
DelFiles=MyCtrlFiles
DelReg=MyCtrlDelReg
DelDirs=UninstallDelDirs
[SourceDisksNames]
1="My Files","MyCtrl.cab",1
[MyCtrlFiles]
MyCtrol.dll,,,2
.....
[DestinationDirs]
MyCtrlFiles=16422, MyCtrlFiles
[MyCtrl1AddReg]
HKCR,"CLSID/{08485EAA-D2CB-4E41-8B7A-B03B682EB137}",,,
HKCR,"CLSID/{08485EAA-D2CB-4E41-8B7A-B03B682EB137}",,0x00000000,"My control"
......
[MyCtrlDelReg]
HKCR,"CLSID/{35081C02-C647-4301-8A90-D81CF8F125FD}"
HKCR,"AppID/{CE2312AC-2FB9-4E3D-9D8A-9A19A6C08313}"
......
[UninstallDelDirs]
%16422%/MyCtrlFiles
本文由 cswxzx 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: May 14, 2016 at 04:19 pm