您的位置:首页 > 其它

DbgPrint 输出格式

2013-07-31 14:29 253 查看
DbgPrint 输出

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,重启即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: