2

、プロセスは、ユーザーのセッションで実行しないようにしたい:私は、プロセスがで実行するサービスのためにコード例:サービスがCreateProcessAsUser(呼び出す)私はサンプルコード求めているセッション0

がCreateProcessAsUserを(コール)ユーザーのセッションではなく、セッション0

これまでに作成したプロセスは、これがサービスからコンソールアプリケーションを立ち上げ、いくつかの古いコードから剥離したセッション0

答えて

2

でのサービスのように実行されています。それはNT4で動作しましたが、現代版のWindowsでテストしていないので、NT4と同様に動作することは保証できません。

編集:いいえ、それはそのままでは機能しません。デスクトップを作成し、SIDなどを設定するにはhereというコードを追加する必要があります。

if (!LogonUser(userId, 
        domain, 
        password, 
        LOGON32_LOGON_INTERACTIVE, 
        LOGON32_PROVIDER_DEFAULT, 
        &hUserToken)) 
    { 
     return GetLastError(); 
    } 

    if (!ImpersonateLoggedOnUser(hUserToken)) 
    { 
     DWORD rc = GetLastError(); 
     CloseHandle(hUserToken); 
     return rc; 
    } 

    STARTUPINFO    si; 
    PROCESS_INFORMATION pi; 

    memset(&si, 0, sizeof(si)); 
    memset(&pi, 0, sizeof(pi)); 

    si.cb = sizeof(si); 

    rc = CreateProcessAsUser(hUserToken,    // user token 
          0,       // app name 
          "foo.exe",     // command line 
          0,       // process attributes 
          0,       // thread attributes 
          FALSE,      // don't inherit handles 
          DETACHED_PROCESS,   // flags 
          0,       // environment block 
          0,       // current dir 
          &si,       // startup info 
          &pi);      // process info gets put here 


    if (!rc) 
    { 
     DWORD rc = GetLastError(); 
     RevertToSelf(); 
     CloseHandle(hUserToken); 
     return rc; 
    } 

    RevertToSelf(); 
    CloseHandle(hUserToken); 

    return 0; 
+1

新しいデスクトップを作成する必要はありません。ユーザーの対話的な 'WinSta0 \ Default'デスクトップ(Microsoftの例に示すように)のような、' STARTUPINFO'構造体に既存のデスクトップを指定します。そして、あなたは本当にSIDを使いこなす必要はありません。サービス内の 'CreateProcessAsUser()'は、それがなくても正常に動作します。私は何年も問題なくサービスで使っていますが、私はSIDを操作しません。一方、 'LogonUser()'や 'ImpersonateLoggedOnUser()'は使わず、代わりに 'WTSQueryUserToken()'と 'DuplicateTokenEx()'を使います。 –

+1

また、 'CreateProcessAsUser()'も呼び出す前に 'CreateEnvironmentBlock()'を呼び出す必要があります。 –

+0

@RemyLebeau私は同意する(やや)。おそらくあなたは新しい答えを書くべきです。それは3年前の答えで、受諾も投票もないので、今はもっと時間を費やすことに消極的です。 –

関連する問題