softgood
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3008回复:15

一个菜鸟级的问题,怎样将PVOID转换成PUNICODE_STRING

楼主#
更多 发布于:2003-04-23 09:57
如题,
是不是
PUNICODE_STRING s=(PUNICODE_STRING)(s1);//s1为PVIOD
就可以了?
程序人生
softgood
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-23 10:27
如果s为UNICODE_STRING能这么做吗?

s.MaximumLength = ((PUNICODE_STRING)s1)->Length
                                           + sizeof(WCHAR);
RtlCopyUnicodeString(&s,
                     (PUNICODE_STRING)s1);
只要能将s1中的数据拷贝到s中就行.
大侠们给点意见吧?俺急着用呢!!!
程序人生
softgood
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-23 10:56
不要光看呀!
还请大家发表一下意见!
程序人生
softgood
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-23 11:40
俺试了一下,这两种方法都不行(蓝屏)。
该怎么做呢?
急!!!!急!!!!急!!!!急!!!!
程序人生
realpuff
驱动牛犊
驱动牛犊
  • 注册日期2002-11-25
  • 最后登录2004-12-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-23 15:28
你的s1里面是什么呀?字符串?结构地址指针?

如果是字符串,好好看看DDK中的字符串转换函数吧,NDIS_STRING_CONST什么的

如果是结构地址指针,可能是你用错了吧,用Si跟下就知道了
softgood
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-23 15:45
你的s1里面是什么呀?字符串?结构地址指针?

如果是字符串,好好看看DDK中的字符串转换函数吧,NDIS_STRING_CONST什么的

如果是结构地址指针,可能是你用错了吧,用Si跟下就知道了

谢谢!
我的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]
程序人生
realpuff
驱动牛犊
驱动牛犊
  • 注册日期2002-11-25
  • 最后登录2004-12-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-04-23 16:01
UnicodeString 是个结构呀,

你在ddk中查找 string 关键字,RtlInitUnicodeString ,看看能不能奏效!
softgood
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-04-23 16:04
UnicodeString 是个结构呀,

你在ddk中查找 string 关键字,RtlInitUnicodeString ,看看能不能奏效!

可是s1里存放的是字符串,这样能行吗?:(
不管怎么说,试试看吧!  ;)
程序人生
softgood
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-04-23 16:24
UnicodeString 是个结构呀,

你在ddk中查找 string 关键字,RtlInitUnicodeString ,看看能不能奏效!

我这么试了一下:
RtlInitUnicodeString(&s,                  (PCWSTR)s1);
但还是不行,一到这句就Down机了.

[编辑 -  4/23/03 by  softgood]
程序人生
softgood
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-04-23 17:32
唉!!高手都到那去了??
问题看似简单,却没人答,郁闷啊!!!!
程序人生
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-04-23 17:44
NdisAnsiStringToUnicodeString不行么????
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
softgood
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]
程序人生
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-04-23 17:59
只要s1中间没有0x00应该就可以吧。有的话估计就被截断了
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
softgood
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-04-23 18:03
只要s1中间没有0x00应该就可以吧。有的话估计就被截断了

是没有0x00,先试试看再说吧!
程序人生
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-04-23 18:04
先用NdisInitAnsiString,然后再NdisAnsiStringToUnicodeString
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
softgood
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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 多加了一位,显示为?.
这是为什么?
程序人生
游客

返回顶部