C++ 如何让指针的深度副本将内部结构发送到内核?

C++ 如何让指针的深度副本将内部结构发送到内核?,c++,c,windows,kernel,C++,C,Windows,Kernel,我在用户空间中有这样的结构: struct foo { int* a; int aSize; int* b; int bSize; }; 我通过为指针分配内存来初始化指针 在windows内核中,我在IOCTL、IRP_设备_控件中取消引用此结构,方法是: PVOID inBuf, outBuf; // pointer to struct inBuf = pIoStackLocation->Parameters.DeviceIoControl.Type3I

我在用户空间中有这样的结构:

struct foo {
    int* a;
    int aSize;
    int* b;
    int bSize;
};
我通过为指针分配内存来初始化指针

在windows内核中,我在IOCTL、IRP_设备_控件中取消引用此结构,方法是:

PVOID inBuf, outBuf; // pointer to struct
inBuf = pIoStackLocation->Parameters.DeviceIoControl.Type3InputBuffer;
inBufLength = pIoStackLocation->Parameters.DeviceIoControl.InputBufferLength;

然后锁定内存,这样我就可以从内核访问。问题是,如何让指针指向内存的深层结构副本,就目前而言,如果我只发送指针指向的结构,指针指向的内存不会发送到内核,所以我无法锁定它们。我希望能够在结构内部动态分配指针,然后让内核使用它们

您必须使用给设备驱动程序的指针地址(从内核模式-然后您可以将数据复制到内核模式缓冲区)访问用户模式进程的内存,或者在结构中存储实际整数值,而不是使用指针

或者,如果您从内核模式连接到用户模式进程,那么您可以使用结构字段中的指针地址来读取/写入它们(直接)指向的数据。还有NtReadVirtualMemory(如果您通过KeServiceDescriptable或内存扫描做了一些工作来查找地址)