网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
2000/XP 下实现内存映射
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
 

 dwProtect页面保护值

   

   

PAGE_READONLY

对页面的提交区域赋予只读权限。参数hFile指定的文件必须由GENERIC_ READ权限创建

PAGE_READWRITE

对页面的提交区域赋予读写权限。参数hFile指定的文件必须由GENERIC_ READGENERIC_WRITE权限创建

PAGE_WRITECOPY

对页面的提交区域赋予复制和写入权限。 参数hFile指定的文件必须由GENERIC_READGENERIC_WRITE权限创建

 


dwProtect节属性

   

   

SEC_COMMIT

为节中所有页面在内存或磁盘上的映射文件分配物理空间,在此为默认设置

SEC_IMAGE

hFile指定的文件为一可执行Image文件,设置此值使其他属性无效

SEC_NOCACHE

所有文件都设置为没有高速缓存

SEC_RESERVE

保留节的所有页面,但不分配物理空间。除非已经释放,否则页面的保留区域不能由其他分配操作所使用。这个属性仅在hFile设置为0xFFFFFFFF时才有效

    返回值

如果函数调用成功则返回文件映射对象的句柄,否则返回NULL

2. MapViewOfFile

    说明

该函数将文件视图映射到调用过程的地址空间。

    原型

LPVOID MapViewOfFile  (HANDLE hFileMappingObject, 

                          DWORD dwDesiredAccess,     

                          DWORD dwFileOffsetHigh,    

                          DWORD dwFileOffsetLow,      

                          SIZE_T dwNumberOfBytesToMap );

    参数

hFileMappingObject:是文件映射对象的句柄,可以是CreateFileMapping函数和Open FileMapping函数返回的句柄。

dwDesiredAccess:为存取访问方式,可以是表7-5所示的参数之一。

参数dwDesiredAccess的值

   

   

FILE_MAP_WRITE

读写权限。hFileMappingObject参数必须用PAGE_ READ WRITE来创建

FILE_MAP_READ

只读权限。hFileMappingObject参数必须用PAGE_ READ WRITEPAGE_READONLY来创建

FILE_MAP_ALL_ACCESS

其含义与参数FILE_MAP_WRITE相同

FILE_MAP_COPY

读写权限。Windows 95:调用编程文章/filemap_79wn.htm">CreateFileMapping函数必须使用保护属性为PAGE_WRITECOPY,否则调用失败。Windows NT/2000:没有限制使用保护属性

dwFileOffsetHigh:偏移量的高32位。

dwFileOffsetLow:偏移量的低32位。

dwNumberOfBytesToMap:为要映射文件的字节数,如果设置为零,则映射整个文件。

    返回值

如果函数调用成功则返回映射视图的起始地址,否则返回零。

调用此函数后,过程可以使用函数DulplicateHandle将文件映射对象复制到另一个过程中,或者另一个过程可以通过使用函数OpenFileMapping按名称打开一个文件映射对象。

3. OpenFileMapping

    说明

该函数用于打开命名文件映射对象。

    原型

HANDLE OpenFileMapping  (DWORD dwDesiredAccess, 

                        BOOL bInheritHandle,    

                        LPCTSTR lpName );

    参数

dwDesiredAccess:对象的存取访问方式,具体见表7-5所示。

bInheritHandle:继承标记,用于确定返回的句柄是否在过程创建期间由其他过程继承。若设置为TRUE,则表明新过程继承句柄。

lpName:包含要打开的文件映射对象的名称。

    返回值

如果函数调用成功则返回要打开的文件映射对象的句柄,否则返回NULL

4  保持一致性

   只要映射的是相同的文件映射对象,系统就能保证一个文件的多个视图是一致的。这就表明在任何一个视图下,对文件进行修改都将为其他视图所见。这仅仅是在文件映射对象相同的情况下出现,如果文件映射对象不同,系统就无法保证视图的一致性,这是很显然的。对于同一文件的文件映射对象,如果文件是只读文件,那么视图始终是一致的。但如果为可写文件,那么视图很可能就不会保持一致了。

5  使用内存映射文件实例分析

   介绍完了内存映射文件的有关函数之后,下面举例介绍以上函数的具体实现,并分析其中所涉及的其他函数。

DWORD Process1( )

{

HANDLE hFileMap;   

LPTSTR lpMapAddress;

// 打开要进行映射的文件

hFileMap = OpenFileMapping( FILE_MAP_ALL_ACCESS, FALSE,

“FileMappingObject” );

// 为要映射的文件建立一个视图

lpMapAddress = MapViewOfFile( hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);                            

 

// 显示内存块中的内容,也就是视图的内容

MessageBox(NULLlpMapAddress,”Mapped Memory”,MB_OK

                    |MB_ICONINFORMATION );

UnmapViewOfFile(lpMapAddress);

return( 0 );

}

case WM_CREATE:

hMap = CreateFileMapping(( HANDLE)0xFFFFFFFF, NULL,

                    PAGE_READWRITE,

                    0,1024,“FileMappingObject”);

lpData = MapViewOfFile( hMap,FILE_MAP_ALL_ACCESS, 0, 0, 0);

case WM_COMMAND:

wmId = LOWORD(wParam);

wmEvent = HIWORD(wParam);          

switch (wmId)

{

  case IDM_VIEWMAP :

        strcpy( lpData, “Hi, I am Data passed from main process.”);

       FlushViewOfFile( lpData, lstrlen( lpData ));                                  

hThread = CreateThread( NULL, 0,

                    (LPTHREAD_START_ROUTINE)Process1,

                    lpData, 0, &dwID);            

break;                                    

case IDM_BACKMAINPROCESS:

if(!(hThread = 0))

TerminateThread(hThread,0);

strcpy(lpData,“I am in the main process “ );

FlushViewOfFile(lpData,lstrlen(lpData ));

hMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE,

                                   “FileMappingObject” );

lpData = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);

MessageBox( hWnd, lpData, “Main Process”, MB_OK);

UnmapViewOfFile( lpData);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

            }

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号