Добрый день! Подскажите, пожалуйста, как в драйвере осуществить поиск файла в заданном каталоге с заданным расширением?
Большое спасибо! Ещё один вопрос: ZwQueryDirectoryFile возвращает STATUS_PENDING. Как подождать выполнения запроса? Функции передаётся HANDLE Event, однако KeWaitForSingleObject и KeInitializeEvent используют KEVENT... Как получить HANDLE Event ?
Код (Text): NTSTATUS ZwCreateEvent( OUT PHANDLE EventHandle, <--------- IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN EVENT_TYPE EventType, IN BOOLEAN InitialState );
с объектами ядра можно работать по хендлу или по указателю, первые имеют префикс Zw, вторые - префикс подсистемы (Ex, Ke, Mm, ...) например: ZwCreateSection / MmCreateSection, ZwSetEvent / KeSetEvent.
Не обязательно создавать событие и ждать на нём, достаточно открыть файл с флагом FILE_SYNCHRONOUS_IO_NONALERT, допустим так: Код (Text): status = ZwOpenFile( &hFile, SYNCHRONIZE, &oa, &iob, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, FILE_SYNCHRONOUS_IO_NONALERT|FILE_OPEN_FOR_BACKUP_INTENT); Ну, а потом можно делать ZwQueryDirectoryFile, он будет выполняться синхронно.