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_v9a_sdk.rar/tgz (102.1 Kb/142.2 Kb) - SDK,
DbgPrnHk_v9a_all.rar/tgz (325.4 Kb/428.6 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 сюда:
alterX@alter.org.ua (remove X)
|