2013-12-12 71 views
0

我搞砸了一些驱动程序开发,并遇到了一些让我的代码工作的问题。我不确定这是API的一个怪癖,我不知道或者是什么。Windows驱动程序 - 用户模式 ​​- >内核模式下的共享内存

我已根据与的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个参数“不正确“或者我缺少其他东西

谢谢。

+2

MEM_COMMIT不被允许,MEM_RESERVE没有意义。在这里使用0。 –

回答

1

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

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

相关问题