Как мога да получа ексклузивно заключване на диск / дял Win-Api 32?

Как да заключвам заключване на конкретно устройство, докато не извърша някаква операция (четене/запис) на това устройство. Когато съм уловил заключване на устройство, никой друг процес не би трябвало да може да пише на това устройство. Освободя заключването на това устройство, намерих един 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..!! (Имам нужда от ИЗКЛЮЧИТЕЛЕН достъп до устройство с контекст, за да ОБРАБОТЯВАМ), моля, помогнете! благодаря много!!

има ли друг метод за това??


person user3370396    schedule 02.03.2014    source източник
comment
Какъв проблем има с DeviceIOControl?   -  person Xearinox    schedule 02.03.2014
comment
Четете ли внимателно MSDN връзката? Тъй като заключващият обем също демонтира тома, така че опитите ви за CreateFile са безполезни.   -  person Xearinox    schedule 05.03.2014
comment
така че има ли друг начин да се постигне такава функционалност????   -  person user3370396    schedule 08.03.2014
comment
Може би описвайки вашия конкретен проблем, за да избегнете XY проблема.   -  person Xearinox    schedule 10.03.2014
comment
СЪР, КАКВО ИМАТЕ ПРЕДВИД ПОД ИЗБЯГВАНЕ НА ПРОБЛЕМА XY??   -  person user3370396    schedule 11.03.2014
comment
meta.stackexchange.com/questions/66377/what -is-the-xy-problem   -  person Xearinox    schedule 12.03.2014


Отговори (1)


Използвайте DeviceIoControl с контролен код FSCTL_LOCK_VOLUME.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa364575(v=vs.85).aspx

person Xearinox    schedule 02.03.2014
comment
моля, вижте редактирания въпрос...!! не можах да публикувам в секцията за коментари поради ограничението на не. от герои... - person user3370396; 05.03.2014