// // Validation code // #include "stock.h" #pragma hdrstop // // Validations // // Hack: size of the internal data structures, as defined in comctl32\da.c. // We measure this by the number of DWORD-sized fields. #ifdef DEBUG #define CB_DSA (6 * sizeof(DWORD)) #define CB_DPA (6 * sizeof(DWORD)) #else #define CB_DSA (5 * sizeof(DWORD)) #define CB_DPA (5 * sizeof(DWORD)) #endif BOOL IsValidHDSA( HDSA hdsa) { return (IS_VALID_WRITE_BUFFER(hdsa, BYTE, CB_DSA)); } BOOL IsValidHDPA( HDPA hdpa) { return (IS_VALID_WRITE_BUFFER(hdpa, BYTE, CB_DPA)); } BOOL IsValidPIDL( LPCITEMIDLIST pidl) { return (IS_VALID_READ_PTR(pidl, USHORT) && IS_VALID_READ_BUFFER((LPBYTE)pidl+sizeof(USHORT), BYTE, pidl->mkid.cb) && (0 == _ILNext(pidl)->mkid.cb || IS_VALID_PIDL(_ILNext(pidl)))); } 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) && EVAL((UINT)lstrlenA(pcszPath) < MAX_PATH)); } BOOL IsValidPathW( LPCWSTR pcszPath) { return(IS_VALID_STRING_PTRW(pcszPath, MAX_PATH) && EVAL((UINT)lstrlenW(pcszPath) < MAX_PATH)); } BOOL IsValidPathResultA( HRESULT hr, LPCSTR pcszPath, UINT cchPathBufLen) { return((hr == S_OK && EVAL(IsValidPathA(pcszPath)) && EVAL((UINT)lstrlenA(pcszPath) < cchPathBufLen)) || (hr != S_OK && EVAL(! cchPathBufLen || ! pcszPath || ! *pcszPath))); } BOOL IsValidPathResultW( HRESULT hr, LPCWSTR pcszPath, UINT cchPathBufLen) { return((hr == S_OK && EVAL(IsValidPathW(pcszPath)) && EVAL((UINT)lstrlenW(pcszPath) < cchPathBufLen)) || (hr != S_OK && EVAL(! cchPathBufLen || ! pcszPath || ! *pcszPath))); } BOOL IsValidExtensionA( LPCSTR pcszExt) { return(IS_VALID_STRING_PTRA(pcszExt, MAX_PATH) && EVAL(lstrlenA(pcszExt) < MAX_PATH) && EVAL(*pcszExt == '.')); } BOOL IsValidExtensionW( LPCWSTR pcszExt) { return(IS_VALID_STRING_PTRW(pcszExt, MAX_PATH) && EVAL(lstrlenW(pcszExt) < MAX_PATH) && EVAL(*pcszExt == TEXTW('.'))); } BOOL IsValidIconIndexA( HRESULT hr, LPCSTR pcszIconFile, UINT cchIconFileBufLen, int niIcon) { return(EVAL(IsValidPathResultA(hr, pcszIconFile, cchIconFileBufLen)) && EVAL(hr == S_OK || ! niIcon)); } BOOL IsValidIconIndexW( HRESULT hr, LPCWSTR pcszIconFile, UINT cchIconFileBufLen, int niIcon) { return(EVAL(IsValidPathResultW(hr, pcszIconFile, cchIconFileBufLen)) && EVAL(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)); }