Перехватываю ZwCreateFile в ядре. У это функции есть парметр ObjectAttributes, где хранится путь к файлу с которым мы работаем(кажется путь хранится здесь: ObjectAttributes->ObjectName->Buffer). Не подскажете как можно определить вхождение в переданный путь подстроки "qwerty.dll". Мне необходимо запретить доступ к тому файлу. Если можно, с примерами пожалуйста. Всех благодарю за внимание.
Спасибо огромное ! Не думал что все будет так просто. И еще... эта функция ищет с учетом РЕГИСТРА или нет ?
WaterGhost Если файл на NTFS - просто запрети к нему доступ. Если хочешь и админу. то тут есть одна хитрость - удаляешь в настройках политики безопасности возможность овладения чужими объектами для админа, создаешь нового пользователя (можно сделать так чтобы его не было видно призагрузке) и передаешь все права на пользование файлом ему т.е. типа cacls.exe qwerty.dll /P NewUser:F
Код старый, может чем поможет. rtl_headers.h Код (Text): #include "rtl_headers.h" NTSTATUS NewZwCreateFile(OUT PHANDLE FileHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes,OUT PIO_STATUS_BLOCK IoStatusBlock,IN PLARGE_INTEGER AllocationSize OPTIONAL,IN ULONG FileAttributes,IN ULONG ShareAccess,IN ULONG CreateDisposition,IN ULONG CreateOptions,IN PVOID EaBuffer OPTIONAL,IN ULONG EaLength) { NTSTATUS rc; BOOLEAN bStat; PWCHAR wStr; rc = OldZwCreateFile(FileHandle,DesiredAccess,ObjectAttributes,IoStatusBlock,AllocationSize,FileAttributes,ShareAccess,CreateDisposition,CreateOptions,EaBuffer,EaLength); if (ObjectAttributes->ObjectName->Length > 0 && MmIsAddressValid((PVOID)ObjectAttributes->ObjectName->Buffer)) { wStr = RtlParseWstr(ObjectAttributes->ObjectName->Buffer,(wchar_t)'\\'); wStr = RtlUpcaseWideStr(wStr,wStrLen(wStr)); if (wStr) { DbgPrint("NewZwCreateFile Hook :%ws|%d",RtlUpcaseWideStr(wStr,wStrLen(wStr)),wStrLen(wStr)); } } return rc; }