调用的 Win32 错误代码的大写文本标识符是什么?给定错误代码,如何以编程方式确定它们?
What are the capitalized text identifiers for Win32 error codes called, and how can they be determined programmatically, given an error code?
在listings of Win32 error codes中,每个错误都包含三个组成部分:
- 数字错误代码
- 描述性消息
- 由下划线分隔的大写单词组成的标识符
根据the documentation,术语"message identifier"指的是描述性消息,但它没有说明大写错误名称的术语是什么,我一直没能在任何地方找到它。这些标识符似乎类似于 PowerShell ErrorRecord 对象中所谓的 "Error Id",但谷歌搜索 "win32 error id" 和 "win32 error identifier" 没有得到答案。
例如在下面的错误中:
ERROR_TOO_MANY_OPEN_FILES
4 (0x4)
The system cannot open the file.
4
是 错误代码 。
The system cannot open the file.
是 消息标识符 。
ERROR_TOO_MANY_OPEN_FILES
是 __________?
另外,给定错误代码,如何确定此文本值?我可以很容易地确定与给定错误代码关联的消息标识符,如下所示:
string MessageIdentifier = new Win32Exception(ErrorCode).Message;
但是,the Win32Exception class 似乎没有对应于这些大写错误名称的 属性(类似于 ErrorRecord class 的 ErrorId 属性).
在一些清单中,我看到这些类型的标识符被称为 "constants",但如果它们是常量,它们在哪里 defined/enumerated 以及如何从程序访问它们?
For example, in the following error:
ERROR_TOO_MANY_OPEN_FILES
4 (0x4)
The system cannot open the file.
•4
is the error code.
•The system cannot open the file.
is the message identifier.
•ERROR_TOO_MANY_OPEN_FILES
is the __________?
最后两点你错了。 4
是 错误代码 和 消息标识符,与您链接到的 documentation 相同:
All Win32 error codes MUST be in the range 0x0000 to 0xFFFF, although Win32 error codes can be used both in 16-bit fields (such as within the HRESULT type specified in section 2.1) as well as 32-bit fields. Most values also have a default message defined, which can be used to map the value to a human-readable text message; when this is done, the Win32 error code is also known as a message identifier.
The system cannot open the file.
是属于消息标识符4
的消息文本。该文本由 FormatMessage()
and Win32Exception.Message
.
报道
ERROR_TOO_MANY_OPEN_FILES
只是 Win32 SDK 中 winerror.h 中人类可读的 #define
:
//
// MessageId: ERROR_TOO_MANY_OPEN_FILES
//
// MessageText:
//
// The system cannot open the file.
//
#define ERROR_TOO_MANY_OPEN_FILES 4L
在 Win32 API 或 .NET 中没有函数可以 return 给出错误代码 4
的文本 ERROR_TOO_MANY_OPEN_FILES
。如果您需要该功能,则必须编写自己的查找代码,如本 pinvoke.net 示例所示:
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"
在listings of Win32 error codes中,每个错误都包含三个组成部分:
- 数字错误代码
- 描述性消息
- 由下划线分隔的大写单词组成的标识符
根据the documentation,术语"message identifier"指的是描述性消息,但它没有说明大写错误名称的术语是什么,我一直没能在任何地方找到它。这些标识符似乎类似于 PowerShell ErrorRecord 对象中所谓的 "Error Id",但谷歌搜索 "win32 error id" 和 "win32 error identifier" 没有得到答案。
例如在下面的错误中:
ERROR_TOO_MANY_OPEN_FILES
4 (0x4)
The system cannot open the file.
4
是 错误代码 。The system cannot open the file.
是 消息标识符 。ERROR_TOO_MANY_OPEN_FILES
是 __________?
另外,给定错误代码,如何确定此文本值?我可以很容易地确定与给定错误代码关联的消息标识符,如下所示:
string MessageIdentifier = new Win32Exception(ErrorCode).Message;
但是,the Win32Exception class 似乎没有对应于这些大写错误名称的 属性(类似于 ErrorRecord class 的 ErrorId 属性).
在一些清单中,我看到这些类型的标识符被称为 "constants",但如果它们是常量,它们在哪里 defined/enumerated 以及如何从程序访问它们?
For example, in the following error:
ERROR_TOO_MANY_OPEN_FILES
4 (0x4)
The system cannot open the file.•
4
is the error code.
•The system cannot open the file.
is the message identifier.
•ERROR_TOO_MANY_OPEN_FILES
is the __________?
最后两点你错了。 4
是 错误代码 和 消息标识符,与您链接到的 documentation 相同:
All Win32 error codes MUST be in the range 0x0000 to 0xFFFF, although Win32 error codes can be used both in 16-bit fields (such as within the HRESULT type specified in section 2.1) as well as 32-bit fields. Most values also have a default message defined, which can be used to map the value to a human-readable text message; when this is done, the Win32 error code is also known as a message identifier.
The system cannot open the file.
是属于消息标识符4
的消息文本。该文本由 FormatMessage()
and Win32Exception.Message
.
ERROR_TOO_MANY_OPEN_FILES
只是 Win32 SDK 中 winerror.h 中人类可读的 #define
:
//
// MessageId: ERROR_TOO_MANY_OPEN_FILES
//
// MessageText:
//
// The system cannot open the file.
//
#define ERROR_TOO_MANY_OPEN_FILES 4L
在 Win32 API 或 .NET 中没有函数可以 return 给出错误代码 4
的文本 ERROR_TOO_MANY_OPEN_FILES
。如果您需要该功能,则必须编写自己的查找代码,如本 pinvoke.net 示例所示:
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"