Leaked source code of windows server 2003
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.
 
 
 
 
 
 

194 lines
5.4 KiB

//+------------------------------------------------------------------
//
// Copyright (C) 1991-1997 Microsoft Corporation.
//
// File: identran.cxx
//
// Contents: Identity workid <--> doc name translator
//
// Classes: CIdentityNameTranslator
//
// History: 24-Feb-97 SitaramR Created
//
//-------------------------------------------------------------------
#include <pch.cxx>
#pragma hdrstop
#include "identran.hxx"
#include "docname.hxx"
//+---------------------------------------------------------------------------
//
// Member: CIdentityNameTranslator::CIdentityNameTranslator
//
// Synopsis: Constructor
//
// History: 24-Feb-97 SitaramR Created
//
//----------------------------------------------------------------------------
CIdentityNameTranslator::CIdentityNameTranslator()
: _cRefs( 1 )
{
}
//+-------------------------------------------------------------------------
//
// Method: CIdentityNameTranslator::AddRef
//
// Synopsis: Increments refcount
//
// History: 24-Feb-1997 SitaramR Created
//
//--------------------------------------------------------------------------
ULONG STDMETHODCALLTYPE CIdentityNameTranslator::AddRef()
{
return InterlockedIncrement( (long *) &_cRefs );
}
//+-------------------------------------------------------------------------
//
// Method: CIdentityNameTranslator::Release
//
// Synopsis: Decrement refcount. Delete if necessary.
//
// History: 24-Feb-1997 SitaramR Created
//
//--------------------------------------------------------------------------
ULONG STDMETHODCALLTYPE CIdentityNameTranslator::Release()
{
Win4Assert( _cRefs > 0 );
ULONG uTmp = InterlockedDecrement( (long *) &_cRefs );
if ( 0 == uTmp )
delete this;
return(uTmp);
}
//+-------------------------------------------------------------------------
//
// Method: CIdentityNameTranslator::QueryInterface
//
// Synopsis: Rebind to other interface
//
// Arguments: [riid] -- IID of new interface
// [ppvObject] -- New interface * returned here
//
// Returns: S_OK if bind succeeded, E_NOINTERFACE if bind failed
//
// History: 24-Feb-1997 SitaramR Created
//
//--------------------------------------------------------------------------
SCODE STDMETHODCALLTYPE CIdentityNameTranslator::QueryInterface( REFIID riid,
void ** ppvObject)
{
Win4Assert( 0 != ppvObject );
if ( riid == IID_ICiCDocNameToWorkidTranslator )
*ppvObject = (void *)(ICiCDocNameToWorkidTranslator *) this;
else if ( riid == IID_IUnknown )
*ppvObject = (void *)(IUnknown *) this;
else
{
*ppvObject = 0;
return E_NOINTERFACE;
}
AddRef();
return S_OK;
}
//+---------------------------------------------------------------------------
//
// Member: CIdentityNameTranslator::QueryDocName
//
// Synopsis: Returns a new doc name object
//
// Arguments: [ppICiCDocName] - Pointer to ICiCDocName object returned here
//
// History: 24-Feb-97 SitaramR Created
//
//----------------------------------------------------------------------------
SCODE STDMETHODCALLTYPE CIdentityNameTranslator::QueryDocName( ICiCDocName ** ppICiCDocName )
{
Win4Assert( 0 != ppICiCDocName );
SCODE sc = S_OK;
TRY
{
*ppICiCDocName = new CCiCDocName;
}
CATCH( CException,e )
{
sc = e.GetErrorCode();
}
END_CATCH
return sc;
}
//+---------------------------------------------------------------------------
//
// Member: CIdentityNameTranslator::WorkIdToDocName
//
// Synopsis: Translates a WorkId to a document name
//
// Arguments: [workid] - WorkId to translate
// [pICiCDocName] - Doc Name filled in here
//
// History: 24-Feb-1997 SitaramR Created
//
//----------------------------------------------------------------------------
SCODE STDMETHODCALLTYPE CIdentityNameTranslator::WorkIdToDocName( WORKID workid,
ICiCDocName * pICiCDocName )
{
//
// The name is a serialized form of wid, i.e. 4 bytes long
//
Win4Assert( sizeof(WORKID) == 2 * sizeof(WCHAR) );
CCiCDocName *pDocName = (CCiCDocName *) pICiCDocName;
pDocName->SetPath( (WCHAR *)&workid, sizeof(WORKID)/sizeof(WCHAR) );
return S_OK;
}
//+---------------------------------------------------------------------------
//
// Member: CIdentityNameTranslator::DocNameToWorkId
//
// Synopsis: Converts a document name to a WorkId.
//
// Arguments: [pICiCDocName] - Document Name
// [pWorkid] - Workid returned here
//
// History: 24-Feb-1997 SitaramR Created
//
//----------------------------------------------------------------------------
SCODE STDMETHODCALLTYPE CIdentityNameTranslator::DocNameToWorkId( ICiCDocName const * pICiCDocName,
WORKID * pWorkid )
{
Win4Assert( 0 != pICiCDocName );
Win4Assert( 0 != pWorkid );
CCiCDocName const * pDocName = (CCiCDocName const *) pICiCDocName;
WCHAR const *pwszPath = pDocName->GetPath();
RtlCopyMemory( pWorkid, pwszPath, sizeof(WORKID) );
return S_OK;
}