1192 lines
24 KiB
C++
1192 lines
24 KiB
C++
/*++
|
||
|
||
© 1998 Seagate Software, Inc. All rights reserved.
|
||
|
||
Module Name:
|
||
|
||
fsaprem.cpp
|
||
|
||
Abstract:
|
||
|
||
Defines the functions for the premigrated list classes.
|
||
|
||
Author:
|
||
|
||
Ron White [ronw] 18-Feb-1997
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
|
||
#include "stdafx.h"
|
||
#include "wsb.h"
|
||
|
||
|
||
#include "fsaprem.h"
|
||
|
||
#define WSB_TRACE_IS WSB_TRACE_BIT_FSA
|
||
|
||
static USHORT iCountPrem = 0; // Count of existing objects
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedDb::FinalConstruct(
|
||
void
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
CComObjectRoot::FinalConstruct().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
WsbAssertHr(CWsbDb::FinalConstruct());
|
||
m_version = 1;
|
||
} WsbCatch(hr);
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedDb::FinalRelease(
|
||
void
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
CComObjectRoot::FinalRelease
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
CWsbDb::FinalRelease();
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedDb::GetClassID(
|
||
OUT CLSID* pClsid
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPersist::GetClassID().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
WsbAssert(0 != pClsid, E_POINTER);
|
||
*pClsid = CLSID_CFsaPremigratedDb;
|
||
} WsbCatch(hr);
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedDb::Init(
|
||
IN OLECHAR* path,
|
||
IN IWsbDbSys* pDbSys,
|
||
OUT BOOL* pCreated
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigrated::Init
|
||
|
||
--*/
|
||
{
|
||
BOOL created = FALSE;
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedDb::Init"),OLESTR(""));
|
||
try {
|
||
int i = 0;
|
||
|
||
m_pWsbDbSys = pDbSys;
|
||
WsbAffirmPointer(m_pWsbDbSys);
|
||
|
||
// Attempt to find the DB
|
||
hr = Locate(path);
|
||
|
||
if (S_OK != hr) {
|
||
WsbTrace(OLESTR("CFsaPremigratedDb::Init: db Locate failed\n"));
|
||
if (STG_E_FILENOTFOUND != hr) {
|
||
// Got some error; try deleting the DB and recreating it
|
||
WsbTrace(OLESTR("CFsaPremigratedDb::Init: deleting DB\n"));
|
||
WsbAffirmHr(Delete(path));
|
||
hr = STG_E_FILENOTFOUND;
|
||
}
|
||
}
|
||
|
||
if (STG_E_FILENOTFOUND == hr){
|
||
ULONG memSize;
|
||
|
||
hr = S_OK;
|
||
m_nRecTypes = 2;
|
||
|
||
memSize = m_nRecTypes * sizeof(IDB_REC_INFO);
|
||
m_RecInfo = (IDB_REC_INFO*)WsbAlloc(memSize);
|
||
WsbAffirm(0 != m_RecInfo, E_FAIL);
|
||
ZeroMemory(m_RecInfo, memSize);
|
||
|
||
// Premigrated file record type
|
||
m_RecInfo[0].Type = PREMIGRATED_REC_TYPE;
|
||
m_RecInfo[0].EntityClassId = CLSID_CFsaPremigratedRec;
|
||
m_RecInfo[0].Flags = IDB_REC_FLAG_VARIABLE;
|
||
m_RecInfo[0].MinSize = (2 * WsbPersistSizeOf(FILETIME)) +
|
||
(5 * WsbPersistSizeOf(LONGLONG)) +
|
||
WsbPersistSizeOf(GUID) + 4 + WsbPersistSizeOf(BOOL);
|
||
m_RecInfo[0].MaxSize = m_RecInfo[0].MinSize + PREMIGRATED_MAX_PATH_SIZE;
|
||
|
||
m_RecInfo[0].nKeys = 3;
|
||
|
||
memSize = m_RecInfo[0].nKeys * sizeof(IDB_KEY_INFO);
|
||
m_RecInfo[0].Key = (IDB_KEY_INFO*)WsbAlloc(memSize);
|
||
WsbAffirm(0 != m_RecInfo[0].Key, E_FAIL);
|
||
ZeroMemory(m_RecInfo[0].Key, memSize);
|
||
|
||
// This is the default key used after a GetEntity call
|
||
m_RecInfo[0].Key[0].Type = PREMIGRATED_ACCESS_TIME_KEY_TYPE;
|
||
m_RecInfo[0].Key[0].Size = WSB_BYTE_SIZE_BOOL + WSB_BYTE_SIZE_FILETIME + WSB_BYTE_SIZE_LONGLONG + WSB_BYTE_SIZE_GUID;
|
||
m_RecInfo[0].Key[0].Flags = IDB_KEY_FLAG_DUP_ALLOWED;
|
||
|
||
// This is the primary key, which controls how the records are
|
||
// arranged in the DB
|
||
m_RecInfo[0].Key[1].Type = PREMIGRATED_BAGID_OFFSETS_KEY_TYPE;
|
||
m_RecInfo[0].Key[1].Size = WSB_BYTE_SIZE_BOOL + 2 * WSB_BYTE_SIZE_LONGLONG + WSB_BYTE_SIZE_GUID;
|
||
m_RecInfo[0].Key[1].Flags = IDB_KEY_FLAG_PRIMARY;
|
||
|
||
m_RecInfo[0].Key[2].Type = PREMIGRATED_SIZE_KEY_TYPE;
|
||
m_RecInfo[0].Key[2].Size = WSB_BYTE_SIZE_BOOL + WSB_BYTE_SIZE_LONGLONG + WSB_BYTE_SIZE_LONGLONG + WSB_BYTE_SIZE_GUID;
|
||
m_RecInfo[0].Key[2].Flags = IDB_KEY_FLAG_DUP_ALLOWED;
|
||
|
||
WsbAffirm(m_RecInfo[0].nKeys <= IDB_MAX_KEYS_PER_REC, E_FAIL);
|
||
|
||
// Recovery record type
|
||
m_RecInfo[1].Type = RECOVERY_REC_TYPE;
|
||
m_RecInfo[1].EntityClassId = CLSID_CFsaRecoveryRec;
|
||
m_RecInfo[1].Flags = IDB_REC_FLAG_VARIABLE;
|
||
m_RecInfo[1].MinSize = 4 * WsbPersistSizeOf(LONGLONG) +
|
||
WsbPersistSizeOf(LONG) + WsbPersistSizeOf(ULONG) + WsbPersistSizeOf(GUID) + 4;
|
||
m_RecInfo[1].MaxSize = m_RecInfo[1].MinSize + PREMIGRATED_MAX_PATH_SIZE;
|
||
|
||
m_RecInfo[1].nKeys = 1;
|
||
|
||
memSize = m_RecInfo[1].nKeys * sizeof(IDB_KEY_INFO);
|
||
m_RecInfo[1].Key = (IDB_KEY_INFO*)WsbAlloc(memSize);
|
||
WsbAffirm(0 != m_RecInfo[1].Key, E_FAIL);
|
||
ZeroMemory(m_RecInfo[1].Key, memSize);
|
||
|
||
// This is the default and primary key
|
||
m_RecInfo[1].Key[0].Type = RECOVERY_KEY_TYPE;
|
||
m_RecInfo[1].Key[0].Size = RECOVERY_KEY_SIZE;
|
||
m_RecInfo[1].Key[0].Flags = IDB_KEY_FLAG_PRIMARY;
|
||
|
||
// Attempt to create the DB
|
||
WsbAssertHr(Create(path));
|
||
created = TRUE;
|
||
} else {
|
||
WsbAffirmHr(hr);
|
||
}
|
||
} WsbCatch(hr);
|
||
|
||
if (pCreated) {
|
||
*pCreated = created;
|
||
}
|
||
WsbTraceOut(OLESTR("CFsaPremigratedDb::Init"),
|
||
OLESTR("hr = <%ls>, Created = %ls"), WsbHrAsString(hr),
|
||
WsbBoolAsString(created));
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedDb::Load(
|
||
IN IStream* pStream
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPersistStream::Load().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
hr = CWsbDb::Load(pStream);
|
||
|
||
if (S_OK != hr && STG_E_FILENOTFOUND != hr) {
|
||
// Got some error; delete the DB (we'll recreate it later if
|
||
// we need it
|
||
WsbTrace(OLESTR("CFsaPremigratedDb::Load: deleting DB\n"));
|
||
if (S_OK == Delete(NULL)) {
|
||
hr = STG_E_FILENOTFOUND;
|
||
}
|
||
}
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedDb::Save(
|
||
IN IStream* pStream,
|
||
IN BOOL clearDirty
|
||
)
|
||
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPersistStream::Save().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
WsbAffirmHr(CWsbDb::Save(pStream, clearDirty));
|
||
} WsbCatch(hr);
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::GetAccessTime(
|
||
OUT FILETIME* pAccessTime
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::GetAccessTime
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::GetAccessTime"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pAccessTime, E_POINTER);
|
||
*pAccessTime = m_AccessTime;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::GetAccessTime"),
|
||
OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::GetBagId(
|
||
OUT GUID* pId
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::GetBagId
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::GetBagId"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pId, E_POINTER);
|
||
|
||
*pId = m_BagId;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::GetBagId"), OLESTR("hr = <%ls> Id = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pId));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::GetBagOffset(
|
||
OUT LONGLONG* pOffset
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::GetBagOffset
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::GetBagOffset"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pOffset, E_POINTER);
|
||
*pOffset = m_BagOffset;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::GetBagOffset"), OLESTR("hr = <%ls> Offset = <%ls>"), WsbHrAsString(hr), WsbLonglongAsString(*pOffset));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::GetFileId(
|
||
OUT LONGLONG* pFileId
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::GetFileId
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::GetFileId"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pFileId, E_POINTER);
|
||
*pFileId = m_FileId;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::GetFileId"),
|
||
OLESTR("hr = <%ls> FileId = <%ls>"), WsbHrAsString( hr ), WsbLonglongAsString( *pFileId ) );
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::GetFileUSN(
|
||
OUT LONGLONG* pFileUSN
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::GetFileUSN
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::GetFileUSN"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pFileUSN, E_POINTER);
|
||
*pFileUSN = m_FileUSN;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::GetFileUSN"),
|
||
OLESTR("hr = <%ls> File USN = <%ls>"), WsbHrAsString( hr ), WsbLonglongAsString( *pFileUSN ) );
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::GetOffset(
|
||
OUT LONGLONG* pOffset
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::GetOffset
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::GetOffset"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pOffset, E_POINTER);
|
||
*pOffset = m_Offset;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::GetOffset"),
|
||
OLESTR("hr = <%ls> Offset = <%ls>"), WsbHrAsString( hr ), WsbLonglongAsString( *pOffset ) );
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::GetPath(
|
||
OUT OLECHAR** ppPath,
|
||
IN ULONG bufferSize
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::GetPath
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::GetPath"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != ppPath, E_POINTER);
|
||
WsbAffirmHr(m_Path.CopyTo(ppPath, bufferSize));
|
||
WsbTrace( OLESTR("CFsaPremigratedRec::GetPath path = <%ls>\n"), *ppPath );
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::GetPath"),
|
||
OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::GetRecallTime(
|
||
OUT FILETIME* pTime
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::GetRecallTime
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::GetRecallTime"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pTime, E_POINTER);
|
||
*pTime = m_RecallTime;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::GetRecallTime"),
|
||
OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::GetSize(
|
||
OUT LONGLONG* pSize
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::GetSize
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::GetSize"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pSize, E_POINTER);
|
||
*pSize = m_Size;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::GetSize"),
|
||
OLESTR("hr = <%ls> Size = <%ls>"), WsbHrAsString( hr ), WsbLonglongAsString( *pSize ) );
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::FinalConstruct(
|
||
void
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
CComObjectRoot::FinalConstruct().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
WsbAssertHr(CWsbDbEntity::FinalConstruct());
|
||
|
||
m_AccessTime.dwLowDateTime = 0;
|
||
m_AccessTime.dwHighDateTime = 0;
|
||
m_BagOffset = 0;
|
||
m_BagId = GUID_NULL;
|
||
m_FileId = 0;
|
||
m_IsWaitingForClose = FALSE;
|
||
m_Size = 0;
|
||
m_Offset = 0;
|
||
m_FileUSN = 0;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
iCountPrem++;
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::FinalRelease(
|
||
void
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
CComObjectRoot::FinalRelease
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
CWsbDbEntity::FinalRelease();
|
||
|
||
iCountPrem--;
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT CFsaPremigratedRec::GetClassID
|
||
(
|
||
OUT LPCLSID pclsid
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPerist::GetClassID
|
||
|
||
--*/
|
||
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::GetClassID"), OLESTR(""));
|
||
|
||
|
||
try {
|
||
WsbAssert(0 != pclsid, E_POINTER);
|
||
*pclsid = CLSID_CFsaPremigratedRec;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CSecRec::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pclsid));
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT CFsaPremigratedRec::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("CFsaPremigratedRec::GetSizeMax"), OLESTR(""));
|
||
|
||
try {
|
||
|
||
WsbAssert(0 != pcbSize, E_POINTER);
|
||
|
||
pcbSize->QuadPart = WsbPersistSizeOf(FILETIME) +
|
||
WsbPersistSizeOf(BOOL) +
|
||
WsbPersistSizeOf(GUID) +
|
||
4 * WsbPersistSizeOf(LONGLONG) +
|
||
WsbPersistSize((wcslen(m_Path) + 1) * sizeof(OLECHAR));
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::GetSizeMax"),
|
||
OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr),
|
||
WsbPtrToUliAsString(pcbSize));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::IsWaitingForClose(
|
||
void
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::IsWaitingForClose
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_FALSE;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::IsWaitingForClose"),OLESTR(""));
|
||
|
||
if (m_IsWaitingForClose) {
|
||
hr = S_OK;
|
||
}
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::IsWaitingForClose"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT CFsaPremigratedRec::Load
|
||
(
|
||
IN IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPersistStream::Load
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::Load"), OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pStream, E_POINTER);
|
||
WsbAssertHr(WsbLoadFromStream(pStream, &m_AccessTime));
|
||
WsbAssertHr(WsbLoadFromStream(pStream, &m_BagId));
|
||
WsbAssertHr(WsbLoadFromStream(pStream, &m_BagOffset));
|
||
WsbAssertHr(WsbLoadFromStream(pStream, &m_FileId));
|
||
WsbAssertHr(WsbLoadFromStream(pStream, &m_IsWaitingForClose));
|
||
WsbAssertHr(WsbLoadFromStream(pStream, &m_Offset));
|
||
WsbAssertHr(WsbLoadFromStream(pStream, &m_Path, 0));
|
||
WsbAssertHr(WsbLoadFromStream(pStream, &m_Size));
|
||
WsbAssertHr(WsbLoadFromStream(pStream, &m_RecallTime));
|
||
WsbAssertHr(WsbLoadFromStream(pStream, &m_FileUSN));
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::Load"),
|
||
OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT CFsaPremigratedRec::Print
|
||
(
|
||
IN IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbEntity::Print
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::Print"), OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pStream, E_POINTER);
|
||
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" AccessTime = %ls"),
|
||
WsbFiletimeAsString(FALSE, m_AccessTime)));
|
||
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" BagId = %ls"),
|
||
WsbGuidAsString(m_BagId)));
|
||
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(", BagOffset = %ls"),
|
||
WsbLonglongAsString(m_BagOffset)));
|
||
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(", FileId = %ls"),
|
||
WsbLonglongAsString(m_FileId)));
|
||
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Waiting for close = %ls"),
|
||
WsbBoolAsString(m_IsWaitingForClose)));
|
||
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(", Offset = %ls"),
|
||
WsbLonglongAsString(m_Offset)));
|
||
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(", Path = %ls"),
|
||
static_cast<OLECHAR*>(m_Path)));
|
||
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(", Size = %ls"),
|
||
WsbLonglongAsString(m_Size)));
|
||
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" RecallTime = %ls"),
|
||
WsbFiletimeAsString(FALSE, m_RecallTime)));
|
||
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(", File USN = %ls"),
|
||
WsbLonglongAsString(m_FileUSN)));
|
||
WsbAffirmHr(CWsbDbEntity::Print(pStream));
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::Print"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT CFsaPremigratedRec::Save
|
||
(
|
||
IN IStream* pStream,
|
||
IN BOOL clearDirty
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPersistStream::Save
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty));
|
||
|
||
try {
|
||
WsbAssert(0 != pStream, E_POINTER);
|
||
WsbAssertHr(WsbSaveToStream(pStream, m_AccessTime));
|
||
WsbAssertHr(WsbSaveToStream(pStream, m_BagId));
|
||
WsbAssertHr(WsbSaveToStream(pStream, m_BagOffset));
|
||
WsbAssertHr(WsbSaveToStream(pStream, m_FileId));
|
||
WsbAssertHr(WsbSaveToStream(pStream, m_IsWaitingForClose));
|
||
WsbAssertHr(WsbSaveToStream(pStream, m_Offset));
|
||
WsbAssertHr(WsbSaveToStream(pStream, m_Path));
|
||
WsbAssertHr(WsbSaveToStream(pStream, m_Size));
|
||
WsbAssertHr(WsbSaveToStream(pStream, m_RecallTime));
|
||
WsbAssertHr(WsbSaveToStream(pStream, m_FileUSN));
|
||
|
||
// 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("CFsaPremigratedRec::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::SetAccessTime(
|
||
IN FILETIME AccessTime
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::SetAccessTime
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::SetAccessTime"),OLESTR(""));
|
||
|
||
try {
|
||
m_AccessTime = AccessTime;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::SetAccessTime"),
|
||
OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::SetFromScanItem(
|
||
IN IFsaScanItem* pScanItem,
|
||
IN LONGLONG offset,
|
||
IN LONGLONG size,
|
||
IN BOOL isWaitingForClose
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::SetFromScanItem
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
FSA_PLACEHOLDER placeholder;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::SetFromScanItem"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pScanItem, E_POINTER);
|
||
|
||
// Get the name of the file
|
||
WsbAffirmHr(pScanItem->GetPathAndName(0, &m_Path, 0));
|
||
WsbTrace(OLESTR("CFsaPremigratedRec::SetFromScanItem: path = %ls\n"),
|
||
static_cast<WCHAR*>(m_Path));
|
||
|
||
// Get the file id.
|
||
WsbAffirmHr(pScanItem->GetFileId(&m_FileId));
|
||
|
||
// Get the access time, offset, and size.
|
||
WsbAffirmHr(pScanItem->GetAccessTime(&m_AccessTime));
|
||
WsbTrace(OLESTR("CFsaPremigratedRec::SetFromScanItem: access time = %ls\n"),
|
||
WsbFiletimeAsString(FALSE, m_AccessTime));
|
||
m_Offset = offset;
|
||
m_Size = size;
|
||
m_IsWaitingForClose = isWaitingForClose;
|
||
|
||
// Get the bag id and offset.
|
||
WsbAffirmHr(pScanItem->GetPlaceholder(offset, size, &placeholder));
|
||
m_BagId = placeholder.bagId;
|
||
m_BagOffset = placeholder.fileStart;
|
||
m_RecallTime = placeholder.recallTime;
|
||
WsbTrace(OLESTR("CFsaPremigratedRec::SetFromScanItem: recall time = %ls\n"),
|
||
WsbFiletimeAsString(FALSE, m_RecallTime));
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::SetFromScanItem"),
|
||
OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::SetBagId(
|
||
IN GUID BagId
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::SetBagId
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::SetBagId"),OLESTR(""));
|
||
|
||
m_BagId = BagId;
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::SetBagId"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::SetBagOffset(
|
||
IN LONGLONG BagOffset
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::SetBagOffset
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::SetBagOffset"),OLESTR(""));
|
||
|
||
m_BagOffset = BagOffset;
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::SetBagOffset"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::SetFileId(
|
||
IN LONGLONG FileId
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::SetFileId
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::SetFileId"),OLESTR("FileId = %ls"),
|
||
WsbLonglongAsString(FileId));
|
||
|
||
try {
|
||
m_FileId = FileId;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::SetFileId"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::SetFileUSN(
|
||
IN LONGLONG FileUSN
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::SetFileUSN
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::SetFileUSN"),OLESTR("File USN = %ls"),
|
||
WsbLonglongAsString(FileUSN));
|
||
|
||
try {
|
||
m_FileUSN = FileUSN;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::SetFileUSN"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::SetIsWaitingForClose(
|
||
IN BOOL isWaiting
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::SetIsWaitingForClose
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::SetIsWaitingForClose"),OLESTR(""));
|
||
|
||
m_IsWaitingForClose = isWaiting;
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::SetIsWaitingForClose"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::SetOffset(
|
||
IN LONGLONG Offset
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::SetOffset
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::SetOffset"),OLESTR(""));
|
||
|
||
try {
|
||
m_Offset = Offset;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::SetOffset"),
|
||
OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::SetPath(
|
||
IN OLECHAR* Path
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::SetPath
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::SetPath"),OLESTR(""));
|
||
|
||
try {
|
||
m_Path = Path;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::SetPath"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::SetRecallTime(
|
||
IN FILETIME time
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::SetRecallTime
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::SetRecallTime"),OLESTR(""));
|
||
|
||
try {
|
||
m_RecallTime = time;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::SetRecallTime"),
|
||
OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::SetSize(
|
||
IN LONGLONG Size
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IFsaPremigratedRec::SetSize
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CFsaPremigratedRec::SetSize"),OLESTR(""));
|
||
|
||
try {
|
||
m_Size = Size;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CFsaPremigratedRec::SetSize"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CFsaPremigratedRec::UpdateKey(
|
||
IWsbDbKey *pKey
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbDbEntity::UpdateKey
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
ULONG KeyType;
|
||
|
||
WsbAffirmHr(pKey->GetType(&KeyType));
|
||
switch (KeyType) {
|
||
case PREMIGRATED_ACCESS_TIME_KEY_TYPE:
|
||
WsbAffirmHr(pKey->SetToBool(m_IsWaitingForClose));
|
||
WsbAffirmHr(pKey->AppendFiletime(m_AccessTime));
|
||
WsbAffirmHr(pKey->AppendGuid(m_BagId));
|
||
WsbAffirmHr(pKey->AppendLonglong(m_BagOffset));
|
||
break;
|
||
|
||
case PREMIGRATED_BAGID_OFFSETS_KEY_TYPE:
|
||
WsbAffirmHr(pKey->SetToGuid(m_BagId));
|
||
WsbAffirmHr(pKey->AppendLonglong(m_BagOffset));
|
||
WsbAffirmHr(pKey->AppendLonglong(m_Offset));
|
||
break;
|
||
|
||
case PREMIGRATED_SIZE_KEY_TYPE:
|
||
WsbAffirmHr(pKey->SetToBool(m_IsWaitingForClose));
|
||
WsbAffirmHr(pKey->AppendLonglong(m_Size));
|
||
WsbAffirmHr(pKey->AppendGuid(m_BagId));
|
||
WsbAffirmHr(pKey->AppendLonglong(m_BagOffset));
|
||
break;
|
||
}
|
||
} WsbCatch(hr);
|
||
|
||
return(hr);
|
||
}
|