Winapi 如何使用FileAPI复制错误\u写入\u保护?

Winapi 如何使用FileAPI复制错误\u写入\u保护?,winapi,Winapi,我有几个程序实例。每个应用程序使用不同的文件,并将一些信息写入该文件。 一般来说,它可以正常工作很长一段时间,但在一个案例中,我发现所有实例都无法同时写入其文件,错误代码为:error\u write\u PROTECT(0x13)。 必须注意,我不知道此时在运行程序的服务器上发生了什么。 以下是程序中的代码片段: Handle myHandle = CreateFile(fileName, GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_DE

我有几个程序实例。每个应用程序使用不同的文件,并将一些信息写入该文件。 一般来说,它可以正常工作很长一段时间,但在一个案例中,我发现所有实例都无法同时写入其文件,错误代码为:error\u write\u PROTECT(0x13)。 必须注意,我不知道此时在运行程序的服务器上发生了什么。 以下是程序中的代码片段:

Handle myHandle = CreateFile(fileName,
    GENERIC_ALL,
    FILE_SHARE_READ | FILE_SHARE_DELETE,
    NULL,
    CREATE_NEW,
    FILE_FLAG_DELETE_ON_CLOSE,
    NULL);

DWORD dwBytesWritten = 0;
unsigned char buffer[bufferSize];

// Code that fills the buffer

if (!WriteFile(myHandle, buffer, bufferSize, &dwBytesWritten, NULL))
{
    // Log GetLastError() result
}
我正在试图弄清楚为什么会发生这种情况,以及我如何复制它? 我必须对文件或文件夹执行什么样的操作才能获得错误\写入\保护(0x13)错误代码

我必须对文件或文件夹执行什么样的操作才能获得错误\写入\保护(0x13)错误代码


可能会弹出软驱,翻转开关,然后再插回去?在计算机没有软盘的日子里,这听起来可能很奇怪,但应该有软盘驱动器模拟器,而VMWare等虚拟机能够模拟软盘,因此这是可能的。

相反,调用并记录
GetLastError()
使用
RtlGetLastNtStatus()执行此操作将提供更多信息。两种不同的状态-
状态\u介质\u写\u保护
状态\u太晚
(卸载卷后尝试对卷执行写入操作)映射到
错误\u写\u保护
。也许你真的得到了
状态\u太晚了
错误谢谢你的建议,用软盘模拟是相当困难的,在我的例子中,软盘模拟并不存在,但是,我试着用“网络驱动器”来模拟它。在写入文件时,我断开了“网络驱动器”的连接,但出现了错误\u unep\u NET\u ERR 59(0x3B),我认为预期与网络驱动器的行为不一样。您可以做的最接近的事情可能是在适当的时候弹出闪存驱动器(考虑到有关
状态的注释太晚了
映射到此错误)。