次の方法で共有


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、構造体のサイズは変更されません)。 詳細については、「 KeQueryNodeActiveAffinityNUMA のサポート」を参照してください。

  • 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

こちらもご覧ください

LOGICAL_PROCESSOR_RELATIONSHIP

PROCESSOR_NUMBER

SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX