セッション0でcmd.exeを起動しようとしています。これまでのところ、管理者特権のコマンドプロンプトから次の操作を行いました。
sc config UI0Detect start= auto
net start UI0Detect
そして応答はサービスが正しく開始されたことを示します。この時点で、セッション0に切り替えた場合、cmd.exeが実行されていると想定していました。
次のコマンドを使用してセッション0に切り替えます。
rundll32 winsta.dll,WinStationSwitchToServicesSession
これでセッション0に正常に切り替わりますが、利用できる唯一のウィンドウは、セッション1に戻るオプションがあるウィンドウです。
セッション0でcmd.exeを起動するにはどうすればよいですか?
セッション0でcmd.exeを起動するには、psexecを Sysinternals から使用します。
psexec.exe -s 0 cmd.exe
これで、セッション0でコンソールが実行されました。
セッション0でcmd.exeを起動してGUIを表示することもできます。
psexec.exe -s -i 0 cmd.exe
このようにして、セッション0に切り替えると、cmd.exeがそこで待機します。
windows 7で取得できる限り多くの権利があります。
whoami /all
他のPsToolsを使用する場合は、必ず/ accepteulaスイッチを使用してください。
pslist /accepteula
そうでない場合、プログラムはメッセージボックスをポップアップしてEulaの受け入れを要求します。セッション0にメッセージボックスを閉じるUIがないため、プログラムはハングします。
セッション0で実行していることを確認するには、qprocessを使用できます。
qprocess /ID:0
すべてのサービスプロセスの中に「cmd.exe」が表示されます。
それは動作しません。システムとしてプロセスを開始するだけです。
サービスは、サービスコントロールマネージャーからのコマンドを受け付ける特別な方法で記述されたプログラムです。
MSには、プログラムをサービスとして実行できるユーティリティがあります。これはSrvany
と呼ばれ、Windows 2003リソースキットツールに含まれています。
私はある日偶然に解決策を発見しましたが、 http://www.alex-ionescu.com/?p=59 も私が見つけたものに近い解決策を文書化しています
次のバッチファイルを作成します(some.batと呼びます)。
start cmd
次に、このバッチファイルを呼び出すサービスを作成します(管理コマンドプロンプトを使用)。
sc create access0 type= interact type= own binpath= some.bat
(各=の後のスペースに注意してください。some.batにはフルパスを使用することをお勧めします)
次に、サービスを開始することです
sc start ui0detect
sc start access0
(sc config UI0Detect start = autoでui0detectを自動起動する必要はありません)
そして、すべてがうまくいくと、差し迫ったメッセージの点滅ボックスが表示されます!メッセージの表示に移動すると、サービスの開始に失敗しても自動的に破棄されない管理者(nt author\system)コマンドプロンプトが表示されます(そのため、startコマンドを使用したバッチファイルが必要です)。
これは機能しますが、最初の試行では機能しないことがあります。
これにより、インタラクティブなセッション0のみにアクセスできるようになると思います。これは、nt権限\ systemユーザーに対してのみ存在します。