在windows7下,如何提升权限使用RegOpenKeyEx用KEY_WRITE参数

时间:2022-08-27 23:21:31
对HKEY_LOCAL_MACHINE键,如果用KEY_READ参数没有问题: RegOpenKeyEx(HKEY_LOCAL_MACHINE,strKeyName.c_str(), 0,KEY_READ, &hKey)
但如要用到KEY_WRITE,因UAC限制,则打不开。如何让程序能使用KEY_WRITE ?
VS中可以通过修改选项让编译后的程序带有一个盾牌,运行后弹出提示要更改计算机,但在c++builder2010中如何做呢?

7 个解决方案

#1


制作一个文本文件,内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>    
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">    
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">    
    <security>    
      <requestedPrivileges>    
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"> 
        </requestedExecutionLevel>    
      </requestedPrivileges>    
    </security>    
  </trustInfo>    
  <dependency>    
    <dependentAssembly>    
      <assemblyIdentity type="win32"    
             name="Microsoft.Windows.Common-Controls"    
             version="6.0.0.0"    
             processorArchitecture="x86"    
             publicKeyToken="6595b64144ccf1df"    
             language="*"> 
      </assemblyIdentity>    
    </dependentAssembly>    
  </dependency>    
</assembly>


存为123.manifest

再创建一个文本文件,内容如下:
1 24 "123.manifest"
存为123.rc

然后在C++Builder2010中打你的工程,选择菜单上的Project-->Add to project-->找到刚才创建的123.rc,添加进来编译就行了

#2


另外,在XE2中,工程选项中增加了自定义manifest的功能,只需要指定一个已存在的*.manifest就可以了,很方便。

#3


老大,按你的步骤做了,还是不行。还想问一下,那个 1 24 用法是什么?

#4


加入了那个rc文件后,已在程序的Project Manager 中可看到manifest文件,内容也有,还要做其它操作么?直接run,但还是不行啊

#5


这个rc文件还要不要用brcc32.exe 编译?

#6


关注。

#7


1 24 

1是资源的名称,可以随意,24是资源的类型,这个不能更改。必须是24

你如果安全是按照我的步骤做的,不可能不成功。自己再检查一下。

#1


制作一个文本文件,内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>    
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">    
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">    
    <security>    
      <requestedPrivileges>    
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"> 
        </requestedExecutionLevel>    
      </requestedPrivileges>    
    </security>    
  </trustInfo>    
  <dependency>    
    <dependentAssembly>    
      <assemblyIdentity type="win32"    
             name="Microsoft.Windows.Common-Controls"    
             version="6.0.0.0"    
             processorArchitecture="x86"    
             publicKeyToken="6595b64144ccf1df"    
             language="*"> 
      </assemblyIdentity>    
    </dependentAssembly>    
  </dependency>    
</assembly>


存为123.manifest

再创建一个文本文件,内容如下:
1 24 "123.manifest"
存为123.rc

然后在C++Builder2010中打你的工程,选择菜单上的Project-->Add to project-->找到刚才创建的123.rc,添加进来编译就行了

#2


另外,在XE2中,工程选项中增加了自定义manifest的功能,只需要指定一个已存在的*.manifest就可以了,很方便。

#3


老大,按你的步骤做了,还是不行。还想问一下,那个 1 24 用法是什么?

#4


加入了那个rc文件后,已在程序的Project Manager 中可看到manifest文件,内容也有,还要做其它操作么?直接run,但还是不行啊

#5


这个rc文件还要不要用brcc32.exe 编译?

#6


关注。

#7


1 24 

1是资源的名称,可以随意,24是资源的类型,这个不能更改。必须是24

你如果安全是按照我的步骤做的,不可能不成功。自己再检查一下。