Сохраняю хендл к файлу в каждом 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.
S>Как и посоветовали в предыдущей теме. (И как я это понял).
А зачем ты разыменовываешь TargetFileObject? Это ошибка.
Здесь нужно работать не со структурами FILE_OBJECT, а с указателями на них.
И, например, при поиске в списке сравнивать указатели, а не структуры. Тогда все будет работать.
Каждому открытому хэндлу (HANDLE) обычно соответствует один указатель на FILE_OBJECT.
Короче, в терминологии языка C++ правильно так:
std::list<FILE_OBJECT *> myList;
но не так:
std::list<FILE_OBJECT> myList;
Когда тебе приходит IRP_MJ_WRITE — сохраняй указатель (именно указатель, а не копию структуры!) на FILE_OBJECT,
взятый из Data->Iopb->TargetFileObject в своем списке. Когда придет IRP_MJ_CLEANUP — ищешь этот указатель в
списке. И т.д.
Re[2]: File System Minifilter и хендл файла при ЗАКРЫТИИ
Здравствуйте, sergey77666, Вы писали:
S>Так и думал.
S>Но сделал иначе. FsContext все-таки приходит в IRP_MJ_CLEANUP, вот его и решил использовать. Чем плохо?
В FsContext файловая система хранит указатель на File Control Block / Stream Control Block (FCB/SCB),
т.е. данные, связанные с файлом или потоком. Два и более разных FILE_OBJECT могут иметь одинаковые
указатели FsContext (например, когда два разных хэндла ссылаются на один и тот же файл).
Если тебя это не смущает — тогда все ок. Просто для минифильтров использовать FsContext это
немного "не по фэншую", обычно принято либо использовать указатели на FILE_OBJECT, либо контексты.
Re[4]: File System Minifilter и хендл файла при ЗАКРЫТИИ
Здравствуйте, okman, Вы писали:
O>Здравствуйте, sergey77666, Вы писали:
S>>Так и думал.
S>>Но сделал иначе. FsContext все-таки приходит в IRP_MJ_CLEANUP, вот его и решил использовать. Чем плохо?
O>В FsContext файловая система хранит указатель на File Control Block / Stream Control Block (FCB/SCB), O>т.е. данные, связанные с файлом или потоком. Два и более разных FILE_OBJECT могут иметь одинаковые O>указатели FsContext (например, когда два разных хэндла ссылаются на один и тот же файл). O>Если тебя это не смущает — тогда все ок. Просто для минифильтров использовать FsContext это O>немного "не по фэншую", обычно принято либо использовать указатели на FILE_OBJECT, либо контексты.
Все-таки на PFILE_OBJECT перейду.
А зачем с киберфорума ушел?
Re[5]: File System Minifilter и хендл файла при ЗАКРЫТИИ
Здравствуйте, sergey77666, Вы писали:
S>А зачем с киберфорума ушел?
Форумы отнимают слишком много времени.
Иногда общение на форуме полезно, происходит обмен опытом. Иногда оно превращается в бесполезное
убивание времени, не дающее никаких профитов. В моем случае первое плавно перетекло во второе.
Re[6]: File System Minifilter и хендл файла при ЗАКРЫТИИ
Здравствуйте, okman, Вы писали:
O>Здравствуйте, sergey77666, Вы писали:
S>>А зачем с киберфорума ушел?
O>Форумы отнимают слишком много времени. O>Иногда общение на форуме полезно, происходит обмен опытом. Иногда оно превращается в бесполезное O>убивание времени, не дающее никаких профитов. В моем случае первое плавно перетекло во второе.
В общем-то все верно. Только там еще какой-то чудак тебе накануне писал, что от тебя никакого толку и тому подобное. Вот из-за таких, как он, на киберфоруме бесполезно сидеть (из-за того, что их большинство)?