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 |