Здраствуйте уважаемые!!! Я просмотрел пример Ms-Rem из статьи Перехват API функций в Windows NT (часть 1). Основы перехвата. http://wasm.ru/article.php?article=apihook_1 Я по этой статье попробовал сделать аналогичную программу для скрытия файлов. Но у меня что-то не получается...((...К сообщению я приложил Исходники. Посмотрите пожалуйста!!!
Кстати там в статье есть один такой не совсем понятный для меня момент : Для скрытия файла, необходимо сравнить имя каждой возвращаемой записи и имя файла, который мы хотим скрыть. Если мы хотим скрыть первую запись, нужно сдвинуть следующие за ней структуры на размер первой записи. Это приведет к тому, что первая запись будет затерта. Если мы хотим скрыть другую запись, мы можем просто изменить значение NextEntryOffset предыдущей записи. Новое значение NextEntryOffset будет нуль, если мы хотим скрыть последнюю запись, иначе значение будет суммой полей NextEntryOffset записи, которую мы хотим скрыть и предыдущей записи. Затем необходимо изменить значение поля Unknown предыдущей записи, которое предоставляет индекс для последующего поиска. Значение поля Unknown предыдущей записи должно равняться значению поля Unknown записи, которую мы хотим скрыть. Если нет ни одной записи, которую можно видеть, мы должны вернуть ошибку STATUS_NO_SUCH_FILE Что значит "Затем необходимо изменить значение поля Unknown предыдущей записи, которое предоставляет индекс для последующего поиска. Значение поля Unknown предыдущей записи должно равняться значению поля Unknown записи, которую мы хотим скрыть." ??? Помогите Плиз.....
Я в проекте JEDI нашел описание след-х структур : Код (Text): _FILE_DIRECTORY_INFORMATION = record // Information Class 1 NextEntryOffset: ULONG; Unknown: ULONG; CreationTime: LARGE_INTEGER; LastAccessTime: LARGE_INTEGER; LastWriteTime: LARGE_INTEGER; ChangeTime: LARGE_INTEGER; EndOfFile: LARGE_INTEGER; AllocationSize: LARGE_INTEGER; FileAttributes: ULONG; FileNameLength: ULONG; FileName: array[0..0] of WCHAR; end; FILE_DIRECTORY_INFORMATION = _FILE_DIRECTORY_INFORMATION; PFILE_DIRECTORY_INFORMATION = ^FILE_DIRECTORY_INFORMATION; TFileDirectoryInformation = FILE_DIRECTORY_INFORMATION; PFileDirectoryInformation = ^TFileDirectoryInformation; _FILE_FULL_DIRECTORY_INFORMATION = record // Information Class 2 NextEntryOffset: ULONG; Unknown: ULONG; CreationTime: LARGE_INTEGER; LastAccessTime: LARGE_INTEGER; LastWriteTime: LARGE_INTEGER; ChangeTime: LARGE_INTEGER; EndOfFile: LARGE_INTEGER; AllocationSize: LARGE_INTEGER; FileAttributes: ULONG; FileNameLength: ULONG; EaInformationLength: ULONG; FileName: array[0..0] of WCHAR; end; FILE_FULL_DIRECTORY_INFORMATION = _FILE_FULL_DIRECTORY_INFORMATION; PFILE_FULL_DIRECTORY_INFORMATION = ^FILE_FULL_DIRECTORY_INFORMATION; TFileFullDirectoryInformation = FILE_FULL_DIRECTORY_INFORMATION; PFileFullDirectoryInformation = ^TFileFullDirectoryInformation; _FILE_BOTH_DIRECTORY_INFORMATION = record // Information Class 3 NextEntryOffset: ULONG; Unknown: ULONG; CreationTime: LARGE_INTEGER; LastAccessTime: LARGE_INTEGER; LastWriteTime: LARGE_INTEGER; ChangeTime: LARGE_INTEGER; EndOfFile: LARGE_INTEGER; AllocationSize: LARGE_INTEGER; FileAttributes: ULONG; FileNameLength: ULONG; EaInformationLength: ULONG; AlternateNameLength: UCHAR; AlternateName: array[0..11] of WCHAR; FileName: array[0..0] of WCHAR; end; FILE_BOTH_DIRECTORY_INFORMATION = _FILE_BOTH_DIRECTORY_INFORMATION; PFILE_BOTH_DIRECTORY_INFORMATION = ^FILE_BOTH_DIRECTORY_INFORMATION; TFileBothDirectoryInformation = FILE_BOTH_DIRECTORY_INFORMATION; PFileBothDirectoryInformation = ^TFileBothDirectoryInformation; _FILE_INTERNAL_INFORMATION = record // Information Class 6 FileId: LARGE_INTEGER; end; FILE_INTERNAL_INFORMATION = _FILE_INTERNAL_INFORMATION; PFILE_INTERNAL_INFORMATION = ^FILE_INTERNAL_INFORMATION; TFileInternalInformation = FILE_INTERNAL_INFORMATION; PFileInternalInformation = ^TFileInternalInformation; _FILE_EA_INFORMATION = record // Information Class 7 EaInformationLength: ULONG; end; FILE_EA_INFORMATION = _FILE_EA_INFORMATION; PFILE_EA_INFORMATION = ^FILE_EA_INFORMATION; TFileEaInformation = FILE_EA_INFORMATION; PFileEaInformation = ^TFileEaInformation; _FILE_ACCESS_INFORMATION = record // Information Class 8 GrantedAccess: ACCESS_MASK; end; FILE_ACCESS_INFORMATION = _FILE_ACCESS_INFORMATION; PFILE_ACCESS_INFORMATION = ^FILE_ACCESS_INFORMATION; TFileAccessInformation = FILE_ACCESS_INFORMATION; PFileAccessInformation = ^TFileAccessInformation; _FILE_NAME_INFORMATION = record // Information Classes 9 and 21 FileNameLength: ULONG; FileName: array[0..0] of WCHAR; end; FILE_NAME_INFORMATION = _FILE_NAME_INFORMATION; PFILE_NAME_INFORMATION = ^FILE_NAME_INFORMATION; FILE_ALTERNATE_NAME_INFORMATION = _FILE_NAME_INFORMATION; PFILE_ALTERNATE_NAME_INFORMATION = ^FILE_ALTERNATE_NAME_INFORMATION; TFileNameInformation = FILE_NAME_INFORMATION; PFileNameInformation = ^TFileNameInformation; _FILE_LINK_RENAME_INFORMATION = record // Info Classes 10 and 11 ReplaceIfExists: ByteBool; RootDirectory: HANDLE; FileNameLength: ULONG; FileName: array[0..0] of WCHAR; end; FILE_LINK_INFORMATION = _FILE_LINK_RENAME_INFORMATION; PFILE_LINK_INFORMATION = ^FILE_LINK_INFORMATION; FILE_RENAME_INFORMATION = _FILE_LINK_RENAME_INFORMATION; PFILE_RENAME_INFORMATION = ^FILE_RENAME_INFORMATION; TFileLinkInformation = FILE_LINK_INFORMATION; PFileLinkInformation = ^TFileLinkInformation; _FILE_NAMES_INFORMATION = record // Information Class 12 NextEntryOffset: ULONG; Unknown: ULONG; FileNameLength: ULONG; FileName: array[0..0] of WCHAR; end; FILE_NAMES_INFORMATION = _FILE_NAMES_INFORMATION; PFILE_NAMES_INFORMATION = ^FILE_NAMES_INFORMATION; TFileNamesInformation = FILE_NAMES_INFORMATION; PFileNamesInformation = ^TFileNamesInformation; _FILE_MODE_INFORMATION = record // Information Class 16 Mode: ULONG; end; FILE_MODE_INFORMATION = _FILE_MODE_INFORMATION; PFILE_MODE_INFORMATION = ^FILE_MODE_INFORMATION; TFileModeInformation = FILE_MODE_INFORMATION; PFileModeInformation = ^TFileModeInformation; _FILE_ALL_INFORMATION = record // Information Class 18 BasicInformation: FILE_BASIC_INFORMATION; StandardInformation: FILE_STANDARD_INFORMATION; InternalInformation: FILE_INTERNAL_INFORMATION; EaInformation: FILE_EA_INFORMATION; AccessInformation: FILE_ACCESS_INFORMATION; PositionInformation: FILE_POSITION_INFORMATION; ModeInformation: FILE_MODE_INFORMATION; AlignmentInformation: FILE_ALIGNMENT_INFORMATION; NameInformation: FILE_NAME_INFORMATION; end; FILE_ALL_INFORMATION = _FILE_ALL_INFORMATION; PFILE_ALL_INFORMATION = ^FILE_ALL_INFORMATION; TFileAllInformation = FILE_ALL_INFORMATION; PFileAllInformation = ^TFileAllInformation; _FILE_ALLOCATION_INFORMATION = record // Information Class 19 AllocationSize: LARGE_INTEGER; end; FILE_ALLOCATION_INFORMATION = _FILE_ALLOCATION_INFORMATION; PFILE_ALLOCATION_INFORMATION = ^FILE_ALLOCATION_INFORMATION; TFileAllocationInformation = FILE_ALLOCATION_INFORMATION; PFileAllocationInformation = ^TFileAllocationInformation; _FILE_STREAM_INFORMATION = record // Information Class 22 NextEntryOffset: ULONG; StreamNameLength: ULONG; EndOfStream: LARGE_INTEGER; AllocationSize: LARGE_INTEGER; StreamName: array[0..0] of WCHAR; end; FILE_STREAM_INFORMATION = _FILE_STREAM_INFORMATION; PFILE_STREAM_INFORMATION = ^FILE_STREAM_INFORMATION; TFileStreamInformation = FILE_STREAM_INFORMATION; PFileStreamInformation = ^TFileStreamInformation; _FILE_PIPE_INFORMATION = record // Information Class 23 ReadModeMessage: ULONG; WaitModeBlocking: ULONG; end; FILE_PIPE_INFORMATION = _FILE_PIPE_INFORMATION; PFILE_PIPE_INFORMATION = ^FILE_PIPE_INFORMATION; TFilePipeInformation = FILE_PIPE_INFORMATION; PFilePipeInformation = ^TFilePipeInformation; _FILE_PIPE_LOCAL_INFORMATION = record // Information Class 24 MessageType: ULONG; Unknown1: ULONG; MaxInstances: ULONG; CurInstances: ULONG; InBufferSize: ULONG; Unknown2: ULONG; OutBufferSize: ULONG; Unknown3: array[0..1] of ULONG; ServerEnd: ULONG; end; FILE_PIPE_LOCAL_INFORMATION = _FILE_PIPE_LOCAL_INFORMATION; PFILE_PIPE_LOCAL_INFORMATION = ^FILE_PIPE_LOCAL_INFORMATION; TFilePipeLocalInformation = FILE_PIPE_LOCAL_INFORMATION; PFilePipeLocalInformation = ^TFilePipeLocalInformation; _FILE_PIPE_REMOTE_INFORMATION = record // Information Class 25 CollectDataTimeout: LARGE_INTEGER; MaxCollectionCount: ULONG; end; FILE_PIPE_REMOTE_INFORMATION = _FILE_PIPE_REMOTE_INFORMATION; PFILE_PIPE_REMOTE_INFORMATION = ^FILE_PIPE_REMOTE_INFORMATION; TFilePipeRemoteInformation = FILE_PIPE_REMOTE_INFORMATION; PFilePipeRemoteInformation = ^TFilePipeRemoteInformation; и вот...я обновил немного свой пример насчет "Затем необходимо изменить значение поля Unknown предыдущей записи, которое предоставляет индекс для последующего поиска. Значение поля Unknown предыдущей записи должно равняться значению поля Unknown записи, которую мы хотим скрыть." модете посмотреть в приложенном файле, но все равно не работает, все приложения которые работают с файловой системой вылетают, Проводник Тотал Командер....((.....Где тут могут быть грабли???
Еще нашел вот такую интересную структуру: Код (Text): _FILE_INFORMATION_CLASS = ( FileFiller0, FileDirectoryInformation, // FileFullDirectoryInformation, // 2 FileBothDirectoryInformation, // 3 FileBasicInformation, // 4 wdm FileStandardInformation, // 5 wdm FileInternalInformation, // 6 FileEaInformation, // 7 FileAccessInformation, // 8 FileNameInformation, // 9 FileRenameInformation, // 10 FileLinkInformation, // 11 FileNamesInformation, // 12 FileDispositionInformation, // 13 FilePositionInformation, // 14 wdm FileFullEaInformation, // 15 FileModeInformation, // 16 FileAlignmentInformation, // 17 FileAllInformation, // 18 FileAllocationInformation, // 19 FileEndOfFileInformation, // 20 wdm FileAlternateNameInformation, // 21 FileStreamInformation, // 22 FilePipeInformation, // 23 FilePipeLocalInformation, // 24 FilePipeRemoteInformation, // 25 FileMailslotQueryInformation, // 26 FileMailslotSetInformation, // 27 FileCompressionInformation, // 28 FileObjectIdInformation, // 29 FileCompletionInformation, // 30 FileMoveClusterInformation, // 31 FileQuotaInformation, // 32 FileReparsePointInformation, // 33 FileNetworkOpenInformation, // 34 FileAttributeTagInformation, // 35 FileTrackingInformation, // 36 FileMaximumInformation); FILE_INFORMATION_CLASS = _FILE_INFORMATION_CLASS; PFILE_INFORMATION_CLASS = ^FILE_INFORMATION_CLASS; TFileInformationClass = FILE_INFORMATION_CLASS; PFileInformationClass = ^TFileInformationClass; Из всего вышеприведенного я использовал только вот эти: Код (Text): FileDirectoryInformation, // 1 FileFullDirectoryInformation, // 2 FileBothDirectoryInformation, // 3 FileNamesInformation, // 12 Не знаю может из этого большого списка еще что-то использовать?...Пример Ms-Rem связанный со скрытием процессов работает, а вот мой код не работает..не знаю почему, все вроде так же как и в примере с процессами.........