2010年3月3日 星期三

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