Windows TIPS
[System Environment]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

“Error Code Lookup”ツールでエラー・コードから原因を探る

解説をスキップして操作方法を読む

デジタルアドバンテージ 小川 誉久
2005/12/03
 
対象OS
Windows 2000
Windows Server 2003
障害対策では、エラーを通知するダイアログや、ログ情報などに出力されるエラー番号から原因を調査しなければならない場合がある。
しかしエラー番号だけでは、どこの何を検索したらよいのか途方に暮れることも多い。
これに対しマイクロソフトは、Windowsや一部のサーバ製品などが発行するエラー番号から、関連する情報を検索できる無償ツールerr.exeを提供している。

解説

 システム管理者として障害対応していると、アプリケーションやWindowsシステムが、エラー・ダイアログやログ・ファイルなどに出力したエラー番号から、原因を調査しなければならない場面に出くわす。通常はエラー番号だけでなく、適切なエラー・メッセージなども表示されるようになっているのだが、めったに発生しないようなエラーでは、単にエラー番号しか表示されないことがあるからだ。

 このエラー番号でヘルプやマイクロソフトのサポート技術情報、各種インターネット・サイトなどを検索し、目的の情報が見つかればよいが、現実はそううまくいかないケースが多い。せめてエラー番号だけでなく、どのコンポーネントがエラーの原因になっているのかを類推できれば、検索に使うキーワードなどを工夫して、情報収集の作業を効率化できるはずだ。

 このような目的に使える“err.exe”というコマンドライン・ツールがマイクロソフトから無償提供されている。


操作方法

 err.exeは、以下のダウンロード・サイトから入手できる。

 タイトルから考えると、err.exeは、Exchange Serverが発行するエラー番号を検索するツールとして提供されているようだが、実際にはExchange Serverだけでなく、多くのアプリケーションが使用するWin32エラーはもちろんのこと、体系の異なるNTSTATUS、HRESULT、LDAPエラーや、さらにはOutlook ExpressのエラーやHTTP応答のような限られた状況の番号まで検索できるので、Windows環境でのエラー番号検索に広く利用できる。ただし、提供されているのは英語版のみである(サーバOSだけでなく、Windows XPのようなクライアントOS上でも動作する)。

 上記サイトから、自己解凍ファイルをダウンロードし、適当なフォルダを指定してファイルを解凍する。すると“Err”というフォルダが作成され、これ以下に実行プログラム(err.exe)と簡単なドキュメント(“Error Code Lookup Tool.doc”)が解凍される。

 まずはさっそく実行してみよう。

C:\Err>err c0000142   ←エラー・コード“c0000142”でerrを実行
# for hex 0xc0000142 / decimal -1073741502 :←16進と10進でのコード値
  STATUS_DLL_INIT_FAILED        ntstatus.h  ←情報の場所と識別子
# {DLL Initialization Failed}       ←識別子に付随する情報
# Initialization of the dynamic link library %hs failed. The
# process is terminating abnormally.
# 1 matches found for "c0000142"     ←1件合致したという情報
errコマンドの実行例(パラメータとして“c0000142”を指定)

 これは、例として“c0000142”というエラー・コードをerr.exeのパラメータとして指定した。この場合は、ntstatus.hというヘッダ・ファイルのSTATUS_DLL_INIT_FAILEDという識別子がコードに対応することが見つかり、コメントなどの付随情報が表示されている。はっきりとは分からないが、これを見れば、どうやら“c0000142”はDLLの初期化に失敗したことによるエラーのようであることが分かる。

 このようにerr.exeは、Windows OSやExchange Serverなどのプログラムで使われている(インクルードされている)ヘッダ・ファイル(*.h)の情報を持っており、ここから与えられたコードを検索して、合致した情報(ヘッダでその値がリターン・コードとして指定されている識別子と付随情報)を表示してくれるのだ。検索にあたっては、与えられたパラメータを16進/10進変換して双方で検索してくれる。

 原稿執筆時に入手したバージョン(最終コンパイル日時:2003年3月31日 14:39:19)では、winerror.hやntstatus.hなど、172個のファイルに含まれる1万9871個のリターン・コードから検索可能だった(パラメータなしでerr.exeを実行することで、情報が収録されているヘッダ・ファイル一覧が表示される)。

 エラー番号だけをパラメータに指定すると、err.exeに収録されているすべての情報から検索が実行される。例えば“100”を指定して検索すると、以下のように複数の情報(13件)が見つかった。

C:\Err>err 100
# for decimal 100 / hex 0x64 :
  SYMBOLIC_INITIALIZATION_FAILED        bugcodes.h
  MSG_E_CA_CERT_INVALID                 certlog.mc
# Certificate Services did not start: Could not load or
# verify the current CA certificate.  %1 %2.
  NMERR_INVALID_FRAMESPROC              netmon.h
  OLEUI_ERR_STANDARDMIN                 oledlg.h
  OLEUI_ERR_OLEMEMALLOC                 oledlg.h
  TLS1_ALERT_NO_RENEGOTIATATION         schannel.h
# warning
  ERROR_TOO_MANY_SEMAPHORES             winerror
# Cannot create another system semaphor.he.
  HTTP_STATUS_CONTINUE                  winhttp.h
# OK to continue with request
# for hex 0x100 / decimal 256 :
  LOADER_BLOCK_MISMATCH                 bugcodes.h
# The loader block is invalid or does not match the system
# being loaded.
  MSG_KEYSVC_REVERT_TO_SELF_FAILED      cryptmsg.mc
# The Cryptographic Services service failed to revert to its
# original
# security context after impersonating a client's security
# context.
# The service is now running in an unknown state, and should
# be
# restarted.  The error was: %1: %2
  DHCP_DROP_GEN_FAILURE                 dhcpssdk.h
  STATUS_KERNEL_APC                     ntstatus.h
  SQL_256_severity_16                   sql_err
# The data type %ls is invalid for the %ls function. Allowed
# types are: char/varchar, nchar/nvarchar, and
# binary/varbinary.
# 13 matches found for "100"
errコマンドの実行例(パラメータとして“100”を指定)

 実際の障害対応では、エラーが発生したコンポーネントや状況から、これらのうちどれが対応するものなのかを推理しなければならない。一般的には、通常のアプリケーションならwinerror.h、OSの基本的なコンポーネントならntstatus.hといった傾向がある。

 ある程度原因が特定できているなら、ヘッダ・ファイルをパラメータに指定して、それらのファイルからのみ検索可能である。例えば“100”を“winerror.h”と“ntstatus.h”からのみ検索するには次のようにする。

C:\Err>err /winerror.h /ntstatus.h 100
# winerror.h selected.
# ntstatus.h selected.
# for decimal 100 / hex 0x64 :
  ERROR_TOO_MANY_SEMAPHORES                winerror.h
# Cannot create another system semaphore.
# for hex 0x100 / decimal 256 :
  STATUS_KERNEL_APC                        ntstatus.h
# 2 matches found for "100"
ファイルを絞り込んで検索する

 このようにファイルを指定するには、スラッシュ(/)の直後にファイル名を指定する。ファイル名はいくつでも指定可能である。

 また、複数のエラー・コードをパラメータに指定して検索することができる。例えば、

err 100 1000

とすれば、エラー・コード“100”の検索と、“1000”の検索が続けて実行され、双方の検索結果が続けて表示される。End of Article

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間