記事検索

検索ワードを入力してください。
Sky Tech Blog
Windowsの​サービスセッションに​表示されている​メッセージボックスの​文字列を​調べる​方​法

Windowsの​サービスセッションに​表示されている​メッセージボックスの​文字列を​調べる​方​法

Windowsのサービスセッションでプログラムがエラーメッセージを表示してフリーズした場合に、WinDbgを用いてメモリダンプからメッセージ内容を確認する手順を解説します。

Windowsのサービスセッションでプログラムがエラーメッセージを表示して止まっている場合に、メモリダンプからメッセージ内容を知る手順をご紹介いたします。

Windows Server上のサービスセッションにて、VBScriptを実行したwscript.exeが長時間止まったままになっていました。
メモリダンプを取得し、スタックを確認すると、メッセージボックスを表示して入力待ちになっていることがわかります。

0:000> k
 # Child-SP          RetAddr               Call Site
00 0000005b`2a6ff198 00007fff`7eedb3dc     win32u!NtUserWaitMessage+0x14
01 0000005b`2a6ff1a0 00007fff`7eedb917     user32!DialogBox2+0x254
02 0000005b`2a6ff240 00007fff`7eefef76     user32!InternalDialogBox+0x14b
03 0000005b`2a6ff2a0 00007fff`7eefd8b1     user32!SoftModalMessageBox+0x836
04 0000005b`2a6ff3e0 00007fff`7eefe6a5     user32!MessageBoxWorker+0x341
05 0000005b`2a6ff590 00007fff`7eefe72e     user32!MessageBoxTimeoutW+0x1a5
06 0000005b`2a6ff690 00007ff7`c1277f6d     user32!MessageBoxW+0x4e
07 0000005b`2a6ff6d0 00007ff7`c12781b5     wscript!CWinHost::PrintF+0x15d
08 0000005b`2a6ff770 00007ff7`c127c9bc     wscript!CWinHost::ReportError+0x55
09 0000005b`2a6ff7d0 00007ff7`c12797ec     wscript!CheckSecurity+0x98
0a 0000005b`2a6ff830 00007ff7`c1276b65     wscript!WinMain+0x250
0b 0000005b`2a6ffba0 00007fff`7e3d4cb0     wscript!WinMainCRTStartup+0x65
0c 0000005b`2a6ffc40 00007fff`8021edcb     kernel32!BaseThreadInitThunk+0x10
0d 0000005b`2a6ffc70 00000000`00000000     ntdll!RtlUserThreadStart+0x2b

サービスセッション上に表示されたUIは見ることができませんので、どういったメッセージで止まっているのか確認することができません。

MessageBox APIは内部的に、表示するメッセージ内容のポインタをスタックメモリ上に保存する特性があります。
WinDbgのコマンド
・64bitプロセスの場合「dqu rsp」
・32bitプロセスの場合「ddu esp」
でスタックメモリを閲覧すると、途中でメッセージ内容が表示されます。
「dqu rsp」でEnterキーを押し、次は「dqu」でEnterキー、以降はEnterキーを繰り返し入力するとスタックを閲覧していくことができます。

0:000> dqu rsp
0000005b`2a6ff198  00007fff`7eedb3dc "ἏD䠀쾋..䣿삅蔏﹣.ძ䲋䠤h섕κༀ䐟"
0000005b`2a6ff1a0  00000000`00000000
... 中略 ...
0000005b`2a6ff208  00007fff`7eefcd60 "譈䣄墉䠈梉䠐炉䰘炉䄠䡗.䥀.譍䣸..༏䂄.茀䓪萏."
0000005b`2a6ff210  00000165`8c0895c0 "Dž胈"
0:000> dqu
0000005b`2a6ff218  00007fff`7eefcd60 "譈䣄墉䠈梉䠐炉䰘炉䄠䡗.䥀.譍䣸..༏䂄.茀䓪萏."
0000005b`2a6ff220  00000000`00000000
... 中略 ...
0000005b`2a6ff288  00000000`00000001
0000005b`2a6ff290  00000000`00000000
0:000> 
0000005b`2a6ff298  00007fff`7eefef76 "줳.䓿曆ང.䗶ྋݵ蕅䗿䔏䣾..譈䣋ᗿ茲.ἏD䠀උ遶.譌.䣒ᗿ笺.ἏD䴀.ᡴ譈复ΐ䴀얋툳hᴕŻༀ䐟"
0000005b`2a6ff2a0  00000000`00010007
... 中略 ...
0000005b`2a6ff2e8  00000165`8c08b890 "Windows Script Host へのアクセスがこのコンピュータ上で無効にされています。詳細については、"
0000005b`2a6ff2f0  0000005b`00000045
0000005b`2a6ff2f8  00000165`00000082

途中で文字化けした文字列が表示されているのは「dqu」コマンドの動作によるものです。
「dqu」コマンドは、ポインタを文字列の先頭として解釈した表示をするコマンドです。
それが意味のある文字列かどうかは人間が判断しなければなりません。

スタックメモリの[0000005b2a6ff2e8]にある[000001658c08b890]に、意味のありそうな日本語が入っていました。全文を表示させてみましょう。

0:000> du /c100 00000165`8c08b890
00000165`8c08b890  "Windows Script Host へのアクセスがこのコンピュータ上で無効にされています。詳細については、管理者に連絡してください。."

該当環境ではWindows Script Hostが無効になっているようです。

Windows Script Hostは、以下のレジストリ設定で無効にすることができます。

キー:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings
エントリ:Enabled (REG_DWORD)
データ:0 ... WSH無効
    1 ... WSH有効(デフォルト)

別の環境にて上記の設定でWindows Script Hostを無効にしてみると、wscript.exe実行時に以下のメッセージボックスが表示されました。これのことですね。


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム