Freigeben über


EngAllocPrivateUserMem-Makro (winddi.h)

Die EngAllocPrivateUserMem-Funktion weist einen Block des Benutzerspeichers aus dem Adressraum eines angegebenen Prozesses zu und fügt ein vom Aufrufer bereitgestelltes Tag vor der Zuordnung ein.

Syntax

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

Parameter

[in] psl

Zeiger auf die DD_SURFACE_LOCAL Struktur, die die Microsoft DirectDraw-Oberfläche darstellt, der der zugeordnete Arbeitsspeicher zugeordnet werden soll.

[in] cj

Gibt die Anzahl der Zuteilungsbytes an.

[in] tag

Gibt ein 4-Byte-Pooltag an , das den Treiber eindeutig identifiziert, der die Speicherzuordnung übernimmt. Weitere Informationen zu Pooltags finden Sie unter ExAllocatePoolWithTag.

Rückgabewert

Keine

Bemerkungen

Ein DirectDraw-Treiber erfordert möglicherweise ein "Scratchpad" des Benutzerspeichers anstelle von echtem Videospeicher. Obwohl von dieser Praxis aufgrund ihrer Auswirkungen auf die Leistung abgeraten wird, ist sie gelegentlich notwendig. Dieser Arbeitsspeicher wird in der Regel nur für einen kurzen Zeitraum zugewiesen. Nachdem der Arbeitsspeicher zugewiesen wurde, wird er für die beabsichtigten Grafikvorgänge verwendet und dann zugeordnet.

Ein Problem tritt auf, wenn der Treiber instance zerstört wird, bevor die Oberfläche entsperrt wird. Ein besonderer Fall tritt auf, wenn das System zu einem geschützten Desktop wechselt, weil ein Benutzer STRG+ALT+ENTF drückt. In dieser Situation wird der Modusschalter für einen Systemprozesskontext ausgeführt. Wenn der Treiber über ausstehende Oberflächensperren verfügt, z. B. wenn der Modusschalter vor dem Entsperren des Surface erfolgt, muss der Treiber diese Oberfläche in einem anderen Prozesskontext zerstören. Der Treiber kann EngFreeUserMem nicht aufrufen, um die Zuordnung des Arbeitsspeichers zu beheben, da dieser Einstiegspunkt fehlschlägt, wenn er in einem anderen Kontext aufgerufen wird als der, der bei der Zuweisung des Arbeitsspeichers verwendet wurde.

EngAllocPrivateUserMem und EngFreePrivateUserMem werden bereitgestellt, um dieses Problem zu beheben. Diese beiden Funktionen sind mit EngAllocUserMem und EngFreeUserMem identisch, mit der Ausnahme, dass sie die zusätzliche Arbeit ausführen, die erforderlich ist, um Arbeitsspeicher freizugeben, der für einen anderen Prozesskontext zugewiesen ist. Prozesskontextinformationen werden mit dem DirectDraw-Objekt gespeichert, das das DirectDraw-Oberflächenobjekt besitzt, auf das psl verweist.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows 2000 und höheren Versionen der Windows-Betriebssysteme.
Zielplattform Universell
Header winddi.h (einschließlich Winddi.h)
Bibliothek Win32k.lib
DLL Win32k.sys

Weitere Informationen

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL

EngAllocUserMem

EngFreePrivateUserMem

EngFreeUserM