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
は意味のあるものにする必要があります (たとえば、プロセス カウンターセットでは、任意の (シーケンス番号など) ではなく、 として Id
PID を使用する場合があります)。
[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
通知を呼び出すときにPcwCallbackEnumerateInstances
、 PcwAddInstance
と Id
のName
値をバッファーに追加します。 通知に対してPcwCallbackCollectData
呼び出されると、PcwAddInstance
および カウンター のデータ値をバッファーに追加Name
Id
します。
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 |