Freigeben über


EngAllocUserMem-Makro (winddi.h)

Die EngAllocUserMem-Funktion ordnet einen Speicherblock aus dem Adressraum des aktuellen Prozesses zu und fügt vor der Zuordnung ein vom Aufrufer bereitgestelltes Tag ein.

Syntax

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

Parameter

[in] cj

Legt die Anzahl der zuzuweisenden Bytes fest.

[in] tag

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

Rückgabewert

Keine

Bemerkungen

Ein Prozess in einem NT-basierten Betriebssystem verfügt über 4 GB virtuellen Adressraum. Die oberen 2 GB sind Systemspeicher, der nur für Kernelmodusthreads zugänglich ist. dieser Bereich ist für alle Prozesse identisch. Bei den unteren 2 GB handelt es sich um den Arbeitsspeicher des Benutzers, auf den sowohl Benutzermodus- als auch Kernelmodusthreads zugreifen können. dieser Bereich ist einzigartig für seinen Prozess. Der von EngAllocUserMem zugewiesene Arbeitsspeicher wird aus den eindeutigen 2 GB Benutzerspeicher zugeordnet und ist daher nur zugänglich, wenn der Grafiktreiber im Kontext des Threads aufgerufen wird, in dem der Arbeitsspeicher zugeordnet wurde. Grafiktreiber werden immer im Kontext des Aufrufers ausgeführt; Das heißt, Grafiktreiber können Prozesskontexte nicht wechseln.

EngAllocUserMem ist besonders nützlich für einen Druckertreiber mit großen Bitmaps, die nur vom aktuellen Prozess verwendet werden. Anstatt aus dem Systempool zuzuweisen, kann dieser Treiber stattdessen Speicherplatz aus dem Adressraum des aktuellen Prozesses zuordnen. Treiber müssen mit dem von EngAllocUserMem belegten Arbeitsspeicher vorsichtig sein, da es möglich ist, dass die Anwendung diesen Arbeitsspeicher ändern kann. EngAllocUserMem sollte nur verwendet werden, um relativ große Speicherblöcke zuzuweisen, da jede Zuordnung mindestens 64 KB virtuellen Adressraum benötigt. Vertrauliche Datenstrukturen sollten niemals mithilfe dieser Funktion zugeordnet werden. Außerdem kann der von dieser Funktion zugeordnete Benutzerspeicher nicht vom Druckertreiber an EngWritePrinter übergeben werden.

Wenn der Arbeitsspeicher nicht mehr benötigt wird, kann er durch einen Aufruf der EngFreeUserMem-Funktion freigegeben werden.

Verwenden Sie EngAllocPrivateUserMem, um den Benutzerspeicher aus dem Adressraum eines anderen Prozesses zuzuweisen.

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

EngAllocPrivateUserMem

EngFreeUserMem