基本的にその他のオブジェクトやカウンタに目を向けることはないと思われます。これまでのようにカウンタパスを静的に宣言するという方法には限界があります。場合によってはこの方法も不適切であるといえるかもしれません。ダイアログを表示するのは、次に示すPdhBrowseCountersです。);pBrowseDlgDataは、PDH_BROWSE_DLG_CONFIG構造体のアドレスです。ユーザーが選択したオブジェクトやカウンタを示すカウンタパスを受け取ります。次に、その定義を示します。*PPDH_BROWSE_DLG_CONFIG;bIncludeInstanceIndexは、カウンタパスのインスタンスにインデックスを付けるかどうかです。FALSEの場合は、#1のようなインデックスが付くことはありません。bSingleCounterPerAddは、1つのカウンタのみ選択可能にするかどうかです。後述するszReturnPathBufferが複数のカウンタパスで構成されることになります。取得できるカウンタパスは1つのみです。bSingleCounterPerDialogは、1つのオブジェクトのカウンタのみを選択可能にするかどうかです。任意のオブジェクトのカウンタを追加することができます。追加を終了する場合は、ウインドウの閉じるボタンを押します。bLocalCountersOnlyは、カウンタパスにコンピュータ名を付けるかどうかです。FALSEの場合、コンピュータ名が付くことになります。bHideDetailBoxは、カウンタの詳細レベルを決定するかどうかです。FALSEの場合、詳細レベルを選択するためのコンボボックスが表示されます。bInitializePathは、デフォルトで選択するカウンタを決定するかどうかです。オブジェクトのカウンタがデフォルトで選択されます。bDisableMachineSelectionは、モニタするコンピュータを決定するかどうかです。TRUEの場合、コンピュータ名を選択するコンボボックスが使用不可能になります。bIncludeCostlyObjectsは、よく分からないメンバです。選択できるオブジェクトが増えることになります。OKボタンで選択することができません。bShowObjectBrowserは、カウンタを選択せずオブジェクトのみを選択するかどうかです。カウンタとインスタンスの部分が*表記となります。hWndOwnerは、ダイアログの親ウインドウとするウインドウのハンドルを示します。szDataSourceは、データソースを示す文字列を指定します。szReturnPathBufferは、カウンタパスを受け取るバッファへのアドレスです。cchReturnPathLengthは、szReturnPathBufferのサイズを指定します。pCallBackは、コールバック関数のアドレスを指定します。後者の場合だと、ユーザーが選択したカウンタを追跡することができます。コールバック関数の戻り値は、基本的にERROR_SUCCESSを返すことになります。dwCallBackArgは、pCallBackに渡したい引数を指定します。少なくともここには、szReturnPathBufferが指すバッファを指定することになると思われます。CallBackStatusは、コールバック関数の処理を示す状態値が格納されます。値がERROR_SUCCESSである場合、szReturnPathBufferは有効な文字列が格納されています。dwDefaultDetailLevelは、カウンタのフィルタに利用する詳細レベルを指定します。szDialogBoxCaptionhは、ダイアログのタイトルです。今回のプログラムは、PdhBrowseCountersによってカウンタパスを取得します。一部のオブジェクトは_Totalという擬似インスタンスが選択可能となっています。合計値を取得することができるため、何らかの総数を知る際に応用が効くと思われます。現在システムでどれだけのハンドルがオープンされているかを取得できます。