服务A 中创建进程B,怎样B才会有关机权限呢
查的资料时使用 CreateProcessAsUser 和LogonUser,但是这两个函数中有一个叫token的东西部明白,还有那位高人讲一下怎样实现上面的功能阿,或者有CreateProcessAsUser 和LogonUser的用法的,非常感谢。

解决方案 »

  1.   

    需要提升进程的权限
    //提升进程权限
    BOOL CProcess::UpgradeProcessPrivilege(HANDLE hProcess, DWORD dwAttributes, LPCTSTR lpPrivilegeName)
    // hProcess  : 需要提升权限的目标进程
    // lpPrivilegeName :特权名
    // 返回值 : TRUE : 成功; FALSE : 失败
    {
    BOOL              bResult = TRUE;
    HANDLE            hToken;
    TOKEN_PRIVILEGES  TokenPrivileges; if (OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken) == 0)
    {
    CString strMessage;
    strMessage.Format("OpenProcessToken Error: %d\n", GetLastError());
    TRACE(strMessage);
    bResult = FALSE;
    } TokenPrivileges.PrivilegeCount           = 1;
    TokenPrivileges.Privileges[0].Attributes = dwAttributes;
    //SE_PRIVILEGE_USED_FOR_ACCESS;//SE_PRIVILEGE_ENABLED ;
    LookupPrivilegeValue(NULL, lpPrivilegeName, &TokenPrivileges.Privileges[0].Luid); AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
        if (GetLastError() != ERROR_SUCCESS)
    {
    bResult = FALSE;
    }
    CloseHandle(hToken);
        
    return bResult;
    }
    //
      

  2.   

    CreateProcessWithLogonW吧,这样,你就需要输入用户名和密码了。记得CreateProcessWithLogonW只有UNICODE版的,所以参数得以UNICODE传递。