windows - 错误码
3种错误类型
windows 中有常见的错误返回值,不同的格式类型是不同的,之间可以相互转换,今天介绍下下面3种的返回值的格式,另外提供给大家查找错误码的方法。
HRESULTs,Win32 error code,NTSTATUS
1、HRESULT
HRESULT编号空间具有以下内部结构
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
2 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
3 |
1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
S |
R |
C |
N |
X |
Facility |
Code |
S(1位):严重性。如果设置,表示失败结果。如果清除,则表示成功。
R(1位):保留。如果N位清零,则该位必须设置为0。如果N位被置位,则该位由NTSTATUS编号空间定义。 NTSTATUS 和 HRESULT 的转换映射。
C(1位):客户。该位指定值是客户定义的还是Microsoft定义的。该位设置为客户定义的值,清除为Microsoft定义的值。
N(1位):如果置位,则表明该错误代码是一个NTSTATUS值(如第2.3节中所述),但该位置1。
X(1位): 保留。应该设为0。
Facility(11位):错误来源。具体可以参考下面链接。
Code(2个字节):错误代码。
格式介绍
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/0642cb2f-2075-4469-918c-4441e69c548a
HRESULT value
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/705fb797-2175-4a90-b5a3-3918024b10b8
2、Win32 error code
所有Win32错误代码都必须在0x0000到0xFFFF范围内
错误代码可以查看链接:
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/18d8fbe8-a967-4f1c-ae50-99ca8e491d2d
WIN32错误代码可以转换成HRESULT
使用模式0x8007XXXX将Win32错误代码转换为HRESULT,其中XXXX是Win32十六进制值0x0000XXXX的前两个字节。
#define FACILITY_WIN32 0x0007#define __HRESULT_FROM_WIN32(x)((HRESULT)(x)<= 0?((HRESULT)(x)):((HRESULT)(((x)&0x0000FFFF)|(FACILITY_WIN32 << 16)| 0x80000000)))
示例: ERROR_
0x00000004 ERROR_TOO_MANY_OPEN_FILES
系统无法打开文件。
3、 NTSTATUS
内部格式如下:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
2 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
3 |
1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Sev |
C |
N |
Facility |
Code |
Sev(2位):严重性。严重等级代码如下。
价值 |
意义 |
---|---|
STATUS_SEVERITY_SUCCESS 0x0 |
成功 |
STATUS_SEVERITY_INFORMATIONAL 0x1 |
信息性 |
STATUS_SEVERITY_WARNING 0x2 |
警告 |
STATUS_SEVERITY_ERROR 0x3 |
错误 |
C(1位):客户。这指定值是客户定义的还是Microsoft定义的。此位设置为客户定义的值,清除为Microsoft定义的值。<3>
N(1位):保留。必须将其设置为0,以便可以通过设置该位将NTSTATUS值映射到等效的HRESULT值
Facility(12位):一个值,与C位一起指示用于“代码” 字段的编号空间。
Code(2个字节):错误代码的其余部分。供应商应按其指定的含义重用下表中的值,或使用C位置1定义自己的值。C位清零时选择任何其他值都可能会导致将来发生冲突。
0xC0000409 STATUS_STACK_BUFFER_OVERRUN
系统在此应用程序中检测到基于堆栈的缓冲区溢出。此超限可能会允许恶意用户控制此应用程序。
查看错误码的方式
https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-formatmessage
#include <windows.h>
#include <strsafe.h>void ErrorExit(LPTSTR lpszFunction)
{ // Retrieve the system error message for the last-error codeLPVOID lpMsgBuf;LPVOID lpDisplayBuf;DWORD dw = GetLastError(); FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS,NULL,dw,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,0, NULL );// Display the error message and exit the processlpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR),TEXT("%s failed with error %d: %s"), lpszFunction, dw, lpMsgBuf); MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); LocalFree(lpMsgBuf);LocalFree(lpDisplayBuf);ExitProcess(dw);
}void main()
{// Generate an errorif(!GetProcessId(NULL))ErrorExit(TEXT("GetProcessId"));
}
其他用于错误处理的函数
功能 | 描述 |
---|---|
Beep | 在扬声器上产生简单的音调。 |
CaptureStackbackTrace | 通过在堆栈上走动并记录每一帧的信息来捕获堆栈跟踪。 |
FatalAppExit | 显示消息框,并在关闭消息框时终止应用程序。 |
FlashWindow | 闪烁指定的窗口一次。 |
FlashWindowEx | 闪烁指定的窗口。 |
FormatMessage | 格式化消息字符串。 |
GetErrorMode | 检索当前进程的错误模式。 |
GetLastError | 检索调用线程的最后一个错误代码值。 |
GetThreadErrorMode | 检索调用线程的错误模式。 |
MessageBeep | 播放波形声音。 |
RtlLookupFunctionEntry | 在活动功能表中搜索对应于指定PC值的条目。 |
RtlNtStatusToDosError | 检索与指定的NT错误代码相对应的系统错误代码。 |
RtlPcToFileHeader | 检索包含指定PC值的图像的基地址。 |
RtlUnwind | 启动过程调用帧的展开。 |
RtlUnwind2 | 启动过程调用帧的展开。 |
RtlUnwindEx | 启动过程调用帧的展开。 |
RtlVirtualUnwind | 检索指定函数上下文之前的函数的调用上下文。 |
SetErrorMode | 控制系统是否将处理指定类型的严重错误,或进程是否将处理它们。 |
SetLastError | 设置调用线程的最后错误代码。 |
SetLastErrorEx | 设置调用线程的最后错误代码。 |
SetThreadErrorMode | 控制系统是处理指定类型的严重错误还是调用线程将处理它们。 |
windows - 错误码相关推荐
- Windows错误码
Windows错误码 简介 代码 简介 记录下windows的一些错误码,包括主要是文件操作错误码,系统错误的错误码在449以后,不在这里.以后有时间再整理,暂时放在这里了 代码 // // Mess ...
- Windows错误码2503和2502
2503和2502错误码通常出现在Windows系统中,指的是安装或卸载程序时遇到的错误. 2503错误码表示在安装或卸载程序时发生了一些错误,可能是由于权限不足或某些文件被占用等原因导致的. 250 ...
- python windows错误码
在用python删除文件的时候,一直报这个错误,查了 error5的错误是 拒绝访问 在用python删除文件的时候,一直报这个错误,查了 error5的错误是 拒绝访问.那么是删除权限不够?用管理员 ...
- Windows 错误码整理
0x0000 操作成功完成. 1 0x0001 函数不正确. 2 0x0002 系统找不到指定的文件. 3 0x0003 系统找不到指定的路径. 4 0x0004 系统无法打开文件. 5 0x0005 ...
- Windows Sockets 错误码及出错原因
From: http://blog.csdn.net/mjay1234/article/details/7684316 Windows Sockets在头文件winsock.h中定义了所有的错误码,它 ...
- Windows下错误码全解析
windows系统下,调用函数出错时.可以调用GetLastError函数返回错误码.但是GetLastError函数返回值是DWORD类型,是一个整数.如果想要知道函数调用的真正错误原因,就需要对这 ...
- windows getLastError 错误码大全
对于不想装msdn的朋友来说,这简直就是大大大大的福利啊! 0000 操作已成功完成. 0001 错误的函数. 0002 系统找不到指定的文件. 0003 系统找不到指定的路径. 0004 系统无法打 ...
- windows下查看错误码与错误信息
在linux下#include<errno.h>后,错误码被直接写在errno这个全局变量中,错误信息可以通过perror(const char* __s)查看. 在Windows下需要# ...
- 亲测有效:局域网共享打印机出现,windows无法连接到打印机错误码0x0000011b
问题描述: 想要局域网共享打印机,win10系统,网络已经设置完成,专用网络及公用网络设置的共享也开启,无密码共享.连接打印机所在电脑可以进入,也可以看到打印机及共享文件夹.但在具体连接时,出现&qu ...
最新文章
- Java实用教程笔记 类与对象
- 【Java Web开发指南】AjaxJson笔记
- 出席国际海水稻论坛-林裕豪:从玉农业谋定陆丰稻作改良
- mysql设置catalog_catalog恢复目录介绍和配置
- JAVA的内省机制(introspector)与反射机制(reflection)
- php ci session获取值,CI3.1 Session类取不到值的问题
- 用javascript实现动态增加DataGrid行
- python判断_轻松python文本专题-判断对象里面是否是类字符串(推荐使用isinstance(obj,str))...
- 图(网)的存储结构(数组存储表示即邻接矩阵、邻接表)
- 关于python多线程和定时器 看图不说话
- 如果一栋楼起火谁赔偿_太原一辆快递车起火!赶紧看看有你的包裹没?
- 11 Sping框架--AOP的相关概念及其应用
- ROS入门教程(一)
- 无损内嵌字幕到mkv文件
- VR火灾隐患排查,模拟多种火灾场景
- OSChina 周五乱弹 —— 是时候动手了
- 一个人一个微博、一个App一个故事:通过微博草根账号做英语学习App的“爱卡微口语”获晨脉创投天使投资
- 注册公司经营范围还不知道怎么写?看这一篇就够了!
- PCB板框的绘制——AD19
- 苹果开发者账号,年龄未满18周岁,怎么修改个人信息啊
热门文章
- CocoaChina大会见闻——cocos2d-x 3.0 新特性
- SQL注入原理及如何判断闭合符
- 中南财经政法大学计算机实践试题及答案,中南财经政法大学计算机2006-2007期末考试卷(A)答案...
- Latex部分斜体变直体
- 禁用或限制svchost会有哪些后果?
- matlab特效实现,matlab 使用 实现三维建模源码,效果非常好,可以用于 点云数据的 262万源代码下载- www.pudn.com...
- java8 - Optional容器
- 浅谈当今主流笔记本的cpu
- python boxplot significance_Boxplot的概念
- 读书笔记 -《Python 黑帽子》 ( 一 )