阅读:3008回复:15
一个菜鸟级的问题,怎样将PVOID转换成PUNICODE_STRING
如题,
是不是 PUNICODE_STRING s=(PUNICODE_STRING)(s1);//s1为PVIOD 就可以了? |
|
|
沙发#
发布于:2003-04-23 10:27
如果s为UNICODE_STRING能这么做吗?
s.MaximumLength = ((PUNICODE_STRING)s1)->Length + sizeof(WCHAR); RtlCopyUnicodeString(&s, (PUNICODE_STRING)s1); 只要能将s1中的数据拷贝到s中就行. 大侠们给点意见吧?俺急着用呢!!! |
|
|
板凳#
发布于:2003-04-23 10:56
不要光看呀!
还请大家发表一下意见! |
|
|
地板#
发布于:2003-04-23 11:40
俺试了一下,这两种方法都不行(蓝屏)。
该怎么做呢? 急!!!!急!!!!急!!!!急!!!! |
|
|
地下室#
发布于:2003-04-23 15:28
你的s1里面是什么呀?字符串?结构地址指针?
如果是字符串,好好看看DDK中的字符串转换函数吧,NDIS_STRING_CONST什么的 如果是结构地址指针,可能是你用错了吧,用Si跟下就知道了 |
|
5楼#
发布于:2003-04-23 15:45
你的s1里面是什么呀?字符串?结构地址指针? 谢谢! 我的S1是内存里的数据,它是这样来的: sva=Irp->AssociatedIrp.SystemBuffer; DbgPrint(\"systemBuffer:%s\",(char *)sva); s1 =(PVOID)ExAllocatePool(NonPagedPool, nSize); if( !s1 ) break; RtlZeroMemory(s1,nSize ); RtlCopyMemory(s1,uva,nSize); DbgPrint(\"userBuffer:%s\",(char *)s1);//能打印出从应用程序中传过来的数据(PVOID). :) [编辑 - 4/23/03 by softgood] [编辑 - 4/23/03 by softgood] |
|
|
6楼#
发布于:2003-04-23 16:01
UnicodeString 是个结构呀,
你在ddk中查找 string 关键字,RtlInitUnicodeString ,看看能不能奏效! |
|
7楼#
发布于:2003-04-23 16:04
UnicodeString 是个结构呀, 可是s1里存放的是字符串,这样能行吗?:( 不管怎么说,试试看吧! ;) |
|
|
8楼#
发布于:2003-04-23 16:24
UnicodeString 是个结构呀, 我这么试了一下: RtlInitUnicodeString(&s, (PCWSTR)s1); 但还是不行,一到这句就Down机了. [编辑 - 4/23/03 by softgood] |
|
|
9楼#
发布于:2003-04-23 17:32
唉!!高手都到那去了??
问题看似简单,却没人答,郁闷啊!!!! |
|
|
10楼#
发布于:2003-04-23 17:44
NdisAnsiStringToUnicodeString不行么????
|
|
|
11楼#
发布于:2003-04-23 17:51
NdisAnsiStringToUnicodeString不行么???? To:mikeluo 你是说这么做: NdisAnsiStringToUnicodeString(&s,(PANSI_STRING)s1); 这里的: (PNDIS_PANSI_STRING)s1 会不会出问题??s1是PVOID [编辑 - 4/23/03 by softgood] |
|
|
12楼#
发布于:2003-04-23 17:59
只要s1中间没有0x00应该就可以吧。有的话估计就被截断了
|
|
|
13楼#
发布于:2003-04-23 18:03
只要s1中间没有0x00应该就可以吧。有的话估计就被截断了 是没有0x00,先试试看再说吧! |
|
|
14楼#
发布于:2003-04-23 18:04
先用NdisInitAnsiString,然后再NdisAnsiStringToUnicodeString
|
|
|
15楼#
发布于:2003-04-24 08:16
先用NdisInitAnsiString,然后再NdisAnsiStringToUnicodeString 非常感谢mikeluo, 按照你说的方法搞定了. 我还有一个问题请教你. sva=Irp->AssociatedIrp.SystemBuffer; DbgPrint(\"systemBuffer:%s\",(char *)sva); s1 =(PVOID)ExAllocatePool(NonPagedPool, nSize); if( !s1 ) break; RtlZeroMemory(s1,nSize ); RtlCopyMemory(s1,uva,nSize); DbgPrint(\"userBuffer:%s\",(char *)s1); 经过DbgPrint打印显示,为什么经过RtlCopyMemory()后,s1值在后面比原 sva 多加了一位,显示为?. 这是为什么? |
|
|