windows-nt/Source/XPSP1/NT/com/mobile/syncmgr/lib/validate.cpp
2020-09-26 16:20:57 +08:00

291 lines
7.6 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: validate.cpp
//
// Contents: validation routines
//
// Classes:
//
// Notes:
//
// History: 13-Aug-98 rogerg Created.
//
//--------------------------------------------------------------------------
#include "lib.h"
//+---------------------------------------------------------------------------
//
// function: IsValidSyncMgrItem
//
// Synopsis: validates SYNCMGRITEM
//
// Arguments:
//
// Returns: TRUE if valid.
//
// Modifies:
//
// History: 13-Aug-98 rogerg Created.
//
//+---------------------------------------------------------------------------
BOOL IsValidSyncMgrItem(SYNCMGRITEM *poffItem)
{
BOOL fValid = TRUE;
if (NULL == poffItem)
{
Assert(poffItem);
return FALSE;
}
__try
{
if (poffItem->cbSize == sizeof(SYNCMGRITEMNT5B2))
{
// this is an old NT5b2 stucture. not really anything
// to do other than make sure flags are valid for ths struct.
Assert(0 == (poffItem->dwFlags & ~(SYNCMGRITEM_ITEMFLAGMASKNT5B2)));
// for BETA2 go ahead and fall through since didn't validate
// and we can remove this.
}
else if (poffItem->cbSize == sizeof(SYNCMGRITEM))
{
if ( (0 != (poffItem->dwFlags & ~(SYNCMGRITEM_ITEMFLAGMASK) ) )
|| (SYNCMGRITEMSTATE_CHECKED < poffItem->dwItemState) )
{
AssertSz(0,"Invalid SYNCMGRITEM returned from Enumerator");
Assert(0 == (poffItem->dwFlags & ~(SYNCMGRITEM_ITEMFLAGMASK)));
Assert(SYNCMGRITEMSTATE_CHECKED >= poffItem->dwItemState);
fValid = FALSE;
}
else if (GUID_NULL == poffItem->ItemID)
{
AssertSz(0,"ItemID Cannot be GUID_NULL");
fValid = FALSE;
}
}
else
{
AssertSz(0,"Invalid SYNCMGRITEM returned from Enumerator");
fValid = FALSE;
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
//bogus non-NULL pointer.
AssertSz(0,"Bogus, non-NULL SYNCMGRITEM pointer returned from Enumerator");
fValid = FALSE;
}
return fValid;
}
//+---------------------------------------------------------------------------
//
// function: IsValidSyncMgrHandlerInfo
//
// Synopsis: validates SYNCMGRITEM
//
// Arguments:
//
// Returns: TRUE if valid.
//
// Modifies:
//
// History: 13-Aug-98 rogerg Created.
//
//+---------------------------------------------------------------------------
BOOL IsValidSyncMgrHandlerInfo(LPSYNCMGRHANDLERINFO pSyncMgrHandlerInfo)
{
// validate the arguments.
__try
{
if ( (pSyncMgrHandlerInfo->cbSize != sizeof(SYNCMGRHANDLERINFO))
|| (0 != (pSyncMgrHandlerInfo->SyncMgrHandlerFlags & ~(SYNCMGRHANDLERFLAG_MASK))) )
{
AssertSz(0,"Invalid HandlerInfo Size returned from GetHandlerInfo");
Assert(pSyncMgrHandlerInfo->cbSize == sizeof(SYNCMGRHANDLERINFO));
Assert(0 == (pSyncMgrHandlerInfo->SyncMgrHandlerFlags & ~(SYNCMGRHANDLERFLAG_MASK)));
return FALSE;
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
AssertSz(0,"Bogus, non-NULL LPSYNCMGRHANDLERINFO pointer.");
return FALSE;
}
return TRUE;
}
//+---------------------------------------------------------------------------
//
// Function: IsValidSyncProgressItem, private
//
// Synopsis: Determines if the syncprogress item structure is valid
//
// Arguments: [lpProgItem] - Pointer to SyncProgress Item to validate.
//
// Returns: Returns true is the structure is valid.
//
// Modifies:
//
// History: 17-Nov-97 rogerg Created.
//
//----------------------------------------------------------------------------
BOOL IsValidSyncProgressItem(LPSYNCMGRPROGRESSITEM lpProgItem)
{
if (NULL == lpProgItem)
{
Assert(lpProgItem);
return FALSE;
}
__try
{
if (lpProgItem->cbSize != sizeof(SYNCMGRPROGRESSITEM))
{
AssertSz(0,"SYNCMGRPROGRESSITEM cbSize Incorrect");
return FALSE;
}
if (IsBadReadPtr(lpProgItem,sizeof(SYNCMGRPROGRESSITEM)) )
{
AssertSz(0,"ProgressItem Structure Memory Invalid");
return FALSE;
}
if (lpProgItem->mask >= (SYNCMGRPROGRESSITEM_MAXVALUE << 1))
{
AssertSz(0,"Invalid ProgressItem Mask");
return FALSE;
}
if (SYNCMGRPROGRESSITEM_STATUSTYPE & lpProgItem->mask)
{
if (lpProgItem->dwStatusType > SYNCMGRSTATUS_RESUMING)
{
AssertSz(0,"Unknown StatusType passed to Progress");
return FALSE;
}
}
if (SYNCMGRPROGRESSITEM_STATUSTEXT & lpProgItem->mask)
{
if (IsBadStringPtr(lpProgItem->lpcStatusText,-1) )
{
AssertSz(0,"Invalid status text");
return FALSE;
}
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
AssertSz(0,"Bogus, non-NULL LPSYNCMGRPROGRESSITEM pointer.");
return FALSE;
}
return TRUE;
}
//+---------------------------------------------------------------------------
//
// Function: IsValidSyncLogErrorInfo, private
//
// Synopsis: Determines if the ErrorInfomation is valid,
//
// Arguments: [lpLogError] - Pointer to LogError structure to validate.
//
// Returns: Returns true is the structure is valid.
//
// Modifies:
//
// History: 17-Nov-97 rogerg Created.
//
//----------------------------------------------------------------------------
#define SYNCMGRLOGERROR_VALIDMASK (SYNCMGRLOGERROR_ERRORFLAGS | SYNCMGRLOGERROR_ERRORID | SYNCMGRLOGERROR_ITEMID)
#define SYNCMGRERRROFLAG_MASK (SYNCMGRERRORFLAG_ENABLEJUMPTEXT)
BOOL IsValidSyncLogErrorInfo(DWORD dwErrorLevel,const WCHAR *lpcErrorText,
LPSYNCMGRLOGERRORINFO lpSyncLogError)
{
if (SYNCMGRLOGLEVEL_ERROR < dwErrorLevel)
{
AssertSz(0,"Invalid ErrorLevel");
return FALSE;
}
// must provide error text
if ( (NULL == lpcErrorText) ||
IsBadStringPtr(lpcErrorText,-1) )
{
AssertSz(0,"Invalid ErrorText");
return FALSE;
}
// Optional to have the LogError information.
__try
{
if (lpSyncLogError)
{
if (lpSyncLogError->cbSize != sizeof(SYNCMGRLOGERRORINFO))
{
AssertSz(0,"Unknown LogError cbSize");
return FALSE;
}
if (IsBadReadPtr(lpSyncLogError,sizeof(SYNCMGRLOGERRORINFO)) )
{
AssertSz(0,"Log Structure Memory Invalid");
return FALSE;
}
if (0 != (lpSyncLogError->mask & ~(SYNCMGRLOGERROR_VALIDMASK)) )
{
AssertSz(0,"Invalid LogError Mask");
return FALSE;
}
if (lpSyncLogError->mask & SYNCMGRLOGERROR_ERRORFLAGS)
{
if (0 != (~(SYNCMGRERRROFLAG_MASK) & lpSyncLogError->dwSyncMgrErrorFlags))
{
AssertSz(0,"Invalid LogError ErrorFlags");
return FALSE;
}
}
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
AssertSz(0,"Bogus, non-NULL LPSYNCMGRLOGERRORINFO pointer.");
return FALSE;
}
return TRUE;
}