Source code of Windows XP (NT5)
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.
|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
faxconmenu.cpp
Abstract:
This file contains my implementation of IExtendContextMenu.
Environment:
WIN32 User Mode
Author:
Darwin Ouyang (t-darouy) 30-Sept-1997
--*/
#include "stdafx.h"
#include "faxsnapin.h"
#include "faxpersist.h"
#include "faxadmin.h"
#include "faxcomp.h"
#include "faxcompd.h"
#include "faxdataobj.h"
#include "faxhelper.h"
#include "faxstrt.h"
#include "iroot.h"
#pragma hdrstop
HRESULT STDMETHODCALLTYPE CFaxPersistStream::GetClassID( OUT CLSID __RPC_FAR *pClassID) /*++
Routine Description:
This routine returns the CLSID of the snapin.
Arguments:
pClassID - returns the class id
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/ { DebugPrint(( TEXT("Trace: CFaxPersistStream::GetClassID") )); assert( pClassID != NULL ); if (!pClassID) { return E_FAIL; } *pClassID = CLSID_FaxSnapin;
return S_OK; }
HRESULT STDMETHODCALLTYPE CFaxPersistStream::IsDirty( void ) /*++
Routine Description:
Returns S_OK if the stream is dirty and needs to be written out. Returns S_FALSE otherwise.
Arguments:
None.
Return Value:
HRESULT indicating if the stream is dirty.
--*/ { DebugPrint(( TEXT("Trace: CFaxPersistStream::IsDirty") )); if( m_bDirtyFlag == FALSE ) { return S_FALSE; } else { return S_OK; // save us
}
}
HRESULT STDMETHODCALLTYPE CFaxPersistStream::Load( /* [unique] */ IN IStream __RPC_FAR *pStm) /*++
Routine Description:
Loads the state of the snapin from the stream in pStm
Arguments:
pStm - stream to read snapin state from
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/ { DebugPrint(( TEXT("Trace: CFaxPersistStream::Load") ));
assert( pStm != NULL ); assert( m_pFaxSnapin != NULL );
HRESULT hr; int iResult; BOOL isremote; ULONG count; TCHAR machineName[ MAX_COMPUTERNAME_LENGTH + 1 ];
do { hr = pStm->Read( &isremote, sizeof( BOOL ), &count ); if( !SUCCEEDED( hr ) ) { break; } if( isremote == TRUE ) { // remote
hr = pStm->Read( &machineName, MAX_COMPUTERNAME_LENGTH * 2, &count ); if( !SUCCEEDED( hr ) ) { break; } m_pFaxSnapin->globalRoot->SetMachine( (LPTSTR)&machineName ); } else { // local
m_pFaxSnapin->globalRoot->SetMachine( NULL ); } } while( 0 );
if( hr != S_OK ) { m_pFaxSnapin->m_pConsole->MessageBox(::GlobalStringTable->GetString( IDS_LOADSTATE_ERR ), ::GlobalStringTable->GetString( IDS_ERR_TITLE ), MB_OK, &iResult); } m_bDirtyFlag = FALSE;
return hr; }
HRESULT STDMETHODCALLTYPE CFaxPersistStream::Save( /* [unique] */ IN IStream __RPC_FAR *pStm, IN BOOL fClearDirty) /*++
Routine Description:
This routine save the snapin state to the stream. Arguments:
pStm - the target stream fClearDirty - TRUE to clear the dirty flag.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/ { DebugPrint(( TEXT("Trace: CFaxPersistStream::Save") ));
assert( pStm != NULL ); assert( m_pFaxSnapin != NULL );
ULONG count; int iResult; HRESULT hr; BOOL r;
do { if( m_pFaxSnapin->globalRoot->GetMachine() != NULL ) { // remote
r = TRUE; hr = pStm->Write( &r, sizeof(BOOL), &count ); if( !SUCCEEDED( hr ) ) { break; } hr = pStm->Write( const_cast<PVOID>(m_pFaxSnapin->globalRoot->GetMachine()), MAX_COMPUTERNAME_LENGTH * 2, &count ); if( !SUCCEEDED( hr ) ) { break; } } else { // local
r = FALSE; hr = pStm->Write( &r, sizeof(BOOL), &count ); if( !SUCCEEDED( hr ) ) { break; } } if( fClearDirty == TRUE ) { m_bDirtyFlag = FALSE; } } while( 0 );
if( !SUCCEEDED( hr ) ) { m_pFaxSnapin->m_pConsole->MessageBox(::GlobalStringTable->GetString( IDS_SAVESTATE_ERR ), ::GlobalStringTable->GetString( IDS_ERR_TITLE ), MB_OK, &iResult); } return hr;
}
HRESULT STDMETHODCALLTYPE CFaxPersistStream::GetSizeMax( OUT ULARGE_INTEGER __RPC_FAR *pcbSize) /*++
Routine Description:
This routine returns the maximum size that the snapin will require to persist its state. Arguments:
pcbSize - size of the stream.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/ { DebugPrint(( TEXT("Trace: CFaxPersistStream::GetSizeMax") ));
assert( pcbSize != NULL ); if (!pcbSize) { return E_FAIL; }
// return a conservative estimate of the space required in bytes
LISet32( *pcbSize, sizeof( BOOL ) + (MAX_COMPUTERNAME_LENGTH+1) * (sizeof(TCHAR)) );
return S_OK; }
|