Cr�e ou ouvre un objet de mappage de fichier, nomm� ou non, pour un fichier sp�cifi�
#include <WinAPIFiles.au3>
_WinAPI_CreateFileMapping ( $hFile [, $iSize = 0 [, $sName = '' [, $iProtect = 0x0004 [, $tSecurity = 0]]]] )
$hFile |
Handle du fichier � partir duquel cr�er un objet de mappage de fichier. Si ce param�tre est (-1), le processus appelant doit �galement sp�cifier une taille de l'objet de mappage de fichier dans le param�tre $iSize. Dans ce sc�nario, _WinAPI_CreateFileMapping() cr�e un objet de mappage de fichier d'une taille sp�cifi�e qui est soutenue par le fichier d'�change du syst�me au lieu d'un fichier dans le syst�me de fichiers. |
$iSize | [optionnel] La taille maximale de l'objet de mappage de fichier. Si ce param�tre est 0 (par d�faut), la taille maximale de l'objet de mappage de fichier est �gale � la taille actuelle du fichier identifi� par $hFile. |
$sName | [optionnel] Le nom de l'objet de mappage de fichier. |
$iProtect | [optionnel] Sp�cifie la protection de la page de l'objet de mappage de fichier et peut prendre l'une des valeurs suivantes: $PAGE_EXECUTE_READ $PAGE_EXECUTE_READWRITE $PAGE_EXECUTE_WRITECOPY $PAGE_READONLY $PAGE_READWRITE (par d�faut) $PAGE_WRITECOPY Une application peut sp�cifier un ou plusieurs des attributs suivants pour l'objet de mappage de fichier en les combinant � l'une des valeurs de protection de la page pr�c�dente. $SEC_COMMIT $SEC_IMAGE $SEC_LARGE_PAGES $SEC_NOCACHE $SEC_RESERVE $SEC_WRITECOMBINE |
$tSecurity | [optionnel] La structure $tagSECURITY_ATTRIBUTES qui d�termine si le handle retourn� peut �tre h�rit� par des processus enfants. Si ce param�tre est 0 (par d�faut), le handle ne peut pas �tre h�rit�e et l'objet de mappage de fichier obtient un descripteur de s�curit� par d�faut. |
Succ�s: | Retourne le handle � l'objet de mappage de fichier nouvellement cr��. Si l'objet existe avant l'appel de fonction, la fonction retourne le handle de l'objet existant (avec sa taille actuelle, pas la taille sp�cifi�e), et d�finit @extended � $ERROR_ALREADY_EXISTS (183). |
�chec: | Retourne 0, @extended est d�fini avec _WinAPI_GetLastError(). |
Apr�s qu'un objet de mappage de fichier soit cr��, la taille du fichier ne doit pas d�passer la taille de l'objet de mappage de fichier; si c'est le cas, la totalit� du contenu de fichier n'est sont pas disponibles pour le partage.
Plusieurs processus peuvent partager une vue du m�me fichier, soit en utilisant un seul objet de mappage de fichier partag�, soit en cr�ant des objets de mappage de fichiers distincts soutenus par le m�me fichier. Un objet de mappage de fichier peut �tre partag� par plusieurs processus � travers l'h�ritage du handle � la cr�ation de processus, en dupliquant le handle, ou en ouvrant l'objet de mappage de fichier par son nom.
Un objet de mappage de fichier ne mappe pas la vue dans un espace d'adressage du processus. La fonction _WinAPI_MapViewOfFile() mappe une vue d'un fichier dans un espace d'adressage du processus.
Les vues mapp�es d'un objet de mappage de fichier maintiennent des r�f�rences internes � l'objet, et un objet de mappage de fichier ne se ferme pas jusqu'� ce que toutes les r�f�rences � celui-ci soient lib�r�es.
Par cons�quent, pour fermer compl�tement un objet de mappage de fichier, une application doit d�mapper toutes les vues mapp�es de l'objet de mappage de fichier en appelant _WinAPI_UnmapViewOfFile() et fermer le handle de l'objet de mappage en appelant _WinAPI_CloseHandle().
Ces fonctions peuvent �tre appel�es dans n'importe quel ordre.
_WinAPI_CloseHandle, _WinAPI_UnmapViewOfFile
Consultez CreateFileMapping dans la librairie MSDN.
#NoTrayIcon #include <MsgBoxConstants.au3> #include <WinAPIFiles.au3> #include <WinAPIHObj.au3> Opt('WinWaitDelay', 0) Global Const $g_sTitle = '_WinAPI_MapViewOfFile' & ChrW(160) If Not $CmdLine[0] Then If WinExists($g_sTitle) Then Exit EndIf For $i = 1 To 2 If Not @Compiled Then Run(@AutoItExe & '"' & @ScriptFullPath & '" /' & $i) Else Run(@AutoItExe & '/' & $i) EndIf Sleep(500) Next Exit EndIf Opt('TrayIconHide', 0) Switch $CmdLine[1] Case '/1' _Sender() Case '/2' _Receiver() Case Else Exit EndSwitch Func _Receiver() Local $hMapping = _WinAPI_OpenFileMapping('MyFileMapping') If Not $hMapping Then Return Local $pAddress = _WinAPI_MapViewOfFile($hMapping) Local $tData = DllStructCreate('wchar[1024]', $pAddress) Local $sText While WinWait($g_sTitle, '', 1) Sleep(200) $sText = DllStructGetData($tData, 1) DllStructSetData($tData, 1, '') If $sText Then MsgBox(BitOR($MB_ICONINFORMATION, $MB_SYSTEMMODAL), $g_sTitle & " (receiver)", " " & @CRLF & $sText) WEnd _WinAPI_UnmapViewOfFile($pAddress) _WinAPI_CloseHandle($hMapping) EndFunc ;==>_Receiver Func _Sender() Local $hMapping = _WinAPI_CreateFileMapping(-1, 2048, 'MyFileMapping') If Not $hMapping Or @extended Then MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Impossible de cr�er le mappage du fichier (@extended=' & @extended & ').') Return EndIf Local $pAddress = _WinAPI_MapViewOfFile($hMapping) Local $tData = DllStructCreate('wchar[1024]', $pAddress) Local $sText While WinWaitClose($g_sTitle) $sText = StringStripWS(InputBox($g_sTitle & " (sender)", 'Tapez du texte.', '', '', -1, 171), 3) If $sText = "" Then ExitLoop EndIf DllStructSetData($tData, 1, $sText) If Not WinWait($g_sTitle, '', 1) Then ExitLoop EndIf WEnd _WinAPI_UnmapViewOfFile($pAddress) _WinAPI_CloseHandle($hMapping) EndFunc ;==>_Sender