字符串拷贝,连接,打印

原创 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...

Windows内核编程基础篇之字符串的打印

字符串的连接的另一种常见的情况是字符串和数字的组合。有时数字需要被转换为字符串,有时需要把若干数字和字符串混合组合起来。这往往用于打印日志的时候,日志中可能含有文件名,时间和行号,以及其他的信息。 ...

字符串拷贝

void * memcpy(void * dest,const void *src,size_t count) {     char *tmp = (char *) dest, *s = (cha...

字符串拷贝和内存拷贝函数

strcpy(拷贝字符串)  定义函数:char *strcpy( char *dest, const char *src );strcpy()函数只能拷贝字符串。strcpy()函数将源字符串src...

C++:类模板1(2个数的大数)

类模板1(2个数的大数)Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByte Total Submit:385...

字符串拷贝

  • 2013-01-10 21:42
  • 460B
  • 下载

C/C++字符串,字符数组,字符指针及其相互静态拷贝与追加的安全问题解决方案(2)

前言接上篇内容,这次会描述字符串的安全追加,建议一样,看懂代码,不要盲目调试,多debug,多查看内存代码及其解释#include #include #includeusing namespace s...

字符串拷贝函数

  • 2014-03-17 18:01
  • 674B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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