Заезженное "кем занят файл"

Discussion in 'WASM.WIN32' started by QuAzI, Jan 12, 2010.

  1. QuAzI

    QuAzI New Member

    Blog Posts:
    0
    Joined:
    Dec 13, 2005
    Messages:
    26
    Location:
    Belarus
    Добрый день
    Почитал про 3 способа работы с занятыми файлами, покурил msdn на ZwQueryInformationFile, понял что из usermode мне надо использовать NtQueryInformationFile.
    Остался один вопросец. Мне нужно просто проверить, открыт ли конкретный файл. Я могу это сделать зная его полное имя или мне придётся в любом случае перечислять все открытые файлы и сравнивать их с моим?
     
  2. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    И чем оно тебе поможет с занятыми файлами?

    Перечислить все хендлы, выбрать хендлы типа "файл", скопировать себе и сделать ZwQueryObject (ObjectNameInformation).
     
  3. maksim_

    maksim_ New Member

    Blog Posts:
    0
    Joined:
    Jul 15, 2009
    Messages:
    263
    а нельзя просто открыть этот файл, получить INVALID_HANDLE_VALUE, а затем проверить статус? конечно, если требуемый файл не был открыт с правами share all. а вообще, честно говоря я не понял что требуется сделать. какие три способа? где прочитал?
     
  4. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    Есть "дзенная" статья мсрема про работу с занятыми файлами на этом сайте.
    Можно. Если как раз таки не открыт с share all. Впрочем, что нужно автору я так и не понял.

    На канале я высказался насчет ZwQueryInformationFile, упомянутой в первом посте:
     
  5. gorodon

    gorodon New Member

    Blog Posts:
    0
    Joined:
    Oct 19, 2009
    Messages:
    301
    Greate Так все же - средствами WinAPI (без Nt|Zw) возможно определить, какие процессы юзают заданный файл (открытый с пом-ю CreateFile)?
     
  6. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    Насколько мне известно, нет