Partager via


Macro EngAllocPrivateUserMem (winddi.h)

La fonction EngAllocPrivateUserMem alloue un bloc de mémoire utilisateur à partir de l’espace d’adressage d’un processus spécifié et insère une balise fournie par l’appelant avant l’allocation.

Syntaxe

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

Paramètres

[in] psl

Pointeur vers la structure DD_SURFACE_LOCAL représentant la surface Microsoft DirectDraw à laquelle associer la mémoire allouée.

[in] cj

Spécifie le nombre d’octets de mémoire à allouer.

[in] tag

Spécifie une balise de pool de 4 octets qui identifie de manière unique le pilote qui effectue l’allocation de mémoire. Pour plus d’informations sur les balises de pool, consultez ExAllocatePoolWithTag.

Valeur de retour

None

Remarques

Un pilote DirectDraw peut nécessiter un « bloc de travail » de mémoire utilisateur à la place de la véritable mémoire vidéo. Bien que cette pratique soit déconseillée en raison de ses répercussions sur le rendement, elle est parfois nécessaire. Cette mémoire de travail n’est généralement allouée que pendant une courte période. Une fois la mémoire allouée, elle est utilisée pour les opérations graphiques prévues, puis libérée.

Un problème se produit si le pilote instance est détruit avant que la surface ne soit déverrouillée. Un cas particulier se produit lorsque le système bascule vers un bureau protégé à la suite d’un utilisateur appuyant sur CTRL+ALT+SUPPR. Dans ce cas, le commutateur de mode est effectué sur un contexte de processus système. Si le pilote a des verrous de surface en suspens, par exemple lorsque le commutateur de mode se produit avant que la surface ait été déverrouillée, le pilote doit détruire cette surface dans un autre contexte de processus. Le pilote ne peut pas appeler EngFreeUserMem pour libérer la mémoire de travail, car ce point d’entrée échoue s’il est appelé dans un contexte différent de celui utilisé lorsque la mémoire a été allouée.

EngAllocPrivateUserMem et EngFreePrivateUserMem sont fournis pour résoudre ce problème. Ces deux fonctions sont identiques à EngAllocUserMem et EngFreeUserMem, sauf qu’elles effectuent le travail supplémentaire requis pour libérer la mémoire allouée sur un autre contexte de processus. Les informations de contexte de processus sont stockées avec l’objet DirectDraw qui possède l’objet surface DirectDraw vers lequel pointe psl .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows 2000 et versions ultérieures des systèmes d’exploitation Windows.
Plateforme cible Universal
En-tête winddi.h (inclure Winddi.h)
Bibliothèque Win32k.lib
DLL Win32k.sys

Voir aussi

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL

EngAllocUserMem

EngFreePrivateUserMem

EngFreeUserMem