Autochk.exe - вывод информации на экран...

Тема в разделе "WASM.BEGINNERS", создана пользователем sxd, 16 май 2007.

  1. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    n0name скажи подробнее...
     
  2. wasm_test

    wasm_test wasm test user

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

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    sxd
    Что там подробнее-то :\
    NtDisplayString вызывает VidDisplayString.
    Код (Text):
    1. NTSTATUS STDCALL
    2. NtDisplayString(
    3.    IN PUNICODE_STRING DisplayString)
    4. {
    5.    OEM_STRING OemString;
    6.  
    7.    RtlUnicodeStringToOemString(&OemString, DisplayString, TRUE);
    8.    InbvDisplayString(OemString.Buffer);
    9.    RtlFreeOemString(&OemString);
    10.  
    11.    return STATUS_SUCCESS;
    12. }
    А ты как строку готовишь?
    Попробуй так:
    Код (Text):
    1. void PrintMsg(char* fmt,...){
    2.     char tmp[512];
    3.     va_list ap;
    4.     UNICODE_STRING UnicodeString;
    5.     ANSI_STRING AnsiString;
    6.  
    7.     va_start(ap, fmt);
    8.     vsprintf(tmp, fmt, ap);
    9.     va_end(ap);
    10.  
    11.     RtlInitAnsiString(&AnsiString, tmp);
    12.     RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, 1);
    13.     NtDisplayString(&UnicodeString);
    14.     RtlFreeUnicodeString(&UnicodeString);
    15. }
    Соответственно юзать:
    PrintMsg("%d percents...", percents);
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. BOOLEAN STDCALL
    2. InbvDisplayString(IN PCHAR String)
    3. {
    4.    if (BootVidDriverInstalled && InbvDisplayState == 0)
    5.    {
    6.       InbvAcquireLock();
    7.       VidDisplayString(String);
    8.       InbvReleaseLock();
    9.  
    10.       /* Call Headless (We don't support headless for now)
    11.       HeadlessDispatch(DISPLAY_STRING);
    12.       */
    13.  
    14.       return TRUE;
    15.    }
    16.  
    17.    return FALSE;
    18. }
    PS: Это сорцы из ROS'a. Но вроде так и есть. Как-то дизасмил такое.
     
  5. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    n0name так а смысл этого кода возврата каретки же нет?
    Я его откомпилил перегрузил тачку, вывел нормално, только в одну строку всё...
     
  6. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    а для этой функции какая оболочка?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    sxd
    это не оболочка, а уже реализация, насколько я помню, и находится она в BOOTVID.DLL, драйвере ядра для видео, вместе с остальными.
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А что еще ожидать то.. ничего и не должно было измениться)
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    А PrintMsg("%d\r", Percent); не пробовал? ;)
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    n0name
    а какая разница, он же уже писал, что при NtDisplayString с символом \r получается черная строка.
    а уж форматирование предварительное на работу NtDisplayString никак не повлияет
     
  11. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    Пробовал так PrintMsg("%d percents...\r", percents); => результат: чёрная полоса и проценты не идут...
     
  12. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    01001024 RtlCompareUnicodeString ntdll
    01001028 RtlCreateUnicodeString ntdll
    01001034 RtlFreeUnicodeString ntdll
    01001038 RtlFormatMessage ntdll
    01001048 NlsMbCodePageTag ntdll
    01001060 wcscmp ntdll
    01001064 wcslen ntdll
    01001068 wcscpy ntdll
    01001074 wcsstr ntdll
    01001030 wcscat ntdll

    48581014 RtlUpcaseUnicodeChar ntdll
    48581018 RtlUnicodeStringToInteger ntdll
    48581028 RtlExtendedIntegerMultiply ntdll
    48581100 RtlEqualUnicodeString ntdll
    48581104 RtlAppendUnicodeToString ntdll
    48581108 RtlAppendUnicodeStringToString ntdll
    48581140 RtlPrefixUnicodeString ntdll
    485811D4 RtlUnicodeStringToAnsiString ntdll
    48581038 wcslen ntdll
    4858103C wcscpy ntdll
    48581084 swprintf ntdll
    485810A0 wcsstr ntdll
    485810B4 wcsncpy ntdll
    48581130 sprintf ntdll
    4858116C wcscat ntdll

    01001024 RtlPrefixUnicodeString ntdll
    01001028 RtlEqualUnicodeString ntdll
    0100108C RtlOemToUnicodeN ntdll
    01001090 RtlMultiByteToUnicodeN ntdll
    01001094 RtlUnicodeToOemN ntdll
    01001098 RtlUnicodeToMultiByteN ntdll
    010010B4 RtlFreeUnicodeString ntdll
    010010DC RtlExpandEnvironmentStrings_U ntdll
    01001100 RtlFormatMessage ntdll
    01001104 RtlAnsiStringToUnicodeString ntdll
    01001108 RtlInitAnsiString ntdll
    0100116C RtlUpcaseUnicodeString ntdll
    01001194 RtlFindSetBits ntdll
    01001198 RtlClearBits ntdll
    0100119C RtlInitializeBitMap ntdll
    010011A0 RtlLookupElementGenericTable ntdll
    010011A4 RtlNumberOfSetBits ntdll
    010011A8 RtlEnumerateGenericTableWithoutSplaying ntdll
    010011AC RtlSetBits ntdll
    01001000 wcslen ntdll
    01001008 wcsstr ntdll
    01001058 isprint ntdll
    0100105C swprintf ntdll
    0100109C sprintf ntdll
    010010A8 wcscmp ntdll
    010010AC wcsspn ntdll
    010010B0 atol ntdll
     
  13. wasm_test

    wasm_test wasm test user

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

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    Great в смысле?
     
  15. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    Такой же код в исходном файле autochk.c операционной системы ReactOS, только в этой операционке он работает нормально, а Native - приложение написанное с таким же кодом нет... :dntknw:
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    угу, я так и написал, что выдрал его оттуда ;)
    Попробовать что-ли самому сделать.
     
  17. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    Щас буду испытывать такое:

    Код (Text):
    1. #include "ntddk.h"
    2. #include "native.h"
    3. #include "stdarg.h"
    4. #include "stdio.h"
    5.  
    6. static VOID PrintString(char* fmt,...)
    7. {
    8.     char buffer[512];
    9.     va_list ap;
    10.     UNICODE_STRING UnicodeString;
    11.     ANSI_STRING AnsiString;
    12.  
    13.     va_start(ap, fmt);
    14.     vsprintf(buffer, fmt, ap);
    15.     va_end(ap);
    16.  
    17.     RtlInitAnsiString(&AnsiString, buffer);
    18.     RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, TRUE);
    19.     NtDisplayString(&UnicodeString);
    20.     RtlFreeUnicodeString(&UnicodeString);
    21. }
    22.  
    23. void NtProcessStartup(PSTARTUP_ARGUMENT Argument)
    24. {
    25.     int i;
    26.     LARGE_INTEGER iDelayInterval;
    27.     iDelayInterval.QuadPart = -10000000;
    28.  
    29.     for(i = 0; i < 3; i++)
    30.     {
    31.         PrintString("%d percent completed.\r", i);
    32.         NtDelayExecution(FALSE, &iDelayInterval);
    33.     }
    34.  
    35.     NtTerminateProcess(NtCurrentProcess(), 0);
    36. }
     
  18. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    Хотя и не понятно моменты выделенные жирным... Всё-таки это Native-приложение...
    #include <stdio.h>
    #define WIN32_NO_STATUS
    #include <windows.h>
    #define NTOS_MODE_USER
    #include <ndk/ntndk.h>
    #include <fmifs/fmifs.h>

    static VOID PrintString(char* fmt,...)
    {
    char buffer[512];
    va_list ap;
    UNICODE_STRING UnicodeString;
    ANSI_STRING AnsiString;

    va_start(ap, fmt);
    vsprintf(buffer, fmt, ap);
    va_end(ap);

    RtlInitAnsiString(&AnsiString, buffer);
    RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, TRUE);
    NtDisplayString(&UnicodeString);
    RtlFreeUnicodeString(&UnicodeString);
    }

    static BOOLEAN CALLBACK ChkdskCallback(IN CALLBACKCOMMAND Command, IN DWORD Modifier, IN PVOID Argument)
    {
    PDWORD Percent;
    PBOOLEAN Status;
    PTEXTOUTPUT Output;

    Percent = (PDWORD) Argument;
    PrintString("%d percent completed.\r", *Percent);

    return TRUE;
    }

    int _cdecl _main(int argc, char *argv[], char *envp[], int DebugFlag)
    {
    return 0;
    }
     
  19. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    Товарищи друг у меня скачал исходники Windows NT 4.0 я его попросил задать поиск по папке с исходником на предмет встречаемости функции NtDisplayString... Нашёл со всего исходника несколько файлов... Посмотрите может это, поможет чем-нибудь в этой проблемме...
    http://slil.ru/24441897
     
  20. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    Я вообще начал подозревать что может и не NtDisplayString выводит информацию на экран...