/*++ Copyright (c) 1997 Microsoft Corporation Module Name: valid.cpp Abstract: Author: Vlad Sadovsky (vlads) 26-Jun-1997 Revision History: 26-Jun-1997 VladS created --*/ #include "cplusinc.h" #include "sticomm.h" // // Validation code // BOOL IsValidHWND( HWND hwnd) { /* Ask User if this is a valid window. */ return(IsWindow(hwnd)); } BOOL IsValidHMENU( HMENU hmenu) { return IsMenu(hmenu); } BOOL IsValidHANDLE( HANDLE hnd) { return(NULL != hnd && INVALID_HANDLE_VALUE != hnd); } BOOL IsValidHANDLE2( HANDLE hnd) { return(hnd != INVALID_HANDLE_VALUE); } BOOL IsValidShowCmd( int nShow) { BOOL bResult; switch (nShow) { case SW_HIDE: case SW_SHOWNORMAL: case SW_SHOWMINIMIZED: case SW_SHOWMAXIMIZED: case SW_SHOWNOACTIVATE: case SW_SHOW: case SW_MINIMIZE: case SW_SHOWMINNOACTIVE: case SW_SHOWNA: case SW_RESTORE: case SW_SHOWDEFAULT: bResult = TRUE; break; default: bResult = FALSE; //TraceMsg(TF_ERROR, "IsValidShowCmd(): Invalid show command %d.",nShow); break; } return(bResult); } BOOL IsValidPathA( LPCSTR pcszPath) { return(IS_VALID_STRING_PTRA(pcszPath, MAX_PATH) && ((UINT)lstrlenA(pcszPath) < MAX_PATH)); } BOOL IsValidPathW( LPCWSTR pcszPath) { return(IS_VALID_STRING_PTRW(pcszPath, MAX_PATH) && ((UINT)lstrlenW(pcszPath) < MAX_PATH)); } BOOL IsValidPathResultA( HRESULT hr, LPCSTR pcszPath, UINT cchPathBufLen) { return((hr == S_OK && (IsValidPathA(pcszPath)) && ((UINT)lstrlenA(pcszPath) < cchPathBufLen)) || (hr != S_OK && (! cchPathBufLen || ! pcszPath || ! *pcszPath))); } BOOL IsValidPathResultW( HRESULT hr, LPCWSTR pcszPath, UINT cchPathBufLen) { return((hr == S_OK && (IsValidPathW(pcszPath)) && ((UINT)lstrlenW(pcszPath) < cchPathBufLen)) || (hr != S_OK && (! cchPathBufLen || ! pcszPath || ! *pcszPath))); } BOOL IsValidExtensionA( LPCSTR pcszExt) { return(IS_VALID_STRING_PTRA(pcszExt, MAX_PATH) && (lstrlenA(pcszExt) < MAX_PATH) && (*pcszExt == '.')); } BOOL IsValidExtensionW( LPCWSTR pcszExt) { return(IS_VALID_STRING_PTRW(pcszExt, MAX_PATH) && (lstrlenW(pcszExt) < MAX_PATH) && (*pcszExt == L'.')); } BOOL IsValidIconIndexA( HRESULT hr, LPCSTR pcszIconFile, UINT cchIconFileBufLen, int niIcon) { return((IsValidPathResultA(hr, pcszIconFile, cchIconFileBufLen)) && (hr == S_OK || ! niIcon)); } BOOL IsValidIconIndexW( HRESULT hr, LPCWSTR pcszIconFile, UINT cchIconFileBufLen, int niIcon) { return((IsValidPathResultW(hr, pcszIconFile, cchIconFileBufLen)) && (hr == S_OK || ! niIcon)); } BOOL IsStringContainedA(LPCSTR pcszBigger, LPCSTR pcszSuffix) { ASSERT(IS_VALID_STRING_PTRA(pcszBigger, -1)); ASSERT(IS_VALID_STRING_PTRA(pcszSuffix, -1)); return (pcszSuffix >= pcszBigger && pcszSuffix <= pcszBigger + lstrlenA(pcszBigger)); } BOOL IsStringContainedW(LPCWSTR pcszBigger, LPCWSTR pcszSuffix) { ASSERT(IS_VALID_STRING_PTRW(pcszBigger, -1)); ASSERT(IS_VALID_STRING_PTRW(pcszSuffix, -1)); return (pcszSuffix >= pcszBigger && pcszSuffix <= pcszBigger + lstrlenW(pcszBigger)); } BOOL AfxIsValidString( LPCWSTR lpsz, int nLength ) { if (lpsz == NULL) return FALSE; return ::IsBadStringPtrW(lpsz, nLength) == 0; } BOOL AfxIsValidString( LPCSTR lpsz, int nLength ) { if (lpsz == NULL) return FALSE; return ::IsBadStringPtrA(lpsz, nLength) == 0; } BOOL AfxIsValidAddress( const void* lp, UINT nBytes, BOOL bReadWrite ) { // simple version using Win-32 APIs for pointer validation. return (lp != NULL && !IsBadReadPtr(lp, nBytes) && (!bReadWrite || !IsBadWritePtr((LPVOID)lp, nBytes))); }