/*++ © 1998 Seagate Software, Inc. All rights reserved. Module Name: hsmjobwi.cpp Abstract: This component represents a resource that will is/was operated on by a job. Author: Chuck Bardeen [cbardeen] 09-Feb-1996 Revision History: --*/ #include "stdafx.h" #include "wsb.h" #include "fsa.h" #include "job.h" #include "hsmjobwi.h" #define WSB_TRACE_IS WSB_TRACE_BIT_JOB static USHORT iCountJobwi = 0; HRESULT CHsmJobWorkItem::CompareTo( IN IUnknown* pUnknown, OUT SHORT* pResult ) /*++ Implements: IWsbCollectable::CompareTo(). --*/ { HRESULT hr = S_OK; CComPtr pWorkItem; WsbTraceIn(OLESTR("CHsmJobWorkItem::CompareTo"), OLESTR("")); try { // Did they give us a valid item to compare to? WsbAssert(0 != pUnknown, E_POINTER); // We need the IWsbBool interface to get the value of the object. WsbAffirmHr(pUnknown->QueryInterface(IID_IHsmJobWorkItem, (void**) &pWorkItem)); // Compare the rules. hr = CompareToIWorkItem(pWorkItem, pResult); } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmJobWorkItem::CompareTo"), OLESTR("hr = <%ls>, result = <%ls>"), WsbHrAsString(hr), WsbPtrToShortAsString(pResult)); return(hr); } HRESULT CHsmJobWorkItem::CompareToIWorkItem( IN IHsmJobWorkItem* pWorkItem, OUT SHORT* pResult ) /*++ Implements: IHsmJobWorkItem::CompareToIWorkItem(). --*/ { HRESULT hr = S_OK; GUID id; WsbTraceIn(OLESTR("CHsmJobWorkItem::CompareToIWorkItem"), OLESTR("")); try { // Did they give us a valid item to compare to? WsbAssert(0 != pWorkItem, E_POINTER); // Get the identifier. WsbAffirmHr(pWorkItem->GetResourceId(&id)); // Compare to the identifier. hr = CompareToResourceId(id, pResult); } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmJobWorkItem::CompareToIWorkItem"), OLESTR("hr = <%ls>, result = <%ls>"), WsbHrAsString(hr), WsbPtrToShortAsString(pResult)); return(hr); } HRESULT CHsmJobWorkItem::CompareToResourceId( IN GUID id, OUT SHORT* pResult ) /*++ Implements: IHsmJobWorkItem::CompareToResourceId(). --*/ { HRESULT hr = S_OK; SHORT aResult = 0; WsbTraceIn(OLESTR("CHsmJobWorkItem::CompareToResourceId"), OLESTR("resource id = <%ls>"), WsbGuidAsString(id)); try { // Compare the guids. aResult = WsbSign( memcmp(&m_resourceId, &id, sizeof(GUID)) ); if (0 != aResult) { hr = S_FALSE; } if (0 != pResult) { *pResult = aResult; } } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmJobWorkItem::CompareToResourceId"), OLESTR("hr = <%ls>, result = <%d>"), WsbHrAsString(hr), aResult); return(hr); } HRESULT CHsmJobWorkItem::DoPostScan( void ) /*++ Implements: IPersist::DoPostScan(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmJobWorkItem::DoPostScan"), OLESTR("")); try { CComPtr pActionPost; CComPtr pJobDef; // Execute any post-scan action WsbAffirmHr(m_pJob->GetDef(&pJobDef)); WsbAffirmHr(pJobDef->GetPostActionOnResource(&pActionPost)); if (pActionPost) { WsbTrace(OLESTR("CHsmJobWorkItem::DoPostScan, doing post-scan action\n"), (void*)pJobDef); WsbAffirmHr(pActionPost->Do(static_cast(this), m_state)); } } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmJobWorkItem::DoPostScan"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return(hr); } HRESULT CHsmJobWorkItem::DoPreScan( void ) /*++ Implements: IPersist::DoPreScan(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmJobWorkItem::DoPreScan"), OLESTR("")); try { CComPtr pActionPre; CComPtr pJobDef; // Execute any pre-scan action WsbAffirmHr(m_pJob->GetDef(&pJobDef)); WsbTrace(OLESTR("CHsmJobWorkItem::DoPreScan, pJobDef = %lx\n"), (void*)pJobDef); WsbAffirmHr(pJobDef->GetPreActionOnResource(&pActionPre)); if (pActionPre) { WsbTrace(OLESTR("CHsmJobWorkItem::DoPreScan, doing pre-scan action\n")); WsbAffirmHr(pActionPre->Do(static_cast(this), pJobDef)); } } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmJobWorkItem::DoPreScan"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return(hr); } HRESULT CHsmJobWorkItem::EnumPhases( IN IWsbEnum** ppEnum ) /*++ Implements: IHsmSession::EnumPhases(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != ppEnum, E_POINTER); WsbAffirmHr(m_pPhases->Enum(ppEnum)); } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::EnumTotals( IN IWsbEnum** ppEnum ) /*++ Implements: IHsmSession::EnumTotals(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != ppEnum, E_POINTER); WsbAffirmHr(m_pTotals->Enum(ppEnum)); } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmJobWorkItem::FinalConstruct"), OLESTR("")); try { WsbAffirmHr(CWsbObject::FinalConstruct()); m_cookie = 0; m_resourceId = GUID_NULL; m_state = HSM_JOB_STATE_IDLE; m_subRunId = 0; m_bActive = FALSE; // Create the phase and totals collections. WsbAffirmHr(CoCreateInstance(CLSID_CWsbOrderedCollection, 0, CLSCTX_ALL, IID_IWsbCollection, (void**) &m_pPhases)); WsbAffirmHr(CoCreateInstance(CLSID_CWsbOrderedCollection, 0, CLSCTX_ALL, IID_IWsbCollection, (void**) &m_pTotals)); } WsbCatch(hr); iCountJobwi++; WsbTraceOut(OLESTR("CHsmJobWorkItem::FinalConstruct"), OLESTR("hr = <%ls>, count is <%d>"), WsbHrAsString(hr), iCountJobwi); return(hr); } void CHsmJobWorkItem::FinalRelease( void ) /*++ Implements: CHsmJobWorkItem::FinalRelease(). --*/ { WsbTraceIn(OLESTR("CHsmJobWorkItem::FinalRelease"), OLESTR("")); CWsbObject::FinalRelease(); iCountJobwi--; WsbTraceOut(OLESTR("CHsmJobWorkItem:FinalRelease"), OLESTR("Count is <%d>"), iCountJobwi); } HRESULT CHsmJobWorkItem::GetClassID( OUT CLSID* pClsid ) /*++ Implements: IPersist::GetClassID(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmJobWorkItem::GetClassID"), OLESTR("")); try { WsbAssert(0 != pClsid, E_POINTER); *pClsid = CLSID_CHsmJobWorkItem; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmJobWorkItem::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid)); return(hr); } HRESULT CHsmJobWorkItem::GetCookie( OUT DWORD* pCookie ) /*++ Implements: IHsmJobWorkItem::GetCookie(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pCookie, E_POINTER); *pCookie = m_cookie; } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::GetCurrentPath( OUT OLECHAR** pPath, IN ULONG bufferSize ) /*++ Implements: IHsmJobWorkItem::GetCurrentPath(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pPath, E_POINTER); WsbAffirmHr(m_currentPath.CopyTo(pPath, bufferSize)); } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::GetFinishTime( OUT FILETIME* pTime ) /*++ Implements: IHsmJobWorkItem::GetFinishTime(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pTime, E_POINTER); *pTime = m_finishTime; } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::GetPhases( IN IWsbCollection** ppCollection ) /*++ Implements: IHsmJobWorkItemPriv::GetPhases(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != ppCollection, E_POINTER); *ppCollection = m_pPhases; if (m_pPhases != 0) { m_pPhases->AddRef(); } } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::GetResourceId( OUT GUID* pId ) /*++ Implements: IHsmJobWorkItem::GetResourceId(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pId, E_POINTER); *pId = m_resourceId; } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::GetSession( OUT IHsmSession** ppSession ) /*++ Implements: IHsmJobWorkItem::GetSession(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != ppSession, E_POINTER); *ppSession = m_pSession; if (m_pSession != 0) { m_pSession->AddRef(); } else { WsbTrace(OLESTR("CHsmJobWorkItem::GetSession - session pointer is null. \n")); } } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::GetStartingPath( OUT OLECHAR** pPath, IN ULONG bufferSize ) /*++ Implements: IHsmJobWorkItem::GetStartingPath(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pPath, E_POINTER); WsbAffirmHr(m_startingPath.CopyTo(pPath, bufferSize)); } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::GetSizeMax( OUT ULARGE_INTEGER* pSize ) /*++ Implements: IPersistStream::GetSizeMax(). --*/ { HRESULT hr = S_OK; CComPtr pPersistStream; ULARGE_INTEGER entrySize; WsbTraceIn(OLESTR("CHsmJobWorkItem::GetSizeMax"), OLESTR("")); try { WsbAssert(0 != pSize, E_POINTER); // Determine the size for a rule with no criteria. pSize->QuadPart = 4 * WsbPersistSizeOf(ULONG) + WsbPersistSize((wcslen(m_currentPath) + 1) * sizeof(OLECHAR)) + WsbPersistSize((wcslen(m_startingPath) + 1) * sizeof(OLECHAR)) + 2 * WsbPersistSizeOf(FILETIME) + WsbPersistSizeOf(GUID); // Now allocate space for the phase and totals. WsbAffirmHr(m_pPhases->QueryInterface(IID_IPersistStream, (void**) &pPersistStream)); WsbAffirmHr(pPersistStream->GetSizeMax(&entrySize)); pSize->QuadPart += entrySize.QuadPart; pPersistStream = 0; WsbAffirmHr(m_pTotals->QueryInterface(IID_IPersistStream, (void**) &pPersistStream)); WsbAffirmHr(pPersistStream->GetSizeMax(&entrySize)); pSize->QuadPart += entrySize.QuadPart; pPersistStream = 0; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmJobWorkItem::GetSizeMax"), OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr), WsbPtrToUliAsString(pSize)); return(hr); } HRESULT CHsmJobWorkItem::GetStartTime( OUT FILETIME* pTime ) /*++ Implements: IHsmJobWorkItem::GetStartTime(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pTime, E_POINTER); *pTime = m_startTime; } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::GetState( OUT HSM_JOB_STATE* pState ) /*++ Implements: IHsmJobWorkItem::GetState(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pState, E_POINTER); *pState = m_state; } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::GetStateAsString( OUT OLECHAR** pName, IN ULONG bufferSize ) /*++ Implements: IHsmJobWorkItem::GetStateAsString(). --*/ { HRESULT hr = S_OK; CWsbStringPtr tmpString; try { WsbAssert(0 != pName, E_POINTER); WsbAffirmHr(tmpString.LoadFromRsc(_Module.m_hInst, IDS_HSMJOBSTATEACTIVE + m_state)); WsbAffirmHr(tmpString.CopyTo(pName, bufferSize)); } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::GetSubRunId( OUT ULONG* pId ) /*++ Implements: IHsmJobWorkItem::GetSubRunId(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pId, E_POINTER); *pId = m_subRunId; } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::GetTotals( IN IWsbCollection** ppCollection ) /*++ Implements: IHsmSessionPriv::GetTotals(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != ppCollection, E_POINTER); *ppCollection = m_pTotals; if (m_pTotals != 0 ) { m_pTotals->AddRef(); } } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::Init( IN IHsmJob* pJob ) /*++ Implements: IHsmSessionPriv::Init(). --*/ { m_pJob = pJob; return(S_OK); } HRESULT CHsmJobWorkItem::Load( IN IStream* pStream ) /*++ Implements: IPersistStream::Load(). --*/ { HRESULT hr = S_OK; CComPtr pPersistStream; WsbTraceIn(OLESTR("CHsmJobWorkItem::Load"), OLESTR("")); try { ULONG ul_tmp; WsbAssert(0 != pStream, E_POINTER); // Do the easy stuff, but make sure that this order matches the order // in the load method. WsbAffirmHr(WsbLoadFromStream(pStream, &m_currentPath, 0)); WsbAffirmHr(WsbLoadFromStream(pStream, &m_finishTime)); WsbAffirmHr(WsbLoadFromStream(pStream, &m_resourceId)); WsbAffirmHr(WsbLoadFromStream(pStream, &m_startingPath, 0)); WsbAffirmHr(WsbLoadFromStream(pStream, &m_startTime)); WsbAffirmHr(WsbLoadFromStream(pStream, &ul_tmp)); m_state = static_cast(ul_tmp); WsbAffirmHr(WsbLoadFromStream(pStream, &m_subRunId)); WsbAffirmHr(m_pPhases->QueryInterface(IID_IPersistStream, (void**) &pPersistStream)); WsbAffirmHr(pPersistStream->Load(pStream)); pPersistStream = 0; WsbAffirmHr(m_pTotals->QueryInterface(IID_IPersistStream, (void**) &pPersistStream)); WsbAffirmHr(pPersistStream->Load(pStream)); pPersistStream = 0; // The session and cookie are not saved, since it is not likely to be alive on the load. m_pSession = 0; m_cookie = 0; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmJobWorkItem::Load"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return(hr); } HRESULT CHsmJobWorkItem::ProcessSessionState( IN IHsmSession* pSession, IN IHsmPhase* pPhase, IN OLECHAR* currentPath ) /*++ Implements: IHsmSessionSinkEveryState::ProcessSessionState(). --*/ { HRESULT hr = S_OK; HRESULT hrPhase = S_OK; CWsbStringPtr tmpString; CWsbStringPtr tmpString2; CComPtr pCPC; CComPtr pCP; CComPtr pFoundPhase; CComPtr pClonedPhase; CComPtr pSessionTotals; CComPtr pClonedTotals; CComPtr pPhases; CComPtr pEnum; CComPtr pJobPriv; HSM_JOB_PHASE phase; HSM_JOB_STATE state; WsbTraceIn(OLESTR("CHsmJobWorkItem::ProcessSessionState"), OLESTR("")); try { WsbAssert(0 != pSession, E_POINTER); // Tell everyone the new state of the session. try { WsbAffirmHr(m_pJob->QueryInterface(IID_IHsmJobPriv, (void**) &pJobPriv)); WsbAffirmHr(pJobPriv->AdviseOfSessionState(pSession, pPhase, currentPath)); } WsbCatch(hr); // We only keep track of the ones that are for the session as a whole. WsbAffirmHr(pPhase->GetPhase(&phase)); WsbAffirmHr(pPhase->GetState(&state)); WsbAffirmHr(pPhase->GetName(&tmpString, 0)); WsbAffirmHr(pPhase->GetStateAsString(&tmpString2, 0)); WsbTrace(OLESTR("CHsmJobWorkItem::ProcessSessionState - Phase = <%ls>, State = <%ls>\n"), (OLECHAR *)tmpString, (OLECHAR *)tmpString2); if (HSM_JOB_PHASE_ALL == phase) { m_currentPath = currentPath; m_state = state; // If the session has finished, then we have some cleanup to do so that it can go // away. if (HSM_JOB_STATE_IS_DONE(state)) { // Do the post-scan action, if any WsbAffirmHr(DoPostScan()); WsbAffirmHr(CoFileTimeNow(&m_finishTime)); // Collect all the phase and session totals information so that it can be // persistsed for later use. try { WsbAffirmHr(pSession->EnumPhases(&pEnum)); for (hrPhase = pEnum->First(IID_IHsmPhase, (void**) &pFoundPhase); SUCCEEDED(hrPhase); hrPhase = pEnum->Next(IID_IHsmPhase, (void**) &pFoundPhase)) { // Create the new instance. WsbAffirmHr(CoCreateInstance(CLSID_CHsmPhase, 0, CLSCTX_ALL, IID_IHsmPhase, (void**) &pClonedPhase)); // Fill it in with the new values. WsbAffirmHr(pFoundPhase->CopyTo(pClonedPhase)); WsbAffirmHr(m_pPhases->Add(pClonedPhase)); pFoundPhase = 0; pClonedPhase = 0; } WsbAssert(hrPhase == WSB_E_NOTFOUND, hrPhase); pEnum = 0; WsbAffirmHr(pSession->EnumTotals(&pEnum)); for (hrPhase = pEnum->First(IID_IHsmSessionTotals, (void**) &pSessionTotals); SUCCEEDED(hrPhase); hrPhase = pEnum->Next(IID_IHsmSessionTotals, (void**) &pSessionTotals)) { WsbAffirmHr(pSessionTotals->GetName(&tmpString, 0)); WsbTrace(OLESTR("CHsmJobWorkItem::ProcessSessionState - Copying session totals <%ls>\n"), (OLECHAR *)tmpString); // Create the new instance. WsbAffirmHr(CoCreateInstance(CLSID_CHsmSessionTotals, 0, CLSCTX_ALL, IID_IHsmSessionTotals, (void**) &pClonedTotals)); // Fill it in with the new values. WsbAffirmHr(pSessionTotals->CopyTo(pClonedTotals)); WsbAffirmHr(m_pTotals->Add(pClonedTotals)); pSessionTotals = 0; pClonedTotals = 0; } WsbAssert(hrPhase == WSB_E_NOTFOUND, hrPhase); pEnum = 0; } WsbCatch(hr) if (0 != m_cookie) { // Tell the session that we don't want to be advised anymore. WsbAffirmHr(pSession->QueryInterface(IID_IConnectionPointContainer, (void**) &pCPC)); WsbAffirmHr(pCPC->FindConnectionPoint(IID_IHsmSessionSinkEveryState, &pCP)); WsbAffirmHr(pCP->Unadvise(m_cookie)); } else { WsbTrace(OLESTR("CHsmJobWorkItem::ProcessSessionState - cookie was 0 so didn't unadvise.\n")); } // Let the session object go away. m_pSession = 0; m_cookie = 0; m_bActive = FALSE; // See if there is anymore work to do for this job. WsbAffirmHr(pJobPriv->DoNext()); } } } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmJobWorkItem::ProcessSessionState"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return(hr); } HRESULT CHsmJobWorkItem::Save( IN IStream* pStream, IN BOOL clearDirty ) /*++ Implements: IPersistStream::Save(). --*/ { HRESULT hr = S_OK; CComPtr pEnum; CComPtr pPersistStream; WsbTraceIn(OLESTR("CHsmJobWorkItem::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty)); try { WsbAssert(0 != pStream, E_POINTER); // Do the easy stuff, but make sure that this order matches the order // in the load method. WsbAffirmHr(WsbSaveToStream(pStream, m_currentPath)); WsbAffirmHr(WsbSaveToStream(pStream, m_finishTime)); WsbAffirmHr(WsbSaveToStream(pStream, m_resourceId)); WsbAffirmHr(WsbSaveToStream(pStream, m_startingPath)); WsbAffirmHr(WsbSaveToStream(pStream, m_startTime)); WsbAffirmHr(WsbSaveToStream(pStream, static_cast(m_state))); WsbAffirmHr(WsbSaveToStream(pStream, m_subRunId)); WsbAffirmHr(m_pPhases->QueryInterface(IID_IPersistStream, (void**) &pPersistStream)); WsbAffirmHr(pPersistStream->Save(pStream, clearDirty)); pPersistStream = 0; WsbAffirmHr(m_pTotals->QueryInterface(IID_IPersistStream, (void**) &pPersistStream)); WsbAffirmHr(pPersistStream->Save(pStream, clearDirty)); pPersistStream = 0; // The session and cookie are not saved, since it is not likely to be alive on the load. // If we got it saved and we were asked to clear the dirty bit, then // do so now. if (clearDirty) { m_isDirty = FALSE; } } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmJobWorkItem::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return(hr); } HRESULT CHsmJobWorkItem::Test( USHORT* passed, USHORT* failed ) /*++ Implements: IWsbTestable::Test(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != passed, E_POINTER); WsbAssert(0 != failed, E_POINTER); *passed = 0; *failed = 0; } WsbCatch(hr); return(hr); } HRESULT CHsmJobWorkItem::SetCookie( IN DWORD cookie ) /*++ Implements: IHsmJobWorkItem::SetCookie(). --*/ { WsbTraceIn(OLESTR("CHsmJobWorkItem::SetCookie"), OLESTR("")); HRESULT hr = S_OK; m_cookie = cookie; WsbTraceOut(OLESTR("CHsmJobWorkItem::SetCookie"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return(hr); } HRESULT CHsmJobWorkItem::SetCurrentPath( IN OLECHAR* path ) /*++ Implements: IHsmJobWorkItem::SetCurrentPath(). --*/ { m_currentPath = path; return(S_OK); } HRESULT CHsmJobWorkItem::SetFinishTime( IN FILETIME time ) /*++ Implements: IHsmJobWorkItem::SetFinishTime(). --*/ { m_finishTime = time; return(S_OK); } HRESULT CHsmJobWorkItem::SetResourceId( IN GUID id ) /*++ Implements: IHsmJobWorkItem::SetResourceId(). --*/ { m_resourceId = id; return(S_OK); } HRESULT CHsmJobWorkItem::SetSession( IN IHsmSession* pSession ) /*++ Implements: IHsmJobWorkItem::SetSession(). --*/ { HRESULT hr = S_OK; if (m_pSession != 0) { m_pSession = 0; } m_pSession = pSession; return(hr); } HRESULT CHsmJobWorkItem::SetStartingPath( IN OLECHAR* path ) /*++ Implements: IHsmJobWorkItem::SetStartingPath(). --*/ { m_startingPath = path; return(S_OK); } HRESULT CHsmJobWorkItem::SetStartTime( IN FILETIME time ) /*++ Implements: IHsmJobWorkItem::SetStartTime(). --*/ { m_startTime = time; return(S_OK); } HRESULT CHsmJobWorkItem::SetState( IN HSM_JOB_STATE state ) /*++ Implements: IHsmJobWorkItem::SetState(). --*/ { m_state = state; return(S_OK); } HRESULT CHsmJobWorkItem::SetSubRunId( IN ULONG id ) /*++ Implements: IHsmJobWorkItem::SetSubRunId(). --*/ { m_subRunId = id; return(S_OK); } HRESULT CHsmJobWorkItem::IsActiveItem( void ) /*++ Implements: IHsmJobWorkItemPriv::IsActiveItem(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmJobWorkItem::IsActiveItem"), OLESTR("")); hr = (m_bActive ? S_OK : S_FALSE); WsbTraceOut(OLESTR("CHsmJobWorkItem::IsActiveItem"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return hr; } HRESULT CHsmJobWorkItem::SetActiveItem( BOOL bActive ) /*++ Implements: IHsmJobWorkItemPriv::SetActiveItem(). --*/ { HRESULT hr = S_OK; WsbTraceIn( OLESTR("CHsmJobWorkItem::SetActiveItem"), OLESTR("bActive = %ls"), WsbBoolAsString(bActive) ); m_bActive = bActive; WsbTraceOut(OLESTR("CHsmJobWorkItem::SetActiveItem"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return hr; }