Funzione AllocateUserPhysicalPagesNuma (memoryapi.h)
Alloca le pagine di memoria fisica di cui eseguire il mapping e il mapping all'interno di qualsiasi area AWE (Address Windowing Extensions ) di un processo specificato e specifica il nodo NUMA per la memoria fisica.
Sintassi
BOOL AllocateUserPhysicalPagesNuma(
[in] HANDLE hProcess,
[in, out] PULONG_PTR NumberOfPages,
[out] PULONG_PTR PageArray,
[in] DWORD nndPreferred
);
Parametri
[in] hProcess
Handle di un processo.
La funzione alloca memoria che può essere mappata successivamente all'interno dello spazio indirizzi virtuale di questo processo. L'handle deve avere il diritto di accesso PROCESS_VM_OPERATION . Per altre informazioni, vedere Sicurezza dei processi e diritti di accesso.
[in, out] NumberOfPages
Dimensioni della memoria fisica da allocare, nelle pagine.
Per determinare le dimensioni della pagina del computer, usare la funzione GetSystemInfo . Nell'output, questo parametro riceve il numero di pagine effettivamente allocate, che potrebbero essere inferiori al numero richiesto.
[out] PageArray
Puntatore a una matrice per archiviare i numeri di frame di pagina della memoria allocata.
La dimensione della matrice allocata deve essere almeno numberOfPages in base alle dimensioni del tipo di dati ULONG_PTR .
[in] nndPreferred
Nodo NUMA in cui deve risiedere la memoria fisica.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è TRUE.
È possibile allocare meno pagine di quelle richieste. Il chiamante deve controllare il valore del parametro NumberOfPages al ritorno per vedere il numero di pagine allocate. Tutti i numeri di frame di pagina allocati vengono posizionati in sequenza nella memoria a cui punta il parametro PageArray .
Se la funzione ha esito negativo, il valore restituito è FALSE e non vengono allocati frame. Per ottenere informazioni sull'errore estese, chiamare la funzione GetLastError .
Commenti
La funzione AllocateUserPhysicalPagesNuma viene usata per allocare memoria fisica all'interno di un nodo NUMA di cui è possibile eseguire il mapping in un secondo momento all'interno dello spazio indirizzi virtuale del processo. Il privilegio SeLockMemoryPrivilege deve essere abilitato nel token del chiamante oppure la funzione avrà esito negativo con ERROR_PRIVILEGE_NOT_HELD. Per altre informazioni, vedere Costanti dei privilegi.
La memoria allocata da questa funzione deve essere fisicamente presente nel sistema. Dopo aver allocato la memoria, viene bloccata e non disponibile per il resto del sistema di gestione della memoria virtuale.
Le pagine fisiche non possono essere mappate contemporaneamente a più indirizzi virtuali.
Le pagine fisiche possono trovarsi in qualsiasi indirizzo fisico. Non è consigliabile fare ipotesi sulla contiguità delle pagine fisiche.
Per compilare un'applicazione che usa questa funzione, definire _WIN32_WINNT come 0x0600 o versione successiva.
Requisiti
Client minimo supportato | Windows Vista [solo app desktop] |
Server minimo supportato | Windows Server 2008 [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