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

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

 2008-08-22 17:24:11 来源:WEB开发网   
核心提示: 如果因为某些原因IESaveFile()的调用未完成,例如在写临时文件时发生错误,Windows Vista IE 7保护模式开发者生存指南(7),那就必须清理HANDLE及IEShowSaveFileDialog()中分配的临时空间,这由IECancelSaveFile()来完成,通过修

如果因为某些原因IESaveFile()的调用未完成,例如在写临时文件时发生错误,那就必须清理HANDLE及IEShowSaveFileDialog()中分配的临时空间,这由IECancelSaveFile()来完成。

if ( SUCCEEDED(hr) )
  {
  // 如果写文件成功,IE就会把数据保存在用户选择的路径中
  hr = IESaveFile ( hState, T2CW(szTempFile) );
  
  // 清理临时文件
  DeleteFile ( szTempFile );
  }
else
  {
  // 未完成保存操作,那就只有取消它了
  IECancelSaveFile ( hState );
}

在插件与其他程序间通讯

前面介绍的内容都是与文件系统及注册表相关的,其限制IE调用某些API对系统造成损害,下面涉及到一些更复杂的内容,与其他运行在更高完整性级别中程序的进程间通讯(IPC),这又分为两种类型:内核对象及窗口消息。

一、创建IPC对象

插件与单独进程的进程间通讯,涉及到NT安全API及强制完整性级别检查,默认状态下,会阻止插件到单独进程的通讯,因为外部程序运行在比IE更高的完整性级别中。

如果外部程序要创建一个插件可使用的内核对象(如event或mutex),那就必须降低这个对象的完整性级别,以便插件可以访问它。外部程序可使用安全API,通过修改对象的ACL来降低其完整性级别,下面的代码来自MSDN,接受一个内核对象的HANDLE作为参数,并设置其完整性级别为低:

// LABEL_SECURITY_INFORMATION SDDL SACL被设为低完整性级别
LPCWSTR LOW_INTEGRITY_SDDL_SACL_W = L"S:(ML;;NW;;;LW)";
  
bool SetObjectToLowIntegrity(
HANDLE hObject, SE_OBJECT_TYPE type = SE_KERNEL_OBJECT)
{
bool bRet = false;
DWORD dwErr = ERROR_SUCCESS;
PSECURITY_DESCRIPTOR pSD = NULL;
PACL pSacl = NULL;
BOOL fSaclPresent = FALSE;
BOOL fSaclDefaulted = FALSE;
  
if ( ConvertStringSecurityDescriptorToSecurityDescriptorW (
     LOW_INTEGRITY_SDDL_SACL_W, SDDL_REVISION_1, &pSD, NULL ) )
  {
  if ( GetSecurityDescriptorSacl (
      pSD, &fSaclPresent, &pSacl, &fSaclDefaulted ) )
   {
   dwErr = SetSecurityInfo (
        hObject, type, LABEL_SECURITY_INFORMATION,
        NULL, NULL, NULL, pSacl );
  
   bRet = (ERROR_SUCCESS == dwErr);
   }
  
  LocalFree ( pSD );
  }
  
return bRet;
}

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

Tags:Windows Vista IE

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