Нужен пример, как создать файл-лог в драйвере

Тема в разделе "WASM.WIN32", создана пользователем LuckyDevil, 18 май 2005.

  1. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Ребята, понимаю что для многих это смешно, а для меня не очень, мне нужен примерчик(участок кода), который бы создавал файл для записи данных из буфера, эта информация мне нужна для отладки.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    А пример на сайте чем не подходит?
     
  3. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Booster, кинь ссылку. Если честно я что-то уже тут встречал но сейчас найти не могу.
     
  4. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    смотря какая операционка.

    под Linux можно обойтись и printk,

    на NT IoAllocateErrorLogEntry

    на 9x SetupLogError

    ты хоть скажи что за операционка у тебя ;)
     
  5. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    kaspersky, OS w2k/xp

    вопрос это твои статьи на www.insidepro.com?
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    LuckyDevil

    Дык в разделе статьи, Four-F, "Драйвера режима ядра. Базовая техника. Каталоги и файлы"
     
  7. wish3

    wish3 New Member

    Публикаций:
    0
    Регистрация:
    31 янв 2005
    Сообщения:
    29
    Адрес:
    Ukraine
    Код (Text):
    1.  
    2. DriverEntry
    3. ....
    4.     // Ініціалізація файлу логу
    5.     RtlInitUnicodeString( &fullFileName, L"\\??\\C:\\MouseDrv.txt" );
    6.     InitializeObjectAttributes( &oa,
    7.                                 &fullFileName,
    8.                                 OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
    9.                                 NULL,
    10.                                 NULL );
    11.     status = ZwCreateFile( &fileHandle,
    12.                             GENERIC_READ | GENERIC_WRITE |SYNCHRONIZE,
    13.                             &oa,
    14.                             &iosb,
    15.                             0,
    16.                             FILE_ATTRIBUTE_NORMAL,
    17.                             FILE_SHARE_READ | FILE_SHARE_WRITE,
    18.                             FILE_OPEN_IF,
    19.                             FILE_SYNCHRONOUS_IO_NONALERT,
    20.                             NULL,
    21.                             0);
    22. ....
    23.     #if LOG
    24.         log("MouseDrv: DriverEntry started.\n");
    25.     #endif 
    26.  
    27. ....
    28. void log(const char *s)
    29. {
    30.     FILE_STANDARD_INFORMATION   fileInfo;
    31.     NTSTATUS                    status;
    32.     LARGE_INTEGER ByteOffset;
    33.    
    34.     status = ZwQueryInformationFile( fileHandle,
    35.                                     &iosb,
    36.                                     &fileInfo,
    37.                                     sizeof(FILE_STANDARD_INFORMATION),
    38.                                     FileStandardInformation
    39.                                     );
    40.     if (!NT_SUCCESS(status)) {
    41.         return;
    42.     }
    43.    
    44.     ByteOffset = fileInfo.EndOfFile;
    45.     status = ZwWriteFile(fileHandle,
    46.                         NULL,
    47.                         NULL,
    48.                         NULL,
    49.                         &iosb,
    50.                         s, strlen(s),
    51.                         &ByteOffset,
    52.                         NULL);
    53.     if (!NT_SUCCESS(status)) {
    54.         DbgPrint("Error on writing. status = %x.", status);
    55.     }
    56. }
    57. ....
    58. //TODO Протестувати MouDrv_Err
    59. void MouDrv_Err(char *s, const NTSTATUS status)
    60. {
    61.     char buffer[256];
    62.     sprintf(buffer, "%s;\t status = %x;\n", s, status);
    63.     DbgPrint(buffer);
    64.     log(buffer);
    65. }
    66. ....
    67.  


    Он далеко не идеальный. Например можешь еще добавить уровни логирования.
    Код (Text):
    1.  
    2. ...
    3. #define LL_INIT 0
    4. #define LL_ERR 10
    5.  
    6. void log(const char *s, int LogLevel)
    7. {
    8.   if(LogLevel < CurrentLogLevel) {
    9.     return;
    10.   }
    11. }
    12.  


    Потом, если все ок, переделай это на макрос, додай __LINE__.
     
  8. Saint German

    Saint German New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2003
    Сообщения:
    222
    Еще один момент:

    если из кода с IRQL<=DISPATCH_LEVEL ты станешь вызывать

    какие-то функции, например ZwCreateFile/ZwWriteFile,

    то это есть некорошо, - смотри в ddk описание функций.
     
  9. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    > aspersky, OS w2k/xp

    тогда юзай стандартный логгер



    > вопрос это твои статьи на www.insidepro.com?

    мои
     
  10. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    wish3, спасибо!!!

    код что надо, сработало )))
     
  11. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    kaspersky, материал очень интересный, не думал, что вот так вот легко можно будет пообщаться с тобой в форуме. Жду нового с интересом )))).
     
  12. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    LuckyDevil

    такой механизм уже давно существует, но, насколько мне не изменяет память, начиная с winXP, имя ему WPP. Искать на osr. Примеры там тоже есть.
     
  13. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow