字符串拷贝,连接,打印

原创 2015年07月09日 11:25:12

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取得更方便的效果。

  

    



StringCbPrintf 函数

Writes formatted data to the specified string. The size of the destination buffer is provided to the...

内核读写只读内存方法总结[Delphi描述]

标 题: 内核读写只读内存方法总结[Delphi描述] 作 者: Anskya 时 间: 2008-04-26,16:24:39 链 接: http://bbs.pediy.com/showth...
  • kingswb
  • kingswb
  • 2016年05月08日 08:15
  • 649

Invalid Key Object Pointers in Registry Notifications

Invalid Key Object Pointers in Registry Notifications To avoid fatal errors and possible memory...

字符串拷贝

  • 2013年01月10日 21:42
  • 460B
  • 下载

将字符串str1 拷贝到str2中

  • 2012年10月25日 09:43
  • 312B
  • 下载

None用法+连接字符串优先使用join +用format而不是%+区别可变对象和不可变对象(list的深拷贝和浅拷贝)

2. None这个东东 # 判断list是否为空 list = [] if list is None: # 错误的方式 print("list is None...

字符串拷贝函数

  • 2014年03月17日 18:01
  • 674B
  • 下载

关于字符串的几个经典函数和gets函数的注意点 补充的分割字符串,查找字符串,拷贝部分,连接部分

以上的函数没有限制大小,可能会不安全,最好采用以下的版本; 但是strnmcp是有别的功能它可以比较前面自己定义任意数量的字符。 ——————————————————————————————————...

不调用C库实现字符串的拷贝

  • 2014年07月30日 17:03
  • 886B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串拷贝,连接,打印
举报原因:
原因补充:

(最多只允许输入30个字)