) 直接打印字符串。
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.Buffer); 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.Buffer); 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,重启即可。 |
DbgPrint 数据类型输出
最新推荐文章于 2024-08-12 21:38:30 发布