次の方法で共有


PcwAddInstance 関数 (wdm.h)

関数は PcwAddInstance 、カウンターセットの指定されたインスタンスをコンシューマー バッファーに追加します。 ほとんどの開発者は、この関数を直接呼び出す代わりに 、CTRPP によって生成された AddXxx 関数を使用します。 詳細については、以下の「備考」を参照してください。

構文

NTSTATUS PcwAddInstance(
  [in] PPCW_BUFFER      Buffer,
  [in] PCUNICODE_STRING Name,
  [in] ULONG            Id,
  [in] ULONG            Count,
  [in] PPCW_DATA        Data
);

パラメーター

[in] Buffer

カウンターセットのインスタンスが追加されるシステムマネージド バッファーへのハンドル。 バッファーが通知から PcwCallbackEnumerateInstances 送信されると、 PcwAddInstance インスタンスの名前と ID のみが記録されます。 バッファーが通知から PcwCallbackCollectData 送信されると、 PcwAddInstance インスタンスの名前、ID、およびデータ (カウンター値) が記録されます。

[in] Name

カウンターセット インスタンスの名前を含む Unicode 文字列へのポインター。 NULL にすることはできません。

インスタンス Name の値は、時間の経過と同時に安定している必要があります (同じ論理インスタンスがコールバックのすべての呼び出しに同じ Name 値を使用する必要があります)。また、一意である必要があります。 カウンターセットが単一インスタンスとして登録されている場合、インスタンス Name は空白 (0 長) である必要があります。 カウンターセットがマルチインスタンスとして登録されている場合は、インスタンス Name を空白にしないでください。 インスタンス名の一致では大文字と小文字が区別されないため Name 、値は大文字と小文字のみで異なるべきではありません。

[in] Id

カウンターセット インスタンスに関連付けられている (識別子) を Id 指定する数値。

インスタンス Id の値は、時間の経過と同時に安定している必要があります (同じインスタンスはコールバックのすべての呼び出しに同じ Id 値を使用する必要があります)。一意である必要があります (たとえば、すべてのインスタンスに 0 を使用しないでください)。また、0xFFFFFFFE未満にする必要があります (どのインスタンスにも使用 PCW_ANY_INSTANCE_ID しないでください)。 可能であれば、インスタンス Id は意味のあるものにする必要があります (たとえば、プロセス カウンターセットでは、任意の (シーケンス番号など) ではなく、 として IdPID を使用する場合があります)。

[in] Count

パラメーターに指定された記述子の Data 数。

[in] Data

このインスタンスのカウンター値を含むプロバイダー データ ブロックの記述子の配列。

戻り値

PcwAddInstance は、次のいずれかの値を返します。

リターン コード 説明
STATUS_SUCCESS インスタンスがバッファーに正常に追加されました。
STATUS_INVALID_BUFFER_SIZE プロバイダー データ ブロックの 1 つが小さすぎます。 たとえば、 PcwRegister の呼び出し中に、プロバイダーは、サイズ 4 バイトの最初のデータ ブロックのオフセット 100 にあるカウンター X を指定するとします。 の PcwAddInstance 呼び出しで、最初のデータ ブロックが 50 バイトであることを指定した場合、このエラー状態が返されます。

注釈

通知のPcwAddInstance種類が または PcwCallbackCollectDataの場合は、プロバイダー定義PCW_CALLBACK ルーチンによって関数をPcwCallbackEnumerateInstances呼び出す必要があります。 使用する はBuffer、ルーチンの Info パラメーター PCW_CALLBACK (例: または Info->CollectData.Buffer) から取得されます。 Info->EnumerateInstances.Buffer

通知を呼び出すときにPcwCallbackEnumerateInstancesPcwAddInstanceIdName値をバッファーに追加します。 通知に対してPcwCallbackCollectData呼び出されると、PcwAddInstanceおよび カウンター のデータ値をバッファーに追加NameIdします。

CTRPP によって生成された Add*** 関数

ほとんどの開発者は、 を直接呼び出す PcwAddInstance 必要はありません。 代わりに、CTRPP ツールを使用してマニフェストをコンパイルし、CTRPP によって生成されたヘッダーから Add*** 関数を使用します。 生成された関数は次のようになります。

EXTERN_C __inline NTSTATUS
AddMyCounterset(
    __in PPCW_BUFFER Buffer,
    __in PCUNICODE_STRING Name,
    __in ULONG Id,
    __in_opt const MY_COUNTER_DATA *MyCounterData
    )
{
    PCW_DATA Data[1];

    PAGED_CODE();

    Data[0].Data = MyCounterData;
    Data[0].Size = sizeof(MY_COUNTER_DATA);

    return PcwAddInstance(Buffer,
                          Name,
                          Id,
                          1,
                          Data);
}

CTRPP によって生成された Add 関数には、 PrefixAdd Counterset という名前が付けられますプレフィックス は通常空白ですが、パラメーターが CTRPP コマンド ラインで使用された場合 -prefix は存在する可能性があります。 Counterset は、マニフェストで指定されているカウンターセットの名前です。 関数には、マニフェストで定義されている構造に基づく Data パラメーターがあります。 関数は、ユーザー指定のデータ ブロックを構造体の PCW_DATA 配列にラップし、 を呼び出します PcwAddInstance

要件

要件
サポートされている最小のクライアント Windows 7 以降のバージョンの Windows で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

こちらもご覧ください

コールバック関数PCW_CALLBACK