You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
252 lines
5.5 KiB
252 lines
5.5 KiB
/*++
|
|
|
|
Copyright (c) Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
regenumkeys.cpp
|
|
|
|
Abstract:
|
|
ported from vsee\lib\reg\cenumvalues.cpp
|
|
|
|
Author:
|
|
|
|
Jay Krell (JayKrell) August 2001
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#include "stdinc.h"
|
|
#include "fusionregenumvalues.h"
|
|
#include "fusionregkey2.h"
|
|
#include "vseeport.h"
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
Name: CRegEnumValues::CRegEnumValues
|
|
|
|
@mfunc
|
|
|
|
@owner
|
|
-----------------------------------------------------------------------------*/
|
|
F::CRegEnumValues::CRegEnumValues
|
|
(
|
|
HKEY hKey
|
|
) throw(CErr)
|
|
:
|
|
m_hKey(hKey),
|
|
m_dwIndex(0),
|
|
m_cValues(0),
|
|
m_cchMaxValueNameLength(0),
|
|
m_cbMaxValueDataLength(0),
|
|
m_cbCurrentValueDataLength(0),
|
|
m_dwType(0)
|
|
{
|
|
VSEE_ASSERT_CAN_THROW();
|
|
F::CRegKey2::ThrQueryValuesInfo(hKey, &m_cValues, &m_cchMaxValueNameLength, &m_cbMaxValueDataLength);
|
|
|
|
// we keep this the max size the whole time
|
|
if (!m_rgbValueData.Win32SetSize(m_cbMaxValueDataLength + 2*sizeof(WCHAR)))
|
|
CErr::ThrowWin32(F::GetLastWin32Error());
|
|
|
|
if (*this)
|
|
{
|
|
ThrGet();
|
|
}
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
Name: CRegEnumValues::operator bool
|
|
|
|
@mfunc
|
|
are we done yet?
|
|
|
|
@owner
|
|
-----------------------------------------------------------------------------*/
|
|
F::CRegEnumValues::operator bool
|
|
(
|
|
) const /*throw()*/
|
|
{
|
|
return (m_dwIndex < m_cValues);
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
Name: CRegEnumValues::ThrGet
|
|
|
|
@mfunc
|
|
get the current value name and data, called by operator++ and constructor
|
|
|
|
@owner
|
|
-----------------------------------------------------------------------------*/
|
|
VOID
|
|
F::CRegEnumValues::ThrGet
|
|
(
|
|
) throw(CErr)
|
|
{
|
|
VSEE_ASSERT_CAN_THROW();
|
|
|
|
DWORD cchValueNameLength = m_cchMaxValueNameLength;
|
|
|
|
cchValueNameLength += 1; // count room for terminal nul
|
|
|
|
CStringW_CFixedSizeBuffer nameBuffer(&m_strValueName, cchValueNameLength);
|
|
|
|
m_cbCurrentValueDataLength = static_cast<DWORD>(m_rgbValueData.GetSize());
|
|
|
|
// CONSIDER
|
|
// Other places we have an "actual buffer size" and a smaller size we claim to the Reg API.
|
|
// Here the actual and claimed are the same.
|
|
F::CRegKey2::ThrEnumValue
|
|
(
|
|
m_hKey,
|
|
m_dwIndex,
|
|
nameBuffer,
|
|
&cchValueNameLength,
|
|
&m_dwType,
|
|
m_rgbValueData.GetArrayPtr(),
|
|
&m_cbCurrentValueDataLength
|
|
);
|
|
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
Name: CRegEnumValues::ThrNext
|
|
|
|
@mfunc
|
|
move to the next value
|
|
|
|
@owner
|
|
-----------------------------------------------------------------------------*/
|
|
VOID
|
|
F::CRegEnumValues::ThrNext
|
|
(
|
|
) throw(CErr)
|
|
{
|
|
VSEE_ASSERT_CAN_THROW();
|
|
++m_dwIndex;
|
|
if (*this)
|
|
{
|
|
ThrGet();
|
|
}
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
Name: CRegEnumValues::operator++
|
|
|
|
@mfunc
|
|
move to the next value
|
|
|
|
@owner
|
|
-----------------------------------------------------------------------------*/
|
|
VOID
|
|
F::CRegEnumValues::operator++
|
|
(
|
|
) throw(CErr)
|
|
{
|
|
VSEE_ASSERT_CAN_THROW();
|
|
ThrNext();
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
Name: CRegEnumValues::operator++
|
|
|
|
@mfunc
|
|
move to the next value
|
|
|
|
@owner
|
|
-----------------------------------------------------------------------------*/
|
|
VOID
|
|
F::CRegEnumValues::operator++
|
|
(
|
|
int
|
|
) throw(CErr)
|
|
{
|
|
VSEE_ASSERT_CAN_THROW();
|
|
ThrNext();
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
Name: CRegEnumValues::GetType
|
|
|
|
@mfunc
|
|
get the type of the current value
|
|
|
|
@owner
|
|
-----------------------------------------------------------------------------*/
|
|
DWORD
|
|
F::CRegEnumValues::GetType
|
|
(
|
|
) const /*throw()*/
|
|
{
|
|
VSEE_NO_THROW();
|
|
return m_dwType;
|
|
}
|
|
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
Name: CRegEnumValues::GetValuesCount
|
|
|
|
@mfunc
|
|
Returns the number of values under this key
|
|
|
|
@owner AlinC
|
|
-----------------------------------------------------------------------------*/
|
|
DWORD
|
|
F::CRegEnumValues::GetValuesCount
|
|
(
|
|
) const /*throw()*/
|
|
{
|
|
VSEE_NO_THROW();
|
|
return m_cValues;
|
|
}
|
|
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
Name: CRegEnumValues::GetValueName
|
|
|
|
@mfunc
|
|
get the name of the current value
|
|
|
|
@owner
|
|
-----------------------------------------------------------------------------*/
|
|
const F::CBaseStringBuffer&
|
|
F::CRegEnumValues::GetValueName
|
|
(
|
|
) const /*throw()*/
|
|
{
|
|
VSEE_NO_THROW();
|
|
return m_strValueName;
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
Name: CRegEnumValues::GetValueData
|
|
|
|
@mfunc
|
|
get the current value data
|
|
|
|
@owner
|
|
-----------------------------------------------------------------------------*/
|
|
const BYTE*
|
|
F::CRegEnumValues::GetValueData
|
|
(
|
|
) const /*throw()*/
|
|
{
|
|
VSEE_NO_THROW();
|
|
return m_rgbValueData.GetArrayPtr();
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
Name: CRegEnumValues::GetValueDataSize
|
|
|
|
@mfunc
|
|
get the number of bytes in the current value data
|
|
|
|
@owner
|
|
-----------------------------------------------------------------------------*/
|
|
DWORD
|
|
F::CRegEnumValues::GetValueDataSize
|
|
(
|
|
) const /*throw()*/
|
|
{
|
|
VSEE_NO_THROW();
|
|
return m_cbCurrentValueDataLength;
|
|
}
|