Как да заключвам заключване на конкретно устройство, докато не извърша някаква операция (четене/запис) на това устройство. Когато съм уловил заключване на устройство, никой друг процес не би трябвало да може да пише на това устройство. Освободя заключването на това устройство, намерих един API, т.е. DeviceIoControl()
, но искам достъп до устройството само за моя процес, но горния API ' МОЖЕ да блокира достъпа на всички процеси. Не съм съвсем сигурен как работят lockfile()
и lockfileex()
. Моля, помогнете ми да намеря някакъв начин / API / логика да направя това! ... ... АКТУАЛИЗИРАНО :-
с препратка към вашия отговор, опитах това :-->
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);
""но........"" след получаване на изключително заключване на E устройство, не мога да създам файл. (прочетох това: само hdest(HANDLE) получава изключително заключване на това устройство.)
тук..!!! искам да създам файл M_LUCKY.txt..!! (Имам нужда от ИЗКЛЮЧИТЕЛЕН достъп до устройство с контекст, за да ОБРАБОТЯВАМ), моля, помогнете! благодаря много!!
има ли друг метод за това??