驱动学习笔记
驱动学习笔记。1.数据类型变了(参考ntdef.h文件头):
ULONG
UCHAR 对应c中的unsigned char
UINT
VOID 对应c中的void
PUNLONG
PUCHAR
等等,大家自行参考文件头吧。
2.字符串也变了(参考ntddk.h文件头)
对于字符串来说,安全真的很重要。所以弄得这么麻烦,大家看看函数吧:
RtlCopyUnicodeString 字符串拷贝函数
RtlAppendUnicodeStringToString 字符串连接函数
例子1:
UNICODE_STRING dst; //目标字符串
WCHAR dst_buf; //缓冲区
UNICODE_STRING src; //源字符串
RtlInitUniocdeString(&src,L”unicodestring”);
RtlInitEmptyUnicodeString(&dst,dst_buf,256*sizeof(WCHAAR)); //把目标字符串初始化为缓冲区长度为256双字的UNICODE_STRING结构
RtlCopyUnicodeString(&dst,&src); //字符串拷贝
例子2:
WCHAR buf;
UNICODE_STRING dst,src;
RtlInitEmptyUnicodeString(&dst,buf,256*sizeof(WCHAR));
RtlInitUnicodeString(&src,L"myunicode");
RtlCopyUnicodeString(&dst,&src);
RtlInitUnicodeString(&src,L"string");
RtlAppendUnicodeStringToString(&dst,&src);
KdPrint(("%wZ",&dst));
其实还有很多,大家自己看吧。
3.说说字符串打印(参考ntstrsafe.h文件头):
其实你可以使用sprintf或者wsprintf但是还是使用头文件中的RtlStringCbPrintf比较安全。
例子:
int const arraysize = 30;
WCHAR pszDest;
size_t cbDest = arraysize * sizeof(WCHAR);
LPCWSTR pszFormat = L"%s %d + %d = %d.";
WCHAR* pszTxt = L"The answer is";
NTSTATUS status = RtlStringCbPrintfW(pszDest, cbDest, pszFormat, pszTxt, 1, 2, 3);
4.打印函数DbgPrint、KdPrint(参考ntddk.h文件头)
我只是说一下格式控制符(比较像C中的printf):
%C, %S, %lc, %ls, %wc, %ws, and %wZ
都是代表字符串你用那个都可以的(有些控制字符不安全,推荐使用%wZ)。 好**,期待能看懂/:011 哎、看不懂。。。。 新手 看不懂 驱动,底层权限最高
页:
[1]