由于某些需要,我运行一些程序时需要临时提升用户权限才可运行,但是又不想用RunAs那样还要人手输入密码的,请问如何可以后台赋给账户名和密码,然后实现权限提升来运行程序?

解决方案 »

  1.   


      if ( ( dwPid = GetProcessId( "WINLOGON.EXE" ) ) == NULL )
      {
        printf( "GetProcessId() to failed!\n" );       bError = TRUE;
        goto Cleanup;
      }  hProcess = OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, dwPid );
      if ( hProcess == NULL )
      {
        printf( "OpenProcess() = %d\n", GetLastError() );       bError = TRUE;
        goto Cleanup;
      }我百度WSSRUN找的代码(我不全贴了,各位一百度就全部可以看到),走到
    hProcess = OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, dwPid );
    就出问题了,hProcess 返回的是NULL值,是怎么回事??
      

  2.   

    OpenProcess WinLogon失败很正常,你先提升了Debug权限了之后就可以了
      

  3.   

    首先你当前的用户有提升用户权限的能力,比如你在User用户权限下,想把用户权限提升到管理员用户权限是不可能的.要想打开WinLogon进程,必须有管理员或者System权限才可以.
      

  4.   

    那为什么我的RunAs就可以呢??它唯一麻烦的地方就是要人手输入密码,我现在就是想让自己的其他帐户密码在后台已经给了它,使我可以实现类似:
    runas [username], [psw], [application path]
    来直接提升运行这个程序的权限……
      

  5.   


    runas是你给一个超级用户的用户名和密码,然后用这个用户的权限启动你的应用程序,所以你的程序相当于运行在指定的用户权限下.
      

  6.   

    CreateProcessAsUser配合LogonUser就可以了。
    请仔细看看MSDN吧。
      

  7.   

    我编译的WSSRUN 就能用,你编译的不能用?给个连接,这是我以前编译的。代码网上一找一大把。http://download.csdn.net/source/1634199
      

  8.   

    if (!LogonUser("administrator",   
      NULL,   
      password,   
      LOGON32_LOGON_INTERACTIVE,   
      LOGON32_PROVIDER_DEFAULT,   
      &handleToken))
    {
    DWORD err = GetLastError();
    CString str;
    str.Format("LogonUser:%d", err);
    AfxMessageBox(str);
    } if (!ImpersonateLoggedOnUser(handleToken))
    {
    DWORD err = GetLastError();
    CString str;
    str.Format("ImpersonateLoggedOnUser:%d", err);
    AfxMessageBox(str);
    }
      

  9.   

    CreateProcessAsUser(handleToken,  "notepade.exe",NULL,NULL,NULL,NULL,NULL,NULL,NULL,&startInfo,&procInfo);
    启动程序时这样就可以了。