标签:
1) 直接打印字符串。
DbgPrint(“Hello World!”);
2) 空结尾的字符串,你可以用普通得C语法表示字符串常量
char variable_string[] = “Hello World”;
DbgPrint(“%s”, variable_string);
3) 空结尾的宽字符串(WCHAR类型)
WCHAR string_w[] = L“Hello World!”;
DbgPrint(“%ws”, string_w);
或者
DbgPrint(“%S”, string_w);
4)Unicode串,由UNICODE_STRING结构描述,包含16位字符。
typedef struct _UNICODE_STRING{
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
}UNICODE_STRING , *PUNICODE_STRING;
UNICODE_STRING string_unicode = L”Hello World!”;
DbgPrint(“%wZ\n”, &string_unicode);
5) ANSI串,由ANSI_STRING结构描述,包含8位字符。
typedef struct _STRING{
USHORT Length;
USHORT MaximumLength;
PCHAR Buffer;
}STRING, *PANSI_STRING;
STRING bar;
或者:ANSI_STRING bar;
RtlInitAnsiString(&bar, ”Hello World!”);
DbgPrint(“%wZ\n”, &bar);
DebugPrint格式说明符
符号 格式说明符 类型
%c, %lc ANSI字符 char
%C, %wc 宽字符 wchar_t
%d, %i 十进制有符号整数 int
%D 十进制_int64 _int64
%L 十六进制的LARGE_INTEGER LARGE_INTEGER
%s, %ls NULL终止的ANSI字符串 char*
%S, %ws NULL终止的宽字符串 wchar_t*
%Z ANSI_STRING字符串
%wZ UNICODE_STRING字符串
%u 十进制的ULONG ULONG
%x 小写字符十六进制的ULONG ULONG
%X 大写字符十六进制的ULONG ULONG
%p 指针Pointer 32/64位
根据DDK上说明,Unicode格式(%C, %S, %lc, %ls, %wc, %ws, and %wZ)只能在 IRQL = PASSIVE_LEVEL时才能使用.
在Vista下模式DbgPrint的输出信息是无法输出到WinDbg中的,这是因为Vista下引入了新的函数DbgPrintEx (DbgPrint实际上调用这个函数),这个函数可以控制输出的Level(这下不用自己做这样的工作了)。但是默认的,Vista下DbgPrint 输出的信息在WinDBG中是无法生效的。可以按一下方法来使它生效:
打开注册表到这个路径:HKLM\SYSTEM\CCS\Control\Session Manager\Debug Print Filter
修改Default值为0F,重启即可。
标签:
原文地址:http://www.cnblogs.com/Reverser/p/4483453.html