Condividi tramite


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
MEM_RESERVE
0x00002000
Esegue il mapping di una vista riservata.
MEM_REPLACE_PLACEHOLDER
0x00004000
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.

MEM_LARGE_PAGES
0x20000000
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

CreateFileMapping

Creazione di una visualizzazione file

DuplicateHandle

GetSystemInfo

MapViewOfFile3

MapViewOfFileEx

Funzioni di gestione della memoria

OpenFileMapping

SYSTEM_INFO

UnmapViewOfFile