如题,望高手指导一下,小弟在此谢过..
    网上有人说要改UAC权限,我试了下,好像没有,贴个代码大家看一下是什么问题
         HANDLE ProcessHandle ;
DWORD DesiredAccess ;
HANDLE TokenHandle ; ProcessHandle = GetCurrentProcess() ;
DesiredAccess = TOKEN_WRITE ;
if (OpenProcessToken(ProcessHandle, DesiredAccess, &TokenHandle))
{
TOKEN_PRIVILEGES NewState ,PreviousState ;
LUID_AND_ATTRIBUTES LuidAtt ;
NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED ;
NewState.PrivilegeCount = 1 ;
if(LookupPrivilegeValue(NULL, SE_ASSIGNPRIMARYTOKEN_NAME,&NewState.Privileges[0].Luid))
{
DWORD ReturnLength ;
if (AdjustTokenPrivileges(TokenHandle,FALSE,&NewState,sizeof(NewState),NULL,NULL))
{
//修改  run 下边的注册表.....
}else
TRACE("AdjustTokenPrivileges %d\n", GetLastError()) ;
}else
TRACE("LookupPrivilegeValue%d\n", GetLastError()) ;
}

解决方案 »

  1.   

    上边的写错代码了
    DesiredAccess = TOKEN_WRITE,应该是
    DesiredAccess = SE_PRIVILEGE_ENABLED ;自己顶一个....
      

  2.   

    请求一个UAC权限提升,系统会弹出警告,用户点确定,程序就得到管理员权限了.然后和xp一样的
      

  3.   

    就是不清楚怎么个提示UAC权限,以前用过24号资源可以用,现在想直接在程序里用代码提升权限,请问要怎么做?能给个例子吗
      

  4.   

    如果你用vs2008编译,在link->manifest file页面有UAC设置,让你的程序在启动时就请求提升UAC权限,这个比较简单.如果不是vc2008,网上有许多文章讨论手动生成这个资源文件的方法.
    应该没法在程序运行时提升UAC.不过你可以请求输入用户名密码来获得用户登入密码,然后创建一个新的安全标示符,提升本线程的权限或者创建高权限子线程来完成任务.
      

  5.   

    使用资源的方法我用过,而且确实可行,不过现在想不通过添加manifest资源的方法实现,就是想通过程序动态的提升权限,不知道这样是否可行,方法是什么
      

  6.   

    用ShellExecute加载另一进程,lpOperation参数给"RunAs"。
      

  7.   

    同意楼上的,可以用Shellexcute强制制定以管理员身份运行