使用FormatMessage函数编写一个内核错误码查看器
来源:互联网 发布:java 打印内存地址 编辑:程序博客网 时间:2024/05/22 12:40
在编写驱动程序的时候,常用的一个结构是NTSTATUS,它来表示操作是否成功,但是对于失败的情况它的返回码过多,不可能记住所有的情况,应用层有一个GetLastError函数,根据这个函数的返回值可以通过错误查看器来查看具体的错误原因,但是内核中就没有这么方便了,我之前在网上找资料的时候发现很多人都是把错误码和它的具体原因都列举出来,然后人工进行对照查找,这样很不方便,有没有类似于应用层上错误码查看工具的东西呢?终于皇天不负有心人,我在微软官网上找到了FormatMessage的说明,自己实现了这个功能,现在讲这个部分记录下来,以供大家参考
void CNTLookErrorDlg::OnBnClickedBtnLookup(){ // TODO: 查找错NTSTATUS值对应的错误 LPVOID lpMessageBuffer; HMODULE Hand = LoadLibrary(_T("NTDLL.DLL")); DWORD dwErrCode = 0; dwErrCode = GetDlgItemInt(IDC_EDIT_ERRCODE); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE, Hand, dwErrCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMessageBuffer, 0, NULL ); // Now display the string. GetDlgItem(IDC_EDIT_ERRMSG)->SetWindowText((LPTSTR)lpMessageBuffer); // Free the buffer allocated by the system. LocalFree( lpMessageBuffer ); FreeLibrary(Hand);}
这是用mfc写的一段代码,首先加载NTDLL.dll文件,然后调用FormatMessage,第一个参数需要新加入FORMAT_MESSAGE_FROM_HMODULE表示需要从某个模块中取出错误码和具体字符串之间的对应关系,然后将第二个参数传入dll的句柄,这个dll中记录了内核中错误码和对应字符串的信息。如果不加这个标志,那么默认从系统中获取,也就是获取应用层的GetLastError中返回的信息与错误字符串的对应关系。
有了这个信息,剩下的就交给FormatMessage来进行格式化啦。这样一个简单的工具就完成了,再也不用满世界的找对应关系然后手工对比了,程序的运行结果如下:
阅读全文
0 0
- 使用FormatMessage函数编写一个内核错误码查看器
- FormatMessage函数使用详解
- FormatMessage错误消息处理函数
- 利用FormatMessage函数获取错误描述
- FormatMessage通过错误码取出错误文本
- FormatMessage函数
- FormatMessage函数
- FormatMessage函数
- FormatMessage 函数
- FormatMessage函数的使用(转)
- FormatMessage 查看出错原因
- 使用FormatMessage获取由GetLastError得到的错误的描述
- 如何获取错误消息说明使用 FormatMessage API
- 使用dump_stack查看内核函数调用
- FormatMessage 错误消息
- FormatMessage VC函数
- FormatMessage函数的用法
- FormatMessage函数简介
- Python爬虫爬取京东内存条数据并作简单分析
- 使用ISO镜像文件在VMware虚拟机中安装系统
- Run-Down 保护
- HDU3622 Bomb Game
- spring框架-基本jar包作用
- 使用FormatMessage函数编写一个内核错误码查看器
- Microsoft Virtual PC2007的安装配置
- poj题目清单(一)
- 实验二 线性表综合实验——单链表
- push was rejected by remote(因部分文件过大)(安卓)
- PL/SQL之四 触发器
- 习题7-15:最大的数(dfs+最优性剪枝)
- 802.1Q帧格式
- Windows环境下MongoDB的安装与简单的命令