funcţia createfilemapping

Acorde o atenție! faptul că un astfel de aranjament poate provoca un pericol pentru siguranță. Pentru a evita acest risc, utilizați SECURITY_ATTRIBUTES structura admisibile.

flProtect [în] Tipul de protecție necesare pentru fișier atunci când acesta este afișat. Acest parametru poate fi una dintre următoarele valori.

Acesta oferă acces la pagini câmp transmis este read-only. Încercarea de a fi scris în regiunea transmisive, ceea ce duce la o violare de acces. Fișierul specificat parametrul hFile trebuie să fie creat cu acces GENERIC_READ dreapta.

Acesta vă oferă acces la operațiunile paginilor de citire-scriere câmp transmise. Fișierul specificat hFile trebuie să fie creat cu GENERIC_READ GENERIC_WRITE și drepturi de acces.

Acesta oferă acces la copia de pe paginile de scriere câmp transmise. Fișierele parametru definit trebuie să fie creat cu hFile GENERIC_READ GENERIC_WRITE și drepturi de acces.

Acesta oferă acces pentru a citi și executa paginile de câmp transmise. Fișierul specificat ca hFile. Acesta trebuie să fie creat cu GENERIC_READ GENERIC_EXECUTE și drepturi de acces.

În plus, aplicația poate specifica anumite atribute secțiune prin combinarea (folosind bitwise OR), una sau mai multe din secțiunea următoare atribuie valori uneia dintre valorile anterioare de protecție pagină.

Alocă dispozitiv de stocare fizică în memorie sau în fișierul de paginare de pe disc pentru fiecare secțiune a paginii. Aceasta este - implicit instalarea (tipic).

Windows Me / 98/95: Această opțiune nu este acceptată.

Toate paginile unei secțiuni sunt definite ca fiind non-cacheable.

Aplicațiile nu ar trebui să folosească această opțiune cu excepția cazului în care este în mod clar necesar pentru dispozitiv. Utilizarea funcției de memorie vzaimoblokiruemyh, afișare secțiunea SEC_NOCACHE poate duce la o EXCEPTION_ILLEGAL_INSTRUCTION situație excepțională.

Acorde o atenție! acea cutie SEC_NOCACHE impune ca au fost instalate sau SEC_RESERVE. sau SEC_COMMIT.

Windows Me / 98/95: Această opțiune nu este acceptată.

Își rezervă toate paginile cu secțiuni, fără a le pune în memoria fizică. bloc de pagini rezervate nu pot fi folosite de orice alte operațiuni de alocare până când acesta este eliberat. Paginile rezervate pot fi transmise în funcție de apelurile ulterioare VirtualAlloc. Acest atribut este valabil numai în cazul în care parametrul are valoarea INVALID_HANDLE_VALUE hFile; adică, un obiect „cartografiere fișier“, care este acceptat de către fișierul de paginare de sistem de operare.

[În] mai veche un cuvânt dublu (DWORD) din dimensiunea maximă a obiectului „cartografiere fișier.“

[În] Cuvântul dublu scăzut (DWORD) din dimensiunea maximă a obiectului „cartografiere fișier.“ Dacă acest parametru și dwMaximumSizeHigh egal cu zero, dimensiunea maximă a obiectului „cartografiere fișier“ este egal cu dimensiunea actuală a fișierului identificat hFile.

Încercarea de a afișa în fișierul de memorie cu o lungime zero în acest mod nu ERROR_FILE_INVALID cod. Cererile ar trebui să detecteze fișierele cu lungime zero și pentru a respinge astfel de fișiere.

[In] pointer la un șir de caractere, cu un zero la sfârșitul anului, definind denumirea „proiectat“ obiect.

Dacă acest parametru corespunde numelui unui existent numit „proiectat“ obiect, cereri de caracteristici de acces la un „proiectat“ obiect cu protecția dată de parametrul flProtect.

Dacă această opțiune - lăsați (NULL), „proiectat“ obiect este creat fără un nume.

În cazul în care se potrivește lpName numele unui eveniment existent, semafor, mutex, de așteptare pentru un temporizator sau un obiect de locuri de muncă, funcția eșuează, iar funcția GetLastError returnează o eroare ERROR_INVALID_HANDLE. Acest lucru se datorează faptului că aceste obiecte împart același spațiu de nume.

Terminal Services: Numele poate fi prefixate cu „Global \“ sau „local \“, pentru a crea în mod explicit un obiect cu un nivel global sau un spațiu de nume de sesiune. Iar restul numelui Termenul poate conține orice caracter cu excepția backslash (\). Pentru mai multe informații, consultați. Articolul de kernel nume de obiecte spațiu.

Windows XP Home Edition: Comutarea rapidă între utilizatori se realizează prin utilizarea sesiunilor Terminal Services. Primul utilizator pentru a începe munca folosind Session 0, urmatorul utilizator care va începe să utilizați sesiunea 1, și așa mai departe. Nume obiect nucleu trebuie să respecte liniile directoare prezentate în Terminal Services, astfel încât o aplicație poate suporta mai mulți utilizatori.

Windows NT. Numele poate conține orice caracter cu excepția unui backslash (\).

