阅读:1569回复:9
一个简单问题
UNICODE_STRING dst;
UNICODE_STRING src ; UNICODE_STRING src = RtlInitUnicodeString(L”123”); UNICODE_STRING dst = RtlInitUnicodeString(L”456”); RtlCopyUnicodeString(&dst,&src); // 字符串拷贝! 这样是否会蓝屏? 应该怎么样去自由更改已经初始化后的dst字符串? |
|
沙发#
发布于:2008-07-31 12:04
菜鸟问题 谢谢大家指教
|
|
板凳#
发布于:2008-08-02 07:50
应该不会,如果蓝了,看dump找原因
|
|
|
地板#
发布于:2008-08-02 07:51
没必要重复声明吧?去前两行去掉即可
|
|
|
地下室#
发布于:2008-08-05 08:47
不知道蓝的原因啊..
反正我后来是重新分配了一块足够大的内存给目标字符串,然后拷贝才成功, 不过这样,就需要自己手动释放内存了 不知道有没有聪明的办法.. |
|
5楼#
发布于:2008-08-05 12:50
RtlInitUnicodeString(L”123”);
??? RtlInitUnicodeString函数是这么定义的吗?莫非我用的DDK已经过时了? |
|
6楼#
发布于:2008-08-06 00:35
对啊,好像参数不对吧。
|
|
|
7楼#
发布于:2008-08-07 11:39
确实是写错了
粗心 我找了一下 ,好想真的没有封装好的字符串赋值函数.... 我自己定义了一个 首先判断目标字符串BUF是否空,不空就释放, 然后根据源字符串大小分配目标字符串的内存空间 最后在COPY |
|
8楼#
发布于:2008-08-07 12:28
会蓝....
因为dst的buffer指向一个const的区域 不能写的...所以会蓝 RtlInitUnicodeString很简单 if(input) { string->Length = wcslen(input) * sizeof(WCHAR); string->Buffer = input; string->MaximumLength = string->Length + sizeof(WCHAR); } else { string->Length = 0; string->Buffer = 0; string->MaximumLength = 0; } 改本身没问题 问题出在你的dst的缓冲区是一个只读的缓冲区不能写的 所以蓝了 |
|
9楼#
发布于:2008-08-07 15:49
谢谢tiamo,那个好象是一个常量空间,确实不能写.
就算不是常量空间,也不能直接复制,因为不能确定两个字符串的缓冲区大小相同,可能出现字符串被截断. 内核中使用真的很麻烦,连赋值都需要自己定义一个函数. |
|