gpt4 book ai didi

c++ - Windows 8 : CreateFile() returns INVALID_HANDLE_VALUE, 即时 GetLastError 显示 0

转载 作者:行者123 更新时间:2023-11-28 05:55:41 34 4
gpt4 key购买 nike

我在 Windows 8 上的打印机过滤器环境中使用 CreateFile 打开一个文件。代码实际上是直接的 C,即使过滤器是用 C++ 构建的。 CreateFile 返回 INVALID_HANDLE_VALUE 但立即调用 GetLastError 返回 0。我以前见过这个,回到旧的 NT4 时代(一直到 Windows 7) 如果存在与文件同名的目录,则文件打开尝试将失败,错误为 0;但我已经检查过,文件名与目标目录中的任何子目录都不同。

代码:

io_buf[fh].fh = CreateFile(name, GENERIC_READ|GENERIC_WRITE, 0, p_sa,
CREATE_ALWAYS, 0, (HANDLE)0);
io_buf[fh].read_mode = FALSE;
io_buf[fh].file_start = 0L;
io_buf[fh].folder = 0;

if (io_buf[fh].fh == INVALID_HANDLE_VALUE)
{
LogMsg("BufCreate: CreateFile failed (%ld); retrying with SharedWrite\r\n", GetLastError());
io_buf[fh].fh = CreateFile(name, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, p_sa,
CREATE_ALWAYS, 0, (HANDLE) 0);
}
if (io_buf[fh].fh == INVALID_HANDLE_VALUE)
{
LogMsg("BufCreate: CreateFile failed (%ld)\r\n", GetLastError());
return (Vers_FAILURE);
}

LogMsg 输出:

Render 15:41:46.715: BufCreate: CreateFile failed (0); retrying with SharedWrite

Render 15:41:46.715: BufCreate: CreateFile failed (0)

因为这种情况相对随机发生,发送到 MS 是行不通的;他们会以“不代表”的方式将其退还给我,而我会因为 SRX 而受到指责。有人知道我将如何进行吗?

最佳答案

这很烦人。原来我没有在我认为的地方写文件,这就是它失败的原因。但它应该返回错误 5(访问被拒绝),而由于 GetLastError 中的这个该死的 0,我被搞得一头雾水。

它的值(value):我已经创建了一个临时目录的路径。因为当时我的安全上下文是 LocalSystem(我在 PrinterPipeline 服务中),所以那个文件在 c:\Windows\System32\Services\LocalService\AppData\Local\Temp 中。普通用户无法到达该空间,而且这种尝试很可能会使您的操作系统陷入困境。我已更改为用户安全上下文以写入 C:\Temp,但由于忘记将文件名更改为 C:\Temp 而失败。错误 0 使我看起来可能面临将 c:\temp 映射到 LocalService 空间的文件系统重定向。

更正它,以便我实际上是在我认为我已经摆脱了失败的地方写的......但我仍然不明白为什么 Windows 将错误 0 返回给我。

关于c++ - Windows 8 : CreateFile() returns INVALID_HANDLE_VALUE, 即时 GetLastError 显示 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34191919/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com