windows-nt/Source/XPSP1/NT/base/fs/hsm/rms/server/rmsclien.cpp
2020-09-26 16:20:57 +08:00

688 lines
12 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
© 1998 Seagate Software, Inc. All rights reserved
Module Name:
RmsClien.cpp
Abstract:
Implementation of CRmsClient
Author:
Brian Dodd [brian] 15-Nov-1996
Revision History:
--*/
#include "stdafx.h"
#include "RmsClien.h"
/////////////////////////////////////////////////////////////////////////////
//
STDMETHODIMP
CRmsClient::CompareTo(
IN IUnknown *pCollectable,
OUT SHORT *pResult
)
/*++
Implements:
IWsbCollectable::CompareTo
--*/
{
HRESULT hr = E_FAIL;
SHORT result = 1;
WsbTraceIn( OLESTR("CRmsClient::CompareTo"), OLESTR("") );
try {
// Validate arguments - Okay if pResult is NULL
WsbAssertPointer( pCollectable );
CComQIPtr<IRmsClient, &IID_IRmsClient> pClient = pCollectable;
WsbAssertPointer( pClient );
CComQIPtr<IRmsComObject, &IID_IRmsComObject> pObject = pCollectable;
WsbAssertPointer( pObject );
switch ( m_findBy ) {
case RmsFindByClassId:
{
CLSID ownerClassId;
// Get owner class Id
WsbAffirmHr(pClient->GetOwnerClassId( &ownerClassId ) );
if ( m_ownerClassId == ownerClassId ) {
// Owner ClassId matches
hr = S_OK;
result = 0;
}
else {
hr = S_FALSE;
result = 1;
}
}
break;
case RmsFindByName:
{
CWsbBstrPtr name;
CWsbBstrPtr password;
// Get name
WsbAffirmHr(pClient->GetName( &name ) );
if ( m_Name == name ) {
// Names match, now try password
// Get password
WsbAffirmHr(pClient->GetPassword( &password ) );
if ( m_password == password ) {
// Passwords match
hr = S_OK;
result = 0;
}
else {
hr = S_FALSE;
result = 1;
}
}
else {
hr = S_FALSE;
result = 1;
}
}
break;
case RmsFindByObjectId:
default:
// Do CompareTo for object
hr = CRmsComObject::CompareTo( pCollectable, &result );
break;
}
}
WsbCatch(hr);
if ( SUCCEEDED(hr) && (0 != pResult) ){
*pResult = result;
}
WsbTraceOut( OLESTR("CRmsClient::CompareTo"),
OLESTR("hr = <%ls>, result = <%ls>"),
WsbHrAsString( hr ), WsbPtrToShortAsString( pResult ) );
return hr;
}
HRESULT
CRmsClient::FinalConstruct(
void
)
/*++
Implements:
CComObjectRoot::FinalConstruct
--*/
{
HRESULT hr = S_OK;
try {
WsbAssertHr(CWsbObject::FinalConstruct());
// Initialize data
m_ownerClassId = GUID_NULL;
m_password = RMS_UNDEFINED_STRING;
m_sizeofInfo = 0;
// memset(m_info, 0, MaxInfo);
m_verifierClass = GUID_NULL;
m_portalClass = GUID_NULL;
} WsbCatch(hr);
return(hr);
}
STDMETHODIMP
CRmsClient::GetClassID(
OUT CLSID* pClsid
)
/*++
Implements:
IPersist::GetClassID
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CRmsClient::GetClassID"), OLESTR(""));
try {
WsbAssert(0 != pClsid, E_POINTER);
*pClsid = CLSID_CRmsClient;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CRmsClient::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid));
return(hr);
}
STDMETHODIMP
CRmsClient::GetSizeMax(
OUT ULARGE_INTEGER* pcbSize
)
/*++
Implements:
IPersistStream::GetSizeMax
--*/
{
HRESULT hr = E_NOTIMPL;
// ULONG nameLen;
// ULONG passwordLen;
WsbTraceIn(OLESTR("CRmsClient::GetSizeMax"), OLESTR(""));
// try {
// WsbAssert(0 != pcbSize, E_POINTER);
// nameLen = SysStringByteLen(m_name);
// passwordLen = SysStringByteLen(m_password);
// // set up maximum size
// pcbSize->QuadPart = WsbPersistSizeOf(CLSID) + // m_ownerClassId
// WsbPersistSizeOf(LONG) + // length of m_name
// nameLen + // m_name
// WsbPersistSizeOf(LONG) + // length of m_password
// nameLen + // m_password
//// WsbPersistSizeOf(SHORT) + // m_sizeofInfo
//// MaxInfo + // m_info
// WsbPersistSizeOf(CLSID) + // m_sizeofInfo
// WsbPersistSizeOf(CLSID); // m_sizeofInfo
// } WsbCatch(hr);
WsbTraceOut(OLESTR("CRmsClient::GetSizeMax"), OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr), WsbPtrToUliAsString(pcbSize));
return(hr);
}
STDMETHODIMP
CRmsClient::Load(
IN IStream* pStream
)
/*++
Implements:
IPersistStream::Load
--*/
{
HRESULT hr = S_OK;
ULONG ulBytes = 0;
WsbTraceIn(OLESTR("CRmsClient::Load"), OLESTR(""));
try {
WsbAssert(0 != pStream, E_POINTER);
WsbAffirmHr(CRmsComObject::Load(pStream));
// Read value
WsbAffirmHr(WsbLoadFromStream(pStream, &m_ownerClassId));
WsbAffirmHr(WsbBstrFromStream(pStream, &m_password));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_sizeofInfo));
// WsbAffirmHr(WsbLoadFromStream(pStream, &m_info));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_verifierClass));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_portalClass));
} WsbCatch(hr);
WsbTraceOut(OLESTR("CRmsClient::Load"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
STDMETHODIMP
CRmsClient::Save(
IN IStream* pStream,
IN BOOL clearDirty
)
/*++
Implements:
IPersistStream::Save
--*/
{
HRESULT hr = S_OK;
ULONG ulBytes = 0;
WsbTraceIn(OLESTR("CRmsClient::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty));
try {
WsbAssert(0 != pStream, E_POINTER);
WsbAffirmHr(CRmsComObject::Save(pStream, clearDirty));
// Save value
WsbAffirmHr(WsbSaveToStream(pStream, m_ownerClassId));
WsbAffirmHr(WsbBstrToStream(pStream, m_password));
WsbAffirmHr(WsbSaveToStream(pStream, m_sizeofInfo));
// WsbAffirmHr(WsbSaveToStream(pStream, m_info));
WsbAffirmHr(WsbSaveToStream(pStream, m_verifierClass));
WsbAffirmHr(WsbSaveToStream(pStream, m_portalClass));
// Do we need to clear the dirty bit?
if (clearDirty) {
m_isDirty = FALSE;
}
} WsbCatch(hr);
WsbTraceOut(OLESTR("CRmsClient::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
STDMETHODIMP
CRmsClient::Test(
OUT USHORT *pPassed,
OUT USHORT *pFailed
)
/*++
Implements:
IWsbTestable::Test
--*/
{
HRESULT hr = S_OK;
CComPtr<IRmsClient> pClient1;
CComPtr<IRmsClient> pClient2;
CComPtr<IPersistFile> pFile1;
CComPtr<IPersistFile> pFile2;
CLSID clsidWork1;
CLSID clsidWork2;
CWsbBstrPtr bstrVal1 = OLESTR("5A5A5A");
CWsbBstrPtr bstrWork1;
CWsbBstrPtr bstrWork2;
WsbTraceIn(OLESTR("CRmsClient::Test"), OLESTR(""));
try {
// Get the Client interface.
hr = S_OK;
try {
WsbAssertHr(((IUnknown*) (IRmsClient*) this)->QueryInterface(IID_IRmsClient, (void**) &pClient1));
// Test SetOwnerClassId & GetOwnerClassId
clsidWork1 = CLSID_NULL;
SetOwnerClassId(clsidWork1);
GetOwnerClassId(&clsidWork2);
if(clsidWork1 == clsidWork2){
(*pPassed)++;
} else {
(*pFailed)++;
}
// Test SetName & GetName interface
bstrWork1 = bstrVal1;
SetName(bstrWork1);
GetName(&bstrWork2);
if (bstrWork1 == bstrWork2){
(*pPassed)++;
} else {
(*pFailed)++;
}
// Test SetPassword & GetPassword interface
bstrWork1 = bstrVal1;
SetPassword(bstrWork1);
GetPassword(&bstrWork2);
if (bstrWork1 == bstrWork2){
(*pPassed)++;
} else {
(*pFailed)++;
}
// Test SetVerifierClass & GetVerifierClass
clsidWork1 = CLSID_NULL;
SetVerifierClass(clsidWork1);
GetVerifierClass(&clsidWork2);
if(clsidWork1 == clsidWork2){
(*pPassed)++;
} else {
(*pFailed)++;
}
// Test SetPortalClass & GetPortalClass
clsidWork1 = CLSID_NULL;
SetPortalClass(clsidWork1);
GetPortalClass(&clsidWork2);
if(clsidWork1 == clsidWork2){
(*pPassed)++;
} else {
(*pFailed)++;
}
} WsbCatch(hr);
// Tally up the results
hr = S_OK;
if (*pFailed) {
hr = S_FALSE;
}
} WsbCatch(hr);
WsbTraceOut(OLESTR("CRmsClient::Test"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
STDMETHODIMP
CRmsClient::GetOwnerClassId(
CLSID *pClassId
)
/*++
Implements:
IRmsClient::GetOwnerClassId
--*/
{
*pClassId = m_ownerClassId;
return S_OK;
}
STDMETHODIMP
CRmsClient::SetOwnerClassId(
CLSID classId
)
/*++
Implements:
IRmsClient::SetOwnerClassId
--*/
{
m_ownerClassId = classId;
m_isDirty = TRUE;
return S_OK;
}
STDMETHODIMP
CRmsClient::GetName(
BSTR *pName
)
/*++
Implements:
IRmsClient::GetName
--*/
{
WsbAssertPointer (pName);
m_Name. CopyToBstr (pName);
return S_OK;
}
STDMETHODIMP
CRmsClient::SetName(
BSTR name
)
/*++
Implements:
IRmsClient::SetName
--*/
{
m_Name = name;
m_isDirty = TRUE;
return S_OK;
}
STDMETHODIMP
CRmsClient::GetPassword(
BSTR *pPassword
)
/*++
Implements:
IRmsClient::GetPassword
--*/
{
WsbAssertPointer (pPassword);
m_password. CopyToBstr (pPassword);
return S_OK;
}
STDMETHODIMP
CRmsClient::SetPassword(
BSTR password
)
/*++
Implements:
IRmsClient::SetPassword
--*/
{
m_password = password;
m_isDirty = TRUE;
return S_OK;
}
STDMETHODIMP
CRmsClient::GetInfo(
UCHAR *pInfo,
SHORT *pSize
)
/*++
Implements:
IRmsClient::GetInfo
--*/
{
memmove (pInfo, m_info, m_sizeofInfo);
*pSize = m_sizeofInfo;
return S_OK;
}
STDMETHODIMP
CRmsClient::SetInfo(
UCHAR *pInfo,
SHORT size
)
/*++
Implements:
IRmsClient::SetInfo
--*/
{
memmove (m_info, pInfo, size);
m_sizeofInfo = size;
m_isDirty = TRUE;
return S_OK;
}
STDMETHODIMP
CRmsClient::GetVerifierClass(
CLSID *pClassId
)
/*++
Implements:
IRmsClient::GetVerifierClass
--*/
{
*pClassId = m_verifierClass;
return S_OK;
}
STDMETHODIMP
CRmsClient::SetVerifierClass(
CLSID classId
)
/*++
Implements:
IRmsClient::GetVerifierClass
--*/
{
m_verifierClass = classId;
m_isDirty = TRUE;
return S_OK;
}
STDMETHODIMP
CRmsClient::GetPortalClass(
CLSID *pClassId
)
/*++
Implements:
IRmsClient::GetPortalClass
--*/
{
*pClassId = m_portalClass;
return S_OK;
}
STDMETHODIMP
CRmsClient::SetPortalClass(
CLSID classId
)
/*++
Implements:
IRmsClient::SetPortalClass
--*/
{
m_portalClass = classId;
m_isDirty = TRUE;
return S_OK;
}