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 |
---|---|
|
Esegue il mapping di una visualizzazione riservata. |
|
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. |
|
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
[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
[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
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 |