UDF > WinAPIEx > Files & Devices > Files >


_WinAPI_CreateFileMapping

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]]]] )

Param�tres

$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.

Valeur de retour

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().

Remarques

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.

En relation

_WinAPI_CloseHandle, _WinAPI_UnmapViewOfFile

Voir aussi

Consultez CreateFileMapping dans la librairie MSDN.

Exemple

#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