Condividi tramite


Macro EngAllocPrivateUserMem (winddi.h)

La funzione EngAllocPrivateUserMem alloca un blocco di memoria utente dallo spazio indirizzi di un processo specificato e inserisce un tag fornito dal chiamante prima dell'allocazione.

Sintassi

void EngAllocPrivateUserMem(
  [in]  psl,
  [in]  cj,
  [in]  tag
);

Parametri

[in] psl

Puntatore alla struttura DD_SURFACE_LOCAL che rappresenta la superficie Microsoft DirectDraw con cui associare la memoria allocata.

[in] cj

Specifica il numero di byte di memoria 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 driver DirectDraw potrebbe richiedere un "scratch pad" in memoria utente al posto di una vera memoria video. Anche se questa pratica è sconsigliata a causa delle sue implicazioni sulle prestazioni, è occasionalmente necessaria. Questa memoria scratch viene in genere allocata solo per un breve periodo di tempo. Dopo aver allocato la memoria, viene usata per le operazioni grafiche desiderate e quindi deallocata.

Si verifica un problema se l'istanza del driver viene eliminata definitivamente prima che la superficie venga sbloccata. Un caso particolare si verifica quando il sistema passa a un desktop protetto in seguito a un utente che preme CTRL+ALT+CANC. In questo caso, l'opzione di modalità viene eseguita in un contesto di processo di sistema. Se il driver dispone di blocchi di superficie in sospeso, ad esempio quando si verifica il cambio di modalità prima che la superficie sia stata sbloccata, il driver dovrà distruggere tale superficie in un contesto di processo diverso. Il driver non può chiamare EngFreeUserMem per deallocare la memoria scratch perché questo punto di ingresso avrà esito negativo se viene chiamato in un contesto diverso da quello usato quando è stata allocata la memoria.

Per risolvere questo problema, vengono forniti EngAllocPrivateUserMem e EngFreePrivateUserMem. Queste due funzioni sono identiche a EngAllocUserMem e EngFreeUserMem, ad eccezione del fatto che eseguono il lavoro aggiuntivo necessario per liberare memoria allocata in un contesto di processo diverso. Le informazioni sul contesto del processo vengono archiviate con l'oggetto DirectDraw proprietario dell'oggetto superficie DirectDraw a cui punti psl .

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

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL

EngAllocUserMem

EngFreePrivateUserMem

EngFreeUserMem