mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
6.5 KiB
142 lines
6.5 KiB
/***************************************************************************\
|
|
* Module Name: winerrp.h
|
|
*
|
|
* Copyright (c) 1985-91, Microsoft Corporation
|
|
*
|
|
* Private procedure declarations, constant definitions and macros for
|
|
* dealing with Window's API error return values.
|
|
*
|
|
\***************************************************************************/
|
|
|
|
#ifndef _WINERRP_
|
|
#define _WINERRP_
|
|
|
|
/***************************************************************************\
|
|
*
|
|
* Error handling functions
|
|
*
|
|
\***************************************************************************/
|
|
|
|
#ifndef _USERSRV_
|
|
VOID UserSetLastError(DWORD dwErrCode);
|
|
VOID SetLastNtError(NTSTATUS);
|
|
#endif // !_USERSRV_
|
|
|
|
/*
|
|
* Some RIP flags and other interesting values.
|
|
*/
|
|
#define RIP_ERROR 0x10000000
|
|
#define RIP_WARNING 0x20000000
|
|
#define RIP_VERBOSE 0x40000000
|
|
|
|
#define RIP_COMPBITS 0x000f0000
|
|
#define RIP_USER 0x00010000
|
|
#define RIP_USERSRV 0x00020000
|
|
#define RIP_USERRTL 0x00030000
|
|
#define RIP_GDI 0x00040000
|
|
#define RIP_GDISRV 0x00050000
|
|
#define RIP_GDIRTL 0x00060000
|
|
#define RIP_BASE 0x00070000
|
|
#define RIP_BASESRV 0x00080000
|
|
#define RIP_BASERTL 0x00090000
|
|
#define RIP_DISPLAYDRV 0x000a0000
|
|
#define RIP_CONSRV 0x000b0000
|
|
#define RIP_USERKRNL 0x000c0000
|
|
#ifdef FE_IME
|
|
#define RIP_IMM 0x000d0000
|
|
#endif
|
|
|
|
#ifdef DEBUG
|
|
|
|
BOOL _cdecl VRipOutput(DWORD idErr, DWORD flags, LPSTR pszFile, int iLine, LPSTR pszFmt, ...);
|
|
BOOL RipOutput(DWORD idErr, DWORD flags, LPSTR pszFile, int iLine, LPSTR pszErr, PEXCEPTION_POINTERS pexi);
|
|
|
|
/***************************************************************************\
|
|
* Macros to set the last error and print a message to the debugger.
|
|
* Use one of the following flags:
|
|
*
|
|
* RIP_ERROR: A serious error. Will be printed and
|
|
* will cause a debug break by default.
|
|
*
|
|
* RIP_WARNING: A less serious error. Will be printed but
|
|
* will not cause a debug break by default.
|
|
*
|
|
* RIP_VERBOSE: A common error. Will not be printed and
|
|
* will not cause a debug break by default.
|
|
\***************************************************************************/
|
|
|
|
/*
|
|
* Use RIPERR to set a Win32 error code as the last error and print a message.
|
|
*/
|
|
|
|
#define CALLRIP(x) \
|
|
do { \
|
|
if x { \
|
|
DbgBreakPoint(); \
|
|
} \
|
|
} while (FALSE) \
|
|
|
|
#define RIPERR0(idErr, flags, szFmt) CALLRIP((VRipOutput(idErr, (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt)))
|
|
#define RIPERR1(idErr, flags, szFmt, p1) CALLRIP((VRipOutput(idErr, (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt, p1)))
|
|
#define RIPERR2(idErr, flags, szFmt, p1, p2) CALLRIP((VRipOutput(idErr, (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt, p1, p2)))
|
|
#define RIPERR3(idErr, flags, szFmt, p1, p2, p3) CALLRIP((VRipOutput(idErr, (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt, p1, p2, p3)))
|
|
#define RIPERR4(idErr, flags, szFmt, p1, p2, p3, p4) CALLRIP((VRipOutput(idErr, (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt, p1, p2, p3, p4)))
|
|
|
|
/*
|
|
* Use RIPNTERR to set an NTSTATUS as the last error and print a message.
|
|
*/
|
|
#define RIPNTERR0(status, flags, szFmt) CALLRIP((VRipOutput(RtlNtStatusToDosError(status), (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt)))
|
|
#define RIPNTERR1(status, flags, szFmt, p1) CALLRIP((VRipOutput(RtlNtStatusToDosError(status), (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt, p1)))
|
|
#define RIPNTERR2(status, flags, szFmt, p1, p2) CALLRIP((VRipOutput(RtlNtStatusToDosError(status), (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt, p1, p2)))
|
|
#define RIPNTERR3(status, flags, szFmt, p1, p2, p3) CALLRIP((VRipOutput(RtlNtStatusToDosError(status), (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt, p1, p2, p3)))
|
|
#define RIPNTERR4(status, flags, szFmt, p1, p2, p3, p4) CALLRIP((VRipOutput(RtlNtStatusToDosError(status), (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt, p1, p2, p3, p4)))
|
|
|
|
/*
|
|
* Use RIPMSG to print a message without setting the last error.
|
|
*/
|
|
#define RIPMSG0(flags, szFmt) CALLRIP((VRipOutput(0, (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt)))
|
|
#define RIPMSG1(flags, szFmt, p1) CALLRIP((VRipOutput(0, (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt, p1)))
|
|
#define RIPMSG2(flags, szFmt, p1, p2) CALLRIP((VRipOutput(0, (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt, p1, p2)))
|
|
#define RIPMSG3(flags, szFmt, p1, p2, p3) CALLRIP((VRipOutput(0, (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt, p1, p2, p3)))
|
|
#define RIPMSG4(flags, szFmt, p1, p2, p3, p4) CALLRIP((VRipOutput(0, (flags) | RIP_COMPONENT, __FILE__, __LINE__, szFmt, p1, p2, p3, p4)))
|
|
|
|
/*
|
|
* Note: the only way to have multiple statements in a macro treated
|
|
* as a single statement and not cause side effects is to put it
|
|
* in a do-while loop.
|
|
*/
|
|
#define UserAssert(exp) \
|
|
do { \
|
|
if (!(exp)) { \
|
|
RIPMSG0(RIP_ERROR, "Assertion failed: " #exp); \
|
|
} \
|
|
} while (FALSE)
|
|
|
|
#define UserVerify(exp) UserAssert(exp)
|
|
|
|
#else
|
|
|
|
#define RIPERR0(idErr, flags, szFmt) UserSetLastError(idErr)
|
|
#define RIPERR1(idErr, flags, szFmt, p1) UserSetLastError(idErr)
|
|
#define RIPERR2(idErr, flags, szFmt, p1, p2) UserSetLastError(idErr)
|
|
#define RIPERR3(idErr, flags, szFmt, p1, p2, p3) UserSetLastError(idErr)
|
|
#define RIPERR4(idErr, flags, szFmt, p1, p2, p3, p4) UserSetLastError(idErr)
|
|
|
|
#define RIPNTERR0(idErr, flags, szFmt) SetLastNtError(idErr)
|
|
#define RIPNTERR1(idErr, flags, szFmt, p1) SetLastNtError(idErr)
|
|
#define RIPNTERR2(idErr, flags, szFmt, p1, p2) SetLastNtError(idErr)
|
|
#define RIPNTERR3(idErr, flags, szFmt, p1, p2, p3) SetLastNtError(idErr)
|
|
#define RIPNTERR4(idErr, flags, szFmt, p1, p2, p3, p4) SetLastNtError(idErr)
|
|
|
|
#define RIPMSG0(flags, szFmt)
|
|
#define RIPMSG1(flags, szFmt, p1)
|
|
#define RIPMSG2(flags, szFmt, p1, p2)
|
|
#define RIPMSG3(flags, szFmt, p1, p2, p3)
|
|
#define RIPMSG4(flags, szFmt, p1, p2, p3, p4)
|
|
|
|
#define UserAssert(exp)
|
|
#define UserVerify(exp) exp
|
|
|
|
#endif
|
|
|
|
#endif // !_WINERRP_
|