Помогите разобраться с функцией NewZwQueryDirectoryFile

Тема в разделе "WASM.BEGINNERS", создана пользователем rentoc, 18 мар 2008.

  1. rentoc

    rentoc New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    8
    Здраствуйте уважаемые!!!

    Я просмотрел пример Ms-Rem из статьи Перехват API функций в Windows NT (часть 1). Основы перехвата.
    http://wasm.ru/article.php?article=apihook_1

    Я по этой статье попробовал сделать аналогичную программу для скрытия файлов. Но у меня что-то не получается...:dntknw:((...К сообщению я приложил Исходники. Посмотрите пожалуйста!!!
     
  2. rentoc

    rentoc New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    8
    Кстати там в статье есть один такой не совсем понятный для меня момент :

    Для скрытия файла, необходимо сравнить имя каждой возвращаемой записи и имя файла, который мы хотим скрыть.
    Если мы хотим скрыть первую запись, нужно сдвинуть следующие за ней структуры на размер первой записи. Это приведет к тому, что первая запись будет затерта. Если мы хотим скрыть другую запись, мы можем просто изменить значение NextEntryOffset предыдущей записи. Новое значение NextEntryOffset будет нуль, если мы хотим скрыть последнюю запись, иначе значение будет суммой полей NextEntryOffset записи, которую мы хотим скрыть и предыдущей записи. Затем необходимо изменить значение поля Unknown предыдущей записи, которое предоставляет индекс для последующего поиска. Значение поля Unknown предыдущей записи должно равняться значению поля Unknown записи, которую мы хотим скрыть.
    Если нет ни одной записи, которую можно видеть, мы должны вернуть ошибку STATUS_NO_SUCH_FILE

    Что значит "Затем необходимо изменить значение поля Unknown предыдущей записи, которое предоставляет индекс для последующего поиска. Значение поля Unknown предыдущей записи должно равняться значению поля Unknown записи, которую мы хотим скрыть." ???

    Помогите Плиз.....
     
  3. rentoc

    rentoc New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    8
    Я в проекте JEDI нашел описание след-х структур :

    Код (Text):
    1. _FILE_DIRECTORY_INFORMATION = record // Information Class 1
    2.     NextEntryOffset: ULONG;
    3.     Unknown: ULONG;
    4.     CreationTime: LARGE_INTEGER;
    5.     LastAccessTime: LARGE_INTEGER;
    6.     LastWriteTime: LARGE_INTEGER;
    7.     ChangeTime: LARGE_INTEGER;
    8.     EndOfFile: LARGE_INTEGER;
    9.     AllocationSize: LARGE_INTEGER;
    10.     FileAttributes: ULONG;
    11.     FileNameLength: ULONG;
    12.     FileName: array[0..0] of WCHAR;
    13.   end;
    14.   FILE_DIRECTORY_INFORMATION = _FILE_DIRECTORY_INFORMATION;
    15.   PFILE_DIRECTORY_INFORMATION = ^FILE_DIRECTORY_INFORMATION;
    16.   TFileDirectoryInformation = FILE_DIRECTORY_INFORMATION;
    17.   PFileDirectoryInformation = ^TFileDirectoryInformation;
    18.  
    19.   _FILE_FULL_DIRECTORY_INFORMATION = record // Information Class 2
    20.     NextEntryOffset: ULONG;
    21.     Unknown: ULONG;
    22.     CreationTime: LARGE_INTEGER;
    23.     LastAccessTime: LARGE_INTEGER;
    24.     LastWriteTime: LARGE_INTEGER;
    25.     ChangeTime: LARGE_INTEGER;
    26.     EndOfFile: LARGE_INTEGER;
    27.     AllocationSize: LARGE_INTEGER;
    28.     FileAttributes: ULONG;
    29.     FileNameLength: ULONG;
    30.     EaInformationLength: ULONG;
    31.     FileName: array[0..0] of WCHAR;
    32.   end;
    33.   FILE_FULL_DIRECTORY_INFORMATION = _FILE_FULL_DIRECTORY_INFORMATION;
    34.   PFILE_FULL_DIRECTORY_INFORMATION = ^FILE_FULL_DIRECTORY_INFORMATION;
    35.   TFileFullDirectoryInformation = FILE_FULL_DIRECTORY_INFORMATION;
    36.   PFileFullDirectoryInformation = ^TFileFullDirectoryInformation;
    37.  
    38.   _FILE_BOTH_DIRECTORY_INFORMATION = record // Information Class 3
    39.     NextEntryOffset: ULONG;
    40.     Unknown: ULONG;
    41.     CreationTime: LARGE_INTEGER;
    42.     LastAccessTime: LARGE_INTEGER;
    43.     LastWriteTime: LARGE_INTEGER;
    44.     ChangeTime: LARGE_INTEGER;
    45.     EndOfFile: LARGE_INTEGER;
    46.     AllocationSize: LARGE_INTEGER;
    47.     FileAttributes: ULONG;
    48.     FileNameLength: ULONG;
    49.     EaInformationLength: ULONG;
    50.     AlternateNameLength: UCHAR;
    51.     AlternateName: array[0..11] of WCHAR;
    52.     FileName: array[0..0] of WCHAR;
    53.   end;
    54.   FILE_BOTH_DIRECTORY_INFORMATION = _FILE_BOTH_DIRECTORY_INFORMATION;
    55.   PFILE_BOTH_DIRECTORY_INFORMATION = ^FILE_BOTH_DIRECTORY_INFORMATION;
    56.   TFileBothDirectoryInformation = FILE_BOTH_DIRECTORY_INFORMATION;
    57.   PFileBothDirectoryInformation = ^TFileBothDirectoryInformation;
    58.  
    59.   _FILE_INTERNAL_INFORMATION = record // Information Class 6
    60.     FileId: LARGE_INTEGER;
    61.   end;
    62.   FILE_INTERNAL_INFORMATION = _FILE_INTERNAL_INFORMATION;
    63.   PFILE_INTERNAL_INFORMATION = ^FILE_INTERNAL_INFORMATION;
    64.   TFileInternalInformation = FILE_INTERNAL_INFORMATION;
    65.   PFileInternalInformation = ^TFileInternalInformation;
    66.  
    67.   _FILE_EA_INFORMATION = record // Information Class 7
    68.     EaInformationLength: ULONG;
    69.   end;
    70.   FILE_EA_INFORMATION = _FILE_EA_INFORMATION;
    71.   PFILE_EA_INFORMATION = ^FILE_EA_INFORMATION;
    72.   TFileEaInformation = FILE_EA_INFORMATION;
    73.   PFileEaInformation = ^TFileEaInformation;
    74.  
    75.   _FILE_ACCESS_INFORMATION = record // Information Class 8
    76.     GrantedAccess: ACCESS_MASK;
    77.   end;
    78.   FILE_ACCESS_INFORMATION = _FILE_ACCESS_INFORMATION;
    79.   PFILE_ACCESS_INFORMATION = ^FILE_ACCESS_INFORMATION;
    80.   TFileAccessInformation = FILE_ACCESS_INFORMATION;
    81.   PFileAccessInformation = ^TFileAccessInformation;
    82.  
    83.   _FILE_NAME_INFORMATION = record // Information Classes 9 and 21
    84.     FileNameLength: ULONG;
    85.     FileName: array[0..0] of WCHAR;
    86.   end;
    87.   FILE_NAME_INFORMATION = _FILE_NAME_INFORMATION;
    88.   PFILE_NAME_INFORMATION = ^FILE_NAME_INFORMATION;
    89.   FILE_ALTERNATE_NAME_INFORMATION = _FILE_NAME_INFORMATION;
    90.   PFILE_ALTERNATE_NAME_INFORMATION = ^FILE_ALTERNATE_NAME_INFORMATION;
    91.   TFileNameInformation = FILE_NAME_INFORMATION;
    92.   PFileNameInformation = ^TFileNameInformation;
    93.  
    94.   _FILE_LINK_RENAME_INFORMATION = record // Info Classes 10 and 11
    95.     ReplaceIfExists: ByteBool;
    96.     RootDirectory: HANDLE;
    97.     FileNameLength: ULONG;
    98.     FileName: array[0..0] of WCHAR;
    99.   end;
    100.   FILE_LINK_INFORMATION = _FILE_LINK_RENAME_INFORMATION;
    101.   PFILE_LINK_INFORMATION = ^FILE_LINK_INFORMATION;
    102.   FILE_RENAME_INFORMATION = _FILE_LINK_RENAME_INFORMATION;
    103.   PFILE_RENAME_INFORMATION = ^FILE_RENAME_INFORMATION;
    104.   TFileLinkInformation = FILE_LINK_INFORMATION;
    105.   PFileLinkInformation = ^TFileLinkInformation;
    106.  
    107.   _FILE_NAMES_INFORMATION = record // Information Class 12
    108.     NextEntryOffset: ULONG;
    109.     Unknown: ULONG;
    110.     FileNameLength: ULONG;
    111.     FileName: array[0..0] of WCHAR;
    112.   end;
    113.   FILE_NAMES_INFORMATION = _FILE_NAMES_INFORMATION;
    114.   PFILE_NAMES_INFORMATION = ^FILE_NAMES_INFORMATION;
    115.   TFileNamesInformation = FILE_NAMES_INFORMATION;
    116.   PFileNamesInformation = ^TFileNamesInformation;
    117.  
    118.   _FILE_MODE_INFORMATION = record // Information Class 16
    119.     Mode: ULONG;
    120.   end;
    121.   FILE_MODE_INFORMATION = _FILE_MODE_INFORMATION;
    122.   PFILE_MODE_INFORMATION = ^FILE_MODE_INFORMATION;
    123.   TFileModeInformation = FILE_MODE_INFORMATION;
    124.   PFileModeInformation = ^TFileModeInformation;
    125.  
    126.   _FILE_ALL_INFORMATION = record // Information Class 18
    127.     BasicInformation: FILE_BASIC_INFORMATION;
    128.     StandardInformation: FILE_STANDARD_INFORMATION;
    129.     InternalInformation: FILE_INTERNAL_INFORMATION;
    130.     EaInformation: FILE_EA_INFORMATION;
    131.     AccessInformation: FILE_ACCESS_INFORMATION;
    132.     PositionInformation: FILE_POSITION_INFORMATION;
    133.     ModeInformation: FILE_MODE_INFORMATION;
    134.     AlignmentInformation: FILE_ALIGNMENT_INFORMATION;
    135.     NameInformation: FILE_NAME_INFORMATION;
    136.   end;
    137.   FILE_ALL_INFORMATION = _FILE_ALL_INFORMATION;
    138.   PFILE_ALL_INFORMATION = ^FILE_ALL_INFORMATION;
    139.   TFileAllInformation = FILE_ALL_INFORMATION;
    140.   PFileAllInformation = ^TFileAllInformation;
    141.  
    142.   _FILE_ALLOCATION_INFORMATION = record // Information Class 19
    143.     AllocationSize: LARGE_INTEGER;
    144.   end;
    145.   FILE_ALLOCATION_INFORMATION = _FILE_ALLOCATION_INFORMATION;
    146.   PFILE_ALLOCATION_INFORMATION = ^FILE_ALLOCATION_INFORMATION;
    147.   TFileAllocationInformation = FILE_ALLOCATION_INFORMATION;
    148.   PFileAllocationInformation = ^TFileAllocationInformation;
    149.  
    150.   _FILE_STREAM_INFORMATION = record // Information Class 22
    151.     NextEntryOffset: ULONG;
    152.     StreamNameLength: ULONG;
    153.     EndOfStream: LARGE_INTEGER;
    154.     AllocationSize: LARGE_INTEGER;
    155.     StreamName: array[0..0] of WCHAR;
    156.   end;
    157.   FILE_STREAM_INFORMATION = _FILE_STREAM_INFORMATION;
    158.   PFILE_STREAM_INFORMATION = ^FILE_STREAM_INFORMATION;
    159.   TFileStreamInformation = FILE_STREAM_INFORMATION;
    160.   PFileStreamInformation = ^TFileStreamInformation;
    161.  
    162.   _FILE_PIPE_INFORMATION = record // Information Class 23
    163.     ReadModeMessage: ULONG;
    164.     WaitModeBlocking: ULONG;
    165.   end;
    166.   FILE_PIPE_INFORMATION = _FILE_PIPE_INFORMATION;
    167.   PFILE_PIPE_INFORMATION = ^FILE_PIPE_INFORMATION;
    168.   TFilePipeInformation = FILE_PIPE_INFORMATION;
    169.   PFilePipeInformation = ^TFilePipeInformation;
    170.  
    171.   _FILE_PIPE_LOCAL_INFORMATION = record // Information Class 24
    172.     MessageType: ULONG;
    173.     Unknown1: ULONG;
    174.     MaxInstances: ULONG;
    175.     CurInstances: ULONG;
    176.     InBufferSize: ULONG;
    177.     Unknown2: ULONG;
    178.     OutBufferSize: ULONG;
    179.     Unknown3: array[0..1] of ULONG;
    180.     ServerEnd: ULONG;
    181.   end;
    182.   FILE_PIPE_LOCAL_INFORMATION = _FILE_PIPE_LOCAL_INFORMATION;
    183.   PFILE_PIPE_LOCAL_INFORMATION = ^FILE_PIPE_LOCAL_INFORMATION;
    184.   TFilePipeLocalInformation = FILE_PIPE_LOCAL_INFORMATION;
    185.   PFilePipeLocalInformation = ^TFilePipeLocalInformation;
    186.  
    187.   _FILE_PIPE_REMOTE_INFORMATION = record // Information Class 25
    188.     CollectDataTimeout: LARGE_INTEGER;
    189.     MaxCollectionCount: ULONG;
    190.   end;
    191.   FILE_PIPE_REMOTE_INFORMATION = _FILE_PIPE_REMOTE_INFORMATION;
    192.   PFILE_PIPE_REMOTE_INFORMATION = ^FILE_PIPE_REMOTE_INFORMATION;
    193.   TFilePipeRemoteInformation = FILE_PIPE_REMOTE_INFORMATION;
    194.   PFilePipeRemoteInformation = ^TFilePipeRemoteInformation;
    и вот...я обновил немного свой пример насчет "Затем необходимо изменить значение поля Unknown предыдущей записи, которое предоставляет индекс для последующего поиска. Значение поля Unknown предыдущей записи должно равняться значению поля Unknown записи, которую мы хотим скрыть." модете посмотреть в приложенном файле, но все равно не работает, все приложения которые работают с файловой системой вылетают, Проводник Тотал Командер....:dntknw:((.....Где тут могут быть грабли???
     
  4. rentoc

    rentoc New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    8
    А вот и сам обновленный файл проекта
     
  5. rentoc

    rentoc New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    8
    Еще нашел вот такую интересную структуру:

    Код (Text):
    1. _FILE_INFORMATION_CLASS = (
    2.     FileFiller0,
    3.     FileDirectoryInformation, //
    4.     FileFullDirectoryInformation, // 2
    5.     FileBothDirectoryInformation, // 3
    6.     FileBasicInformation, // 4  wdm
    7.     FileStandardInformation, // 5  wdm
    8.     FileInternalInformation, // 6
    9.     FileEaInformation, // 7
    10.     FileAccessInformation, // 8
    11.     FileNameInformation, // 9
    12.     FileRenameInformation, // 10
    13.     FileLinkInformation, // 11
    14.     FileNamesInformation, // 12
    15.     FileDispositionInformation, // 13
    16.     FilePositionInformation, // 14 wdm
    17.     FileFullEaInformation, // 15
    18.     FileModeInformation, // 16
    19.     FileAlignmentInformation, // 17
    20.     FileAllInformation, // 18
    21.     FileAllocationInformation, // 19
    22.     FileEndOfFileInformation, // 20 wdm
    23.     FileAlternateNameInformation, // 21
    24.     FileStreamInformation, // 22
    25.     FilePipeInformation, // 23
    26.     FilePipeLocalInformation, // 24
    27.     FilePipeRemoteInformation, // 25
    28.     FileMailslotQueryInformation, // 26
    29.     FileMailslotSetInformation, // 27
    30.     FileCompressionInformation, // 28
    31.     FileObjectIdInformation, // 29
    32.     FileCompletionInformation, // 30
    33.     FileMoveClusterInformation, // 31
    34.     FileQuotaInformation, // 32
    35.     FileReparsePointInformation, // 33
    36.     FileNetworkOpenInformation, // 34
    37.     FileAttributeTagInformation, // 35
    38.     FileTrackingInformation, // 36
    39.     FileMaximumInformation);
    40.   FILE_INFORMATION_CLASS = _FILE_INFORMATION_CLASS;
    41.   PFILE_INFORMATION_CLASS = ^FILE_INFORMATION_CLASS;
    42.   TFileInformationClass = FILE_INFORMATION_CLASS;
    43.   PFileInformationClass = ^TFileInformationClass;
    Из всего вышеприведенного я использовал только вот эти:

    Код (Text):
    1. FileDirectoryInformation, // 1
    2. FileFullDirectoryInformation, // 2
    3. FileBothDirectoryInformation, // 3
    4. FileNamesInformation, // 12
    Не знаю может из этого большого списка еще что-то использовать?...Пример Ms-Rem связанный со скрытием процессов работает, а вот мой код не работает..не знаю почему, все вроде так же как и в примере с процессами.........