iczelion tut13[6]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 jimgreen 的 blog

        invoke closehandle,hmapfile
        mov    hmapfile,0
        invoke closehandle,hfileread
        ret
closemapfile endp

上述过程调用是用来关闭内存映射文件和原来打开的文件的,这样可以使得程序退出时没有资源泄漏。如果用户选择保存文件的话,就弹出一个“保存文件”对话框,当用户输入了新文件的名称后,我们调用createfile函数来创建新文件---输出文件。

                    invoke mapviewoffile,hmapfile,file_map_read,0,0,0
                    mov pmemory,eax

在输出文件创建后我们调用mapviewoffile来映射希望映射到内存中的部分。该函数的语法如下:

mapviewoffile proto hfilemappingobject:dword,\
                                   dwdesiredaccess:dword,\
                                   dwfileoffsethigh:dword,\
                                   dwfileoffsetlow:dword,\
                                   dwnumberofbytestomap:dword

dwdesiredaccess用来指定我们想对文件进行的操作。在我们例子中,我们只想读,故指定标志file_map_read。
dwfileoffsethigh 和 dwfileoffsetlow 用来指定打开文件中欲映射的起始偏移位置。我们的例子中想映射整个的文件,故指定它们的值为0。
dwnumberofbytestomap 用来指定欲映射的字节数,如果想映射整个的文件,设定该值为0。
调用mapviewoffile后,我们希望的部分就已经映射到内存中去了。您将得到一个指向起始内存块的指针。

                    invoke getfilesize,hfileread,null

调用该函数可以得到文件的大小,其值通过eax传送,如果文件的长度超过4g,那么文件长度dword的高值部分(也即超过4g的部分)保存在filesizehighword中。因为我们估计一般的文件将没有这么大,故忽略该值。

                    invoke writefile,hfilewrite,pmemory,eax,addr sizewritten,null

把内存映射文件中的数据写到输出文件中去。

                    invoke unmapviewoffile,pmemory

写完后,我们解除映射。

                    call   closemapfile
                    invoke closehandle,hfilewrite

关闭内存映射文件和输出文件的句柄。

                    invoke setwindowtext,hwnd,addr appname

恢复窗口的标题条到应用程序的名称。

                    invoke enablemenuitem,hmenu,idm_open,mf_enabled

本文关键:iczelion asm
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top