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 |