清单文件中的requestedExecutionLevel和CopyFile()函数失败

时间:2010-09-29 15:35:34

标签: c winapi uac

只是尝试使用CopyFile()函数将文件从当前目录复制到C:\ windows \ system32 \ drivers。

我还在其中写了“requestedExecutionLevel level =”highestAvailable“”,并运行mt将其添加到生成的可执行文件中。

当我尝试运行它时,Windows 7 UAC对话框弹出,我按“是”,但CopyFile()返回“拒绝访问”错误。 怎么了?我该怎么检查?

我的清单文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <v3:trustInfo xmlns:v3="urn:schemas-microsoft-com:asm.v3">
     <v3:security>
       <v3:requestedPrivileges>
         <v3:requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
       </v3:requestedPrivileges>
     </v3:security>
   </v3:trustInfo>
 </assembly>

我的C代码:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    if (CopyFile ("aaa.sys", "C:\\windows\\system32\\drivers", FALSE)==FALSE)
        ErrorExit ("CopyFile");

2 个答案:

答案 0 :(得分:1)

嗯,不太确定“highestAvailable”是做什么的。删除所有疑问并改为使用“requireAdministrator”,这总是可以获得完全的管理员权限。还要确保使用正确的资源名称和ID,RT_MANIFEST和1。

答案 1 :(得分:0)

  • requireAdministrator =始终要求管理员提升。
  • highestAvailable =如果是admin组的成员,则提升。如果是普通用户,则以普通用户身份运行而不提升。