【我的】Window驱动开发——UNICODE_STRING,ANSI_STRING和PCHAR
作者:zcr214 时间:2016/4/15
Windows驱动开发最常接触的就是指针了,各种类型的地址很容易搞晕,绝大多数的API需要的参数都是UNICODE_STRING的指针类型的,当我们自己要使用它的时候,多少会有些麻烦,需要借助ANSI_STRING和PCHAR才能转换到我们更熟悉的String字符串的处理,这里大致梳理一下。
1. 数据结构定义
UNICODE_STRING的结构定义如下:
typedefstruct_UNICODE_STRING
{
USHORTLength;
USHORTMaximumLength;
PWSTRBuffer;
}UNCODE_STRING,*PUNICODE_STRING;
ANSI_STRING的结构定义如下:
typedefstruct_STRING
{
USHORTLength;
USHORTMaximumLength;
PSTRBuffer;
}ANSI_STRING,*PANSI_STRING;
可以看到,除了字符串Buffer的类型不同之外,二者的结构大致相同,这里要区分的是,UNICODE字符串采用宽字符指针,ANSI字符串采用窄字符指针,也就是平时常用的CHAR*。
2. UNICODE_STRING初始化
UNICODE_STRING结构只包含一个指针,而且不包含字符串缓冲的空间,在实际使用中,它也不保证Buffer指针指向的字符串是以空字符结尾的,所以对于新手来说,对UNICODE_STRING的处理特别需要小心,只要出错,很可能导致系统崩溃了。(已经蓝屏无数次,在风中凌乱ing……)
UNICODE_STRINGustr&#