Windows驱动程序 - 来自用户模式的共享内存 - >内核模式

时间:2013-12-12 23:36:38

标签: windows memory driver drivers

我正在搞乱一些驱动程序开发,我遇到了一些让我的代码工作的问题。我不确定这是一个我不知道或不知道API的怪癖。

我有一个用户应用程序,它使用CreateFileMapping,MapViewOfFile等在BaseNamedObjects下创建了一个命名共享对象。我正在尝试使用ZwOpenSection和ZwMapViewOfSection读取我的驱动程序代码中的这个共享对象

问题代码如下:

char *sharedData = NULL;
SIZE_T vs = 256;

InitializeObjectAttributes(&myAttributes,&sectionName,OBJ_KERNEL_HANDLE,NULL,NULL);
ZwOpenSection(&sectionHandle,SECTION_MAP_READ,&myAttributes)

ZwMapViewOfSection(&sectionHandle, ZwGetCurrentProcess(), (PVOID *)sharedData, 0, 256, 
NULL, &vs, ViewUnmap, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

对ZwOpenSection的调用成功完成,我正确获取了对象,但第二次调用失败。返回的状态表明这是第九个参数的一个问题,但是我已经尝试了我能想到的每一个组合都没有显示它,所以我不确定这是一个问题是否有一个不同的参数导致第9个“不正确的“或者如果我错过了其他的东西

感谢。

1 个答案:

答案 0 :(得分:1)

创建部分的访问权限是否与您在此处传递的权限相同?

在此功能的直接调用中不允许MEM_COMMIT。如果您仍想提交和保留页面,请尝试调用virtualalloc(),否则只需在第8个参数中传递NULL。