//+------------------------------------------------------------------------- // // 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; }