Windows错误码解析

阅读目录

C或者C++开发肯定经常会遇到各种错误码,由于每个错误码只是一个枚举或者一个整形数值,调试或者输出日志的时候,无法知道这个错误码的具体含义,这时候就需要将此错误码解释出来。对于自己定义的错误码,可以通过自己的方式进行解析。对于Windows API的错误码,则需要调用Windows的API进行解析,下面来介绍具体的错误码解析方法。

回到顶部

Windows API 错误码解析

调用Windows API失败后,通常需要通过GetLastError来获取对应的错误码,要将此错误码解析为对应的描述信息,则需要调用另外一个Windows API FormatMessage,原型如下:

 Collapse

DWORD WINAPI FormatMessage(
  _In_      DWORD dwFlags,
  _In_opt_  LPCVOID lpSource,
  _In_      DWORD dwMessageId,
  _In_      DWORD dwLanguageId,
  _Out_     LPTSTR lpBuffer,
  _In_      DWORD nSize,
  _In_opt_  va_list *Arguments
);

具体的参数意义就不在这里介绍了,直接查看MSDN即可,下面来看一下具体的使用方法示例:

 Collapse

char msg[1024] = { 0 };
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, 5, LANG_NEUTRAL, msg, _countof(msg), NULL);
cout << msg << endl;

运行程序即可看到对应的错误描述:拒绝访问

回到顶部

Windows异常值解析

程序在运行的时候,难免会产生一些异常,通过Windows的SEH机制可以得到此异常信息,其中会包含一个异常值,比如0xC0000008。如果用上面提到的FormatMessage的方式,获取到的消息是一个字符串,或者无法获取到此异常值的描述。那么如何获取这个异常值的描述呢,仔细看FormatMessage API的MSDN文档,可以看到有这样一个标志:

 Collapse

FORMAT_MESSAGE_FROM_HMODULE

这个标志的意思是:可以通过其他模块,来解释此异常值或者错误码。

那么什么模块会包含Windows异常值的定义和解释呢,通过谷歌或者MSDN可以知道,是“ntdll.dll”

知道了这些,就可以写程序来解释Windows异常值了,代码如下:

 Collapse

char msg[1024] = { 0 };
HMODULE hntdll = LoadLibrary("NTDLL.DLL");
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE,
    hntdll, 0xC0000008, LANG_NEUTRAL, msg, _countof(msg), NULL);
FreeLibrary(hntdll);
cout << msg << endl;

回到顶部

ErrLook程序

当的程序中确实需要对Windows错误码和Windows异常值进行解析的时候,就可以使用上面的方法进行解析。

但是当我们只是简单的想看看一个错误码的解释的时候,难道还必须写一个程序来解释吗。

微软也考虑到了你正在思考的这一点,所以在安装了VS后,都会附带一个小工具,用来解释错误码,叫做:ErrLook,一般可以在VS的工具菜单中看到,或者可以在“VS目录\Common7\Tools”目录下找到这个程序,如下:

http://www.cnblogs.com/hbccdf/p/windows_error_code_parsing.html

时间: 2024-12-21 10:40:24

Windows错误码解析的相关文章

python windows错误码

在用python删除文件的时候,一直报这个错误,查了 error5的错误是 拒绝访问 在用python删除文件的时候,一直报这个错误,查了 error5的错误是 拒绝访问.那么是删除权限不够?用管理员,一样的错误.后来才发现原来文件是只读属性.所以导致无法操作. 去掉只读属性就好. import os import stat os.chmod( filename, stat.S_IWRITE ) 附上 windows error错误代码: 0操作成功完成. 1功能错误. 2系统找不到指定的文件.

网络服务错误码解析

10009 boost::asio::error::bad_descriptor 在一个已经关闭了的套接字上执行收发操作 原因: 当构建io_service ip::tcp::socket 作为类的成员变量的情况下,必须确保它们都是处于同一个生命周期之内,如果 io_service作为局部变量被提前释放掉,之后调用socket就会出现上面10009错误 10060 connection timed out 超时 原因 要访问的网站有问题,关机了或者服务未启动等等: 到网站的网络有问题,连接不上:

页面访问的常见错误码解析

200  OK 一切正常 301   Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL. 302   Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的.注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”.出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码.注意这个状态代码有时候可以和301替换使用.例如,如果浏览器错误地请求http:

Windows API 错误码

在多数情况下,windows API在发生错误时很少抛出异常,多数是通过函数返回值进行处理.(windows api中无返回值的函数很少.) windows api错误处理通常按照以下方式:首先api函数返回特殊的值,表明函数内部发生错误:然后调用方可以使用GetLastError获得对应的错误码. 通常情况下windows api按照返回类型可以分为以下几类: 返回值为BOOL类型.有错误发生,返回值为0,否则返回非零值. 返回值为HANDLE类型.有错误发生时,返回NULL或INVALID_

GetLastError错误码大全

GetLastError返回的值通过在api函数中调用SetLastError或SetLastErrorEx设置.函数 并无必要设置上一次错误信息,所以即使一次GetLastError调用返回的是零值,也不能 担保函数已成功执行.只有在函数调用返回一个错误结果时,这个函数指出的错误结果 才是有效的.通常,只有在函数返回一个错误结果,而且已知函数会设置GetLastError 变量的前提下,才应访问GetLastError:这时能保证获得有效的结果.SetLastError函 数主要在对api函数

socket学习及各类错误码(部分转)

如果本地有多个网卡(即多个ip),要指定本地发送网卡,则在建立的socket上bind所指定的网卡进行connect和send操作.例子程序如下: #include <stdio.h>#include "WinSock2.h"#pragma comment(lib,"ws2_32.lib") SOCKET tcp_socket;SOCKADDR_IN tcpAddr;const int BufLen=1024;char SendBuf[BufLen];

微信支付curl出错及错误码解决方案

关键字:微信支付 curl出错 错误码6 错误码7 错误码28 错误码52 错误码58 错误码60 错误码77 作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/wxpay-curl-error.html 本文介绍微信支付开发集成过程中,常见的错误码及其解决方案. 1. curl错误码6 出现场景 PHP Fatal error: Uncaught exception 'WxPayException' with message 'curl出错,错误码:6'

HTTP协议头及错误码详解

通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息.客户端向服务器发送一个请求,请求头包含请求的方法.URI.协议版本.以及包含请求修饰符.客户信息和内容的类似于MIME的消息结构.服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息.实体元信息以及可能的实体内容. Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET.POST.PUT.DELETE.一个URL地址用于描述一个网络上的资源,而HTTP中的GET.POS

HTTP 头部信息和错误码汇总详细解释,必收藏!

最近在调试 前后端分离的请求测试,遇到了一个406错误, 无法接受,于是开始了人肉搜索406 最后 还是HTTP头部信息里的 Accept:application/json  这个Accept 导致的, 后端设置了只允许application/json 这种形式,so前端模拟请求的时候,你也要和后端沟通好,然后发送请求参数,就可以了! 正好,也忘得差不多了,下面我们就来总结和回顾一下HTTP 的一些参数 和错误码等等 前端不懂HTTP协议就等于废了一条腿, 跑不快,飞不高! GO!!! 本文为多