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.
 
 
 
 
 
 

1171 lines
20 KiB

/*++
© 1998 Seagate Software, Inc. All rights reserved.
Module Name:
fsapost.cpp
Abstract:
This class contains represents a post it - a unit of work
that is exchanged between the FSA and the HSM engine.
Author:
Cat Brant [cbrant] 1-Apr-1997
Revision History:
--*/
#include "stdafx.h"
#undef WSB_TRACE_IS
#define WSB_TRACE_IS WSB_TRACE_BIT_FSA
#include "wsb.h"
#include "fsa.h"
#include "fsapost.h"
// Module data
static USHORT iCount = 0; // Count of existing objects
HRESULT
CFsaPostIt::CompareTo(
IN IUnknown* pUnknown,
OUT SHORT* pResult
)
/*++
Implements:
IWsbCollectable::CompareTo().
--*/
{
HRESULT hr = S_OK;
CComPtr<IFsaPostIt> pPostIt;
WsbTraceIn(OLESTR("CFsaPostIt::CompareTo"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pUnknown, E_POINTER);
// We need the IFsaPostIt interface to get the value of the object.
WsbAffirmHr(pUnknown->QueryInterface(IID_IFsaPostIt, (void**) &pPostIt));
// Compare the rules.
hr = CompareToIPostIt(pPostIt, pResult);
} WsbCatch(hr);
WsbTraceOut(OLESTR("CHsmPostIt::CompareTo"), OLESTR("hr = <%ls>, result = <%ls>"), WsbHrAsString(hr), WsbPtrToShortAsString(pResult));
return(hr);
}
HRESULT
CFsaPostIt::CompareToIPostIt(
IN IFsaPostIt* pPostIt,
OUT SHORT* pResult
)
/*++
Implements:
IFsaPostIt::CompareToIPostIt().
--*/
{
HRESULT hr = S_OK;
CWsbStringPtr path;
CWsbStringPtr name;
WsbTraceIn(OLESTR("CFsaPostIt::CompareToIPostIt"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pPostIt, E_POINTER);
//
// Not used - not implemented
//
hr = E_NOTIMPL;
// Compare the PostIt
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::CompareToIPostIt"), OLESTR("hr = <%ls>, result = <%ls>"), WsbHrAsString(hr), WsbPtrToShortAsString(pResult));
return(hr);
}
HRESULT
CFsaPostIt::FinalConstruct(
void
)
/*++
Implements:
CComObjectRoot::FinalConstruct().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::FinalConstruct"), OLESTR(""));
try {
WsbAffirmHr(CWsbObject::FinalConstruct());
m_pSession = 0;
m_storagePoolId = GUID_NULL;
m_mode = 0;
m_requestAction = FSA_REQUEST_ACTION_NONE;
m_resultAction = FSA_RESULT_ACTION_NONE;
m_fileVersionId = 0;
m_requestOffset = 0;
memset (&m_placeholder, 0, sizeof(FSA_PLACEHOLDER));
m_path = OLESTR("");
m_usn = 0;
m_hr = S_OK;
} WsbCatch(hr);
iCount++;
WsbTraceOut(OLESTR("CFsaPostIt::FinalConstruct"),OLESTR("hr = <%ls>, Count is <%d>"),
WsbHrAsString(hr), iCount);
return(hr);
}
void
CFsaPostIt::FinalRelease(
void
)
/*++
Implements:
CComObjectRoot::FinalRelease().
--*/
{
WsbTraceIn(OLESTR("CFsaPostIt::FinalRelease"),OLESTR(""));
// Let the parent class do his thing.
CWsbObject::FinalRelease();
iCount--;
WsbTraceOut(OLESTR("CFsaPostIt::FinalRelease"),OLESTR("Count is <%d>"), iCount);
}
HRESULT
CFsaPostIt::GetFileVersionId(
OUT LONGLONG *pFileVersionId
)
/*++
Implements:
IFsaPostIt::GetFileVersionId().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::GetFileVersionId"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pFileVersionId, E_POINTER);
*pFileVersionId = m_fileVersionId;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetFileVersionId"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::GetFilterRecall(
IFsaFilterRecall** ppRecall
)
/*++
Implements:
IFsaPostIt::GetFilterRecall().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::GetFilterRecall"), OLESTR(""));
try {
// Did they give us a valid item.
WsbAssert(0 != ppRecall, E_POINTER);
*ppRecall = m_pFilterRecall;
m_pFilterRecall.p->AddRef();
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetFilterRecall"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::GetMode(
OUT ULONG *pMode
)
/*++
Implements:
IFsaPostIt::GetMode().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::GetMode"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pMode, E_POINTER);
*pMode = m_mode;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetMode"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::GetPath(
OLECHAR **pPath,
IN ULONG bufferSize
)
/*++
Implements:
IFsaPostIt::GetPath().
--*/
{
HRESULT hr = S_OK;
CWsbStringPtr path;
WsbTraceIn(OLESTR("CFsaPostIt::GetPath"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pPath, E_POINTER);
WsbAffirmHr(m_path.CopyTo(pPath, bufferSize));
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetPath"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::GetPlaceholder(
FSA_PLACEHOLDER *pPlaceholder
)
/*++
Implements:
IFsaPostIt::GetPlaceholder().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::GetPlaceholder"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pPlaceholder, E_POINTER);
memcpy(pPlaceholder, &m_placeholder, sizeof(FSA_PLACEHOLDER));
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetPlaceholder"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::GetRequestAction(
FSA_REQUEST_ACTION *pRequestAction
)
/*++
Implements:
IFsaPostIt::GetRequestAction().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::GetRequestAction"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pRequestAction, E_POINTER);
*pRequestAction = m_requestAction;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetRequestAction"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::GetRequestOffset(
LONGLONG *pRequestOffset
)
/*++
Implements:
IFsaPostIt::GetRequestOffset().
--*/
{
HRESULT hr = S_OK;
CWsbStringPtr path;
CWsbStringPtr name;
WsbTraceIn(OLESTR("CFsaPostIt::GetRequestOffset"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pRequestOffset, E_POINTER);
*pRequestOffset = m_requestOffset;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetRequestOffset"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::GetRequestSize(
LONGLONG *pRequestSize
)
/*++
Implements:
IFsaPostIt::GetRequestSize().
--*/
{
HRESULT hr = S_OK;
CWsbStringPtr path;
CWsbStringPtr name;
WsbTraceIn(OLESTR("CFsaPostIt::GetRequestSize"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pRequestSize, E_POINTER);
*pRequestSize = m_requestSize;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetRequestSize"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::GetResult(
HRESULT *pHr
)
/*++
Implements:
IFsaPostIt::GetResult().
--*/
{
HRESULT hr = S_OK;
CWsbStringPtr path;
CWsbStringPtr name;
WsbTraceIn(OLESTR("CFsaPostIt::GetResult"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pHr, E_POINTER);
*pHr = m_hr;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetResultAction"), OLESTR("hr = <%ls>, result = <%ls>"),
WsbHrAsString(hr), WsbHrAsString(*pHr));
return(hr);
}
HRESULT
CFsaPostIt::GetResultAction(
FSA_RESULT_ACTION *pResultAction
)
/*++
Implements:
IFsaPostIt::GetResultAction().
--*/
{
HRESULT hr = S_OK;
CWsbStringPtr path;
CWsbStringPtr name;
WsbTraceIn(OLESTR("CFsaPostIt::GetResultAction"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pResultAction, E_POINTER);
*pResultAction = m_resultAction;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetResultAction"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::GetSession(
IHsmSession **ppSession
)
/*++
Implements:
IFsaPostIt::GetSession().
--*/
{
HRESULT hr = S_OK;
CWsbStringPtr path;
CWsbStringPtr name;
WsbTraceIn(OLESTR("CFsaPostIt::GetSession"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != ppSession, E_POINTER);
*ppSession = m_pSession;
m_pSession.p->AddRef();
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetSession"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::GetStoragePoolId(
GUID *pStoragePoolId
)
/*++
Implements:
IFsaPostIt::GetStoragePoolId().
--*/
{
HRESULT hr = S_OK;
CWsbStringPtr path;
CWsbStringPtr name;
WsbTraceIn(OLESTR("CFsaPostIt::GetStoragePoolId"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pStoragePoolId, E_POINTER);
memcpy(pStoragePoolId, &m_storagePoolId, sizeof(GUID));
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetStoragePoolId"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::GetUSN(
LONGLONG *pUsn
)
/*++
Implements:
IFsaPostIt::GetUSN().
--*/
{
HRESULT hr = S_OK;
CWsbStringPtr path;
CWsbStringPtr name;
WsbTraceIn(OLESTR("CFsaPostIt::GetUSN"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pUsn, E_POINTER);
*pUsn = m_usn;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetUSN"), OLESTR("hr = <%ls>, USN = <%ls>"),
WsbHrAsString(hr), WsbPtrToLonglongAsString(pUsn));
return(hr);
}
HRESULT
CFsaPostIt::GetThreadId(
DWORD *pThreadId
)
/*++
Implements:
IFsaPostIt::GetThreadId().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::GetThreadId"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
WsbAssert(0 != pThreadId, E_POINTER);
*pThreadId = m_threadId;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetThreadId"), OLESTR("hr = <%ls>, threadId = <%ls>"),
WsbHrAsString(hr), WsbPtrToLongAsString((PLONG)pThreadId));
return(hr);
}
HRESULT
CFsaPostIt::SetFileVersionId(
LONGLONG fileVersionId
)
/*++
Implements:
IFsaPostIt::SetFileVersionId().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetFileVersionId"), OLESTR(""));
m_fileVersionId = fileVersionId;
WsbTraceOut(OLESTR("CFsaPostIt::SetFileVersionId"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetFilterRecall(
IN IFsaFilterRecall* pRecall
)
/*++
Implements:
IFsaPostIt::SetFilterRecall().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetFilterRecall"), OLESTR(""));
m_pFilterRecall = pRecall;
WsbTraceOut(OLESTR("CFsaPostIt::SetFilterRecall"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetMode(
ULONG mode
)
/*++
Implements:
IFsaPostIt::SetMode().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetMode"), OLESTR(""));
m_mode = mode;
WsbTraceOut(OLESTR("CFsaPostIt::SetMode"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetPath(
OLECHAR *path
)
/*++
Implements:
IFsaPostIt::SetPath().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetPath"), OLESTR(""));
m_path = path;
WsbTraceOut(OLESTR("CFsaPostIt::SetPath"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetPlaceholder(
FSA_PLACEHOLDER *pPlaceholder
)
/*++
Implements:
IFsaPostIt::SetPlaceholder().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetPlaceholder"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
memcpy(&m_placeholder, pPlaceholder, sizeof(FSA_PLACEHOLDER));
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::SetPlaceholder"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetRequestAction(
FSA_REQUEST_ACTION requestAction
)
/*++
Implements:
IFsaPostIt::SetRequestAction().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetRequestAction"), OLESTR(""));
m_requestAction = requestAction;
WsbTraceOut(OLESTR("CFsaPostIt::SetRequestAction"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetRequestOffset(
LONGLONG requestOffset
)
/*++
Implements:
IFsaPostIt::SetRequestOffset().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetRequestOffset"), OLESTR(""));
m_requestOffset = requestOffset;
WsbTraceOut(OLESTR("CFsaPostIt::SetRequestOffset"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetRequestSize(
LONGLONG requestSize
)
/*++
Implements:
IFsaPostIt::SetRequestSize().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetRequestSize"), OLESTR(""));
m_requestSize = requestSize;
WsbTraceOut(OLESTR("CFsaPostIt::SetRequestSize"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetResult(
HRESULT result
)
/*++
Implements:
IFsaPostIt::SetResult().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetResult"), OLESTR("result = <%ls>"), WsbHrAsString(result));
m_hr = result;
WsbTraceOut(OLESTR("CFsaPostIt::SetResult"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetResultAction(
FSA_RESULT_ACTION resultAction
)
/*++
Implements:
IFsaPostIt::SetResultAction().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetResultAction"), OLESTR(""));
m_resultAction = resultAction;
WsbTraceOut(OLESTR("CFsaPostIt::SetResultAction"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetSession(
IHsmSession *pSession
)
/*++
Implements:
IFsaPostIt::SetSession().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetSession"), OLESTR(""));
if (m_pSession != 0) {
m_pSession = 0;
}
m_pSession = pSession;
WsbTraceOut(OLESTR("CFsaPostIt::SetSession"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetStoragePoolId(
GUID StoragePoolId
)
/*++
Implements:
IFsaPostIt::SetStoragePoolId().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetStoragePoolId"), OLESTR(""));
try {
// Did they give us a valid item to compare to?
memcpy(&m_storagePoolId, &StoragePoolId, sizeof(GUID));
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::SetStoragePoolId"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetUSN(
LONGLONG usn
)
/*++
Implements:
IFsaPostIt::SetUSN().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetUSN"), OLESTR("USN = <%ls>"), WsbLonglongAsString(usn));
m_usn = usn;
WsbTraceOut(OLESTR("CFsaPostIt::SetUSN"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::SetThreadId(
DWORD threadId
)
/*++
Implements:
IFsaPostIt::SetThreadId().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::SetThreadId"), OLESTR("ThreadId = <%ls>"), WsbLongAsString(threadId));
m_threadId = threadId;
WsbTraceOut(OLESTR("CFsaPostIt::SetThreadId"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CFsaPostIt::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 CFsaPostIt::GetClassID
(
OUT LPCLSID pclsid
)
/*++
Routine Description:
See IPerist::GetClassID()
Arguments:
See IPerist::GetClassID()
Return Value:
See IPerist::GetClassID()
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::GetClassID"), OLESTR(""));
try {
WsbAssert(0 != pclsid, E_POINTER);
*pclsid = CLSID_CFsaPostIt;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pclsid));
return(hr);
}
HRESULT CFsaPostIt::GetSizeMax
(
OUT ULARGE_INTEGER* pcbSize
)
/*++
Routine Description:
See IPersistStream::GetSizeMax().
Arguments:
See IPersistStream::GetSizeMax().
Return Value:
See IPersistStream::GetSizeMax().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::GetSizeMax"), OLESTR(""));
try {
WsbAssert(0 != pcbSize, E_POINTER);
pcbSize->QuadPart = 0;
hr = E_NOTIMPL;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::GetSizeMax"),
OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr),
WsbPtrToUliAsString(pcbSize));
return(hr);
}
HRESULT CFsaPostIt::Load
(
IN IStream* /*pStream*/
)
/*++
Routine Description:
See IPersistStream::Load().
Arguments:
See IPersistStream::Load().
Return Value:
See IPersistStream::Load().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::Load"), OLESTR(""));
try {
hr = E_NOTIMPL;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CFsaPostIt::Load"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT CFsaPostIt::Save
(
IN IStream* pStream,
IN BOOL clearDirty
)
/*++
Routine Description:
See IPersistStream::Save().
Arguments:
See IPersistStream::Save().
Return Value:
See IPersistStream::Save().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CFsaPostIt::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty));
try {
WsbAssert(0 != pStream, E_POINTER);
hr = E_NOTIMPL;
// 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("CFsaPostIt::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}