WEB开发网
开发学院操作系统Windows Vista Windows Vista IE 7保护模式开发者生存指南 阅读

Windows Vista IE 7保护模式开发者生存指南

 2008-08-22 17:24:11 来源:WEB开发网   
核心提示: 回到话题上来,当插件想要对文件系统进行写入时,Windows Vista IE 7保护模式开发者生存指南(4),应使用IEGetWriteableFolderPath() API而不是GetSpecialFolderPath()、GetFolderPath()、SHGetKnownFold

回到话题上来,当插件想要对文件系统进行写入时,应使用IEGetWriteableFolderPath() API而不是GetSpecialFolderPath()、GetFolderPath()、SHGetKnownFolderPath()。IEGetWriteableFolderPath()可探知保护模式,如果插件请求的目录不允许写入,IEGetWriteableFolderPath()会返回E_ACCESSDENIED,IEGetWriteableFolderPath()的原型如下:

HRESULT IEGetWriteableFolderPath(GUID clsidFolderID, LPWSTR* lppwstrPath);

GUID为定义在knownfolders.h头文件中的FOLDERID_InternetCache、FOLDERID_Cookies及FOLDERID_History,另外,似乎没有与Temp目录对应的GUID,所以当需要写临时文件时,推荐使用FOLDERID_InternetCache。以下为在缓存中创建临时文件的一段代码:

HRESULT hr;
LPWSTR pwszCacheDir = NULL;
TCHAR szTempFile[MAX_PATH] = {0};
  
hr = IEGetWriteableFolderPath(FOLDERID_InternetCache, &pwszCacheDir);
  
if ( SUCCEEDED(hr) )
  {
  GetTempFileName(CW2CT(pwszCacheDir), _T("bob"), 0, szTempFile);
  CoTaskMemFree(pwszCacheDir);
  
  // szTempFile中现在为临时文件的完整路径
}

如果IEGetWriteableFolderPath()成功,它会分配一块缓冲区并在pwszCacheDir中返回其地址,我们只须把这个目录传递给GetTempFileName(),接着用CoTaskMemFree()释放缓冲区就行了。

IEGetWriteableFolderPath()不仅是用于写临时文件,插件也可在保护模式的另存为对话框中用到它,这将在下面的“提示用户保存文件”一节中说到。

注册表的写入

因为注册表是系统的关键区域,所以,不应允许运行在浏览器中的代码修改其中的任何部分,以防止运行恶意代码。为此,只有一个键值对插件来说可写,与文件系统一样,这个键也是在当前用户配置文件下的低权限区域,可通过调用IEGetWriteableHKCU()来获取此键的句柄:

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Windows Vista IE

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接