2

サービスがユーザーセッションでプロセスを作成する簡単な方法があるかどうか疑問に思っていましたか?

私のサービスは、LocalSystem アカウントとしてではなく、ユーザー (管理者) アカウントとして実行されているため、WTSQueryUserToken 関数を使用できません。

私は電話してみました

OpenProcessToken(GetCurrentProcess,TOKEN_ALL_ACCESS,TokenHandle);

しかし、このトークンを使用して実行すると

 CreateProcessAsUser(TokenHandle,.....)

プロセスがまだセッション 0 で実行されています。この問題を解決するにはどうすればよいですか?

私は Ole オートメーションを使用しているので、セッション 0 でない限り、プロセスがどのセッションで実行されるかはあまり気にしません。インスタンス) をセッション 0 で作成しますが、他のユーザー セッションでそれらを作成します。

どんな提案でも大歓迎です。前もって感謝します。

4

1 に答える 1

1

この問題を自分で解決できました。この質問を見てくれたすべての人に感謝します。

わかりました、上で述べたように、トークンはセッション0で実行されているプロセスに属しています...

だから私がやったことは...セッション0で実行されていないプロセスのトークンを探しています。そのプロセスIDをOpenProcessTokenのパラメーターとして使用すると。CreateProcessAsUser が同じセッションでプロセスを作成するよりも (おそらく、選択したプロセスと同じ資格情報を使用して)。

問題は、関数を使用してほとんどのプロセスの詳細を取得できなかったことです: QueryFullProcessImageName - バグがあり、スペースを含むパスから作成されたプロセスでは機能しないため (C: \Program files for instance) およびその機能の別の問題は、ユーザー資格情報を使用して元のプロセスを実行しているため、Local-system アカウントを使用して実行されているプロセスの情報にアクセスできないことです。winlogon.exe をプロセスとして使用したかったため、これはかなり悪いことです (これは、新しく開いたセッションを示しているためです)。

また、そのトリックを成功させるには、システムのセキュリティを少し操作して、プロセスが昇格したセキュリティを要求できるようにする必要があります。実行中のプロセス SeAssignPrimaryTokenPrivilege - ユーザー セッション プロセス (ie explorer.exe) から抽出したトークンで新しいプロセスを実行するため

この権限の昇格を成功させるには、プロセスを実行するユーザーを、run->gpedit.msc または run->secpol.msc (Local Computer Policy\Computer Configuration\ の下) で、このすべての権限の関連ユーザーに追加する必要があります。 Windows の設定\セキュリティの設定\ LocalPolicies\User Rights Assignments)

アカウントを次の権利に追加します (上記の特権と互換性があります):
トークン オブジェクトを作成する
プログラムをデバッグ
する プロセス レベルのトークンを置き換える

それだけです!:)それはうまく機能しています!ところで、すべての UAC を無効にしたい場合があります...関連があるかどうかはわかりませんが、2008 での作業の苦痛が軽減されました。迷惑なポップアップはもうありません。

于 2010-02-10T23:13:21.520 に答える