Condividi tramite


Funzione MapUserPhysicalPages (memoryapi.h)

Esegue il mapping delle pagine di memoria fisica allocate in precedenza a un indirizzo specificato in un'area AWE (Address Windowing Extensions ).

Per eseguire il mapping batch e l'annullamento del mapping di più aree, usare la funzione MapUserPhysicalPagesScatter .

Windows a 64 bit nei sistemi basati su Itanium: A causa della differenza nelle dimensioni delle pagine, MapUserPhysicalPages non è supportato per le applicazioni a 32 bit.

Sintassi

BOOL MapUserPhysicalPages(
  [in] PVOID      VirtualAddress,
  [in] ULONG_PTR  NumberOfPages,
  [in] PULONG_PTR PageArray
);

Parametri

[in] VirtualAddress

Puntatore all'indirizzo iniziale dell'area di memoria di cui eseguire il mapping.

Il valore di lpAddress deve essere compreso nell'intervallo di indirizzi restituito dalla funzione VirtualAlloc quando viene allocata l'area Address Windowing Extensions (AWE).

[in] NumberOfPages

Dimensioni della memoria fisica e dello spazio indirizzi virtuale per cui stabilire le traduzioni, nelle pagine.

L'intervallo di indirizzi virtuali è contiguo a partire da lpAddress. I fotogrammi fisici vengono specificati da UserPfnArray.

Il numero totale di pagine non può estendersi dall'indirizzo iniziale oltre la fine dell'intervallo specificato in AllocateUserPhysicalPages.

[in] PageArray

Puntatore a una matrice di numeri di frame di pagina fisici.

Questi frame vengono mappati dall'argomento lpAddress al ritorno da questa funzione. La dimensione della memoria allocata deve essere almeno numberOfPages in base alle dimensioni del tipo di dati ULONG_PTR.

Non tentare di modificare il buffer. Contiene i dati del sistema operativo e il danneggiamento potrebbe essere irreversibile. Le informazioni nel buffer non sono utili per un'applicazione.

Se questo parametro è NULL, l'intervallo di indirizzi specificato non viene mappato. Inoltre, le pagine fisiche specificate non vengono liberate ed è necessario chiamare FreeUserPhysicalPages per liberarle.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è TRUE.

Se la funzione ha esito negativo, il valore restituito è FALSE e non viene eseguito alcun mapping, parziale o in caso contrario. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Le pagine fisiche non vengono mappate, ma non vengono liberate. È necessario chiamare FreeUserPhysicalPages per liberare le pagine fisiche.

È possibile specificare un numero qualsiasi di pagine di memoria fisica, ma la memoria non deve estendersi all'esterno dello spazio indirizzi virtuale allocato da VirtualAlloc . Tutte le mappe indirizzi esistenti vengono sovrascritte automaticamente con le nuove traduzioni e le vecchie traduzioni non vengono mappate.

Non è possibile eseguire il mapping delle pagine di memoria fisica all'esterno dell'intervallo specificato in AllocateUserPhysicalPages. È possibile eseguire il mapping di più aree contemporaneamente, ma non possono sovrapporsi.

Le pagine fisiche possono trovarsi in qualsiasi indirizzo fisico, ma non fare ipotesi sulla contiguità delle pagine fisiche.

Per annullare il mapping dell'intervallo di indirizzi corrente, specificare NULL come parametro della matrice di pagine di memoria fisica. Le pagine attualmente mappate non vengono mappate, ma non vengono liberate. È necessario chiamare FreeUserPhysicalPages per liberare le pagine fisiche.

In un ambiente multiprocessore questa funzione mantiene la coerenza del buffer di conversione hardware. Al ritorno da questa funzione, tutti i thread in tutti i processori sono garantiti per visualizzare il mapping corretto.

Per compilare un'applicazione che usa questa funzione, definire la macro _WIN32_WINNT come 0x0500 o versione successiva. Per altre informazioni, vedere Uso delle intestazioni di Windows.

Esempio

Per un esempio, vedere Esempio di AWE.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione memoryapi.h (include Windows.h, Memoryapi.h)
Libreria onecore.lib
DLL Kernel32.dll

Vedere anche

Estensioni di windowing degli indirizzi

AllocateUserPhysicalPages

FreeUserPhysicalPages

MapUserPhysicalPagesScatter

Funzioni di gestione della memoria