基本数据类型
遵循WDK编程习惯
编程的时候,一般来说要遵循WDK的编程习惯。比如读者习惯如此定义:无符号长整型:`unsigned long length`
但这是不行的,因为在不同的平台编译,长整型的长度是不一样的。因此WDK重定义,规范了一下:
unsigned long重定义为ULONG
unsigned char重定义为UCHAR
unsigned int重定义为UINT
void重定义为VOID
unsigned long *重定义为PULONG
unsigned char *重定义为PUCHAR
unsigned int *重定义为PUINT
void *重定义为PVOID
返回状态
绝大部分内核API的返回值都是一个错误码,类型为NTSTATUS。NT_SUCCESS()函数可以判断返回值是否为成功。常用返回值如下:
STATUS_SUCCESS成功
STATUS_INVALID_PARAMETER错误参数
STATUS_INSUFFICIENT_RESOURCES资源不足
STATUS_PENDING请求未决
STATUS_BUFFER_OVERFLOW缓冲区长度不够
STATUS_BUFFER_TOO_SMALL缓冲区长度不够(和上面有细微的差别(暂时没必要理解))
字符串
不用C语言或C++的字符串,用WDK的!!!
WDK字符串结构定义如下:(这里是宽字节)
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
}
DbgPrint打印
字符串打

本文介绍了Windows内核编程中的数据类型,强调遵循WDK编程习惯,如使用NTSTATUS表示返回状态。讨论了字符串处理,推荐使用WDK的字符串结构,并展示了DbgPrint的使用方法。此外,文章还讲解了驱动对象(DRIVER_OBJECT)和设备对象(DEVICE_OBJECT)的概念,以及它们在处理IRP(请求)中的角色。最后提到了请求的种类。
最低0.47元/天 解锁文章
613





