Windows核心编程第一章,错误处理.
一丶错误处理
1.核心编程学习总结
不管是做逆向,开始做开发.在Windows下.你都需要看一下核心编程这本书.这本书确实写得很好.所以自己在学习这本书的同时,也把自己所学的知识进行 总结,以及巩固.
2.常见的Windows函数返回类型总结
数据类型 作用
VOID 如果是Void表示函数不可能失败.极少数windows函数会返回void
BOOL 表示这个函数会有失败情况.0失败.否则就是非0.但是一般都会使用TRUE FALSE来判断.
HANDLE Windows中的句柄类型.返回值同创为NULL.否则的话HANDLE将标识一个可以操纵的对象.有些函数会返回INVALID_HANDLE_VALUE来表示
具体要查看MSDN文档看看对函数的返回值要求.
PVOID 如果失败返回NULL,否则将会是一个void *的地址.
LONG/DWORD 这种类型也很多.返回值通常是一个LONG(long)类型或者DWORD(unsigned int)类型的值.如果返回值是这两个.那么要仔细检查出现的错误.
3.错误代码获取设置格式化输出
错误代码获取是一个Windows提供的API函数.
函数名称/圆形 作用
DWORD WINAPI GetLastError(void)
返回值: 返回调用线程之后的错误代码调用成功则返回ERROR_SUCESS
void WINAPI SetLastError(
_In_ DWORD dwErrCode
);
传入一个DWORD错误值进行设置
DWORD FormatMessage(
DWORD dwFlags,
LPCVOID lpSource,
DWORD dwMessageId,
DWORD dwLanguageId, LPTSTR lpBuffer, DWORD nSize, va_list *Arguments );
根据GetlastError获取的错误代码值.进行格式化输出.自动匹配错误码代表的意思.
4.调试小技巧
如果你使用VC++或者VS编译器,你可以在监视窗口输入 @err,hr 这个命令.那么程序在调试的时候会自动获取API的错误代码.
如果调用的API没有错误,就是返回0 也就是说ERROR_SUCESS 否则则就会返回错误代码.这个错误代码可以用工具查看.
当然,你可以查询MSDN. MSDN上有介绍GetLastError配合ForMatMessage来打印错误代码.
5.错误代码查找工具的使用
VS编译器还提供了了错误代码查看工具.我们可以输入那么就会显示错误代码代表的什么意思.
VS2013 - 工具 - 错误查找
如下图所示: