Аналог FindFirstFile для драйвера

Тема в разделе "WASM.NT.KERNEL", создана пользователем ak, 6 апр 2008.

  1. ak

    ak New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    8
    Добрый день!

    Подскажите, пожалуйста, как в драйвере осуществить поиск файла в заданном каталоге с заданным расширением?
     
  2. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    ZwOpenFile\ZwQueryDirectoryFile
     
  3. ak

    ak New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    8
    Большое спасибо!
    Ещё один вопрос:
    ZwQueryDirectoryFile возвращает STATUS_PENDING.
    Как подождать выполнения запроса?
    Функции передаётся HANDLE Event,
    однако KeWaitForSingleObject и KeInitializeEvent используют KEVENT...
    Как получить HANDLE Event ?
     
  4. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    Код (Text):
    1. NTSTATUS
    2.   ZwCreateEvent(
    3.     OUT PHANDLE  EventHandle, <---------
    4.     IN ACCESS_MASK  DesiredAccess,
    5.     IN POBJECT_ATTRIBUTES  ObjectAttributes OPTIONAL,
    6.     IN EVENT_TYPE  EventType,
    7.     IN BOOLEAN  InitialState
    8.     );
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    с объектами ядра можно работать по хендлу или по указателю, первые имеют префикс Zw, вторые - префикс подсистемы (Ex, Ke, Mm, ...)
    например: ZwCreateSection / MmCreateSection, ZwSetEvent / KeSetEvent.
     
  6. ak

    ak New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    8
    Большое спасибо!!!
     
  7. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    Не обязательно создавать событие и ждать на нём, достаточно открыть файл с флагом FILE_SYNCHRONOUS_IO_NONALERT, допустим так:
    Код (Text):
    1.         status = ZwOpenFile(  &hFile,
    2.                                        SYNCHRONIZE,
    3.                                        &oa,
    4.                                        &iob,
    5.                                        FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
    6.                                        FILE_SYNCHRONOUS_IO_NONALERT|FILE_OPEN_FOR_BACKUP_INTENT);
    Ну, а потом можно делать ZwQueryDirectoryFile, он будет выполняться синхронно.