【Window内核驱动开发】——内存映射的基本使用

本文介绍了Windows内核驱动开发中内存映射文件的使用,包括创建或打开文件对象、创建映射单元、映射以及关闭映射等步骤。通过内存映射,可以实现文件的高效访问、进程间共享数据以及执行文件加载。文章详细讲解了ZwCreateFile、ZwCreateSection和ZwMapViewOfSection等关键函数的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【我的】Window驱动开发——内存映射的基本使用

作者:zcr214 时间:2016/5/18

 

内存映射文件可以用于3个不同的目的。

•系统使用内存映射文件,以便加载和执行. exe和DLL文件。这可以大大节省页文件空间和应用程序启动运行所需的时间。

•可以使用内存映射文件来访问磁盘上的数据文件。这使你可以不必对文件执行I/O操作,并且可以不必对文件内容进行缓存。

•可以使用内存映射文件,使同一台计算机上运行的多个进程能够相互之间共享数据。Windows确实提供了其他一些方法,以便在进程之间进行数据通信,但是这些方法都是使用内存映射文件来实现的,这使得内存映射文件成为单个计算机上的多个进程互相进行通信的最有效的方法。

下面就来使用一下内存映射读取文件。

1.   创建或打开文件对象

首先当然要有文件对象,先要创建或者打开文件,使用ZwCreateFile这个函数是比较方便的,也可以使用ZwOpenFile,但是它只是打开,而ZwCreateFile函数可以通过设定CreateDisposition参数来达到不同的创建行为,如设为FILE_OPEN_IF是打开文件,如果已存在,则新建文件。下面是这个函数原型。

NTSTATUS

NTAPI

ZwCreateFile(

   _Out_PHANDLE FileHandle,

   _In_ACCESS_MASK DesiredAccess,

   _In_POBJECT_ATTRIBUTES ObjectAttributes,

   _Out_PIO_STATUS_BLOCK IoStatusBlock,

   _In_opt_PLARGE_INTEGER AllocationSize,

   _In_ULONG FileAttributes,

   _In_ULONG ShareAccess,

   _In_ULONG CreateDisposition,

   _In_ULONG CreateOptions,

   _In_reads_bytes_opt_(EaLength)PVOID EaBuffer,

   _In_ULONG EaLength

);

参数说明:

FileHandle即是文件句柄,创建文件对象之后会返回文件句柄。

DesireAccess表示希望获取的权限,可以有以下四种,从字面意思即可理解。

GENERIC_READ

GENERIC_WRITE

GENERIC_EXECUTE

GENERIC_ALL

ObjectAttributes和以前在其他函数中使用的对象属性一样,需要初始化一些属性值。包括对象名称,长度,安全描述符等内容。我们这里如下初始化:

OBJECT_ATTRIBUTESobj_attr={ 0};

UNICODE_STRINGfilename_Uni

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值