C++ 黑客编程揭秘与防范(第3版)
上QQ阅读APP看书,第一时间看更新

1.5.1 Error Lookup工具的使用

Error Lookup工具可以在VC6的“ToolS”菜单中找到,它可以对GetLastError()函数提供的出错代码进行解释,解释为可以理解的文字描述。下面通过一个非常简单的程序来解释该工具的使用。

例子代码如下:

        #include <windows.h>
        #include <stdio.h>

        int main()
        {
            HANDLE hFile = CreateFile("c:\\test.txt", GENERIC_READ,
                          FILE_SHARE_READ, NULL, OPEN_EXISTING,
                          FILE_ATTRIBUTE_NORMAL, NULL);

            if ( hFile == INVALID_HANDLE_VALUE )
            {
                printf("Err Code = %d \r\n", GetLastError());
            }

            return 0;
        }

这段代码非常短小,主要是通过CreateFile()函数打开一个已经存在的文件,但是这里传递给函数的第1个参数“c:\\test.txt”是一个不存在的文件,那么CreateFile()对c:\\test.txt文件的打开必然会错误。当打开错误时,程序调用GetLastError()函数会得到一个错误码,并通过printf()进行输出。

编译运行这个程序,看到命令行中输出字符串“Err Code=2”,说明GetLastError()函数得到的错误码为“2”。有了这个错误码,通过VC6的“ToolS”菜单打开“Error Lookup”工具,在“Value”处输入“2”,然后单击“Look up”按钮,就可以看到错误码的解释为“系统找不到指定的文件”,如图1-17所示。

图1-17 “Error Lookup”工具

在平时写程序的时候,要养成对函数的返回值进行判断的习惯。在编写程序的时候,当调用CreateFile()函数时,指定文件的参数可能是由用户提供的。而当用户指定的文件不存在时,同样会报错。在代码中调用FormatMessage()函数可以将GetLastError()函数的错误码转换为错误描述。(提示:这里只是说明在代码中如何将GetLastError()的错误码转换为错误描述,建议在真正写程序时自行对用户的输入进行判断过滤,以保证程序的健壮性。)