Share via


Macro EngAllocUserMem (winddi.h)

La funzione EngAllocUserMem alloca un blocco di memoria dallo spazio indirizzi del processo corrente e inserisce un tag fornito dal chiamante prima dell'allocazione.

Sintassi

void EngAllocUserMem(
  [in]  cj,
  [in]  tag
);

Parametri

[in] cj

Specifica il numero di byte da allocare.

[in] tag

Specifica un tag del pool a 4 byte che identifica in modo univoco il driver che esegue l'allocazione di memoria. Per altre informazioni sui tag del pool, vedere ExAllocatePoolWithTag.

Valore restituito

nessuno

Osservazioni

Un processo in un sistema operativo basato su NT ha 4 GB di spazio indirizzi virtuale. I 2 GB superiori sono la memoria di sistema accessibile solo ai thread in modalità kernel; questo spazio è identico in tutti i processi. I 2 GB inferiori sono la memoria utente accessibile sia ai thread in modalità utente che a quelli in modalità kernel; questo spazio è univoco per il suo processo. La memoria allocata da EngAllocUserMem viene allocata dai 2 GB univoci di memoria utente ed è quindi accessibile solo quando il driver grafico viene chiamato nel contesto del thread in cui è stata allocata la memoria. I driver grafici sono sempre eseguiti nel contesto del chiamante; ovvero, i driver grafici non possono cambiare contesti di processo.

EngAllocUserMem è particolarmente utile per un driver della stampante con bitmap di grandi dimensioni che verranno usate solo dal processo corrente. Anziché allocare dal pool di sistema, questo driver può invece allocare spazio dallo spazio indirizzi del processo corrente. I driver devono prestare attenzione alla memoria allocata da EngAllocUserMem, perché è possibile che l'applicazione modifichi questa memoria. EngAllocUserMem deve essere usato solo per allocare blocchi di memoria relativamente grandi, perché ogni allocazione richiede almeno 64 KB di spazio indirizzi virtuale. Le strutture di dati sensibili non devono mai essere allocate usando questa funzione. Inoltre, la memoria utente allocata da questa funzione non può essere passata a EngWritePrinter dal driver della stampante.

Quando la memoria non è più necessaria, può essere liberata da una chiamata alla funzione EngFreeUserMem .

Per allocare memoria utente dallo spazio indirizzi di un processo diverso, usare EngAllocPrivateUserMem.

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Windows 2000 e versioni successive dei sistemi operativi Windows.
Piattaforma di destinazione Universale
Intestazione winddi.h (include Winddi.h)
Libreria Win32k.lib
DLL Win32k.sys

Vedi anche

EngAllocPrivateUserMem

EngFreeUserMem