Alter.Org.UA
 << Back Home EN en   Donate Donate

DbgPrint logger
for
NT3.51/NT4/NT4-TS/w2k/XP/2k3/2k3-r2/Vista and WinPE/BartPE/MobileOS

DbgPrint logger home

DbgPrint logger SDK

Download:
DbgPrnHk_v9c_sdk.rar/tgz (102.1 Kb/142.2 Kb) - SDK,
DbgPrnHk_v9c_all.rar/tgz (335.2 Kb/439.2 Kb) - все вместе

SDK упрощает взаимодействие с DbgDump tools. Можно использовать Debug (PostDbgMesgD.lib) или Release (PostDbgMesg.lib/PostDbgMesgN.lib) статические библиотеки для помещения сообщений прямо во внутренний буфер сообщений драйвера DbgPrnHk. В последствии эти сообщения получаются user-mode модулем DbgPrintLog.exe. Для Native Applications нужно использовать PostDbgMesgND.lib или PostDbgMesgN.lib.

Полезная вещь для получения логов в то время, когда Service Manager или Win32 subsystem недоступны.

Включите PostDbgMesg.h и PostDbgMesg.lib для Win32 или PostDbgMesgN.lib для Native в ваш проект. Это позволит использовать DbgDump_Printf(), DbgDump_Print() и DbgDump_Printn() API.

DbgPrint logger SDK API


DbgDump_Printf
BOOLEAN
_cdecl
DbgDump_Printf(
    PCHAR Format,
    ...
    );

DbgDump_Printf() похож по функциональности на обычный printf(). В качестве первого параметра идет форматированная строка. Note, длина результирующей строки ограничена 2047 символами.

Example:

DbgDump_Printf("Test print, Process ID = %d\n", GetCurrentProcessId());

DbgDump_Print
BOOLEAN
__stdcall
DbgDump_Print(
    PCHAR Msg
    );

DbgDump_Print() отправляет в лог NULL-терминированную строку.

Example:

DbgDump_Print("Test print ASCIIZ\n\0 This will never be printed!!!\n");

DbgDump_Printn
BOOLEAN
__stdcall
DbgDump_Printn(
    PCHAR Msg,
    ULONG Length
    );

DbgDump_Printn() отправляет в лог строку символов указанной длины. NULL-символы печатаются на общих основаниях,

Example:

DbgDump_Printn("Test print CHARS\n\0 This will be printed!!!\n",
        sizeof("Test print CHARS\n\0 This will be printed!!!\n"));

DbgDump_Bin
BOOLEAN
__stdcall
DbgDump_Bin(
    PCHAR Msg,
    ULONG Length
    );

DbgDump_Bin() отправляет в лог массив байтов указанной длины. Такое сообщение транслируется в текстовую форму в виде HEX-дампа.

Example:

DbgDump_Printn("0123456789",
        sizeof("0123456789"));

will display the following:

30 31 32 33 34 35 36 37 - 38 39 00


DbgDump_PostMsgEx
BOOLEAN
__stdcall
DbgDump_PostMsgEx(
    PDbgPrnHk_PostMessageEx_USER_IN pPutMsgBuf
    );

DbgDump_PostMsgEx() отправляет в лог полностью заполненый пакет (во внутреннем формате), содержащий помимо текста сообщения еще и timestamp, Process ID и Thread ID, номер CPU и т.п..

Example:

PDbgPrnHk_PostMessageEx_USER_IN pPutMsgBuf;

pPutMsgBuf = (PDbgPrnHk_PostMessageEx_USER_IN)
    GlobalAlloc(GMEM_FIXED, sizeof(DbgPrnHk_PostMessageEx_USER_IN)+2048);
memset(pPutMsgBuf, 0, sizeof(DbgPrnHk_PostMessageEx_USER_IN));
//pPutMsgBuf->TimeStamp.QuadPart = 0; // already 0, will be auto-assigned
pPutMsgBuf->ThreadId = (PVOID)(-1);   // unknown
//pPutMsgBuf->Irql = 0;               // already 0
pPutMsgBuf->CpuNumber = 0xff;         // unknown
pPutMsgBuf->CallerMode = 1;           // user mode
pPutMsgBuf->Length = (USHORT)length;
pPutMsgBuf->ProcessId = ProcessId;
memcpy(pPutMsgBuf->Msg, pmessage, length);

DbgDump_PostMsgEx(pPutMsgBuf);

Пример использования в подкаталоге sdk\test\.

Требования

Для использования DbgPrint logger SDK требуется установить драйвер DbgPrnHk (см. ключ -drv в описании DbgPrintLog.exe) и использовать сам DbgPrintLog.exe для сохранения логов. Рекомендую Boot, System или Automatic режим старта драйвера (в зависимости от ваших потребностей). DbgPrintLog.exe тоже может иметь смысл использовать в режиме сервиса (см. ключ -svc в описании DbgPrintLog.exe)

Опыт, опыт...

Если при использовании VS.NET у вас отладочные сообщения перехватываются .NET'овским отладчиком, загляните вот сюда на RSDN


Предложения и замечания please сюда: FB or mail alterX@alter.org.ua (remove X)   Share
<< Back Автор: Alter (Александр А. Телятников) Сервер: Apache+PHP под FBSD © 2002-2024