1

管理者プロセスから呼び出された場合、またはそのユーザーと将来的には Windows サービスによって呼び出された場合に、C++ コードでコンソール ユーザーをログオフする機能が必要です。私が直面している問題は、ExitWindowsEx がそれを呼び出したユーザーのみをログオフすることです。管理者プロセスがログオフを呼び出しても、コンソール ユーザーは影響を受けません。これを行うことができると私が知っている唯一のアプリケーションは、psShutdown.exe です。ただし、psShutdown は管理者のみが実行できます。コンソール ユーザーを識別し、そのユーザーに対してログオフを行う方法を C++ で知っている人はいますか? psShutdown 内の魔法とは何ですか? WindowsXP以降で動作するものを探しています。また、一部のマシンは Windows Embedded を実行しており、WMI を備えていないため、WMI を使用できません。

(psShutdown.exe を管理者として実行する必要があるのは、サービスをインストールするためであり、通常のユーザーにはこれを行う権限がないためです。)

4

2 に答える 2

1

WTSGetActiveConsoleSessionIdを使用してコンソールセッションを識別しますが、さらにいくつかのアクセス許可が必要になる場合は、WTSQueryUserToken(これを行うにはSYSTEMとして実行する必要があります)を呼び出してトークンハンドルを取得してからCreateProcessAsUserを呼び出すか、ExitWindowsExを偽装して呼び出す必要があります、またはサービスを利用していない場合は、WTSLogoffSessionを呼び出します。(XPボックスでWTSLogoffSessionを呼び出そうとしましたが、機能しませんでした。おそらく、このシステムでターミナルサーバーサービスが実行されていないためです)

于 2011-03-01T22:07:06.447 に答える
1

私は実際にこれを行ったことはありませんが、WTSGetActiveConsoleSessionId()WTSLogoffSession( ) の組み合わせで可能のようです。

于 2011-03-01T22:03:42.040 に答える