在IE保护模式下,createfile 打开USB设备 返回5

IE保护模式下,原因是IE运行在低完整性级别权限下,一般应用程序运行在中完整性级别。别的应用程序创建的共享内存,即使赋予Everyone权限,ActiveX控件仍然会打不开。

解决方法: 在运行IE浏览器之前(也就是IE在保护模式之前),creatfile打开USB设备,把USB设备的权限降下来。

 

USB设备降下来的方法如下:

 

#include <sddl.h>
#include <AclAPI.h>
LPCWSTR LOW_INTEGRITY_SDDL_SACL_W = L"S:( ML;;NW;;;LW )";

 

//这里参数pwszFileName就是USB设备名称\\?\usbstor#cdrom&ven_&prod_cdrom&rev_1.00#6&31d321d0&0#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}

void SetLowLabelToFile(char *pwszFileName)
{
  // The LABEL_SECURITY_INFORMATION SDDL SACL to be set for low integrity 
  #define LOW_INTEGRITY_SDDL_SACL_W L"S:(ML;;NW;;;LW)"
  DWORD dwErr = ERROR_SUCCESS;
  PSECURITY_DESCRIPTOR pSD = NULL;    
  PACL pSacl = NULL; // not allocated
  BOOL fSaclPresent = FALSE;
  BOOL fSaclDefaulted = FALSE;
  //LPCWSTR pwszFileName = L"Sample.txt";
  if (ConvertStringSecurityDescriptorToSecurityDescriptorW(
         LOW_INTEGRITY_SDDL_SACL_W, SDDL_REVISION_1, &pSD, NULL)) 
  {
    if (GetSecurityDescriptorSacl(pSD, &fSaclPresent, &pSacl, 
         &fSaclDefaulted))
    {
      // Note that psidOwner, psidGroup, and pDacl are 
      // all NULL and set the new LABEL_SECURITY_INFORMATION
      dwErr = SetNamedSecurityInfo(pwszFileName, 
                 SE_FILE_OBJECT, LABEL_SECURITY_INFORMATION, 
                 NULL, NULL, NULL, pSacl);
    }
    LocalFree(pSD);
  }
}

今天解决这个问题了,在这里做一下记录,其实是领导帮解决的,O(∩_∩)O~

类似的共享内存问题应该也是这么解决。

相应的降低共享内存的权限就行了。

 

参考网址:

http://blog.youkuaiyun.com/xiliang_pan/article/details/45398067

http://blog.youkuaiyun.com/xt_xiaotian/article/details/5336809

http://blog.youkuaiyun.com/buptisc_txy/article/details/6197968

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值