在驱动编程中,处理字符串最好用UNICODE_STRING,UNICODE_STRING是一个结构,查看MSDN如下:
typedef struct _UNICODE_STRING{
USHORT length;\\字符串的长度
USHORT MaxnumLength;\\整个缓冲区的最大长度
PWSTR Buffer;\\缓冲
}UNICODE_STRING *PUNICODE_STRING;
字符串不是以00结尾,而是用一个结构来指定字符串的长度。
DDK提供了一个函数用于初始化字符串
VOID RtlInitUnicodeString(
IN OUT PUNICODE_STRING DestiantionString,//定义的字符串结构指针
IN PCWSTR SourceString//字符串
);
创建好一个工程框架,在框架中加入下面代码:
UNICODE_STRING mystr;//定义字符串
RtlInitUnicodeString(&mystr,L”www.lingdux.com“);//字符串初始化
DbgPrint(“%wZ”,&mystr);//打印字符串
加载驱动,用DEBUG View 成功看到结果www.lingdux.com
接下来在定义一个字符串结构,把字符串copy到新的结构
要为新的字符串初始化,并且分配空间
ddk提供了一个函数来分配空间
PVOID ExAllocatePool(
IN POOL_TYPE PoolType,//分页方式
IN SIZE_T NumberOfBytes//大小
);
用下面的函数copy字符串
VOID RtlInitUnicodeString(
IN OUT PUNICODE_STRING destinationString,//目标字符串指针
IN PUNICODE_STRING SourceString//源字符串指针
);
UNICODE_STRING mynewstr;//定义字符串
mynewstr.Buffer=(PWSTR)ExAllocatePool(PagedPool,256);//分配内存空间
RtlInitUnicodeString(&mynewstr,&mystr);//copy字符串
DbgPrint(“%wZ”,&mynewstr);//打印字符串
载入驱动后用Debug Viwe成功截获到两个www.lingdux.com
最终代码如下
#include <ntddk.h>
VOID Unload(IN PDRIVER_OBJECT DriverObject)
{
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
UNICODE_STRING mystr;
UNICODE_STRING mynewstr;
RtlInitUnicodeString(&mystr,L”www.lingdux.com“);
DbgPrint(“%wZ”,&mystr);
mynewstr.Buffer=(PWSTR)ExAllocatePool(PagedPool,256);
RtlCopyUnicodeString(&mynewstr,&mystr);
DbgPrint(“%wZ”,&mynewstr);
DriverObject->DriverUnload=Unload;
return STATUS_SUCCESS;
}
本文到目前为止还暂无回复