Funzione MapViewOfFile3 (memoryapi.h)

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

Usando questa funzione, è possibile: per le nuove allocazioni, specificare un intervallo di spazio indirizzi virtuale e una restrizione di allineamento power-of-2; specificare un numero arbitrario di parametri estesi; specificare un nodo NUMA preferito per la memoria fisica come parametro esteso; e specificare un'operazione segnaposto (in particolare, sostituzione).

Per specificare il nodo NUMA, vedere il parametro ExtendedParameters .

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

Indirizzo di base desiderato della visualizzazione. L'indirizzo viene arrotondato per difetto al limite di 64k più vicino.

Nota

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. Deve essere allineato a 64.000.

[in] ViewSize

Numero di byte di cui eseguire il mapping. Il valore zero (0) specifica che è necessario eseguire il mapping dell'intera sezione.

Le dimensioni devono essere sempre un multiplo 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 devono 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 in Offset e BaseAddress non si applicano quando questo flag viene specificato.

MEM_LARGE_PAGES
0x20000000
Esegue il mapping di una visualizzazione pagina di grandi dimensioni. Questo flag specifica che la visualizzazione deve essere mappata usando il 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.

[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 Type di MemExtendedParameterAddressRequirements o MemExtendedParameterNumaNode. Se non viene fornito alcun parametro esteso MemExtendedParameterNumaNode , il comportamento corrisponde a quello delle funzioni VirtualAlloc/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 tramite GetLastError.

Commenti

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

Esempio

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

Requisiti

Requisito Valore
Client minimo supportato Windows 10 versione 1803 [solo app desktop]
Server minimo supportato Windows Server 2016 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione memoryapi.h (include Windows.h)
Libreria onecore.lib
DLL Kernel32.dll

Vedere anche

VirtualAlloc2

MapViewOfFile

MapViewOfFile2

MapViewOfFileNuma2