isbad.c
来自「一个类似windows」· C语言 代码 · 共 254 行
C
254 行
/* $Id: isbad.c 21253 2006-03-08 21:33:04Z audit $
*
* lib/kernel32/mem/isbad.c
*
* ReactOS Operating System
*
*/
#include <k32.h>
#define NDEBUG
#include "../include/debug.h"
/* FIXME: Stubs. What is it for? */
/*
* @implemented
*/
UINT
wcsnlen (
LPCWSTR lpsz,
UINT ucchMax
)
{
UINT i = 0;
while( i < ucchMax && lpsz[i] ) i++;
return i;
}
/* FIXME: Stubs. What is it for? */
/*
* @implemented
*/
UINT
strnlen (
LPCSTR lpsz,
UINT uiMax
)
{
UINT i = 0;
while( i < uiMax && lpsz[i] ) i++;
return i;
}
/* --- --- --- */
/*
* @implemented
*/
BOOL
STDCALL
IsBadReadPtr (
CONST VOID * lp,
UINT ucb
)
{
MEMORY_BASIC_INFORMATION MemoryInformation;
if ( ucb == 0 )
{
return TRUE;
}
VirtualQuery (
lp,
& MemoryInformation,
sizeof (MEMORY_BASIC_INFORMATION)
);
if ( MemoryInformation.State != MEM_COMMIT )
{
return TRUE;
}
if ( MemoryInformation.RegionSize < ucb )
{
return TRUE;
}
if ( MemoryInformation.Protect == PAGE_EXECUTE )
{
return TRUE;
}
if ( MemoryInformation.Protect == PAGE_NOACCESS )
{
return TRUE;
}
return FALSE;
}
/*
* @implemented
*/
BOOL
STDCALL
IsBadHugeReadPtr (
CONST VOID * lp,
UINT ucb
)
{
return IsBadReadPtr (lp, ucb);
}
/*
* @implemented
*/
BOOL
STDCALL
IsBadCodePtr (
FARPROC lpfn
)
{
MEMORY_BASIC_INFORMATION MemoryInformation;
VirtualQuery (
lpfn,
& MemoryInformation,
sizeof (MEMORY_BASIC_INFORMATION)
);
if ( MemoryInformation.State != MEM_COMMIT )
{
return TRUE;
}
if ( (MemoryInformation.Protect == PAGE_EXECUTE)
|| (MemoryInformation.Protect == PAGE_EXECUTE_READ)
)
{
return FALSE;
}
return TRUE;
}
/*
* @implemented
*/
BOOL
STDCALL
IsBadWritePtr (
LPVOID lp,
UINT ucb
)
{
MEMORY_BASIC_INFORMATION MemoryInformation;
if ( ucb == 0 )
{
return TRUE;
}
VirtualQuery (
lp,
& MemoryInformation,
sizeof (MEMORY_BASIC_INFORMATION)
);
if ( MemoryInformation.State != MEM_COMMIT )
{
return TRUE;
}
if ( MemoryInformation.RegionSize < ucb )
{
return TRUE;
}
if ( MemoryInformation.Protect == PAGE_READONLY)
{
return TRUE;
}
if ( (MemoryInformation.Protect == PAGE_EXECUTE)
|| (MemoryInformation.Protect == PAGE_EXECUTE_READ)
)
{
return TRUE;
}
if ( MemoryInformation.Protect == PAGE_NOACCESS )
{
return TRUE;
}
return FALSE;
}
/*
* @implemented
*/
BOOL
STDCALL
IsBadHugeWritePtr (
LPVOID lp,
UINT ucb
)
{
return IsBadWritePtr (lp, ucb);
}
/*
* @implemented
*/
BOOL
STDCALL
IsBadStringPtrW (
LPCWSTR lpsz,
UINT ucchMax
)
{
UINT Len = wcsnlen (
lpsz + 1,
ucchMax >> 1
);
return IsBadReadPtr (
lpsz,
Len << 1
);
}
/*
* @implemented
*/
BOOL
STDCALL
IsBadStringPtrA (
LPCSTR lpsz,
UINT ucchMax
)
{
UINT Len = strnlen (
lpsz + 1,
ucchMax
);
return IsBadReadPtr (
lpsz,
Len
);
}
/* EOF */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?