EngAllocUserMem 宏 (winddi.h)

EngAllocUserMem 函式會從目前進程的位址空間配置記憶體區塊,並在配置之前插入呼叫端提供的標記。

語法

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

參數

[in] cj

指定要配置的位元組數。

[in] tag

指定可唯一識別執行記憶體配置的驅動程式的 4 位元組 集區標籤 。 如需集區標籤的詳細資訊,請參閱 ExAllocatePoolWithTag。

傳回值

無

備註

NT 型作業系統中的程式具有 4 GB 的虛擬位址空間。 上限 2 GB 是系統記憶體,只能存取核心模式線程;此空間在所有進程上都相同。 較低的 2 GB 是使用者模式和核心模式線程可存取的用戶記憶體;此空間對進程而言是唯一的。 EngAllocUserMem 所配置的記憶體是從唯一的 2 GB 用戶記憶體配置,因此只有在記憶體配置所在的線程內容中呼叫圖形驅動程式時,才能存取。 圖形驅動程式一律會在呼叫端的內容中執行;也就是說,圖形驅動程式無法切換進程內容。

EngAllocUserMem 特別適用於只有目前進程才會使用的大型點陣圖印表機驅動程式。 此驅動程式可以改為從目前進程的位址空間配置空間,而不是從系統集區配置空間。 驅動程式必須謹慎處理 EngAllocUserMem 配置的記憶體,因為應用程式可以改變此記憶體。 EngAllocUserMem 只應該用來配置相對大型的記憶體區塊,因為每個配置至少需要 64 KB 的虛擬地址空間。 不應使用此函式來配置敏感數據結構。 此外,此函式配置的使用者記憶體無法由印表機驅動程序傳遞至 EngWritePrinter 。

不再需要記憶體時,可以透過 呼叫 EngFreeUserMem 函式來釋放它。

若要從不同進程的位址空間配置用戶記憶體,請使用 EngAllocPrivateUserMem。

規格需求

需求 值
最低支援的用戶端 可在 Windows 2000 和更新版本的 Windows 作業系統中使用。
目標平台 Universal
標頭 winddi.h (包括 Winddi.h)
程式庫 Win32k.lib
Dll Win32k.sys

另請參閱

EngAllocPrivateUserMem

EngFreeUserMem