windows-nt/Source/XPSP1/NT/shell/lib/valid.c
2020-09-26 16:20:57 +08:00

225 lines
4.2 KiB
C

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