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了。

时间: 2024-11-06 01:01:36

pvoid64 pvoid的相关文章

【OpenCV】missing ';' before identifier 'PVOID64' (转)

原文转自 http://blog.csdn.net/l5201314131413141314/article/details/7092071 [错误描述] 语法错误 : 缺少";"(在标识符"PVOID64"的前面) syntax error : missing ';' before identifier 'PVOID64' [解决方法] 1.打开winnt.h文件,发现问题就是在winnt.h头文件中无POINTER_64的定义造成的.搜索vc下的头文件,发现在b

关于 PVOID 的解释

PVOID 又称万能指针,泛型指针,那么它究竟有什么秒用呢. 所有指针都是一个32位二进制数(32位系统下),这个意义上说所有指针都是一样的,它们的大小一样,用于指向内存中的某处地址,然而指针为什么要有类型之分呢?答案是指针偏移.例如p为一个指针,它指向内存某处地址,那么p+1(或者写p[1])是什么意思呢?答案是p指向地址的后面那个地址,那么后面多少呢?这就看指针类型了,假如它是字符指针,那么就是后面一个字节,假如它是整型指针,那就是后面第四字节,假如它是一个结构体,那就是后面sizeof(结

VOID和PVOID

P表示指针,那么PVOID表示:void *  ---无类型指针 所有指针都是一个32位二进制数(32位系统下),这个意义上说所有指针都是一样的,它们的大小一样,用于指向内存中的某处地址,然而指针为什么要有类型之分呢?答案是指针偏移.例如p为一个指针,它指向内存某处地址,那么p+1(或者写p[1])是什么意思呢?答案是p指向地址的后面那个地址,那么后面多少呢?这就看指针类型了,假如它是字符指针,那么就是后面一个字节,假如它是整型指针,那就是后面第四字节,假如它是一个结构体,那就是后面sizeof

多个摄像头同步工作【转】

因项目需要采集2个摄像头的数据进行双目检测,一开始采用以下代码来测试: #include "stdafx.h" #include <cv.h> #include <cxcore.h> #include <highgui.h> int main(int argc, _TCHAR* argv[]) { CvCapture* capture1 = cvCreateCameraCapture( 0 ); CvCapture* capture2 = cvCre

【原创】X64 REMOVE PSPCIDTABLE

不废话 直接防码 补充代码有网了:[分享]x64 antidebug 不触发PG http://bbs.pediy.com/showthread.php?p=1385028#post1385028 有个BUG  如果 移出的目标有线程退出  那么 我的 系统线程就挂了   目测是枚举函数的 问题 这个   我就 不解决了   退出不蓝屏 因为 有 了新的 解决办法  这个 就扔掉了 #include "ntddk.h" #include "commonfunc.h"

有一次接口设计

小李最近手头在做的task,需要暴露新的接口出去给客户. ========================我是正文分割线============================= <<<<<<<需求>>>>>>> ----------------------------------------------------------------------------------------------------------

32位 64位 获得进程peb的方法

PEB.H #pragma once #include <Windows.h> #include <Strsafe.h> #include <wchar.h> #include <vector> #define NT_SUCCESS(x) ((x) >= 0) #define ProcessBasicInformation 0 typedef NTSTATUS(WINAPI *pfnNtWow64QueryInformationProcess64) (

ECHOSRV.C中的main()设立一个 I/O completion port

#include<Windows.h> int main(int argc, char* argv[]) { SOCKET listener; SOCKET newsocket; WSADATA WsaData; struct sockaddr_in serverAddress; struct sockaddr_in clientAddress; int clientAddressLength; int err; CheckOsVersion(); err = WSAStartup(0x010

HOOK钩子技术5 SSDT Inline Hook

原理 内联钩子的原理在R3和R0下是相同的,就是不改变SSDT表项,而是改变函数内部前几条指令. 内联钩子的典型伪函数为: 恢复原指令 执行目标操作,或改写参数 执行原函数 返回时重新挂钩 demo #include "stdafx.h" #ifdef __cplusplus extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)