c++ - 如何让指针的深层拷贝将内部结构发送到内核?

标签 c++ c windows kernel

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

struct foo {
    int* a;
    int aSize;
    int* b;
    int bSize;
};

我通过为它们分配内存来初始化指针。

在 Windows 内核中,我在 IOCTL 和 IRP_DEVICE_CONTROL 中取消引用此结构:

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

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

最佳答案

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

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

关于c++ - 如何让指针的深层拷贝将内部结构发送到内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50961336/

相关文章:

windows - 如何重命名子目录中的文件?

python - 从文件重定向 stdin 时如何读取包含 ctrl-Z 的文件?

c++ - QJsonDocument::fromRawData(const char *data, int size) 数据必须与 4 字节边界对齐

c++ - 将 C/C++ 转换为 8086/88 汇编

c++ - 在服务器端实现游戏超时

c++ - 如何正确使用带有 C++ vector 的 kissFFT?

c++ - 处理文件内的字符串

c - 使用xslt在c中创建一个xml文件

C Mandelbrot 集着色

windows - 分组 gridView 中的不同项目大小