pvoid64 pvoid

Posted sunny,lee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pvoid64 pvoid相关的知识,希望对你有一定的参考价值。

如果需要某一个结构体,既在kernel space用,又在user space用,如

typedef struct

{

PVOID data;

int size;

}binary,pbinary;

上面这个binary的结构体,假设需要在Kenel space和user space同时用到,如通过ksmethod来进行传递,就需要把PVOID改成PVOID64.

typedef struct

{

PVOID64 data;

int size;

}binary_64,pbinary_64;

 

以上是结论,下面来讲讲原因。

先说一说为什么需要改。

如果不改的话,假设一种情况,app是32bit的,系统是64bit的,这样,user space的binary就是4byte+4byte,在KS,大小是8byte+4byte。如果这个时候call kemethod,OS就会返回not sufficient buffer了。

如果改成pvoid64之后呢?

不管什么情况,都是8byte+4byte。至少大小应该是没有问题了。

 

补充一点,如果说我们拿到的binary,还需要赋值给user space的某一个变量m_pbinary,而且它里面的data是pvoid类型的,那么可不能直接强制类型转换,需要每一项每一项的赋值。

for example:

===============================

pbinary m_pbinary = (pbinary_64)pbinary; (error)

===============================

pbinary m_pbinary = new binary;

m_pbinary->data = pbinary->data;

m_pbinary->size = pbinary->size;(correct)

===============================

不然,size就成了0了。

以上是关于pvoid64 pvoid的主要内容,如果未能解决你的问题,请参考以下文章

语法错误:缺少 ';'编译 winnt.h 时在标识符“PVOID64”之前

32位程序关闭路径重定向

ring0 SSDTHook 实现x64/x86

将 PVOID 转换为 ULONG 或在 windows 内核驱动程序中使用 PVOID 作为 HANDLE

关于 PVOID 的解释

WDK:将 PVOID 转换为 PWCHAR(C 到 C++ 转换)