(a)
private LONG _Reg_EnumKeyName( in HKEY hkey
, in DWORD dwIndex
, in LPSTR lpName
, inout DWORD cchName)
in
{
assert(null !== hkey);
}
body
{
FILETIME ftLastWriteTime;
return RegEnumKeyExA(hkey, dwIndex, lpName, cchName
, RESERVED, null, null, &ftLastWriteTime);
}
(b)
class KeyNameSequence
{
public:
char[] GetKeyName(in uint index)
{
DWORD cSubKeys;
DWORD cchSubKeyMaxLen;
HKEY hkey = m_key.m_hkey;
LONG res = _Reg_GetNumSubKeys(hkey, cSubKeys, cchSubKeyMaxLen);
char[] sName = new char[1 + cchSubKeyMaxLen];
DWORD cchName;
res = _Reg_EnumKeyName(hkey, index, sName, cchName);
assert(ERROR_MORE_DATA != res);
if(ERROR_SUCCESS != res)
{
throw new RegistryException("Invalid key", res);
}
return sName[0 .. cchName];
}
...
(c)
private LONG _Reg_GetNumSubKeys( in HKEY hkey
, out DWORD cSubKeys
, out DWORD cchSubKeyMaxLen);
Example 1: (a) The definition for helper function _Reg_EnumKeyName(); (b) methods of several of the classes in the registry module; (c) determining the number of subkeys and the maximum length of the names of the subkeys.
Back to Article