Winapi 如何在驱动器/分区Win Api 32上获得独占锁?

Winapi 如何在驱动器/分区Win Api 32上获得独占锁?,winapi,visual-c++,Winapi,Visual C++,如何锁定特定驱动器,直到我在该驱动器上执行某些操作(读/写)。 当我捕获到驱动器上的锁时,其他进程都不能在该驱动器单元上写入。当我释放该驱动器上的锁时,我找到了一个API,即DeviceIoControl(), 但我只想访问我的进程的驱动器,但上面的API“可能”会阻止所有进程的访问。我不太清楚lockfile()和lockfileex()是如何工作的。请帮我找到一些方法/API/逻辑来实现这一点! ... ... 更新:- 关于你的回答,我已经试过了:--> “但是……” 在获得E驱动器的独占

如何锁定特定驱动器,直到我在该驱动器上执行某些操作(读/写)。 当我捕获到驱动器上的锁时,其他进程都不能在该驱动器单元上写入。当我释放该驱动器上的锁时,我找到了一个API,即
DeviceIoControl()
, 但我只想访问我的进程的驱动器,但上面的API“可能”会阻止所有进程的访问。我不太清楚
lockfile()
lockfileex()
是如何工作的。请帮我找到一些方法/API/逻辑来实现这一点! ... ... 更新:-

关于你的回答,我已经试过了:-->

“但是……” 在获得E驱动器的独占锁定后,我无法创建文件。 (我已经读到:只有hdest(HANDLE)在该驱动器上获得独占锁。)

这里。。!!!我想创建M_LUCKY.txt文件。。!! (我需要在驱动器上具有要处理的上下文的独占访问) 请帮忙!非常感谢


还有其他的方法吗

将DeviceIoControl与FSCTL\u LOCK\u音量控制代码一起使用


使用带有FSCTL\u LOCK\u音量控制代码的设备控制


设备控制有什么问题?您是否仔细阅读了MSDN链接?因为锁定卷也会卸载卷,所以您尝试使用CreateFile是没有用的。那么,有没有其他方法来实现此功能???也许可以描述您的具体问题以避免XY问题。先生,“避免XY问题”是什么意思?DeviceIOControl有什么问题?您是否仔细阅读了MSDN链接?因为锁定卷也会卸载卷,所以您尝试使用CreateFile是没有用的。那么有没有其他方法来实现此功能???也许可以描述您的具体问题以避免XY问题。先生,“避免XY问题”是什么意思?请查看编辑后的问题。。。!!由于字符数限制,我无法在评论部分发布…请查看编辑后的问题。。。!!我无法在评论区发布,因为限制了字符数。。。
   HANDLE hdest,hf;
   DWORD b,write;
   hdest = CreateFile("\\\\?\\E:",
        GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL,
        OPEN_EXISTING,
        NULL,
        NULL);

    if (hdest == INVALID_HANDLE_VALUE)
    {
        MessageBox(NULL,TEXT("NOT OK"),TEXT("NOT OK"),0);
    }

    if (DeviceIoControl( hdest,FSCTL_LOCK_VOLUME,NULL,0,NULL,0,&b,NULL))
    {
        MessageBox(NULL,TEXT("OK"),TEXT("OK"),0);

            hf = CreateFile(TEXT("E:\\M_lucky.txt"), GENERIC_WRITE, 0, NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
                if (hf == INVALID_HANDLE_VALUE)
                {
                    MessageBox(NULL,TEXT("NOT OK AFTER LOCK I"),TEXT("NOT OK AFTRE LOCK"),0);
                }
            WriteFile(hf, TEXT("M very lucky"), 13, &write, NULL);
    }

    CloseHandle((HANDLE)hdest);
    CloseHandle((HANDLE)hf);

    DeviceIoControl( hdest,FSCTL_UNLOCK_VOLUME,NULL,0,NULL,0,&b,NULL);

    hf = CreateFile(TEXT("E:\\MNOT_lucky.txt"), GENERIC_WRITE, 0, NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
                if (hf == INVALID_HANDLE_VALUE)
                {
                    MessageBox(NULL,TEXT("NOT OK AFTER LOCK"),TEXT("NOT OK AFTRE LOCK"),0);

                }
            WriteFile(hf, TEXT("M lucky"), 8, &write, NULL);
    CloseHandle((HANDLE)hf);