|
// *********************************************************
// リストボックスにレジストリのエントリとデータの一覧を追加
// 戻り値 : 無し
// *********************************************************
void LboxEnumReg( HWND hList, int nIndex, HKEY hKey )
{
//LONG RegEnumValue(
//HKEY hKey,// キーのハンドル
//DWORD dwIndex,// 値のインデックス
//LPTSTR lpValueName,// 「値の名前」を格納するバッファへのポインタ
//LPDWORD lpcbValueName,// バッファのサイズを入れた変数へのポインタ
//LPDWORD lpReserved,// 0
//LPDWORD lpType,// 値エントリの種類を格納する変数へのポインタ
//LPBYTE lpData,// 「値のデータ」を格納するバッファへのポインタ
//LPDWORD lpcbData// バッファのサイズを入れた変数へのポインタ
//);
LONG nRet;
char *szEntry;
char *szValue;
char *szBuffer;
DWORD i,j;
DWORD nSize1,nSize2;
DWORD nSizeEntry;
DWORD nSizeValue;
DWORD nType;
int nInsert;
nRet = RegQueryInfoKey(
hKey,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
&i,
&nSizeEntry,
&nSizeValue,
NULL,
NULL
);
nSizeEntry += 12;
nSizeValue += 12;
szEntry = new char[nSizeEntry];
szValue = new char[nSizeValue];
szBuffer = new char[nSizeEntry+nSizeValue*3];
i = 0;
nInsert = nIndex;
while( 1 ) {
nSize1 = nSizeEntry;
nSize2 = nSizeValue;
nRet = RegEnumValue(
hKey,
i,
szEntry,
&nSize1,
0,
&nType,
(LPBYTE)szValue,
&nSize2
);
if ( nRet != ERROR_SUCCESS ) {
break;
}
switch( nType ) {
case REG_SZ:
lstrcpy( szBuffer, szEntry );
lstrcat( szBuffer, "\tREG_SZ\t" );
lstrcat( szBuffer, szValue );
break;
case REG_EXPAND_SZ:
lstrcpy( szBuffer, szEntry );
lstrcat( szBuffer, "\tREG_EXPAND_SZ\t" );
lstrcat( szBuffer, szValue );
break;
case REG_DWORD:
lstrcpy( szBuffer, szEntry );
lstrcat( szBuffer, "\tREG_DWORD\t" );
wsprintf(
szBuffer+lstrlen(szBuffer),
"0x%08lX",
*((DWORD *)szValue)
);
break;
case REG_BINARY:
lstrcpy( szBuffer, szEntry );
lstrcat( szBuffer, "\tREG_BINARY\t" );
for( j = 0; j < nSize2; j++ ) {
wsprintf(
szBuffer+lstrlen(szBuffer),
"%02lx ",
*(szValue+j) & 0x000000ff
);
}
break;
default:
lstrcpy( szBuffer, szEntry );
lstrcat( szBuffer, "\tREG_?\t" );
lstrcat( szBuffer, "未実装" );
}
LboxListInsert( hList, nInsert, szBuffer );
nInsert++;
i++;
}
delete [] szValue;
delete [] szEntry;
}
| |