Windows 8:CreateFile() 返回 INVALID_HANDLE_VALUE,立即 GetLastErr
Windows 8: CreateFile() returns INVALID_HANDLE_VALUE, immediate GetLastError shows 0
我正在打印机过滤器环境中打开一个带有 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 SharedWritern", 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)rn", GetLastError());
return (Vers_FAILURE);
}
日志消息输出:
渲染 15:41:46.715:BufCreate:创建文件失败 (0(;使用 SharedWrite 重试
渲染 15:41:46.715:BufCreate:创建文件失败 (0(
因为这是相对随机发生的,所以将其发送到 MS 是行不通的;他们会用"no rep"将其发回给我,我会因为 SRX 而受到批评。有没有人知道我将如何进行?
很烦人。事实证明,我没有在我认为的位置编写文件,这就是它失败的原因。但它应该返回错误 5(访问被拒绝(,并且由于 GetLastError 中这个的 0,我被带到了一个树桩。
值得一提的是:我创建了一个临时目录的路径。因为我当时的安全上下文是 LocalSystem(我在 PrinterPipeline 服务中(,所以该文件位于 c:\Windows\System32\Services\LocalService\AppData\Local\Temp 中。 没有普通用户能够到达该空间,并且尝试很可能会使您的操作系统陷入困境。我已更改为用户安全上下文以写入 C:\Temp,并且由于忘记将文件名更改为 C:\Temp 而失败。错误 0 使我看起来像是面临将 c:\temp 映射到本地服务空间的文件系统重定向
。纠正这一点,以便我实际上是在写我认为我已经摆脱了失败的地方......但我仍然不明白为什么 Windows 会给我一个错误 0。
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- 为什么static_assert错误:即使我传递常量"expression must have a constant value"?
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 为什么我会" void value not ignored as it ought to be"?
- 方法错误"not all control paths return a value"和方法不返回值
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- 如何在 c++ 中理解这样的代码 [request->headers().Method()->value().getStringView())]
- std::<key-value>不同类型的对向量
- c++ visual studio 64bit | save registers value
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 如何解决类成员函数中的"return a value"错误?
- bsoncxx: document::view vs document::value
- .value( "key" , default) 不适用于空的 json 对象吗?
- protobuf C++ SQLite handle blob data
- 如何在C++中设置演员的"Render Custom Depth Pass"和"Depth Stencil Value"?
- Qt 错误:QSqlQuery::value:尝试从表中检索统计信息时未定位在有效记录上 (QComboBox)
- 马洛克会在 C++17 年返回"invalid pointer value"吗?
- 如何将 v8::FunctionCallbackInfo<v8::Value> 数组从一个隔离复制到另一个隔离?
- std::value templated 方法的函数使用 clang 和 g++ 进行编译,但不使用 msvc 进行编译
- 无法使用 auto 来参数化true_type来检测 T::value()