特殊集區
特殊集區功能會將 Windows 設定為在記憶體配置為指定的集區標籤或位於指定大小範圍內時,向保留的記憶體集區要求記憶體配置。
縮寫 |
spp |
十六進位值 |
(無) |
符號名稱 |
(無) |
目的地 |
全系統登錄專案 (Windows Vista 和更新版本) 全系統登錄專案、核心旗標 |
選取集區標籤
要求特定集區標籤的特殊集區時,請確定您的驅動程式或其他核心模式程式使用唯一的集區標籤。
此外,使用 ExAllocatePoolWithTag) 建立集區標籤 (時,請考慮以反向順序輸入標記字元。 例如,如果標籤是 Fred,請考慮將其輸入為 derF (0x64657246) 。 集區標籤會儲存在登錄中,並在偵錯工具和其他工具中以反向 (低端) 順序顯示。 如果您以反向順序輸入它們,則會依順向順序顯示它們 (0x46726564)
如果您懷疑驅動程式正在取用所有特殊集區,請考慮在程式碼中使用多個集區標籤。 然後,您可以測試驅動程式數次,將特殊集區指派給每個測試中的一個集區標籤。
此外,請選取具有大於系統頁面大小的十六進位值的集區標籤。 針對核心模式程式碼,如果您輸入的值小於 PAGE_SIZE 的集區標籤,則 Gflags 會針對大小在對應範圍內的所有配置要求特殊集區,並要求具有對等集區標籤之配置的特殊集區。 例如,如果您選取大小 為 30,則特殊集區會用於大小介於 17 到 32 個位元組之間的所有配置,以及集區標籤0x0030的配置。
選取配置大小
使用下列指導方針來選取特殊集區功能的配置大小。
在 x86 處理器的電腦上,PAGE_SIZE是0x1000,配置大小範圍長度為 8 個位元組。 若要針對此範圍中大小的所有配置設定特殊集區功能,請輸入等於此範圍上限加上 8 的數位。 (此數位一律為 8.) 下表說明這些值:
大小範圍 | 輸入此號碼 |
---|---|
1 到 8 個位元組 |
10 (十進位 16) |
9 到 16 個位元組 |
18 (十進位 24) |
17 到 24 個位元組 |
20 (十進位 32) |
... |
... |
0xFE9至 0xFF0 個位元組 |
FF8 (十進位 4088) |
在 AMD x86-64 處理器的電腦上,PAGE_SIZE 0x1000配置大小範圍長度為 16 個位元組。 若要針對此範圍中大小的所有配置設定特殊集區功能,請輸入等於此範圍上限加上 16 的數位。 (此數位一律為 16.) 下表說明這些值的倍數:
大小範圍 | 輸入此號碼 |
---|---|
1 到 16 個位元組 |
20 (十進位 32) |
17 到 32 個位元組 |
30 (十進位 48) |
33 到 48 個位元組 |
40 (十進位 64) |
... |
... |
0xFD1至 0xFE0 個位元組 |
FF0 (decimal 4080) |
在任何處理器的電腦上,您可以使用星號 ( * ) 或0x2A (十進位 42) 來設定系統上所有記憶體配置的特殊集區功能。
評論
如需在 [全域旗標] 對話方塊中設定特殊集區功能的相關資訊,請參閱 設定特殊集區。 如需在命令列設定特殊集區功能的相關資訊,請參閱 GFlags 命令。 如需範例,請參閱 範例 14:設定特殊集區。
Gflags 的特殊集區功能會指示 Windows 從保留記憶體集區要求記憶體配置時,當記憶體是使用指定的集區標籤配置,或是在指定的大小範圍內。 若要針對特定驅動程式要求所有配置的特殊集區,請使用驅動程式驗證器。 如需詳細資訊,請參閱 Windows 驅動程式套件 (WDK) 一節中的主題。
Gflags 和 Driver Verifier 的特殊集區功能可協助您偵測和識別核心集區使用中的錯誤來源,例如寫入已配置記憶體空間以外的記憶體,或參考已釋放的記憶體。
並非所有特殊集區要求都已完成。 來自特殊集區的每個配置都會使用一頁不可分頁的實體記憶體和兩個頁面的虛擬位址空間。 如果特殊集區耗盡,則會從標準集區配置記憶體,直到特殊集區再次可用為止。 從標準集區填入特殊集區要求時,要求函式會傳回成功狀態。 它不會傳回錯誤,因為配置已成功,即使它不是從特殊集區填滿也一樣。
特殊集區的大小會隨著系統上的實體記憶體數量而增加;在理想情況下,這至少應為 1 GB (GB) 。 在 x86 電腦上,因為除了耗用實體) 空間之外,還會耗用虛擬 (,所以在使用特殊集區時,請勿使用 /3GB 開機選項。 此外,最好將分頁檔最小/最大數量增加為 2 或 3 的因數。
您也可以設定特殊集區功能,以對齊記憶體配置,以偵測配置之前 (「不足」) 或記憶體的參考超出配置 (「超溢」) 。 此功能僅適用于所有 Windows 版本的 [全域旗標] 對話方塊中。 如需詳細資訊,請參閱 偵測滿溢和下溢。
在 Windows Vista 和更新版本的 Windows 上,您可以將特殊集區功能設定為需要重新開機的登錄設定,但在您變更之前仍有效,或作為不需要重新開機的核心旗標設定,但只有在重新開機或關閉 Windows 時才有效。 在舊版的 Windows 中,特殊集區只能做為登錄設定。
在 Windows Vista 和更新版本的 Windows 上,您可以使用 [全域旗標] 對話方塊或命令列來設定特殊集區功能。 在舊版的 Windows 中,此功能僅適用于 [全域旗標] 對話方塊中。