DbgPrint输出格式 Unicodestring

时间:2023-11-23 22:11:50

DbgPrint输出格式 Unicodestring 

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.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时才能使用.