Condividi tramite


Funzione MapViewOfFile3 (memoryapi.h)

Esegue il mapping di una visualizzazione di un file o di una sezione basata su file di paging nello spazio indirizzi del processo specificato.

Sintassi

PVOID MapViewOfFile3(
  [in]                HANDLE                 FileMapping,
  [in]                HANDLE                 Process,
  [in, optional]      PVOID                  BaseAddress,
  [in]                ULONG64                Offset,
  [in]                SIZE_T                 ViewSize,
  [in]                ULONG                  AllocationType,
  [in]                ULONG                  PageProtection,
  [in, out, optional] MEM_EXTENDED_PARAMETER *ExtendedParameters,
  [in]                ULONG                  ParameterCount
);

Parametri

[in] FileMapping

HANDLE a una sezione di cui eseguire il mapping nello spazio degli indirizzi del processo specificato.

[in] Process

HANDLE a un processo in cui verrà eseguito il mapping della sezione.

[in, optional] BaseAddress

L'indirizzo di base desiderato della visualizzazione (l'indirizzo viene arrotondato verso il basso fino al limite di 64.000 cm più vicino).

Se questo parametro è NULL, il sistema seleziona l'indirizzo di base.

Se baseAddress non è null, qualsiasi MEM_ADDRESS_REQUIREMENTS specificato deve essere costituito da tutti gli zeri.

[in] Offset

Offset dall'inizio della sezione.

L'offset deve essere allineato o allineato a 64k in GetLargePageMinimum quando MEM_LARGE_PAGES viene usato in AllocationType. Inoltre, l'offset deve essere allineato alla pagina sottostante concessa da VirtualAlloc2 quando MEM_REPLACE_PLACEHOLDER viene usato in AllocationType.

[in] ViewSize

Numero di byte di cui eseguire il mapping. Il valore zero (0) specifica che l'intera sezione deve essere mappata.

Le dimensioni devono essere sempre multiple delle dimensioni della pagina.

[in] AllocationType

Tipo di allocazione di memoria. Questo parametro può essere zero (0) o uno dei valori seguenti.

Valore Significato
MEM_RESERVE
0x00002000
Esegue il mapping di una visualizzazione riservata.
MEM_REPLACE_PLACEHOLDER
0x00004000
Sostituisce un segnaposto con una visualizzazione mappata. Sono supportate solo le visualizzazioni di sezione basate su dati/pf (nessuna immagine, memoria fisica e così via). Quando si sostituisce un segnaposto, baseAddress e ViewSize deve corrispondere esattamente a quelli del segnaposto e qualsiasi struttura MEM_ADDRESS_REQUIREMENTS fornita deve essere costituita da tutti gli zeri.

Dopo aver sostituito un segnaposto con una visualizzazione mappata, per liberare la visualizzazione mappata a un segnaposto, vedere il parametro UnmapFlags di UnmapViewOfFileEx e UnmapViewOfFile2.

Un segnaposto è un tipo di area di memoria riservata.

I requisiti di allineamento 64k per offset e baseAddress non si applicano quando viene specificato questo flag.

MEM_LARGE_PAGES
0x20000000
Esegue il mapping di una visualizzazione pagina di grandi dimensioni. Questo flag specifica che la visualizzazione deve essere mappata usando supporto di pagine di grandi dimensioni. Le dimensioni della visualizzazione devono essere multiple delle dimensioni di una pagina di grandi dimensioni segnalate dalla funzione GetLargePageMinimum e l'oggetto di mapping dei file deve essere stato creato usando l'opzione SEC_LARGE_PAGES. Se si specifica un valore non Null per il parametro BaseAddress, il valore deve essere un multiplo di GetLargePageMinimum.

I requisiti di allineamento 64k per offset non si applicano quando questo flag viene specificato.

[in] PageProtection

Protezione della pagina desiderata.

Per gli oggetti di mapping di file creati con l'attributo SEC_IMAGE, il parametro PageProtection non ha alcun effetto e deve essere impostato su qualsiasi valore valido, ad esempio PAGE_READONLY.

[in, out, optional] ExtendedParameters

Puntatore facoltativo a uno o più parametri estesi di tipo MEM_EXTENDED_PARAMETER. Ognuno di questi valori di parametro estesi può avere un campo di type di MemExtendedParameterAddressRequirements o MemExtendedParameterNumaNode. Se non viene fornito alcun MemExtendedParameterNumaNode parametro esteso, il comportamento è uguale a quello del VirtualAlloc/funzioni mapViewOfFile (ovvero, il nodo NUMA preferito per le pagine fisiche viene determinato in base al processore ideale del thread che accede prima alla memoria).

[in] ParameterCount

Numero di parametri estesi a cui punta ExtendedParameters.

Valore restituito

Restituisce l'indirizzo di base della visualizzazione mappata, se ha esito positivo. In caso contrario, restituisce NULL e lo stato di errore esteso è disponibile usando GetLastError.

Osservazioni

Questa API consente di supportare giochi ad alte prestazioni e applicazioni server, che hanno requisiti specifici per la gestione dello spazio degli indirizzi virtuali. Ad esempio, mapping della memoria sopra un'area riservata in precedenza; ciò è utile per l'implementazione di un buffer circolare a capo automatico. E allocando memoria con allineamento specifico; ad esempio, per consentire all'applicazione di eseguire il commit su richiesta di aree mappate di pagine di grandi dimensioni o di grandi dimensioni.

Usando questa funzione per le nuove allocazioni, è possibile:

  • specificare un intervallo di spazio indirizzi virtuale e una restrizione di allineamento di potenza di 2
  • specificare un numero arbitrario di parametri estesi
  • specificare un nodo NUMA preferito per la memoria fisica come parametro esteso
  • specificare un'operazione segnaposto (in particolare, sostituzione).

Per specificare il nodo NUMA, vedere il parametro ExtendedParameters.

Esempi

Per un esempio di codice, vedere Scenario 1 in VirtualAlloc2.

Fabbisogno

Requisito Valore
client minimo supportato Windows 10, versione 1803 [solo app desktop]
server minimo supportato Windows Server 2016 [solo app desktop]
piattaforma di destinazione Finestre
intestazione memoryapi.h (include Windows.h)
libreria onecore.lib
dll Kernel32.dll

Vedere anche

VirtualAlloc2

MapViewOfFile

mapViewOfFile2

MapViewOfFileNuma2