KeQueryLogicalProcessorRelationship 函式 (wdm.h)
KeQueryLogicalProcessorRelationship 例程會取得一或多個處理器與多處理器系統中其他處理器關聯性的相關信息。
語法
NTSTATUS KeQueryLogicalProcessorRelationship(
[in, optional] PPROCESSOR_NUMBER ProcessorNumber,
[in] LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
[out, optional] PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information,
[in, out] PULONG Length
);
參數
[in, optional] ProcessorNumber
PROCESSOR_NUMBER 結構的指標,識別呼叫端要求關聯性資訊的邏輯處理器。 若要要求系統中所有邏輯處理器的相關信息,請將此參數設定為 NULL。
[in] RelationshipType
指定呼叫端所要求的關聯性信息類型。 將此參數設定為下列其中一個 LOGICAL_PROCESSOR_RELATIONSHIP 列舉值:
RelationProcessorCore
RelationNumaNode
從 Windows Server 2022 開始,每個 NUMA 節點都會指派一個主要群組。 RelationNumaNode 的要求 會傳回 只有單一群組親和性的 RelationNumaNode 結構,如果未指定處理器編號,則為節點的主要群組,如果指定處理器編號,則為包含指定處理器的群組(GroupCount == 1,結構大小不變)。 如需詳細資訊,請參閱 KeQueryNodeActiveAffinity 和 NUMA 支援。
RelationCache
RelationProcessorPackage
RelationGroup
RelationProcessorDie
RelationNumaNodeEx
RelationAll
從 Windows Server 2022 開始,RelationNumaNodeEx 或 RelationAll 的要求會傳回 RelationNumaNode 結構,其中包含所有群組之節點的親和性數組(GroupCount 報告親和性數目、結構大小為變數)。 如需詳細資訊,請參閱 NUMA 支援。
[out, optional] Information
呼叫端配置的緩衝區指標,例程會將包含呼叫端所要求資訊的一或多個 SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX 結構陣列寫入其中。 如果函式失敗,則此緩衝區的內容未定義。 設定 資訊 = NULL,以在配置緩衝區之前取得所需的緩衝區長度。 如需詳細資訊,請參閱下列一節。
[in, out] Length
位置的指標,其中包含 Information所指向之緩衝區的大小,以位元組為單位。 在專案上,*Length 包含由 Information所指向之呼叫端配置的緩衝區大小。 在呼叫期間,例程會覆寫 Length 所指向的值,以及包含要求之關聯性資訊所需的緩衝區大小。
傳回值
如果呼叫成功,KeQueryLogicalProcessorRelationship 會傳回STATUS_SUCCESS。 可能的錯誤傳回值包括下列專案:
傳回碼 | 描述 |
---|---|
STATUS_INVALID_PARAMETER | ProcessorNumber 參數指向包含無效資訊的PROCESSOR_NUMBER結構。 |
STATUS_INFO_LENGTH_MISMATCH | Information 參數所指向的呼叫端配置緩衝區不夠大,無法包含要求的關聯性資訊。 |
言論
若要判斷要配置的緩衝區大小,請先使用 Information = NULL 和 Length = 0 呼叫 KeQueryLogicalProcessorRelationship。回應中,例程會將所需的緩衝區大小寫入 **Length,並傳回STATUS_INFO_LENGTH_MISMATCH。 接下來,配置所需大小的緩衝區,並再次呼叫 KeQueryLogicalProcessorRelationship。 在第二個呼叫中,將 [資訊] 設定為緩衝區位址,並將 *Length 設定為緩衝區大小。 如果第二個呼叫成功,例程會將要求的關聯性資訊寫入緩衝區,並傳回STATUS_SUCCESS。
例子
下列程式代碼範例會取得多處理器系統中所有邏輯處理器的處理器關聯性資訊:
//
// Get required buffer size.
//
NTSTATUS Status;
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Info = NULL;
ULONG BufferSize = 0;
Status = KeQueryLogicalProcessorRelationship(NULL, RelationAll, NULL, &BufferSize);
NT_ASSERT(Status == STATUS_INFO_LENGTH_MISMATCH && BufferSize > 0);
//
// Allocate buffer (assume IRQL <= APC_LEVEL).
//
Info = ExAllocatePoolWithTag(PagedPool, BufferSize, ' gaT');
if (Info == NULL)
{
Status = STATUS_INSUFFICIENT_RESOURCES;
}
//
// Get processor relationship information.
//
if (NT_SUCCESS(Status))
{
Status = KeQueryLogicalProcessorRelationship(NULL, RelationAll, Info, &BufferSize);
}
NT_ASSERT巨集定義於 Wdm.h 頭檔中。 NT_SUCCESS巨集定義於 Ntdef.h 頭檔中。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 適用於 Windows 7 和更新版本的 Windows。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Ntddk.h、Wdm.h、Ntddk.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |