Mar*_* Ba 7 c++ windows file-io winapi visual-c++
我们目前面临调用WriteFile(或者更确切地说是CFile :: Write - 但只是在内部调用WriteFile)导致Win32错误的问题5 ERROR_ACCESS_DENIED.
(编辑:请注意,我们无法重现行为.我们目前只有一个日志文件,指示CFile :: Write所在的源行,并包含错误ERROR_ACCESS_DENIED!)
(编辑:该文件位于本地驱动器上,它实际上是一个文件而不是目录.)
现在,WriteFiles的文档并没有真正的帮助,并且尝试使用简单的测试应用程序会产生以下结果:
32ERROR_SHARING_VIOLATION).这让我们看到了这种情况,如果文件实际上是用read标志而不是write标志打开的话,那么这个调用的唯一可能性就是失败了.但是,看看我们的代码,这似乎不太可能.(由于我们的跟踪,我们可以确信的WriteFile失败,我们可以肯定的是,错误是ERROR_ACCESS_DENIED,我们不能确保开口标志的100.1%,因为这些不被描绘出.)
是否存在WriteFile(CFile :: Write)会导致ERROR_ACCESS_DENIED的其他已知情况?
注意:另外澄清这个问题的背景:
我应该补充一点,我们在WIndows XP sp3上运行,应用程序是用Visual Studio 2005编译的.
问题是
是什么原因导致 WriteFile 返回 ERROR_ACCESS_DENIED?
我在问题中指出
- 如果为未打开写入(即打开为只读)的文件句柄调用 WriteFile 将导致 ERROR_ACCESS_DENIED。
在添加了对开放标志和另一个事件的进一步日志记录后,事实证明这是正确的。打开标志的日志记录显示,在发生错误时,文件对象是使用 CFile::modeRead 打开的,因此我们得到了 ERROR_ACCESS_DENIED。
还没有找到哪个奇怪的代码路径导致了这个,但这只是表明:永远不要相信你自己的代码。:-)
(哦,顺便说一句。这不是::WriteFile失败,而是::FlushFileBuffersAPI 失败,但显然返回了相同的错误。)