814 lines
14 KiB
C++
814 lines
14 KiB
C++
/*++
|
||
|
||
© 1998 Seagate Software, Inc. All rights reserved.
|
||
|
||
Module Name:
|
||
|
||
Wsbdbkey.cpp
|
||
|
||
Abstract:
|
||
|
||
The CWsbDbKey class.
|
||
|
||
Author:
|
||
|
||
Ron White [ronw] 1-Jul-1997
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
#include "stdafx.h"
|
||
|
||
#include "wsbdbkey.h"
|
||
|
||
// Local stuff
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::AppendBool(
|
||
BOOL value
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::AppendBool
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
ULONG size;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::AppendBool"), OLESTR("value = <%ls>"), WsbBoolAsString(value));
|
||
|
||
try {
|
||
WsbAssert(make_key(m_size + WsbByteSize(value)), WSB_E_RESOURCE_UNAVAILABLE);
|
||
WsbAffirmHr(WsbConvertToBytes(&m_value[m_size], value, &size));
|
||
m_size += size;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::AppendBool"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::AppendBytes(
|
||
UCHAR* value,
|
||
ULONG size
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::AppendBytes
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::AppendBytes"), OLESTR("size = <%ld>"), size);
|
||
|
||
try {
|
||
WsbAssert(size > 0, E_UNEXPECTED);
|
||
WsbAssert(make_key(size + m_size), WSB_E_RESOURCE_UNAVAILABLE);
|
||
memcpy(&m_value[m_size], value, size);
|
||
m_size += size;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::AppendBytes"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::AppendFiletime(
|
||
FILETIME value
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::AppendFiletime
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
ULONG size;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::AppendFiletime"), OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(make_key(m_size + WsbByteSize(value)), WSB_E_RESOURCE_UNAVAILABLE);
|
||
WsbAffirmHr(WsbConvertToBytes(&m_value[m_size], value, &size));
|
||
m_size += size;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::AppendFiletime"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::AppendGuid(
|
||
GUID value
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::AppendGuid
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
ULONG size;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::AppendGuid"), OLESTR("value = <%ls>"), WsbGuidAsString(value));
|
||
|
||
try {
|
||
WsbAssert(make_key(m_size + WsbByteSize(value)), WSB_E_RESOURCE_UNAVAILABLE);
|
||
WsbAffirmHr(WsbConvertToBytes(&m_value[m_size], value, &size));
|
||
m_size += size;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::AppendGuid"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::AppendLonglong(
|
||
LONGLONG value
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::AppendLonglong
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
ULONG size;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::AppendLonglong"), OLESTR("value = <%ls>"),
|
||
WsbLonglongAsString(value));
|
||
|
||
try {
|
||
WsbAssert(make_key(m_size + WsbByteSize(value)), WSB_E_RESOURCE_UNAVAILABLE);
|
||
WsbAffirmHr(WsbConvertToBytes(&m_value[m_size], value, &size));
|
||
m_size += size;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::AppendLonglong"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::AppendString(
|
||
OLECHAR* value
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::AppendString
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::AppendString"), OLESTR(""));
|
||
|
||
try {
|
||
ULONG size;
|
||
|
||
size = wcslen(value) * sizeof(OLECHAR);
|
||
WsbAffirmHr(AppendBytes((UCHAR *)value, size));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::AppendString"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::CompareTo(
|
||
IN IUnknown* pCollectable,
|
||
OUT SHORT* pResult
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbCollectable::CompareTo
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_FALSE;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::CompareTo"), OLESTR(""));
|
||
|
||
try {
|
||
UCHAR* bytes2;
|
||
CComPtr<IWsbDbKey> pKey2;
|
||
CComPtr<IWsbDbKeyPriv> pKeyPriv2;
|
||
SHORT result;
|
||
ULONG size2;
|
||
|
||
// Did they give us a valid item to compare to?
|
||
WsbAssert(0 != pCollectable, E_POINTER);
|
||
|
||
// We need the IWsbDbKey interface to get the value.
|
||
WsbAffirmHr(pCollectable->QueryInterface(IID_IWsbDbKey, (void**) &pKey2));
|
||
WsbAffirmHr(pKey2->QueryInterface(IID_IWsbDbKeyPriv,
|
||
(void**)&pKeyPriv2));
|
||
|
||
// Get the other key's bytes
|
||
bytes2 = NULL;
|
||
WsbAffirmHr(pKeyPriv2->GetBytes(&bytes2, &size2));
|
||
|
||
// Do compare
|
||
if (size2 == 0 && m_size == 0) {
|
||
result = 0;
|
||
} else if (size2 == 0) {
|
||
result = 1;
|
||
} else if (m_size == 0) {
|
||
result = -1;
|
||
} else {
|
||
result = WsbSign( memcmp(m_value, bytes2, min(m_size, size2)) );
|
||
if (result == 0 && m_size != size2) {
|
||
result = (m_size > size2) ? (SHORT)1 : (SHORT)-1;
|
||
}
|
||
}
|
||
WsbFree(bytes2);
|
||
|
||
// If the aren't equal, then return false.
|
||
if (result != 0) {
|
||
hr = S_FALSE;
|
||
}
|
||
else {
|
||
hr = S_OK;
|
||
}
|
||
*pResult = result;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::CompareTo"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::GetBytes(
|
||
OUT UCHAR** ppBytes,
|
||
OUT ULONG* pSize
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::GetBytes
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::GetBytes"), OLESTR(""));
|
||
|
||
try {
|
||
if (ppBytes && m_size) {
|
||
if (*ppBytes == NULL) {
|
||
*ppBytes = (UCHAR *)WsbAlloc(m_size);
|
||
}
|
||
if (*ppBytes) {
|
||
memcpy(*ppBytes, m_value, m_size);
|
||
} else {
|
||
WsbThrow(E_OUTOFMEMORY);
|
||
}
|
||
}
|
||
if (pSize) {
|
||
*pSize = m_size;
|
||
}
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::GetBytes"), OLESTR("hr = <%ls>"),
|
||
WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::GetType(
|
||
OUT ULONG* pType
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::GetType
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::GetType"), OLESTR(""));
|
||
|
||
try {
|
||
WsbAffirm(pType != NULL, E_POINTER);
|
||
*pType = m_type;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::GetType"), OLESTR("hr = <%ls>, value = <%ls>"), WsbHrAsString(hr), m_value);
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::SetToBool(
|
||
BOOL value
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::SetToBool
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::SetToBool"), OLESTR("value = <%ls>"),
|
||
WsbBoolAsString(value));
|
||
|
||
try {
|
||
WsbAssert(make_key(WsbByteSize(value)), WSB_E_RESOURCE_UNAVAILABLE);
|
||
WsbAffirmHr(WsbConvertToBytes(m_value, value, &m_size));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::SetToBool"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::SetToBytes(
|
||
UCHAR* value,
|
||
ULONG size
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::SetToBytes
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::SetToBytes"), OLESTR("size = <%ld>"), size);
|
||
|
||
try {
|
||
WsbAssert(size > 0, E_UNEXPECTED);
|
||
WsbAssert(make_key(size), WSB_E_RESOURCE_UNAVAILABLE);
|
||
memcpy(m_value, value, size);
|
||
m_size = size;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::SetToBytes"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::SetToFiletime(
|
||
FILETIME value
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::SetToFiletime
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::SetToFiletime"), OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(make_key(WsbByteSize(value)), WSB_E_RESOURCE_UNAVAILABLE);
|
||
WsbAffirmHr(WsbConvertToBytes(m_value, value, &m_size));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::SetToFiletime"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::SetToGuid(
|
||
GUID value
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::SetToGuid
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::SetToGuid"), OLESTR("value = <%ls>"),
|
||
WsbGuidAsString(value));
|
||
|
||
try {
|
||
WsbAssert(make_key(WsbByteSize(value)), WSB_E_RESOURCE_UNAVAILABLE);
|
||
WsbAffirmHr(WsbConvertToBytes(m_value, value, &m_size));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::SetToGuid"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::SetToLonglong(
|
||
LONGLONG value
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::SetToLonglong
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::SetToLonglong"), OLESTR("value = <%ls>"),
|
||
WsbLonglongAsString(value));
|
||
|
||
try {
|
||
WsbAssert(make_key(WsbByteSize(value)), WSB_E_RESOURCE_UNAVAILABLE);
|
||
WsbAffirmHr(WsbConvertToBytes(m_value, value, &m_size));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::SetToLonglong"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::SetToUlong(
|
||
ULONG value
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::SetToUlong
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::SetToUlong"), OLESTR("value = <%ld>"), value);
|
||
|
||
try {
|
||
WsbAssert(make_key(WsbByteSize(value)), WSB_E_RESOURCE_UNAVAILABLE);
|
||
WsbAffirmHr(WsbConvertToBytes(m_value, value, &m_size));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::SetToUlong"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::SetToString(
|
||
OLECHAR* value
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbKey::SetToString
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::SetToString"), OLESTR(""));
|
||
|
||
try {
|
||
ULONG size;
|
||
|
||
size = wcslen(value) * sizeof(OLECHAR);
|
||
WsbAffirmHr(SetToBytes((UCHAR *)value, size));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::SetToString"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::FinalConstruct(
|
||
void
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
CComObjectRoot::FinalConstruct
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::FinalConstruct"), OLESTR("") );
|
||
|
||
try {
|
||
WsbAffirmHr(CWsbObject::FinalConstruct());
|
||
m_value = NULL;
|
||
m_size = 0;
|
||
m_max = 0;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::FinalConstruct"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
void
|
||
CWsbDbKey::FinalRelease(
|
||
void
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This method does some cleanup of the object that is necessary
|
||
during destruction.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::FinalRelease"), OLESTR(""));
|
||
|
||
try {
|
||
if (m_value) {
|
||
WsbFree(m_value);
|
||
m_value = NULL;
|
||
}
|
||
CWsbObject::FinalRelease();
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::FinalRelease"), OLESTR("hr =<%ls>"), WsbHrAsString(hr));
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::GetClassID(
|
||
OUT CLSID* pClsid
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPersist::GetClassID().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::GetClassID"), OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pClsid, E_POINTER);
|
||
*pClsid = CLSID_CWsbDbKey;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::GetSizeMax(
|
||
OUT ULARGE_INTEGER* /*pSize*/
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPersistStream::GetSizeMax().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = E_NOTIMPL;
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::Load(
|
||
IN IStream* /*pStream*/
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPersistStream::Load().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = E_NOTIMPL;
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::Save(
|
||
IN IStream* /*pStream*/,
|
||
IN BOOL /*clearDirty*/
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPersistStream::Save().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = E_NOTIMPL;
|
||
return(hr);
|
||
}
|
||
|
||
|
||
// CWsbDbKey internal helper functions
|
||
|
||
// make_key - create a key of the specified size
|
||
BOOL
|
||
CWsbDbKey::make_key(
|
||
ULONG size
|
||
)
|
||
{
|
||
BOOL status = FALSE;
|
||
LPVOID pTemp;
|
||
|
||
if ( (size > IDB_MAX_KEY_SIZE) || (size == 0) ) {
|
||
status = FALSE;
|
||
} else if (m_value && m_max >= size) {
|
||
status = TRUE;
|
||
} else {
|
||
pTemp = WsbRealloc(m_value, size);
|
||
if ( pTemp ) {
|
||
m_value = (PUCHAR) pTemp;
|
||
status = TRUE;
|
||
m_max = size;
|
||
}
|
||
}
|
||
return(status);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CWsbDbKey::Test(
|
||
OUT USHORT* passed,
|
||
OUT USHORT* failed
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbTestable::Test().
|
||
|
||
--*/
|
||
{
|
||
*passed = 0;
|
||
*failed = 0;
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
#if !defined(WSB_NO_TEST)
|
||
CComPtr<IWsbDbKey> pDbKey1;
|
||
|
||
WsbTraceIn(OLESTR("CWsbDbKey::Test"), OLESTR(""));
|
||
|
||
try {
|
||
|
||
try {
|
||
WsbAssertHr(((IUnknown*) (IWsbDbKey*) this)->QueryInterface(IID_IWsbDbKey, (void**) &pDbKey1));
|
||
|
||
// Set o a ULONG value, and see if it is returned.
|
||
hr = S_OK;
|
||
try {
|
||
WsbAssertHr(pDbKey1->SetToUlong(0xffffffff));
|
||
// ULONG value;
|
||
// WsbAssertHr(pDbKey1->GetUlong(&value));
|
||
// WsbAssert(value == 0xffffffff, E_FAIL);
|
||
} WsbCatch(hr);
|
||
|
||
if (hr == S_OK) {
|
||
(*passed)++;
|
||
} else {
|
||
(*failed)++;
|
||
}
|
||
|
||
} WsbCatch(hr);
|
||
|
||
if (hr == S_OK) {
|
||
(*passed)++;
|
||
} else {
|
||
(*failed)++;
|
||
}
|
||
|
||
} WsbCatch(hr);
|
||
|
||
|
||
// Tally up the results
|
||
if (*failed) {
|
||
hr = S_FALSE;
|
||
} else {
|
||
hr = S_OK;
|
||
}
|
||
|
||
WsbTraceOut(OLESTR("CWsbDbKey::Test"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
#endif // WSB_NO_TEST
|
||
|
||
return(hr);
|
||
}
|