3

Win32 エラー コードのリストでは、各エラーに次の 3 つのコンポーネントがあります。

  • 数値エラー コード
  • 説明的なメッセージ
  • アンダースコアで区切られた大文字の単語で構成される識別子

documentationによると、 「メッセージ識別子」という用語は説明的なメッセージを指しますが、大文字のエラー名の用語が何であるかは言及されておらず、どこにも見つかりませんでした。これらの識別子は、PowerShell ErrorRecord オブジェクトの「エラー ID」と呼ばれるものに類似しているように見えますが、「win32 エラー ID」と「win32 エラー ID」をグーグル検索しても答えが得られませんでした。

たとえば、次のエラーの場合:

ERROR_TOO_MANY_OPEN_FILES

4 (0x4)

システムはファイルを開くことができません。

  • 4エラーコードです。
  • The system cannot open the file.メッセージ識別子です。
  • ERROR_TOO_MANY_OPEN_FILESそれは __________?

また、エラー コードが与えられた場合、このテキスト値はどのように決定できますか? 次のように、特定のエラー コードに関連付けられているメッセージ識別子を簡単に特定できます。

string MessageIdentifier = new Win32Exception(ErrorCode).Message;

ただし、Win32Exception クラスには、これらの大文字で始まるエラー名に対応するプロパティがないようです (ErrorRecord クラスのErrorIdプロパティに類似)。

一部のリストでは、この種の識別子が「定数」と呼ばれているのを見てきましたが、それらが定数である場合、それらはどこで定義/列挙されており、プログラムからどのようにアクセスしますか?

4

1 に答える 1

5

たとえば、次のエラーの場合:

ERROR_TOO_MANY_OPEN_FILES
4 (0x4)
システムはファイルを開くことができません。

•<code>4 はエラー コードです。
•<code>システムがファイルを開くことができません。メッセージ識別子です。
•<code>ERROR_TOO_MANY_OPEN_FILES は __________ ですか?

最後の2点であなたは間違っています。 リンク先の同じドキュメントによると、エラーコードメッセージ識別子の4両方です。

すべての Win32 エラー コードは 0x0000 から 0xFFFF の範囲内にある必要がありますが、Win32 エラー コードは 16 ビット フィールド (セクション 2.1 で指定された HRESULT 型など) と 32 ビット フィールドの両方で使用できます。ほとんどの値にはデフォルトのメッセージも定義されており、これを使用して、値を人間が判読できるテキスト メッセージにマップできます。これが完了すると、Win32 エラー コードはメッセージ識別子とも呼ばれます。

The system cannot open the file.メッセージ識別子 に属するメッセージ テキストです4。そのテキストは と によって報告されFormatMessage()ますWin32Exception.Message

ERROR_TOO_MANY_OPEN_FILES#defineWin32 SDK の winerror.h では、人間が判読できるようになっています。

//
// MessageId: ERROR_TOO_MANY_OPEN_FILES
//
// MessageText:
//
// The system cannot open the file.
//
#define ERROR_TOO_MANY_OPEN_FILES        4L

Win32 API または .NET のいずれにも、指定さERROR_TOO_MANY_OPEN_FILESれたエラー コードのテキストを返す関数はありません4。この pinvoke.net の例で示されているように、その機能が必要な場合は、独自のルックアップ コードを記述する必要があります。

WINERROR (定数)

int errorCode = 4; //Microsoft.Win32.Interop.ResultWin32.ERROR_TOO_MANY_OPEN_FILES
string identName = Microsoft.Win32.Interop.ResultWin32.GetErrorName(errorCode);
// returns "ERROR_TOO_MANY_OPEN_FILES"
于 2015-05-13T01:32:57.533 に答える