阅读:1490回复:5
共享内存问题求助
下面是我的分配内存且共享的代码:
pComm->pKernelMemory = ExAllocatePoolWithTag(PagedPool, uiSize, _TagUtility); if(pComm->pKernelMemory == NULL) { DBGPRINT((\"CreateAndShareMemory: ExAllocatePoolWithTag)); Status = STATUS_UNSUCCESSFUL; return Status; } pComm->pMdl = IoAllocateMdl(pComm->pKernelMemory, uiSize, FALSE, FALSE, NULL); if(pComm->pMdl == NULL) { DBGPRINT((\"CreateAndShareMemory: IoAllocateMdl failed\\n\")); ExFreePoolWithTag(pComm->pKernelMemory, _TagUtility); pComm->pKernelMemory = NULL; Status = STATUS_UNSUCCESSFUL; return Status; } MmProbeAndLockPages(pComm->pMdl, KernelMode, IoWriteAccess); pComm->pAppMemory = MmMapLockedPagesSpecifyCache(pComm->pMdl, UserMode, MmCach ed, NULL, FALSE, NormalPagePriority); if(pComm->pAppMemory == NULL) { DBGPRINT((\"CreateAndShareMemory: MmMapLockedPagesSpecifyCache failed\\n\")); IoFreeMdl(pComm->pMdl); ExFreePoolWithTag(pComm->pKernelMemory, _TagUtility); Status = STATUS_UNSUCCESSFUL; return Status; } return Status; 我用softice看了,几个函数的调用都是成功的,内存也分配到了,然后在用户态 的程序里面也得到了正确的指针(pComm->pAppMemory),但是,我用vc看得到的 指针里面的值时候,监视窗口里面显示“错误的指针”,我试图输出指针指向的内存 的内容的时候也出错,完全不能访问指针指向的地址,请问,这怎么回事啊? |
|
最新喜欢:![]() |
沙发#
发布于:2003-10-20 13:56
你不能在DRIVERENTRY里面锁定共享内存,必须在特定的IO_CONTROL中进行内存共享锁定,这样锁定的内存就位于调用线程的CONTEXT中,就可以在RING3层通过DEVICEIOCONTROL访问了.
|
|
|
板凳#
发布于:2003-10-20 14:07
哦?是这样啊!我改改试试
你不能在DRIVERENTRY里面锁定共享内存,必须在特定的IO_CONTROL中进行内存共享锁定,这样锁定的内存就位于调用线程的CONTEXT中,就可以在RING3层通过DEVICEIOCONTROL访问了. |
|
地板#
发布于:2003-10-20 14:17
你不能在DRIVERENTRY里面锁定共享内存,必须在特定的IO_CONTROL中进行内存共享锁定,这样锁定的内存就位于调用线程的CONTEXT中,就可以在RING3层通过DEVICEIOCONTROL访问了. 呵呵,你说的对,给你分! |
|
地下室#
发布于:2003-10-26 12:42
请问在DS中如何实现同样的功能?
|
|
5楼#
发布于:2004-04-27 08:57
dmzhao:
我现在遇到的问题和遇到的一样,在应用中我也映射了正确的地址,可是就是不能访问它。我是在ioctl中映射的内存,不知道问题出在哪?能帮帮忙忙么? |
|