- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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/
处理 Application_Error 中的错误时,我应该使用这两个中的哪一个? 我正在为两者找到多个示例,但不清楚一个是否比另一个更好。是否存在只有一个会显示正确错误的情况? 另外,我怀疑这很重要
不久前,我为 Windows API 函数编写了一个简单的包装器类。我编写了一组单元测试来验证该类生成的结果与直接调用 API 相匹配。 最近我回去添加了关于跨不同线程使用包装器类的单元测试。我发现
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我有一个函数,它为每种情况返回不同的 DWORD 值,如果出现错误。所以我有以下定义: #define ERR_NO_DB_CONNECTION 0x90000 #define ERR_DB_N
德尔福 Xe。 在delphi帮助中:“...调用此函数通常会重置操作系统错误状态...” 如何将当前错误重置为 0? IE。 GetLastError=0 示例: Try // There is a
在调用像 ExtractShortPathName 这样的 Windows API 函数包装器后使用 GetLastError 时,我注意到 GetLastError 返回一个非零错误代码,无论是否对
我正在尝试编写一些函数来创建仅用于使用剪贴板的 Windows 消息窗口。我知道创建窗口失败,但是当我添加 GetLastError() 函数调用时,该函数永远不会返回到 Java。这使得调试变得很棘
这非常类似于: Turning GetLastError() into an exception 我还希望能够将 std::string 添加到错误中: class Win32Exception
下面是一个创建线程的简单程序。我希望我遗漏了一些明显的东西。仅供引用 - 我是 Win32 的新手。 为什么线程执行中的GetLastError()返回87(ERROR_INVALID_PARAMET
我有一个函数可以将 GetLastError 函数转换为字符串以在我的项目中使用。但在部署之前,我需要在示例程序中进行测试。当我测试它时,它没有给我任何错误,因为示例程序没有任何错误。 谁能帮我如何在
在此示例中,dwerror 是 10045L。但此代码返回 0x13d 值作为错误。如何获取格式消息?请看一下。 TCHAR lpMsgBuf[512]; if(!FormatMessage(
我有一个可以打开很多窗口的应用程序。有时,我得到 wglCreateContext() 返回 0 而 GetLastError() 返回 0xc007001f。 它只发生在 Intel 显卡上。 有人
我知道 GetLastError 会在发生错误时立即调用。我写了函数: void PrintErrorMsg() { DWORD errCode = GetLastError(); L
为什么 QT 应用程序中的最后一个错误始终为零? SetLastError(23); qDebug() << "LastError: " << GetLastError(); 预期输出:最后一个错误:
假设我正在使用 APC,其中过程和调用代码都使用 SetLastError 和 GetLastError。这会导致 GetLastError 产生不可预测的值。有什么办法可以解决这个问题吗? VOID
我有一个 Visual Studio 2008 C++ 项目,它在出现异常 错误时使用 Win32Exception 类。 Win32Exception 类如下所示: /// defines an e
假设 GetLastError(和变体)是每线程还是每进程是否正确?如果它是每个进程的问题在多线程应用程序中有些明显,因为无法保证在失败的调用和 GetLastError 之间没有进行其他 Win32
为什么是RegCreateKeyEx()返回 LONG ,而不是设置 DWORD错误代码来自 SetLastError() ? 转换它的 LONG 对我来说安全吗?将值返回给 DWORD然后用 Set
我如何在 php 中使用 getLastError() 检查我的保存方法是否正在插入到 mongo? 我按如下方式设置我的数据库: $this->databaseEngine = $app['mong
如果您有一个大型系统,它会自动显示一个漂亮的窗口来解释捕获的异常,那么能够将错误代码与消息一起显示(以供进一步调查)会很好。但是由于某些函数调用是针对设置错误代码的失败 Windows 函数,而有些是
我是一名优秀的程序员,十分优秀!