EngAllocPrivateUserMem 宏 (winddi.h)
EngAllocPrivateUserMem 函式會從指定行程的位址空間配置用戶記憶體區塊,並在配置之前插入呼叫端提供的標記。
語法
void EngAllocPrivateUserMem(
[in] psl,
[in] cj,
[in] tag
);
參數
[in] psl
DD_SURFACE_LOCAL 結構的指標 ,代表要與配置記憶體建立關聯的 Microsoft DirectDraw 表面。
[in] cj
指定要配置的記憶體位元組數目。
[in] tag
指定可唯一識別執行記憶體配置的驅動程式的 4 位元組 集區標籤 。 如需集區標籤的詳細資訊,請參閱 ExAllocatePoolWithTag。
傳回值
無
備註
DirectDraw 驅動程式可能需要用戶記憶體「臨時板」來取代真正的視訊記憶體。 雖然基於效能影響而不建議這樣做,但偶爾會需要。 此臨時記憶體通常只會配置一段短時間。 配置記憶體之後,它會用於預期的圖形作業,然後解除分配。
如果在解除鎖定表面之前終結驅動程序實例,就會發生問題。 當系統因為使用者按下 CTRL+ALT+DEL 而切換至受保護的桌面時,就會發生特定情況。 在此情況下,模式參數會在系統進程內容上執行。 如果驅動程式有任何未完成的表面鎖定,例如當模式切換在表面解除鎖定之前發生時,驅動程式將需要在不同的進程內容上終結該表面。 驅動程式無法呼叫 EngFreeUserMem 來解除分配臨時記憶體,因為如果在配置記憶體時所使用的不同內容上呼叫此進入點將會失敗。
提供 EngAllocPrivateUserMem 和 EngFreePrivateUserMem 來解決此問題。 這兩個函式與 EngAllocUserMem 和 EngFreeUserMem 相同,不同之處在於它們會執行額外工作來釋放在不同進程內容上配置的記憶體。 進程內容資訊會儲存在擁有 psl 點之 DirectDraw 介面物件的 DirectDraw 物件。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 可在 Windows 2000 和更新版本的 Windows 作業系統中使用。 |
目標平台 | Universal |
標頭 | winddi.h (包括 Winddi.h) |
程式庫 | Win32k.lib |
Dll | Win32k.sys |