字符串拷贝,连接,打印
来源:互联网 发布:人民币外汇行情软件 编辑:程序博客网 时间:2024/05/16 18:39
1.字符串拷贝
UNICODE_STRING并不保证Buffer中的字符串是以空结束的。所以使用wcscpy来拷贝字符串是不行的。
UNICODE_STRING可以使用RtlCopyUnicodeString来进行拷贝。
UNICODE_STRING dst;//目标字符串
WCHAR dst_buf[256];
UNICODE_STRING SRC = =RTL_CONST_STRING(L"My Souce String!");
// The RtlInitEmptyUnicodeString macro initializes an empty counted Unicode string.
//把目标字符串初始化为拥有缓冲区长度为256的UNICODE_STRING空字符串
RtlInitEmptyString(dst, dst_buff, 256*sizeof(WCHAR));
RtlCopyUnicodeString(&dst, &src);
2.字符串连接
status = RtlAppendUnicodeToString(&dst, L"my second string!");
if(satrus != STATUS_SUCCESS)
{
... ...
}
另外一种情况是希望连接两个UNICODE_STRING,这种情况请调用RtlAppendUnicodeString。这个函数的第二个参数也是一个UNICODE_STRING的指针。
3.字符串打印
如果对C语言熟悉会使用sprintf,这个函数的宽字符版本为swprintf。该函数在驱动开发中依然可以使用,但不安全,为软建议使用
RtlStringCbPrintfW来代替它。RtlStringCbPrintfW需要包含头文件ntstrsafe.h,在连接的时候,还需要连接库ntsagestr.lib
status = RtlStringCbPrintfW(
dst->Buffer, 512*sizeof(WCHAR), L"filepath = %wz file size = %d \r\n",&file_path, file_size);
dst->Length = wcslen(dst->Buffer)*sizeof(WCHAR);
说明:UNICODE_STRING类似的指针,用%wz打印可以打印出字符串,在不能保证字符串为空字符串的时候,必须避免使用%ws后者s%。
另外,常见的输出打印,printf函数只有在有控制台输出的情况下才有意义,在驱动中没有控制台,但是windows内核中拥有调试信息输出机制,可以使用winDbg查看打印的调试信息。
驱动程序中可以使用DbgPrint函数来打印调试信息。这个函数的使用和printf基本相同,但是格式字符串要使用宽字符。DbgPrintf()的一个缺点在于,发行版本的驱动程序往往不希望附带任何输出信息,只有调试版才需要调试信息。但是DbgPrint()无论是发行版还是调试版编译都会有效,为此可以自己定义一个宏:
#if DBG
KdPrint(a) DbgPrint ##a
#else
KdPrint(a)
#endif
不过这样做的后果是,由于KdPrint只支持一个参数,因此必须把BbgPrint的所有参数都刮起来当做一个参数传入。
status = KdPrint( (
L"file path = %wZ file size = %d \r\n",
&file_path, file_size));
这个宏没有必要自己定义,WDK包中已有,所以 可以直接使用KdPrint来代替DbgPrint取得更方便的效果。
- 字符串拷贝,连接,打印
- 字符串长度拷贝连接
- 打印字符串,复制字符串,连接字符串
- 打印字符串、复制字符串、连接字符串
- 打印字符串、复制字符串、连接字符串
- 字符串的输入、输出、连接、拷贝、比较
- C语言实现字符串拷贝 拷贝指定长度字符串 字符串连接
- JS字符串连接(数组连接):创建一次拷贝一次 (减少创建和拷贝) strArray.join (减少创建临时字符串+拷贝)
- iOS实现连接打印机,打印一段字符串
- iOS实现连接打印机,打印一段字符串
- C语言字符串拷贝和连接小技巧(可…
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- MyEclipse6.5注册机
- ssh证书登陆部署
- 每个程序员都应该了解的 CPU 高速缓存 【第二部分】
- ImageLoader最新框架解析
- 奖学金文章更新 连载8第八篇 陈元威 海南IOS第一期学员
- 字符串拷贝,连接,打印
- 多线程第八篇 生产者消费者经典问题
- 回调函数的理解
- 黑马程序员——继承
- 将一个十六进制的字符串转化为一个十进制的字符串
- NYOJ 94 cigarettes
- iOS开发经验技巧之iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault)
- tomcat远程调试
- 字符串的分割