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