KeQueryLogicalProcessorRelationship 関数 (wdm.h)
KeQueryLogicalProcessorRelationship ルーチンは、マルチプロセッサ システム内の 1 つ以上のプロセッサと他のプロセッサの関係に関する情報を取得します。
構文
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 の要求は、1 つのグループ アフィニティのみを含む RelationNumaNode 構造体を返します。プロセッサ番号が指定されていない場合はノードのプライマリ グループの関係、プロセッサ番号が指定されている場合は指定されたプロセッサを含むグループの RelationNumaNode 構造体が返されます (GroupCount == 1、構造体のサイズは変更されません)。 詳細については、「 KeQueryNodeActiveAffinity と NUMA のサポート」を参照してください。
RelationCache
RelationProcessorPackage
RelationGroup
RelationProcessorDie
RelationNumaNodeEx
RelationAll
Windows Server 2022 以降、 RelationNumaNodeEx または RelationAll の要求では、すべてのグループに対するノードのアフィニティの配列を含む RelationNumaNode 構造体が返されます (GroupCount はアフィニティの数を報告し、構造体のサイズは可変です)。 詳細については、「 NUMA サポート」を参照してください。
[out, optional] Information
呼び出し元によって要求された情報を含む 1 つ以上の SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX 構造体の配列をルーチンが書き込む呼び出し元割り当てバッファーへのポインター。 関数が失敗した場合、このバッファーの内容は未定義です。 バッファーを割り当てる前に必要なバッファー長を取得するには、 Information = 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 を呼び出します。 この 2 回目の呼び出しでは、 Information をバッファー アドレスに設定し、*Length をバッファー サイズに設定します。 2 番目の呼び出しが成功した場合、ルーチンは要求されたリレーションシップ情報をバッファーに書き込み、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 で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Ntddk.h、Wdm.h、Ntddk.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |