Вывод текста на экран...

Тема в разделе "WASM.NT.KERNEL", создана пользователем MARUSKA, 8 авг 2007.

  1. MARUSKA

    MARUSKA New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    16
    Приветик... мальчики помогите плиззззз... Курсовик делаю... Сам драйвер мне написали, но теперь надо как нибудь вывести информацию на экран!!! Переменная типа UNICODE_STRING...
    Подскажите плиззззз... какой лучше функцией воспользоваться и как?
     
  2. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    В какой момент должен производиться вывод строки?
    Если в момент загрузки системы - то подойдет ZwDisplayString, иначе, скорее всего, только прямая запись в видеобуфер...
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Не обязательно в момент загрузки, главное, чтобы HAL владел дисплеем. Это действительно бывает при загрузке обычно, но можно самостоятельно захватить дисплей:

    Код (Text):
    1.         // Initialization
    2.         InbvAcquireDisplayOwnership( );
    3.         InbvResetDisplay( );
    4.         InbvSolidColorFill(0,0,639,479,4); // make the screen blue
    5.         InbvSetTextColor(15);
    6.         InbvInstallDisplayStringFilter((INBV_DISPLAY_STRING_FILTER)NULL);
    7.        
    8.         bDisplayStringEnabled = InbvEnableDisplayString(TRUE);     // enable display string
    9.        
    10.         InbvSetScrollRegion(0,0,639,479);  // set to use entire screen
    11.  
    12.         // Display string
    13.         InbvDisplayString("Hello, World!");
    Правда одна тонкость - я не знаю как потом вернуть прежний режим =))))

    Так что скорее всего придется воспользоваться DbgPrint'ом.

    Код (Text):
    1. PUNICODE_STRING String;
    2. PWSTR Buffer;
    3.  
    4. Buffer = ExAllocatePool( PagedPool, String->Length*2 + 2 );
    5. memcpy( Buffer, String->Buffer, String->Length*2 );
    6. Buffer[String->Length] = 0;
    7.  
    8. DbgPrint("String: %S", Buffer);
    9.  
    10. ExFreePool( Buffer );
    Вся эта шня на случай если в конце UNICODE-строки нету нуля. Если есть, тогда просто DbgPrint("String: %S", String->Buffer); и все
     
  4. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Интересно, а какой именно "вывод на экран" все-таки интересует Маруську? Ибо DbgPrint конечно "вывод", но не совсем на экран... ;)
     
  5. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Вообще, можно и не заставлять ХАЛ захватывать экран. Можно попробовать "нарисовать" текст. Кое-что есть вот тут: https://www.rootkit.com/board.php?thread=10285&did=edge0&disp=10285
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    IMHO все эти шаманства с экраном, мягко сказать фигня. У разного железа с этим по разному, да и вывод этот IMHO криво отображается. Гораздо правильнее и красивше передавать данные в юзермод, и потом красивыми окошками их показывать. Ну или если по простому и чисто для отладки, то как предложил Great юзать DbgPrint.
     
  7. MARUSKA

    MARUSKA New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    16
    Упссс... столько ответов, спасибки...
    DbgPrint - это наверное не пойдёт... насколько я поняла занимаясь этой наукой, DbgPrint - функция для отладки и на экран выводит сообщения только в специальных программах... DbgView вроде чёта мне объясняли =))
    А если я хочу во время загрузки чтоб на таком синеньком фоне...
    Понимаете?
    И да кстати цвет фона можно менять?
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Тогда ZwDisplayString

    InbvSolidColorFill(0,0,639,479,4); // make the screen blue'
    Цвет фона - последний параметр
     
  9. MARUSKA

    MARUSKA New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    16
    Я так понимаю, что можно так сделать:

    Код (Text):
    1. NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING theRegistryPath)
    2. {
    3.     UNICODE_STRING usString;
    4.     RtlInitUnicodeString (&usString, L"My driver....");
    5.     ZwDisplayString(&usString);
    6.  
    7.     DriverObject -> DriverUnload = MyUnload;
    8.  
    9.     RtlFreeUnicodeString (&usString);
    10.     return STATUS_SUCCESS;
    11. }
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    и закончится это бсодом BAD_POOL_CALLER
     
  11. MARUSKA

    MARUSKA New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    16
    Это бывает когда BSOD?
     
  12. MARUSKA

    MARUSKA New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    16
    Я ещё не пробовала!!! )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    Почему???
     
  13. MARUSKA

    MARUSKA New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    16
    Ведь надоже освободить память выделенную под юникодовскую строку...
    Я в исходниках видела!!!
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    НИкакой памяти не выделяется, используется строчка L"My driver...." из секции .rdata драйвера. ПОпытка освобождения такой (невыделенной отдельно) памяти - бсод сразу.
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Да-да)
     
  16. MARUSKA

    MARUSKA New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    16
    А я могу проверить такой драйвер без перезагрузки...
    Просто слышала есть какая то недокументированная функция которая может взять и запустить драйвер в память...
     
  17. MARUSKA

    MARUSKA New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    16
    Вроде SystemLoadAndCallImage
     
  18. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Запустить можно вошь в голову :)
    Драйвер можно загрузить в память и затем попытаться запустить его в работу.
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ой-ай.. кошмар.
    Начнем по-порядку, таких функций аж две.
    ZwLoadDriver позволяет нормальным образом загрузить драйвер с созданием ветки в реестре и DRIVER_OBJECT'а
    ZwSetSystemInformation( SysLoadAndCallImage ) позволяет загрузить образ без создания веток реестра и DRIVER_OBJECT'ов.
     
  20. pushick

    pushick New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    95
    MARUSKA

    А если не секрет, ты где учишься? :)