zoukankan      html  css  js  c++  java
  • KdPrint/DbgPrint and UNICODE_STRING/ANSI_STRING

    typedef struct _UNICODE_STRING {
        USHORT Length;
        USHORT MaximumLength;
        PWSTR  Buffer;
    } UNICODE_STRING;
    typedef UNICODE_STRING *PUNICODE_STRING;
    
    
    typedef struct _STRING {
        USHORT Length;
        USHORT MaximumLength;
        PCHAR Buffer;
    } STRING;
    typedef STRING *PSTRING;
    
    typedef STRING ANSI_STRING;
    typedef PSTRING PANSI_STRING;

    To make life easier MS have extended kernel CRTL output() function with Z format specifier. This works for all kernel functions those understand formatted strings (e.g. sprintf_vsnprintfKdPrint/DbgPrint). For example:

    PUNICODE_STRING pUStr;
    PANSI_STRING    pAStr;
    ...
    KdPrint(("Unicode string: %wZ
    ", pUStr));
    KdPrint(("ANSI    string: %Z
    ",  pAStr));
    

    Though, you can use a little more complicated documented way. Btw, this form is suitable for printing byte array of strictly defined length.

    KdPrint(("Unicode string: %*.*ws
    ",pUStr->Length/sizeof(WCHAR),
        pUStr->Length/sizeof(WCHAR), pUStr));
    KdPrint(("Unicode string: %*.*S
    ",pUStr->Length/sizeof(WCHAR),
        pUStr->Length/sizeof(WCHAR), pUStr));
    KdPrint(("ANSI    string: %*.*s
    ", pAStr->Length/sizeof(CHAR),
        pAStr->Length/sizeof(CHAR),  pAStr));
    

    Or, if you want to take into account NULL-terminator, but limit output length to specified number of characters:

    KdPrint(("Unicode string: %.*ws
    ",
        pUStr->Length/sizeof(WCHAR), pUStr));
    KdPrint(("Unicode string: %.*S
    ",
        pUStr->Length/sizeof(WCHAR), pUStr));
    KdPrint(("ANSI    string: %.*s
    ",
        pAStr->Length/sizeof(CHAR),  pAStr));

  • 相关阅读:
    FZU-SE-K 第一次累计得分排行榜
    OO第四次总结
    OO第二次总结
    面向对象构造与设计第一次总结
    软件工程实践2019第四次作业
    蹒跚的第一步
    学期导图
    一篇随笔
    【软工】提问回顾与个人总结
    【软工】结对项目博客
  • 原文地址:https://www.cnblogs.com/vcerror/p/4289061.html
Copyright © 2011-2022 走看看