Как прочитать данные из файла?

Тема в разделе "WASM.BEGINNERS", создана пользователем nitrotoluol, 1 июн 2007.

  1. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Прива всем
    И так
    Вопрос простой

    Нужно открыть файл (sys), получить адресса некоторых экспортируемых функций, а так же считать из него несколько байт...
    Вот только загвоздка в том, что мы в ринг0, и нужно все это сделать в драйвере...
    Подтолкните, как это сделать.... ну...какими функциями... ))

    Заранее сенкс
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    а ZwФункции в нулевом кольце не рулят? Если рулят, могу поискать тебе исходник вируса, который их использует. Точнее сказать ниче не могу :dntknw:
     
  3. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    MSoft
    нжен код... т.к. я разобраться не могу что-то.... уже третий раз статью васма перечитываю...

    InitializeObjectAttributes - компилер ругается, что нет такой функции в ядре
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    это макрос, есть в ntddk.h, проверь написание. регистр влияет на разбор.
     
  5. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    n0name
    Блин
    Нашел его в ntdef.h

    Примерно такое содержание
    Включаю ntdef.h проэкт. Ответ компилятора:

    C:\APIS\driver.c(323) : error C2223: left of '->Length' must point to struct/union
    C:\APIS\driver.c(323) : error C2223: left of '->RootDirectory' must point to struct/union
    C:\APIS\driver.c(323) : error C2223: left of '->Attributes' must point to struct/union
    C:\APIS\driver.c(323) : error C2223: left of '->ObjectName' must point to struct/union
    C:\APIS\driver.c(323) : error C2223: left of '->SecurityDescriptor' must point to struct/union
    C:\APIS\driver.c(323) : error C2223: left of '->SecurityQualityOfService' must point to struct/union
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Вот те тогда код записи в файл через Zw (вроде бы в ядре должно работать). Дамаю, читается аналогично:

    Код (Text):
    1. NTSTATUS          status;
    2. UNICODE_STRING    fullFileName;
    3. HANDLE            fileHandle;
    4. IO_STATUS_BLOCK   iostatus;
    5. OBJECT_ATTRIBUTES oa;
    6.  
    7.  
    8. RtlInitUnicodeString( &fullFileName,
    9.                       L"\\??\\C:\\Example\\testfile.txt");
    10.  
    11. InitializeObjectAttributes( &oa,
    12.                             &fullFileName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
    13.                             NULL,
    14.                             NULL );
    15.  
    16. status = ZwCreateFile ( &fileHandle,
    17.                         GENERIC_WRITE | SYNCHRONIZE,
    18.                         &oa,
    19.                         &iostatus,
    20.                         0,  // alloc size = none
    21.                         FILE_ATTRIBUTE_NORMAL,
    22.                         FILE_SHARE_WRITE,
    23.                         FILE_OPEN_IF,
    24.                         FILE_SYNCHRONOUS_IO_NONALERT,
    25.                         NULL,
    26.                         0);
    27. // Здесь:
    28. // GENERIC_WRITE равно STANDARD(0x40000000L)
    29. //
    30. // FILE_GENERIC_WRITE равно STANDARD_RIGHTS_WRITE|FILE_WRITE_DATA |
    31. //    FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA |
    32. //    SYNCHRONIZE, что можно увидеть в заголовочном файле winnt.h
    33.  
    34. if( NT_SUCCESS(status))
    35. {
    36.     // Строка для записи в файл
    37.     char myString[100]="string : test write!\r\n";
    38.     // Структура, которая поможет определить длину файла:
    39.     FILE_STANDARD_INFORMATION fileInfo;
    40.  
    41.     status =        // Получаем информацию о файле
    42.         ZwQueryInformationFile( fileHandle,
    43.                                &iostatus,
    44.                                &fileInfo,
    45.                                sizeof(FILE_STANDARD_INFORMATION),
    46.                                FileStandardInformation
    47.                                );
    48.     ULONG len = strlen(myString);
    49.     if( NT_SUCCESS(status) )
    50.     {
    51.         LARGE_INTEGER ByteOffset = fileInfo.EndOfFile;
    52.         status = ZwWriteFile(fileHandle,
    53.                             NULL,
    54.                             NULL,
    55.                             NULL,
    56.                             &iostatus,
    57.                             myString, len,   // Записываемая строка
    58.                             &ByteOffset,     // a если NULL? см. ниже
    59.                             NULL);
    60.         if( !NT_SUCCESS(status) || iostatus.Information != len )
    61.         {
    62.             DbgPrint("Error on writing. Status = %x.", status);
    63.         }
    64.     }
    65.     ZwClose(fileHandle);
    66. break;
    67.  
    68. }
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    зачем ты включаешь ntdef? он уже включается в ntddk,h
     
  8. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    n0name
    я не знаю что там за фигня, но у меня включен ntoskrnl.h
    при попытке врубить ntddk.h вылетает сотни 2 ошибок... В основном характера "Redefenition"

    При отключении ntoskrnl.h нет нескольких структур...

    ЗЫ: VC++ 6
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ntoskrnl.h левый хидер.
    врубай ntddk.h, а структуры видимо не документированы, вынеси нужные тебе в один файл.
     
  10. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    nitrotoluol
    да поможет тебе святой ассемблер ;)
     
  11. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    работа с файлами и каталогами из драйвера описана в KmdTut by Four-F, если правильно помню
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Asterix
    Только на ассемблере.

    nitrotoluol
    Да посмотри сорец драйвера какой-нибудь, и разберёшься, как и что включать. Есть даже сорцы с файлами проектов студии, делов-то.