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