【Window内核编程】——UNICODE_STRING,ANSI_STRING和PCHAR

本文介绍了Windows驱动开发中UNICODE_STRING、ANSI_STRING和PCHAR的概念及其相互转换。详细讨论了UNICODE_STRING的初始化、拷贝、连接以及如何转换为PCHAR的过程,强调了正确操作的重要性,以避免系统崩溃。
摘要由CSDN通过智能技术生成

【我的】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&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值