Windows 95/98 / Me: Numele poate conține orice caracter cu excepția unui backslash (\). Un șir gol ( „“) - un nume de obiect valid.

Dacă funcția reușește, valoarea returnată - mânerul obiectului „proiectat“ fișier. În cazul în care obiectul a existat înainte de apelul funcției, funcția returnează un mâner la un obiect existent (cu dimensiunea sa actuală nu este specificat mărimea), iar funcția returnează o eroare GetLastError ERROR_ALREADY_EXISTS.

Dacă funcția eșuează, valoarea returnată - NULL (NULL). Pentru a obține informații despre eroare extinse, apel GetLastError.

În cazul în care aplicația stabilește „mapare fișierul“ dimensiunea obiectului, care este mai mare decât dimensiunea fișierului cu numele real pe disc, fișierul de pe disc este mărită pentru a se potrivi cu dimensiunea obiectului specificat „mapare de fișiere.“ Dacă fișierul nu poate fi mărit, acest lucru duce la un eșec în crearea unui obiect „mapare de fișiere.“ Funcția GetLastError returnează o ERROR_DISK_FULL eroare.

Descriptor care returnează funcția CreateFileMapping. Are acces deplin la noul obiect „cartografiere fișier.“ Acesta poate fi folosit cu orice funcție care necesită un mâner pentru un obiect „mapare de fișiere.“ Obiectele „imaginea proiectată“ pot fi utilizate împreună sau prin procesul de dezvoltare, sau prin duplicarea descriptor, sau după nume. Pentru informații despre mânere duplicatoare, vezi. DuplicateHandle descrierea funcției. Pentru informații despre deschiderea obiectului „cartografiere fișier“ după nume, a se vedea. OpenFileMapping descrierea funcției.

Windows 95/98 / Me: descriptor de fișier care a fost folosit pentru a crea obiecte de „fișier de mapare“ nu ar trebui să fie utilizate în cadrul unor apeluri ulterioare opțiunilor de intrare de fișiere - O, cum ar fi readfile și WriteFile. În general, în cazul în care un descriptor de fișier utilizat de o funcție de apel CreateFileMapping de succes. Nu utilizați acest mâner, dacă închideți mai întâi obiectul corespunzător „cartografiere fișier.“

Prima situație excepțională majoră este o vedere a fișierului primite de la singurul obiect „proiectat“ secvență de imagini, sau la fel ca în prezent. Dacă mai multe procese au mânere ale aceluiași obiect „proiectat“ fișier, ei văd o imagine consistentă a datelor atunci când reprezentarea de afișare a fișierului.

Excepție este legată de fișiere la distanță. Cu toate că funcția CreateFileMapping și lucrează cu fișiere de la distanță, aceasta nu păstrează secvența lor. De exemplu, în cazul în care două calculatoare și fișier proiect ca inscriptibile și înlocuite, în aceeași pagină, fiecare calculator va vedea doar propria intrare pe pagină. În cazul în care datele sunt actualizate pe disc, ele nu sunt combinate.

Imaginea afișată și fișierul să fie accesate de către funcțiile de introducere de date / ieșire (readfile și WriteFile) (I / O) nu sunt neapărat legate.

Pentru a închide complet facilitatea de „cartografiere fișier“ cererea ar trebui să anuleze afișarea tuturor tipurilor de afișare obiect „cartografiere fișier“ folosind UnmapViewOfFile funcția de apel și a închide mâner obiect „cartografiere fișier“, prin apelarea funcției CloseHandle. Ordinea în care aceste funcții sunt numite, nu contează. Apel UnmapViewOfFile necesar deoarece tipurile de obiecte afișate „cartografiere fișier“ deschis intern de serviciu se ocupă de obiecte și obiect „cartografiere fișier“ nu va fi închis până când toate mânerele deschise sunt închise pentru el.

Terminalaservisov sesiune poate utiliza blocuri de memorie partajată pentru a muta date între procesele generate de aceste sesiuni. Dacă faceți acest lucru, rețineți că memoria partajată nu poate fi folosit în situațiile în care există următoarele două condiții:
  • Toate procesele care folosesc bloc de memorie partajată nu a fost generată de o singură sesiune.
  • Toate sesiunile împărtășesc aceleași acreditări de conectare de utilizator la sistem.

Pentru a lua măsuri împotriva încălcării drepturilor de acces, utilizarea de manipulare excepție structurate pentru a proteja orice cod care scrie sau citește din memoria prezentării de afișare. Pentru mai multe informații, consultați. Articolul Citirea și scrierea de depunere fișier de date.

Pentru a putea afișa permisiunile de execuție. cererea dumneavoastră trebuie să apelați funcția CreateFileMapping sau steaguri PAGE_EXECUTE_READWRITE sau PAGE_EXECUTE_READ. și apoi apel MapViewOfFile cu steaguri FILE_MAP_EXECUTE | FILE_MAP_WRITE sau FILE_MAP_EXECUTE | FILE_MAP_READ.

Pentru a realiza funcția de a crea un „proiectat“ a obiectului, care eșuează dacă există deja obiectul, aplicația poate utiliza următorul cod.

articole similare