245 lines
4.1 KiB
C++
245 lines
4.1 KiB
C++
/*++
|
|
|
|
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)));
|
|
}
|
|
|