Funzione MapViewOfFile3FromApp (memoryapi.h)
Esegue il mapping di un file nello spazio indirizzi di un'app di Windows Store chiamante.
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 (specificamente, sostituzione).
Per specificare il nodo NUMA, vedere il parametro ExtendedParameters .
Sintassi
PVOID MapViewOfFile3FromApp(
[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 che deve essere mappata nello spazio 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 fino al limite più vicino a 64k.
If this parameter is <b>NULL</b>, the system picks the base
address.
Se BaseAddress non è NULL, qualsiasi struttura MEM_ADDRESS_REQUIREMENTS fornita deve essere costituita da tutti gli zero.
[in] Offset
Offset dall'inizio della sezione. Questo deve essere allineato a 64k.
[in] ViewSize
Numero di byte da mappare. Un valore pari a zero (0) specifica che l'intera sezione deve essere mappata.
Le dimensioni devono essere sempre un multiplo delle dimensioni della pagina.
[in] AllocationType
Tipo di allocazione della memoria. Questo parametro può essere zero (0) o uno dei valori seguenti.
Valore | Significato |
---|---|
|
Esegue il mapping di una vista riservata. |
|
Sostituisce un segnaposto con una visualizzazione mappata. Sono supportate solo le visualizzazioni della sezione data/pf-back (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 zero.
Dopo aver sostituito un segnaposto con una visualizzazione mappata, per liberare tale visualizzazione mappata a un segnaposto, vedere il parametro UnmapFlags di UnmapViewOfFileEx e UnmapViewOfFile2. Un segnaposto è un tipo di area di memoria riservata. |
|
Esegue il mapping di una visualizzazione di pagina di grandi dimensioni. Vedere supporto di pagine di grandi dimensioni. |
[in] PageProtection
Protezione della pagina desiderata.
Per gli oggetti di mapping dei 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 è lo stesso per le 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 puntati da ExtendedParameters.
Valore restituito
Restituisce l'indirizzo di base della visualizzazione mappata, se riuscito. In caso contrario, restituisce lo stato di errore NULL e esteso è disponibile usando GetLastError.
Commenti
Questa API consente di supportare giochi ad alte prestazioni e applicazioni server, che dispongono di requisiti specifici per la gestione dello spazio indirizzi virtuale. Ad esempio, eseguire il mapping della memoria sopra un'area riservata in precedenza; questo è utile per implementare un buffer anello di wrapping automatico. Allocare la memoria con allineamento specifico; ad esempio, per consentire all'applicazione di eseguire il commit di aree con mapping di pagine di grandi dimensioni o enormi su richiesta.
Con un'eccezione importante, le visualizzazioni file derivate da qualsiasi oggetto di mapping di file supportato dallo stesso file sono coerenti o identici in un momento specifico. La coesistenza è garantita per le visualizzazioni all'interno di un processo e per le visualizzazioni mappate da processi diversi.
L'eccezione è correlata ai file remoti. Anche se MapViewOfFile3FromApp funziona con i file remoti, non li mantiene coerenti. Ad esempio, se due computer eseguono il mapping di un file come scrivibili e entrambi modificano la stessa pagina, ogni computer visualizza solo le proprie scritture nella pagina. Quando i dati vengono aggiornati sul disco, non vengono uniti.
È possibile richiedere la protezione eseguibile solo se l'app ha la funzionalità codeGeneration .
Esempio
Per un esempio di codice, vedere Scenario 1 in Virtual2Alloc.
Requisiti
Client minimo supportato | Windows 10 [solo app desktop] |
Server minimo supportato | Windows Server 2016 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | memoryapi.h (include Windows.h) |
Libreria | WindowsApp.lib |
DLL | Kernel32.dll |
Vedere anche
Creazione di una visualizzazione file