CreateFile()返回一个地址为FFFFFF的无效指针

CreateFile() return an invalid pointer with the address FFFFFF

本文关键字:FFFFFF 指针 无效 一个 返回 CreateFile 地址      更新时间:2023-10-16

我只想使用CreateFile函数读取一个文件,如下所示:

#include <iostream>
#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv)
{
    PIMAGE_DOS_HEADER pImageDosHeader;
    HANDLE hFile = NULL;
    HANDLE hMapObject;
    PUCHAR uFileMap;
    if (argc < 2)
        return (-1);
    std::cout << "hFile=" << hFile << std::endl;
    if (!(hFile = CreateFile((LPCWSTR)argv[1], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,
        NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)))
    {
        return (-1);
    } else {
        std::cout << argv[1] << std::endl;
        std::cout << "hFile=" << hFile << std::endl;
        getchar();
    }
    return (0);
}
问题是输出如下所示:

hFile=000000(指针初始化为NULL) ->好)

hFile=FFFFFF(无效指针)

请问有人能帮我吗?谢谢你的帮助。

以下内容:

if (!(hFile = CreateFile(...)))

不是用来检查错误的

来自文档:

如果函数失败,返回值为INVALID_HANDLE_VALUE。要获取扩展的错误信息,请调用GetLastError

INVALID_HANDLE_VALUE-1,或十六进制的0xFFFFFFFFF。你需要调用GetLastError()来了解发生了什么。

当您从大多数Win32 api中获得错误时,您可以调用GetLastError()来找出错误所在。从那里开始吧。

这种类型的防御性编程对于高效的Win32编程是必不可少的。失败的实际条件因API而异,因此使用MSDN检查应该在失败代码路径中查找什么。