共用方式為


PCW_REGISTRATION_INFORMATION結構 (wdm.h)

PCW_REGISTRATION_INFORMATION 結構提供提供者和計數器集的詳細數據。 大部分的開發人員都會使用 CTRPP-generated RegisterXxx 或 InitRegistrationInformationXxx 函式,而不是直接使用此結構。

語法

typedef struct _PCW_REGISTRATION_INFORMATION {
  ULONG                   Version;
  PCUNICODE_STRING        Name;
  ULONG                   CounterCount;
  PPCW_COUNTER_DESCRIPTOR Counters;
  PPCW_CALLBACK           Callback;
  PVOID                   CallbackContext;
  PCW_REGISTRATION_FLAGS  Flags;
} PCW_REGISTRATION_INFORMATION, *PPCW_REGISTRATION_INFORMATION;

成員

Version

數值,指定提供者所需的 Windows 性能計數器版本(PCW)。

在 10.0.19645 之前的 Windows 上執行時(NTDDI_VERSION < NTDDI_VERSION_MN),Version 字段必須設定為 PCW_VERSION_1 (0x100)。 在 Windows 10.0.19645 和更新版本上執行時(NTDDI_VERSION >= NTDDI_VERSION_MN),這可能設定為 PCW_VERSION_1 (0x100) 或 PCW_VERSION_2 (0x200)。 如果 [Version] 字段設定為無法辨識的值,PcwRegister 會傳回STATUS_INVALID_PARAMETER_2。

使用 CTRPP 產生的 RegisterXxx 或 InitRegistrationInformationXxx 函式時,Version 字段會設定為 PCW_CURRENT_VERSION,這相當於下列其中一個值,視編譯時間值 NTDDI_VERSION而定:

條件 PCW_CURRENT_VERSION值
NTDDI_VERSION < NTDDI_WIN10_FE PCW_VERSION_1 (0x0100)
NTDDI_VERSION >= NTDDI_WIN10_FE PCW_VERSION_2 (0x0200)

如果您的程式代碼是以 NTDDI_VERSION >= NTDDI_WIN10_FE 建置,但需要在舊版 Windows 上執行,您必須如 PcwRegister檔中所述設定 Version = PCW_VERSION_1

Name

字串的指標,其中包含要註冊之計數器集的名稱。 此字串不得為NULL或空白。

請注意,計數器集名稱比較不區分大小寫。 如果在兩個計數器集註冊中使用相同的計數器集名稱,取用者會從這兩個註冊收集數據。

CounterCount

Counters 參數中提供的描述項數目。

Counters

這個計數器集計數器的描述元陣列。 從呼叫 PcwCreateInstancePcwAddInstance所提供的數據區塊擷取計數器值時,將會使用描述項的資訊。

Callback

選擇性 PCW_CALLBACK 回呼函式的指標,會通知提供者與此計數器集相關的事件。 如果不需要回呼,此欄位可能是 NULL(也就是如果計數器集實例會透過 PcwCreateInstancePcwCloseInstance管理)。

CallbackContext

每次叫用回呼函式時,將會傳遞至提供者定義的 PCW_CALLBACK 回呼函式的指標值。

Flags

只有在 NTDDI_VERSION >= NTDDI_WIN10_MN時,才能使用 [Flags] 欄位。

如果 [Version] 字段小於 PCW_VERSION_2,則會忽略 Flags 字段。

[Flags] 欄位會啟用 PcwRegister的特殊行為。 設定為一或多個 PCW_REGISTRATION_FLAGS 值的組合:

PCW_REGISTRATION_FLAGS 意義
PcwRegistrationNone (0x0) 預設值(不需要特殊行為)。
PcwRegistrationSiloNeutral (0x1) 表示所有伺服器尋址接收器的取用者都應該看到此註冊。 根據預設,註冊只會對建立註冊時處於作用中的伺服器接收器中的取用者顯示(也就是呼叫 PcwRegister 時附加至線程的註冊)。

言論

PcwRegister 函式會採用 Info 參數,該參數是這個結構的指標。

CTRPP 產生的 InitRegistrationInformationXxx 函式

大多數開發人員不需要直接使用 PCW_REGISTRATION_INFORMATION。 相反地,他們會使用 CTRPP 工具編譯指令清單,並使用來自 CTRPP 產生的標頭的 RegisterXxx 或 InitRegistrationInformationXxx 函式。 產生的 Register 函式會呼叫 InitRegistrationInformation,然後呼叫 PcwRegister (如需詳細資訊,請參閱 PcwRegister)。 產生的 InitRegistrationInformation 函式看起來會像這樣:

EXTERN_C FORCEINLINE VOID
InitRegistrationInformationMyCounterset(
    __in_opt PPCW_CALLBACK Callback,
    __in_opt PVOID CallbackContext,
    __out PCW_REGISTRATION_INFORMATION* RegInfo
    )
{
    static const UNICODE_STRING Name = RTL_CONSTANT_STRING(L"My Counterset Name");
    static const PCW_COUNTER_DESCRIPTOR Descriptors[] = {
        { 0, 0, FIELD_OFFSET(MY_COUNTER_DATA, MyData1), RTL_FIELD_SIZE(MY_COUNTER_DATA, MyData1)},
        { 1, 0, FIELD_OFFSET(MY_COUNTER_DATA, MyData2), RTL_FIELD_SIZE(MY_COUNTER_DATA, MyData2)},
    };

#if CTRPP_VERIFY_COUNTER_SIZES

    //
    // Verify that structure member size matches manifest counter size.
    //

    C_ASSERT(RTL_FIELD_SIZE(MY_COUNTER_DATA, MyData1) == sizeof(ULONGLONG));
    C_ASSERT(RTL_FIELD_SIZE(MY_COUNTER_DATA, MyData2) == sizeof(ULONG));

#endif // CTRPP_VERIFY_COUNTER_SIZES

    PAGED_CODE();

    RtlZeroMemory(RegInfo, sizeof(*RegInfo));
    RegInfo->Version = PCW_CURRENT_VERSION;
    RegInfo->Name = &Name;
    RegInfo->CounterCount = RTL_NUMBER_OF(Descriptors);
    RegInfo->Counters = (PCW_COUNTER_DESCRIPTOR*)Descriptors;
    RegInfo->Callback = Callback;
    RegInfo->CallbackContext = CallbackContext;
}

由 CTRPP 產生的 InitRegistrationInformation 函式會命名為 前置詞InitRegistrationInformationCounterset前置詞 通常是空白的,但如果 CTRPP 命令行上使用 -prefix 參數,則可能存在。 Counterset 是計數器集的名稱,如指令清單中所指定。 產生的 InitRegistrationInformation 函式將會使用來自函式參數和指令清單的值,初始化提供的 PCW_REGISTRATION_INFORMATION 結構。

CTRPP 產生的 InitRegistrationInformation 函式可以選擇性地確認結構成員的大小符合指令清單中所宣告的大小。 根據預設,CTRPP_VERIFY_COUNTER_SIZES 設為0,停用此檢查。 若要啟用這項檢查,請先 #define CTRPP_VERIFY_COUNTER_SIZES 1,再包含 CTRPP 產生的標頭。 如果啟用檢查,大小不相符將會觸發編譯錯誤,因為C_ASSERT狀況失敗。

要求

要求 價值
標頭 wdm.h (包括 Wdm.h、 Ntddk.h)

另請參閱

PCW_COUNTER_DESCRIPTOR 結構

PCW_CALLBACK 回呼函式

PcwRegister 函式

CTRPP