ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:5158回复:10

如何用ZwMapViewOfSection将Driver分配的内存映射到App空间?

楼主#
更多 发布于:2002-03-14 11:03
在DDK的例子Mapmem中,用ZwMapViewOfSection将物理地址映射到App空间,该函数能否将系统地址映射到App空间?

我尝试着做了一下,但返回invalid_view_size,好像length给的不对。各位大侠帮忙看看啊。

PVOID
GetUserAddressFromSystemAddress(IN PVOID iSystemAddress,///系统地址
IN ULONG iBufferLength  ///地址空间长度
                             )
{
    UNICODE_STRING     systemMemoryUnicodeString;
    OBJECT_ATTRIBUTES  objectAttributes;
    HANDLE             systemMemoryHandle  = NULL;
    PVOID              systemMemorySection = NULL;
    NTSTATUS           ntStatus;
    PVOID              virtualAddress;
    ULONG length=iBufferLength;
    LARGE_INTEGER lSystemAddress;
    KIRQL irql=KeGetCurrentIrql();

    RtlInitUnicodeString (&systemMemoryUnicodeString,
                          L\"\\\\Device\\\\SystemMemory\");

    InitializeObjectAttributes(&objectAttributes,///OUT
                              &systemMemoryUnicodeString,  ///the ObjectName
                                OBJ_CASE_INSENSITIVE,  ////the Attributes
                                (HANDLE) NULL,
                                (PSECURITY_DESCRIPTOR) NULL);

    ntStatus = ZwOpenSection(&systemMemoryHandle, //SectionHandle OUT
                              SECTION_ALL_ACCESS,///DesireAccess
                              &objectAttributes);///ObjectAttributes

    if (!NT_SUCCESS(ntStatus))
    {
return NULL;
    }

    ntStatus = ObReferenceObjectByHandle (systemMemoryHandle,//got by ZwOpenSection
                                          SECTION_ALL_ACCESS,
                                          (POBJECT_TYPE) NULL,
                                          KernelMode,
                                          &systemMemorySection,//OUT Pointer to the object bocy
                                          (POBJECT_HANDLE_INFORMATION) NULL);
                                     ///OUT points to the struture receives the handle attributes
                                     ///and the granted access rights for the object

    if (!NT_SUCCESS(ntStatus))
    {
        goto close_handle;
    }

        virtualAddress = NULL;

        ///存放Driver分配的系统地址
        lSystemAddress.QuadPart=(LONGLONG)iSystemAddress;

        // Map the section
        ntStatus = ZwMapViewOfSection(systemMemoryHandle,
                                      (HANDLE) -1,
                                       &virtualAddress,
                                       0L,///IN ZeroBits
                                       length,
                                       &lSystemAddress,
                                       &length,
                                       ViewShare,
                                       0,
                                       PAGE_READWRITE | PAGE_NOCACHE);

        if (!NT_SUCCESS(ntStatus))
        {
            goto close_handle;
        }

        //
        return virtualAddress;
close_handle:

    ZwClose (systemMemoryHandle);

return NULL;
}

最新喜欢:

flyfoxflyfox
没有你,我不知道怎么办...
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-03-15 08:53
版主救命啊!!!

用ZwMapViewOfSection能否将Driver分配的内存映射到应用程序空间?

yes or no,给我一个回答吧。please....
没有你,我不知道怎么办...
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-03-16 23:52
比较困难.
你可以考虑使用共享内存.
in kernel, 使用zwcreatesection(ifs),
in use mode, use create filemapping.

if you use ddk only , try let user mode program create share memory , then in kernel driver , use zwopenseciton,
ZwMapViewOfSection and ZwMapViewOfSection to access that memory .

ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-03-18 09:18
yes, i use ddk and there\'s no zwcreatesection at all. What I want is to find a way to protect my system from collapsing due to the illegal termination of application program. I thought if I allocate memory in kernel mode and the application just gets a pointer to it, driver will still work even if application dies. But it seems that I\'m wrong. I can\'t find a safer way to use shared memory between driver and application.

Thank you for your help.
没有你,我不知道怎么办...
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-03-22 21:58
that\'s not problem.

assume you driver is not automaiticlly start, you app start driver
.
then work this way, even app dies , driver still can use memory.

1. app create sharememory.
2. app start driver.
3. driver get sharememory.
4. driver add refrence to sharememory object ->hold it , don\'t release
5. now app down, because real session object reference is not 0. os will not release that sharememory.

6.....

anything like event, mutex, semphore is same. Handle belong to process, but object itself is not.

hope it\'s helpful.
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-01 15:14
多谢多谢,我的问题解决了。

我想给分,但登陆论坛后进来,总显示我没有登陆??

So, just wait...

Thank you.
没有你,我不知道怎么办...
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-12 18:44
zdhe兄
如果在驱动程序启动过程中,并在应用程序使用该内存前需要使用这部分内存,那么驱动程序使用ZwCreateSection后,在应用程序中使用OpenFileMapping成功,但MapViewOfFile失败(错误为5),是不是安全性问题,如果是那么应该怎样修改驱动程序Section呢?
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-06-12 20:37
不好意思,你能把你的ring3 APP做成service吗,普通APP不能打开system context下做成的Section的。如果说到修改security,。。。恐怕有些病毒的道道了。一般能做也不想做的。
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2002-06-12 21:19
ZwCreateSection的
IN POBJECT_ATTRIBUTES ObjectAttributes,
注意以下比较好。一般使用NULL来设定。为了能够在ring3简单访问,必须进行必要的security初期化。

注意一下下面的几个函数。

RtlCreateSecurityDescriptor
RtlSetDaclSecurityDescriptor,
RtlLengthSecurityDescriptor,

正确初始化上面的内容并且在InitializeObjectAttributes调用时送过去,就可以了。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-06-13 12:10
多谢zdhe兄,
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-06-13 12:11
多谢zdhe兄,
我试一试
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部