技术开发 频道

面对IE保护模式的开发者生存之道


1.运行时检测保护模式

   为了判断我们的插件是否运行在一个保护模式IE进程中,我们使用IEISProtectedModeProcess():
HRESULT IEIsProtectedModeProcess(BOOL* pbResult);
   如果返回值是一个成功的HRESULR和*pbResult是True,那么保护模式就被启用了。根据在*pbResult中返回的值,你可以在你的代码中采取不同的操作:
HRESULT hr; 
BOOL bProtectedMode = FALSE;

hr = IEIsProtectedModeProcess ( &bProtectedMode );

if ( SUCCEEDED(hr) && bProtectedMode )
// IE is running in protected mode
else
// IE isn't running in protected mode
   示例band插件在一启动的时候调用了这个API,并显示了关于保护模式状态的一个消息。

2.写文件系统

   当保护模式被启用的时候,扩展插件只能对用户配置下的几个目录进行写操作。只有在Temp、Temporary、Internet Files、Cookies和Favorites目录下的几个特定低完整性目录可以进行写操作。IE还有某些兼容性补偿功能,它虚拟化其他常用目录。对这些目录的写操作将被重定向到Temporary Internet Files的子目录中。如果一个扩展插件试图对一个敏感进行写操作的话,例如对windows目录,这个操作将会失败。

   当一个扩展插件希望写这个文件系统的时候,它应该使用IEGetWriteableFolderPath()这个API,而不是GetSpecialFolderPath()、GetFolderPath()或SHGetKnownFolderPath()。IEGetWriteableFolderPath()可以发现保护模式,如果一个插件请求一个不允许写的目录,IEGetWriteableFolderPath()将返回E_ACCESSDENIED。IEGetWriteableFolderPath()的原型如下:

HRESULT IEGetWriteableFolderPath(GUID clsidFolderID, LPWSTR* lppwstrPath);
0
相关文章