NTSTATUS 查询应用程序






1.65/5 (9投票s)
2004年3月24日
2分钟阅读

60331

1074
有时,我们需要通过 FormatMessage 函数查询 NTSTATUS 代码查找,这不太方便。因此,我决定编写一个 NTSTATUS 错误代码查找应用程序。
引言
开发人员通常使用 Visual Studio 提供的错误查找应用程序,将 GetLastError()
转换为带有详细描述的便于理解的错误字符串。但是,有时我们也需要通过 FormatMessage
函数查询 NTSTATUS
代码查找,这不太方便。因此,我决定编写一个 NTSTATUS
错误代码查找应用程序。
背景
这很简单,只需将 FormatMessage
函数中的 Messagesource
更改为 NTDLL.DLL 的句柄即可。
// FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM| FORMAT_MESSAGE_FROM_HMODULE,Hand,ntStatusMsg, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (LPTSTR)&lpMessageBuffer,0,NULL); //
详细说明
“FormatMessage
函数格式化消息字符串。该函数需要一个消息定义作为输入。消息定义可以来自传递到函数的缓冲区。它可以来自已加载模块中的消息表资源。或者,调用者可以要求该函数在系统的消息表资源中搜索消息定义。该函数根据消息标识符和语言标识符在消息表资源中找到消息定义。该函数将格式化的消息文本复制到输出缓冲区,如果请求,则处理任何嵌入的插入序列。” FormatMessage
的语法是
// DWORD FormatMessage(DWORD dwFlags,LPCVOID lpSource, DWORD dwMessageID,DWORD dwLanguageID,LPTSTR lpBuffer, DWORD nSize,va_list* Arguments); //
第一个参数 dwFlags
包含对我们来说重要的格式化选项。完整的应用程序也包含在内。整个技巧是通过 LoadLibrary
获取错误代码资源的句柄。
// HMODULE Hand = LoadLibrary("NTDLL.DLL"); //
然后只需格式化消息并将 ntStatus
代码传递给它,即可获得相应的字符串。很简单!!不是吗?但是,一个应用程序作为错误查找会非常方便。
// FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_FROM_HMODULE, Hand,ntStatusMsg,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (LPTSTR)&lpMessageBuffer,0,NULL); //
就这样!很简单。我已经制作了一个示例应用程序。您可以随意使用它。
未来发布
- 将其制作成 Visual Studio 插件。
- 将其移植到 Visual Studio .NET 2003 并将其也制作成插件。
就这样!!
我知道它太简单了,但我发现这是一种有趣的方式来制作一个小应用程序,我需要它自己并与我的开发人员朋友分享。