- UID
- 66114
注册时间2010-4-1
阅读权限30
最后登录1970-1-1
龙战于野
TA的每日心情 | 慵懒 2019-3-12 17:25 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
|
驱动学习笔记。
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[256]; //缓冲区
UNICODE_STRING src; //源字符串
RtlInitUniocdeString(&src,L”unicodestring”);
RtlInitEmptyUnicodeString(&dst,dst_buf,256*sizeof(WCHAAR)); //把目标字符串初始化为缓冲区长度为256双字的UNICODE_STRING结构
RtlCopyUnicodeString(&dst,&src); //字符串拷贝
例子2:
WCHAR buf[256];
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[arraysize];
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)。 |
|