文件映射内存的函数说明

 

CreateFileMapping的参数解释,
 
句柄:
若hFile是一个文件的句柄,那么是 基于文件系统的命名文件创建文件映射对象。文件打开时的存取权限必需与flProtect兼容。当该文件映射对象映射到某进程的地址空间时,文件视图存取权限dwDesiredAccess应与fProtect兼容。
若hFile为0xFFFFFFFF(INALID_HANDLE_VALUE),说明是要 基于系统页文件创建文件映射对象,此时 必需要指明文件映射对象的大小 dwMaximumSizeHigh,dwMaximumSizeLow.
 
对象名称:
如果对象的名称已存在,则在CreateFileMapping创建后获 得仅仅是已存在的文件映射对象句柄,而且其本身大小不会因前面的指定而改变。这也是共享文件映射对象的一种方式
下面防止文件映射对象已存在的做法,存在时让其失败。
hMap = CreateFileMapping(...);
 
if (hMap != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
{
    CloseHandle(hMap);
    hMap = NULL;
}
return hMap;
 
文件大小:
当基于命名文件创建file-mapping object时,若大小为0,则说该file-mapping object的maximum大小等于当前文件的大小。
若为 file-mapping object 指定的大小大于磁盘文件的实际大小,磁盘上的文件将增长以适合 file-mapping 对象的大小。若文件不能增长,file-mapping的创建将失败。
通常磁盘文件的大小不能超过file-mapping对象的大小,若超过,则并不是所有的文件内容可以共享(因为没有全部映射)
 
共享文件映射对象:
当file-mapping创建后,可以通过 句柄复制或对象的名称在进程间共享。 基于内存(系统页文件)文件映射对象的共享是进程间通信的一种方式(进程间发送数据 WM_COPYDATA 就是通过这种方式实现的) .通过对象的名字打开file-mapping对象的方法: OpenFileMapping
可惜这种方法不适用于 Wince(后面将说明其共享方式).若存在指定名字的file-mapping对象并且该对象的安全描述符与OpenFileMapping所指定的存取权限不冲突,就可以打开file-mapping获取其句柄。
(在关闭相应的文件映射对象之前, 用于创建该对象的文件句柄不应该用于任何读写操作 I/O, 以免冲突 )
(创建好文件映射对象只是提供了映射一个文件视图的可能并没有将文件的视图映射到进程的地址空间。应使用MapViewOfFile完成此步操作)
 
 
关闭文件映射对象:
为了完全关闭一个file-mapping对象, 应用程序必需解除该对象的所有映射 (UnmapViewOfile). 然后关闭其句柄。二者的调用顺序没有关系。但 UnmapViewOfFile 是必须被调用的。下面要讨论其原因:内核对象本身有个使用计数, CloseHandle 只是把使用计数减一。当使用计数为 0 时内核对象关闭。而 file-mapping 对象的映射视图内部维护着该对象的句柄( open handle . 所以必须调用 UnmapViewOfile 关闭句柄。 File-mapping 对象在其所有的打开句柄关闭后关闭
 
在wince下使用CreateFileMapping, 第一个参数 hFile 必需是通过 CreateFileForMapping 创建的,这也是 wince 特有的一个函数。它是一个的特殊版本 CreateFile 函数 , 用于文件映射对象的创建。它通过在系统内核地址空间的回调函数来创建该文件,让内核创建该文件的目的是为了保证该文件也适用于其他进程而不仅仅是其创建进程。若你的进程退出时没有关闭由CreateFileForMapping所返回的句柄,此句柄会由内核关闭。 不应 CreateFileForMapping 去打开一个文件多次,这样做只是浪费内存,而且有可能导致他们映射对象间的不一致。若要多个应用程序共享一个文件,只须其中一个应用程序调用 CreateFileForMapping, 再调用 CreateFilemapping 创建并命名其文件内核对象 . 其它应用程序可以通过 CreateFileMapping 使用 NVALID_HANDLE_VALUE 作为文件句柄并使用前面应用程序创建的文件内核对象的名字获得已创建的文件内核对象的句柄。这也是在 weince 下文件内核对象的共享方法。这样做的好处,可以节约内核并且不会引起多个应用程序打开同一文件所引起的冲突状况。( 注释:多次调用CreateFileForMapping在windows mobile会失败
 
下面是示列:
HANDLE hFile = NULL, hFileMap = NULL;
PBYTE pFileData;
       hFile = CreateFileForMapping(m_fileName, GENERIC_READ,
              FILE_SHARE_READ, NULL,
              OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL |
              FILE_FLAG_RANDOM_ACCESS,0);
hFileMap = CreateFileMapping (hFile, NULL, PAGE_READONLY, 0, 0, 0);//文件映射对象的大小等于文件的大小。
pFileData = (PBYTE)MapViewOfFile (hFileMap, FILE_MAP_READ, 0, 0, 0);//全部映射
 
 
HANDLE hMemMap=NULL;
PBYTE pMemData;
hMemMap = CreateFileMapping (INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
                            0, memSize, 0);//创建基于系统页文件的内存映射对象。
//这也是进程间共享数据的方法。
pMemData = (PBYTE)MapViewOfFile (hMemMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
版本:V3.4.2 目前版本主要功能: 1. 所有进程的枚举(包括内核中隐藏的进程) 2. 所有文件的枚举(包括内核中隐藏的文件) 3. 进程中所有模块的枚举(包括内核中隐藏的模块) 4. 进程的强制结束 5. 进程中模块的强制卸载 6. 模块被哪些进程加载的检索 7. 查看文件/文件夹被占用的情况 8. 可以Unlock占用文件的进程 9. 文件/文件夹的粉碎(可强删Unlocker1.8.9/金山/超级巡警文件粉碎机无法删除的顽固文件) 10. 阻止文件粉碎后用还原软件还原(采用美国国防部DOD 5220.22-m标准阻止文件还原) 11. 用磁盘解析技术检索硬盘数据 12. 内核模块和驱动的查看和管理 13. 启动项的查看和管理 14. 系统服务的查看和管理 15. 集成文件粉碎功能到系统右键菜单 16. 消息钩子的查看和卸载 17. SSDT/Shadow SSDT钩子的查看和卸载 18. 各种内核回调的查看和卸载 19. 多国语言版本的对应(中文和英文) 20. 暂停进程运行和恢复进程运行 21. 进程模块的内存的dump 22. 进程的线程的查看和结束 23. 进程的窗口的查看和控制 24. 进程的定时器的查看和摘除(该功能还没对应Windows2003) 25. 内核定时器的查看和摘除 26. 上传文件在线扫描病毒 27. 查看和摘除用户层的钩子 28. 查看和结束内核线程 29. 关机回调的清除 30. 查看和摘除mini文件驱动 31. 系统恢复功能(检测项目包括注册表关键部位,已安装的杀毒软件,AutoRun文件,Windows漏洞检测,共享文件夹) 32. 流氓快捷方式的检测和删除 33. 镜像劫持的检测和删除 34. 文件关联的检测和删除 35. IE相关的检测和删除 36. FSD Hook的检测和删除 37. Object Hook的检测和删除 38. 部分CPU/硬盘/显卡/主板的温度检测 39. 部分硬件信息的确认 40. 修复漏洞功能,可以下载和安装Windows补丁 41. IDT钩子的检测和恢复 42. 禁止进城创建,新建文件,注册表修改等配置 43. 注册表功能,几乎可以无视一切隐藏注册表的钩子 44. SPI的检测 45. 通过磁盘解析进行文件浏览 46. 文件强制拷贝功能,可拷贝网络视频的缓存文件 47. 通过磁盘解析取得和拷贝ADS流文件 48. 添加和查看文件重启删除信息 49. Disk/Atapi驱动钩子的检测和恢复 50. 进程权限的枚举和摘除 51. 检测键盘侦听软件 52. 检测被监视的文件 53. IO定时器的检测和停止 54. 工作列线程的检测和暂停 55. FAT32格式的磁盘解析 56. 新增MBR的检测和修复(可对抗鬼影等Bootkit和MBR Rootkit) 57. 新增检测被替换的或被感染的内核文件(内核文件劫持) 58. 支持多硬盘的MBR检测和恢复 59. 新增可疑设备的检测和清除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值