NSIS 注册64位控件及修改注册表键的权限方法
来源:互联网 发布:网络文明志愿宣言50字 编辑:程序博客网 时间:2024/05/03 01:38
1 注册控件
注册32位控件:RegDLL "c:\windows\system32\x.dll"
注册64位控件:
禁止文件重定向,使用系统命令注册控件,如下:
ExecWait ‘“$SYSDIR\regsvr32.exe" /s "c:\windows\system32\x_64.dll"'
可以参考:Library.nsh
2 修改注册表键权限
代码片段:
HKEY hKey = NULL;
// 区分32、64位注册表
ULONG rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\test\\test1",0,KEY_ALL_ACCESS|KEY_WOW64_32KEY|WRITE_DAC,&hKey);
//ACL (access control list)访问控制列表
PACL pOldDacl=NULL;
PACL pNewDacl=NULL;
DWORD dRet;
EXPLICIT_ACCESS eia;
//security安全 descriptor描述符
PSECURITY_DESCRIPTOR pSID=NULL;
//DACL 自由访问控制列表
//ACL 管制对象访问两种类型的ACL 自由决定的DACL和系统SACL
//DACL管制对象访问SACL管制审核
//SID 安全标示符security identifier
//SAM是windows系统 的一个系统用户账号管理文件 security account manager
// ObjectType 必须为 SE_REGISTRY_KEY,32 or 64位注册表由handle参数指定
dRet = GetSecurityInfo(hKey,SE_REGISTRY_KEY,DACL_SECURITY_INFORMATION,NULL,NULL,&pOldDacl,NULL,&pSID);// 获取SAM主键的DACL
if(dRet != ERROR_SUCCESS)
{
return 1;
}
//创建一个ACE,允许Users组成员完全控制对象,并允许子对象继承此权限
ZeroMemory(&eia,sizeof(EXPLICIT_ACCESS));
BuildExplicitAccessWithName(&eia,"Everyone",KEY_ALL_ACCESS,SET_ACCESS,SUB_CONTAINERS_AND_OBJECTS_INHERIT);
// 将新的ACE加入DACL
//ACL 访问控制列表
//DACL 自由访问控制列表
//SACL 系统访问控制列表
dRet = SetEntriesInAcl(1,&eia,pOldDacl,&pNewDacl);
if(dRet != ERROR_SUCCESS)
{
return 2;
}
// 更新主键的DACL
dRet = SetSecurityInfo(hKey,SE_REGISTRY_KEY,DACL_SECURITY_INFORMATION,NULL,NULL,pNewDacl,NULL);
if(dRet != ERROR_SUCCESS)
{
return 3;
}
SetSecurityInfo VS GetNamedSecurityInfo(32位程序不能修改64位注册表键的权限,只有SE_REGISTRY_WOW64_32KEY,而没有SE_REGISTRY_WOW64_64KEY)。
转自:http://blog.csdn.net/xiliang_pan/article/details/12647573
- NSIS 注册64位控件及修改注册表键的权限方法
- NSIS 注册64位控件及修改注册表键的权限方法
- 以system权限修改注册表的方法
- 修改注册表项的权限
- “error PRJ0050: 未能注册输出。请确保您有修改注册表的相应权限”的解决办法
- 使用命令修改注册表键值及权限
- VS2008错误:error PRJ0050: 未能注册输出,请确保您有修改注册表的相应权限。
- VS2005错误:error PRJ0050: 未能注册输出。请确保您有修改注册表的相应权限
- Project : error PRJ0050: 未能注册输出。请确保您有修改注册表的相应权限
- VS2008错误:error PRJ0050: 未能注册输出,请确保您有修改注册表的相应权限。
- error PRJ0050: 未能注册输出,请确保您有修改注册表的相应权限
- Project : error PRJ0050: 未能注册输出。请确保您有修改注册表的相应权限。
- 64位机器上的控件注册
- 64位机器上的控件注册
- MSchart控件在Win7 64位操作系统上的注册方法
- 如何获得修改注册表的权限
- 用文件修改注册表项的权限
- 用文件修改注册表项的权限
- 《xilinx all programmable zynq-7000 SOC》读后感
- javaweb学习总结(十一)——使用Cookie进行会话管理
- tets
- 纯css3实现圆盘时钟动画效果
- 手机html开发,简单实例,头部底部固定,中间可以滚动
- NSIS 注册64位控件及修改注册表键的权限方法
- C函数之memcpy()函数用法
- Sql Server 删除作业
- Swift基础之仿资讯类实现频道的长按拖拽/删除/增加
- Activity的启动方式
- Ubuntu下gradle运行卡住,出现Exception in thread "png-cruncher_xxx"错误的解决办法
- js里用==但是在java后台要用.equals
- c++根据两点经纬度坐标获取长度
- ubuntu下安装Composer