50 lines
1,000 B
C
50 lines
1,000 B
C
/* CheckPtr.c
|
|
Pointer validation routine
|
|
Written by t-jasonf.
|
|
*/
|
|
|
|
#include "windows.h"
|
|
#include "dll.h"
|
|
|
|
|
|
/* CheckPointer()
|
|
Parameters :
|
|
LPVOID lp - pointer to check
|
|
int nREADWRITE - READ_ACCESS or WRITE_ACCESS
|
|
Returns:
|
|
0 if process does not have that kind of access to memory at lp.
|
|
1 if process does have access.
|
|
*/
|
|
int CheckPointer (void *lp, int nReadWrite)
|
|
{
|
|
char ch;
|
|
int iRet;
|
|
|
|
try
|
|
{
|
|
switch (nReadWrite)
|
|
{
|
|
case READ_ACCESS:
|
|
ch = *((volatile char *)lp);
|
|
break;
|
|
case WRITE_ACCESS:
|
|
ch = *((volatile char *)lp);
|
|
*((volatile char *)lp) = ch;
|
|
break;
|
|
}
|
|
iRet = 1;
|
|
}
|
|
except ( /*
|
|
GetExceptionCode == STATUS_ACCESS_VIOLATION
|
|
? EXCEPTION_EXECUTE_HANDLER
|
|
: EXCEPTION_CONTINUE_SEARCH
|
|
*/
|
|
EXCEPTION_EXECUTE_HANDLER
|
|
)
|
|
{
|
|
iRet = 0;
|
|
}
|
|
|
|
return iRet;
|
|
}
|