この問題を自分で解決できました。この質問を見てくれたすべての人に感謝します。
わかりました、上で述べたように、トークンはセッション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 での作業の苦痛が軽減されました。迷惑なポップアップはもうありません。