Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从c+创建ProcessAsUser+;服务创建进程,但不创建控制台 我正在开发使用CuraPytAsService用户函数的C++服务。 我已经在Windows7上测试过了,效果非常好。 但我现在正在测试我的Windows10代码,它不想工作,但进程已经创建并在任务管理器中可见,只是没有创建窗口/控制台。 我现在正在尝试只使用cmd而不使用任何参数的代码段 我真的很感激任何帮助_C++_C_Winapi_Win32 Process - Fatal编程技术网

从c+创建ProcessAsUser+;服务创建进程,但不创建控制台 我正在开发使用CuraPytAsService用户函数的C++服务。 我已经在Windows7上测试过了,效果非常好。 但我现在正在测试我的Windows10代码,它不想工作,但进程已经创建并在任务管理器中可见,只是没有创建窗口/控制台。 我现在正在尝试只使用cmd而不使用任何参数的代码段 我真的很感激任何帮助

从c+创建ProcessAsUser+;服务创建进程,但不创建控制台 我正在开发使用CuraPytAsService用户函数的C++服务。 我已经在Windows7上测试过了,效果非常好。 但我现在正在测试我的Windows10代码,它不想工作,但进程已经创建并在任务管理器中可见,只是没有创建窗口/控制台。 我现在正在尝试只使用cmd而不使用任何参数的代码段 我真的很感激任何帮助,c++,c,winapi,win32-process,C++,C,Winapi,Win32 Process,我可以通过任务管理器看到这一点,因此创建了我的流程。 NtCurrentProcess()?是的,这是宏#定义NtCurrentProcess()((句柄)(LONG_PTR)-1)SE_ASSIGNPRIMARYTOKEN_特权和SE_rease_QUOTA_特权未声明,尝试在msdn中找到,但我只找到了以下内容:=>文本(“SeAssignPrimaryTokenPrivilege”)明白了,但仍然不起作用。未声明的PrimaryToken特权/我在开始和结束PIRVILIGES之间使用了

我可以通过任务管理器看到这一点,因此创建了我的流程。


NtCurrentProcess()?是的,这是宏
#定义NtCurrentProcess()((句柄)(LONG_PTR)-1)
SE_ASSIGNPRIMARYTOKEN_特权和SE_rease_QUOTA_特权未声明,尝试在msdn中找到,但我只找到了以下内容:=>文本(“SeAssignPrimaryTokenPrivilege”)明白了,但仍然不起作用。未声明的PrimaryToken特权/我在开始和结束PIRVILIGES之间使用了LUID对象,但仍然不起作用…评论不用于扩展讨论;这段对话已经结束。
    PROCESS_INFORMATION pi;
   STARTUPINFO si;
   BOOL bResult = FALSE;
   DWORD dwSessionId;
   HANDLE hUserToken;
    // Log the client on to the local computer.
   dwSessionId = WTSGetActiveConsoleSessionId();    
   WTSQueryUserToken(dwSessionId,&hUserToken);
   ZeroMemory(&si, sizeof(STARTUPINFO));
   si.cb= sizeof(STARTUPINFO);
   si.lpDesktop = L"winsta0\\default";
   ZeroMemory(&pi, sizeof(pi));    
   LPVOID pEnv =NULL;    
   if(CreateEnvironmentBlock(&pEnv,hUserToken,TRUE)){
   }
   else
      pEnv=NULL;    
   bResult = CreateProcessAsUser(
      hUserToken,                     // client's access token
      L"C:\\Windows\\System32\\cmd.exe",    // file to execute
      L"",                 // command line
      NULL,            // pointer to process SECURITY_ATTRIBUTES
      NULL,               // pointer to thread SECURITY_ATTRIBUTES
      FALSE,              // handles are not inheritable
      CREATE_UNICODE_ENVIRONMENT|HIGH_PRIORITY_CLASS,     // creation flags
      pEnv,               // pointer to new environment block
      NULL,               // name of current directory
      &si,               // pointer to STARTUPINFO structure
      &pi                // receives information about new process
   );    
   //Perform All the Close Handles tasks  
   DestroyEnvironmentBlock(pEnv);
   CloseHandle(pi.hThread);
   CloseHandle(pi.hProcess);
   CloseHandle(hUserToken);
#define LAA(se) {{se},SE_PRIVILEGE_ENABLED|SE_PRIVILEGE_ENABLED_BY_DEFAULT}

#define BEGIN_PRIVILEGES(tp, n) static const struct {ULONG PrivilegeCount;LUID_AND_ATTRIBUTES Privileges[n];} tp = {n,{
#define END_PRIVILEGES }};

ULONG adjustPrivileges()
{
    HANDLE hToken;

    ULONG err;
    if (OpenProcessToken(NtCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
    {
        BEGIN_PRIVILEGES(tp, 2)
            LAA(SE_ASSIGNPRIMARYTOKEN_PRIVILEGE),
            LAA(SE_INCREASE_QUOTA_PRIVILEGE),
        END_PRIVILEGES  

        AdjustTokenPrivileges(hToken, FALSE, (::PTOKEN_PRIVILEGES)&tp, 0, 0, 0);

        err = GetLastError();

        CloseHandle(hToken);
    }
    else
    {
        err = GetLastError();
    }

    return err;
}

ULONG cup()
{
    HANDLE hUserToken;

    DWORD dwSessionId = WTSGetActiveConsoleSessionId();

    if (dwSessionId == MAXDWORD)
    {
        return ERROR_GEN_FAILURE;
    }

    ULONG err = adjustPrivileges();

    if (err)
    {
        return err;
    }

    if (WTSQueryUserToken(dwSessionId,&hUserToken))
    {
        PVOID pEnv;

        if (CreateEnvironmentBlock(&pEnv,hUserToken,TRUE))
        {
            PROCESS_INFORMATION pi;
            STARTUPINFO si = { sizeof(STARTUPINFO) };
            si.lpDesktop = L"winsta0\\default";

            if (CreateProcessAsUser(
                hUserToken,                     // client's access token
                L"C:\\Windows\\System32\\cmd.exe",    // file to execute
                NULL,                 // command line
                NULL,            // pointer to process SECURITY_ATTRIBUTES
                NULL,               // pointer to thread SECURITY_ATTRIBUTES
                FALSE,              // handles are not inheritable
                CREATE_UNICODE_ENVIRONMENT|HIGH_PRIORITY_CLASS,  // creation flags
                pEnv,               // pointer to new environment block
                NULL,               // name of current directory
                &si,               // pointer to STARTUPINFO structure
                &pi                // receives information about new process
                ))
            {
                CloseHandle(pi.hThread);
                CloseHandle(pi.hProcess);
            }
            else
            {
                err = GetLastError();
            }

            DestroyEnvironmentBlock(pEnv);

        }
        else
        {
            err = GetLastError();
        }
        CloseHandle(hUserToken);
    }
    else
    {
        err = GetLastError();
    }
    return err;
}