[so] tema 3 win - MapViewOfFileEx
Bercea Gabriel
gamitech at gmail.com
Wed May 6 20:12:13 EEST 2009
Buna Irina.
Ceea ce vrei tu sa faci nu prea are logica.
Considera ca MapViewOfFile(Ex) face ceea ce face VirtualAlloc(Ex). Amandoua
returneaza un pointer la adresa virtuala, unde s-a mapat memoria, dorita.
Diferenta dintre cele doua este, dupa cum si numele spune urmatoarea:
CreateFileMapping face un Stream File Object care apoi lucreaza in foarte
stransa legatura cu Windows Memory Manager si Windows Cache Manager. Asta
inseamna ca fisierul dupa care s-a facut streamul poate fi si inchis, si il
poti modifica prin Memory Writes si apoi un Paging Io va scrie pe disc
modificarile din memorie.
Considera scenariul urmator:
CreateFile(f1) -> h1
CreatefileMapping(h1) -> h2
CloseHandle(h1)
MapViewOfFile(h2) -> Buf
Modify Buffer -> poti modifica fiiserul practic neavand un handle deschis
spre el (dar ai un FCB)
CloseHandle(h2)
Virtual alloc nu face altceva decat sa iti reserve/commit in memoria
procesului tau un multiplu de PAGE_SIZE. In momentul asta, backup fileul
este chiar PagingFile. Acum tu cand faci scrieri in memoria intoarsa de
virtual alloc, LazyWriter/MemoryManager va scrie pe disc in paging file, pt
swaps.
Recomandarea mea este sa folosesti functiile de file mapping, in momentul
care vrei sa faci mapping la un fisier in memorie (gen dll's, exe, bins in
general)pentru a vedea import/export descriptors, exportare resurse, etc sau
pentru IPC (un file mapping are un nume si poate fi deschis din mai multe
procese/threaduri) si cu ajutorul unu mechanism de sincronizare sa comunici.
On the other hand VirtualXXXXX functions folosestele ca pe un "malloc" numai
ca acum nu ai limita de alocare, limita fiind address spaceul procesului,
sau daca pagefileul este mai mic decat address spaceul procesului pagefile
unused length.
Cu respect,
Gabriel Bercea
Mobile contact: (+40)0740049634
eMail: <mailto:gamitech at gmail.com> gamitech at gmail.com
From: so-bounces at cursuri.cs.pub.ro [mailto:so-bounces at cursuri.cs.pub.ro] On
Behalf Of Irina Stanescu
Sent: Tuesday, May 05, 2009 2:57 AM
To: so at cursuri.cs.pub.ro
Subject: [so] tema 3 win - MapViewOfFileEx
Am urmatoarea problema : MapViewOfFileEx intoarce tot timpul
ERROR_INVALID_ADDRESS.
Inainte de a mapa fisierul, am creat un FileMapping cu PAGE_READWRITE si am
rezervat memoria folosind VirtualAlloc(NULL, pageSize * virtualPages,
MEM_RESERVE, PAGE_READWRITE).
In handler, am folosit iar VirtualAlloc pentra face MEM_COMMIT pe pagina
unde vreau sa mapez bucata din FileMapping, si apoi am apelat
MapViewOfFileEx() cu flagul FILE_MAP_ALL_ACCESS.
Aveti vreo idee?
Multumesc,
Irina
Offtopic: search-ul prin arhive nu functioneaza tocmai bine. Un search dupa
MapViewOfFileEx nu gaseste nimic, totusi exista intr-o arhiva un topic
similar (care din pacate n-a primit nici un raspuns).
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20090506/5e4edb80/attachment-0001.htm>
More information about the so
mailing list