进程间共享数据

使用内存映射文件实现进程间数据共享的练习:

.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
include comdlg32.inc
includelib kernel32.lib
includelib user32.lib
;;;;;;;;;;;;;;;;;;;;;;;
IDD_DIALOG1           equ                  100
IDC_EDIT1             equ                  1002
IDC_STATIC1              equ                1003
;;;;;;;;;;;;;;;;;;;;;;;
.data
.data?
hInstance    dd    ?
hWinMain    dd    ?
hFileMap    dd    ?
lpMemory    dd    ?
szFileName    db    MAX_PATH dup (?)
.const
szMName    db    ’share’,0
.code
_CreateM proc
invoke OpenFileMapping,FILE_MAP_READ or FILE_MAP_WRITE,0,addr szMName
.if !eax
invoke CreateFileMapping,-1,NULL,PAGE_READWRITE,0,4096,addr szMName
.if ! eax
jmp @F
.endif
.endif
mov hFileMap,eax
invoke MapViewOfFile,eax,FILE_MAP_READ OR FILE_MAP_WRITE,0,0,0
.if eax
mov lpMemory,eax
mov dword ptr [eax],0
ret
.endif
invoke CloseHandle,hFileMap
@@:
invoke EndDialog,hWinMain,NULL
ret
_CreateM endp
_CloseM proc
invoke UnmapViewOfFile,lpMemory
invoke CloseHandle,hFileMap
mov lpMemory,0
mov hFileMap,0
ret
_CloseM endp
_ProcDlgMain proc uses ebx esi edi hWnd,uMsg,wParam,lParam
local @szBuffer[4096]:byte
mov eax,uMsg
.if eax==WM_TIMER
invoke SetDlgItemText,hWnd,IDC_STATIC1,lpMemory
.elseif eax==WM_CLOSE
invoke KillTimer,hWnd,1
invoke _CloseM
invoke EndDialog,hWnd,NULL
.elseif eax==WM_INITDIALOG
push hWnd
pop hWinMain
invoke _CreateM
invoke SetTimer,hWnd,1,200,NULL
.elseif eax==WM_COMMAND
mov eax,wParam
movzx eax,ax
.if eax== IDC_EDIT1
invoke GetDlgItemText,hWnd,eax,lpMemory,4096
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
end start

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>