Сообщение File System Minifilter и хендл файла при ЗАКРЫТИИ от 19.01.2018 6:51
Изменено 19.01.2018 6:55 sergey77666
File System Minifilter и хендл файла при ЗАКРЫТИИ
Уточнение предыдущей темы.
Сохраняю хендл к файлу в каждом IRP_MJ_WRITE. С этим все отлично. Я добавляю его в связанный список, моя функция проверяет нету ли там такого на данный момент, и пишет в лог, был ли он (то есть изменен уже существовавший) или создан новый. Там все более-менее в порядке.
Однако когда я начинаю в IRP_MJ_CLEANUP искать его в этом списке, то совпадение так и не обнаруживается.
С IRP_MJ_CLOSE — то же самое.
Какой именно хендл имелся в виду в пред-предыдущем абзаце?
Вначале это был &fileObject, где fileObject — аргумент каллбека. Как и посоветовали в предыдущей теме.
Но с ним была проблема, вроде как для одного и того же открытого файла при write их получалось 2 (обнаружил, когда сделал дамп через %d) — то один, то другой.
Поэтому перешел на fileObject.FsContext
Больше этой проблемы не было, однако в IRP_MJ_CLOSE все равно ничего не вышло, и, собственно, в IRP_MJ_CLOSE этот FsContext просто-напросто всегда равен 0? как показал его дамп.
Что еще можно придумать?
Мне его надо именно хранить между write и close.
Сохраняю хендл к файлу в каждом IRP_MJ_WRITE. С этим все отлично. Я добавляю его в связанный список, моя функция проверяет нету ли там такого на данный момент, и пишет в лог, был ли он (то есть изменен уже существовавший) или создан новый. Там все более-менее в порядке.
Однако когда я начинаю в IRP_MJ_CLEANUP искать его в этом списке, то совпадение так и не обнаруживается.
С IRP_MJ_CLOSE — то же самое.
Какой именно хендл имелся в виду в пред-предыдущем абзаце?
Вначале это был &fileObject, где fileObject — аргумент каллбека. Как и посоветовали в предыдущей теме.
Но с ним была проблема, вроде как для одного и того же открытого файла при write их получалось 2 (обнаружил, когда сделал дамп через %d) — то один, то другой.
Поэтому перешел на fileObject.FsContext
Больше этой проблемы не было, однако в IRP_MJ_CLOSE все равно ничего не вышло, и, собственно, в IRP_MJ_CLOSE этот FsContext просто-напросто всегда равен 0? как показал его дамп.
Что еще можно придумать?
Мне его надо именно хранить между write и close.
File System Minifilter и хендл файла при ЗАКРЫТИИ
Уточнение предыдущей темы.
Сохраняю хендл к файлу в каждом IRP_MJ_WRITE. С этим все отлично. Я добавляю его в связанный список, моя функция проверяет нету ли там такого на данный момент, и пишет в лог, был ли он (то есть изменен уже существовавший) или создан новый. Там все более-менее в порядке.
Однако когда я начинаю в IRP_MJ_CLEANUP искать его в этом списке, то совпадение так и не обнаруживается.
С IRP_MJ_CLOSE — то же самое.
Какой именно хендл имелся в виду в пред-предыдущем абзаце?
Вначале было так:
Как и посоветовали в предыдущей теме. (И как я это понял).
Но с ним была проблема, вроде как для одного и того же открытого файла при write их получалось 2 (обнаружил, когда сделал дамп через %d) — то один, то другой.
А для просто FILE_OBJECT, без указателя — нет оператора ==.
Поэтому перешел на fileObject.FsContext
Больше этой проблемы не было, однако в IRP_MJ_CLOSE все равно ничего не вышло, и, собственно, в IRP_MJ_CLOSE этот FsContext просто-напросто всегда равен 0? как показал его дамп.
Что еще можно придумать?
Мне его надо именно хранить между write и close.
Сохраняю хендл к файлу в каждом IRP_MJ_WRITE. С этим все отлично. Я добавляю его в связанный список, моя функция проверяет нету ли там такого на данный момент, и пишет в лог, был ли он (то есть изменен уже существовавший) или создан новый. Там все более-менее в порядке.
Однако когда я начинаю в IRP_MJ_CLEANUP искать его в этом списке, то совпадение так и не обнаруживается.
С IRP_MJ_CLOSE — то же самое.
Какой именно хендл имелся в виду в пред-предыдущем абзаце?
Вначале было так:
pFileObject = *Data->Iopb->TargetFileObject;
...
add_to_list(..., &pFileObject)
Как и посоветовали в предыдущей теме. (И как я это понял).
Но с ним была проблема, вроде как для одного и того же открытого файла при write их получалось 2 (обнаружил, когда сделал дамп через %d) — то один, то другой.
А для просто FILE_OBJECT, без указателя — нет оператора ==.
Поэтому перешел на fileObject.FsContext
Больше этой проблемы не было, однако в IRP_MJ_CLOSE все равно ничего не вышло, и, собственно, в IRP_MJ_CLOSE этот FsContext просто-напросто всегда равен 0? как показал его дамп.
Что еще можно придумать?
Мне его надо именно хранить между write и close.