レジストリキーの列挙
そろそろASIOの初期化を修正しようと思います。
CLSIDを直指定だと、いつまでたってもテストコードをパッケージに追加できないのです。
ASIOのドライバを検索するためには、レジストリのHKEY_LOCAL_MACHINE\SOFTWARE\ASIO配下のキーを列挙する必要があります。
列挙といえば反復子です。registry_key_iteratorを考えてみます。
レジストリキーを列挙する関数はこれです。
LONG RegEnumKeyEx( HKEY hKey, // 列挙するべきキーのハンドル DWORD dwIndex, // サブキーのインデックス番号 LPTSTR lpName, // サブキー名が格納されるバッファ LPDWORD lpcName, // サブキー名バッファのサイズ LPDWORD lpReserved, // 予約済み LPTSTR lpClass, // クラス名が格納されるバッファ LPDWORD lpcClass, // クラス文字列バッファのサイズ PFILETIME lpftLastWriteTime // 最終書き込み時刻 );
幸い、コールバック関数方式ではないので、スレッドを使う必要はありません。
この関数ではdwIndexを0から1ずつ増やしながら呼び出します。
ERROR_NO_MORE_ITEMSが返されたら列挙終了です。
インデックスでアクセスできるため、RandomAccess Iteratorにしたいところですが、id:y-hamigaki:20060517 と同じ問題から、Input Iteratorにします。
MSDNをざっと読む限り、列挙の順序は規定していないようなので、逆順で列挙する必要も、ランダムアクセスする必要もないと思います。
ただ、MSDNに逆順列挙の方法が載っているのが気になります、、、。