共用方式為


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