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 包含 資訊所指向之呼叫端配置的緩衝區大小。 在呼叫期間,例程會以包含要求關聯性資訊所需的緩衝區大小覆寫 Length 所指向的值。
傳回值
如果呼叫成功,KeQueryLogicalProcessorRelationship 會傳回STATUS_SUCCESS。 可能的錯誤傳回值包括下列各項:
傳回碼 | Description |
---|---|
STATUS_INVALID_PARAMETER | ProcessorNumber 參數指向包含無效資訊的PROCESSOR_NUMBER結構。 |
STATUS_INFO_LENGTH_MISMATCH | Information 參數所指向的呼叫端配置緩衝區不夠大,無法包含要求的關聯性資訊。 |
備註
若要判斷要配置的緩衝區大小,請先使用 Information = NULL 和 Length = 0 呼叫 KeQueryLogicalProcessorRelationship 。回應中,例程會將所需的緩衝區大小寫入到**Length,並傳回STATUS_INFO_LENGTH_MISMATCH。 接下來,配置必要大小的緩衝區,並再次呼叫 KeQueryLogicalProcessorRelationship 。 在此第二次呼叫中,將 Information 設定為緩衝區位址,並將 *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 中使用。 |
目標平台 | Universal |
標頭 | wdm.h (包含 Ntddk.h、Wdm.h、Ntddk.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |