当前,我们面临调用WriteFile
(或者更确切地说是CFile::Write-但这只是内部调用WriteFile)而导致Win32错误5
ERROR_ACCESS_DENIED
的问题。
(编辑:请注意,我们无法复制该行为。此刻,我们所拥有的只是一个日志文件,该日志文件指示CFile::Write所在的源行,并且包含错误ERROR_ACCESS_DENIED!)
(编辑:该文件位于本地驱动器上,实际上是文件而不是目录。)
现在,WriteFiles's documentation并没有真正的帮助,尝试使用一个简单的测试应用程序会产生以下结果:
如果为未打开的文件句柄(即仅用于读取而打开)的文件句柄被调用,
32
错误ERROR_SHARING_VIOLATION错误)。 这使我们处于这种情况,这显然是如果文件实际上是使用读取标志而不是写入标志打开的,则此调用失败的唯一可能性。但是,从我们的代码来看,这似乎极不可能。 (由于进行了跟踪,因此可以确定WriteFile失败,并且可以确定错误是ERROR_ACCESS_DENIED,我们不能确定打开标志的100.1%,因为这些标志没有被找出。)
还有其他已知情况下WriteFile(CFile::Write)会导致ERROR_ACCESS_DENIED吗?
注意:要进一步阐明此问题的上下文,请执行以下操作:
我应该补充一点,我们正在Windows XP sp3上运行,并且该应用程序是使用Visual Studio 2005编译的。
最佳答案
问题是
我在问题中说
在为打开标志和其他事件添加了进一步的日志记录之后,事实证明这是正确的。打开标志的日志记录显示在错误点,文件对象是使用CFile::modeRead打开的,因此我们得到了ERROR_ACCESS_DENIED。
尚未找到哪个奇怪的代码路径导致了这一点,但这仅表明:永远不要相信自己的代码。 :-)
(哦,顺便说一句。不是::WriteFile
失败了,而是::FlushFileBuffers
API,但显然返回了相同的错误。)
关于c++ - 是什么导致WriteFile返回ERROR_ACCESS_DENIED?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4312568/