驱动开发过程中,主要使用的C语言,虽说C中定义了许多数据类型,但是一般来说在编码上还是习惯与使用WDK的规范,虽说这个不是必须的,比如有这样一句unsigned long ul = 0;这个数据的大小根据不同的机器不同的编译器环境略有不同,这样代码就产生了不可控的行为,但是WDK上专门定义了相关的宏,环境不同,只需要修改一下宏定义,这样就避免了这个问题。
在这列举一些常用的数据类型,以免以后在编写代码或者查看例子代码时犯迷糊:普通数据类型#define ULONG unsigned long
#define UCHAR unsigned char
#define UINT unsigned int
#define VOID void
#define PULONG unsigned *
#define PUCHAR unsigned char*
#define PUINT unsigned int*
#define PVOID void* 字符串类型在驱动的编程中,为字符串操作专门定义了一个数据类型UNICODE_STRING ANSI_STRING,他们的定义大致相同,只是一个是表示UNICODE字符串,一个表示ANSI字符串,下面主要来说明一下UNICODE_STRINGtypedef struct _UNICODE_STRING {
USHORT Length; // 字符串的中字符所占的内存大小
USHORT MaximumLength;//用来存储字符串缓冲的大小
PWCHAR Buffer;//缓冲的地址
} UNICODE_STRING;这个结构体在使用是需要注意的是上述两个大小单位是字节数而不是字符个数,另外在操作UNICODE_STRING 的时候只是简单的操作Buffer指向的内存,并不会特意的为其分配另外的空间,字符串处理函数主要有这样几个:RtlInitUnicodeString(&uStr1, str1);
RtlCopyUnicodeString(&uStr1, &uStr2);
RtlAppendUnicodeToString(&uStr1, str1);
RtlAppendUnicodeStringToString(&uStr1, &uStr2);
RtlCompareUnicodeString(&uStr1, &uStr2, TRUE/FALSE);
RtlAnsiStringToUnicodeString(&uStr1, &aStr1, TRUE/FALSE
驱动数据结构
最新推荐文章于 2021-03-09 10:52:26 发布
通过示意图深入浅出地解析各种数据结构,帮助读者直观理解其工作原理。
摘要由CSDN通过智能技术生成