81#define stricmp _stricmp
84# define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
87#define CONST_STRCPY(dst, src) \
88 do { if ((dst)) { memcpy(dst, src, sizeof(src)); } } while (0);
90#define RPN_OP_STACK_SIZE 256
91#define RPN_VALUE_STACK_SIZE 256
258 for (ul = 0; ul <
Stack->Sp; ul++)
433 LONG OperatorOffset = -1;
460 if (
p[0] ==
'\0' ||
p[0] ==
')' ||
p[0] ==
']')
467 OperatorOffset = CharacterOffset++;
470 HavePoppedOperator =
FALSE;
479 HavePoppedOperator =
TRUE;
507 else if (pend ==
p + 1)
512 *ErrOffset = CharacterOffset + 1;
517 goto end_of_expression;
525 *ErrOffset = OperatorOffset;
570 *ErrOffset = CharacterOffset;
576 CharacterOffset +=
i;
593 CharacterOffset +=
i;
605 CharacterOffset += pend -
p;
613 *ErrOffset = CharacterOffset;
632 if (
p[0] ==
'(' ||
p[0] ==
'[')
639 else if (pend ==
p + 1)
644 *ErrOffset = CharacterOffset + 1;
659 *ErrOffset = CharacterOffset + (pend -
p);
685 *ErrOffset = CharacterOffset + (pend -
p);
708 CharacterOffset += pend -
p;
711 else if (
First &&
p[0] ==
'-')
732 *ErrOffset = CharacterOffset;
752 IsComparativeOp =
FALSE;
778 IsComparativeOp =
TRUE;
784 IsComparativeOp =
TRUE;
789 IsComparativeOp =
TRUE;
799 IsComparativeOp =
TRUE;
826 ComparativeOpFilled =
TRUE;
839 if (HavePoppedOperator)
901 ULONG ValueStackPointer = 0;
910 ULONG ValueStackPointerMax = 0;
922 ValueStackPointerMax =
max(ValueStackPointerMax, ValueStackPointer);
968 ValueStack[ValueStackPointer++] = ull;
972 if (ValueStackPointer < 1)
1027 _snprintf(ErrMsg, 128,
"Couldn't access memory at 0x%p",
p);
1035 ValueStack[ValueStackPointer - 1] = ull;
1039 if (ValueStackPointer < 2)
1049 ValueStackPointer--;
1050 ull = ValueStack[ValueStackPointer];
1063 ValueStack[ValueStackPointer - 1] = ull;
1073 DPRINT1(
"Max value stack pointer: %d\n", ValueStackPointerMax);
1076 if (ValueStackPointer != 1)
1078 CONST_STRCPY(ErrMsg,
"Stack not empty after evaluation");
1178 NewStack->
Size = NewStack->
Sp;
ACPI_SIZE strlen(const char *String)
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
#define NT_SUCCESS(StatCode)
#define ExAllocatePoolWithTag(hernya, size, tag)
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
NTSTATUS KdbpSafeReadMemory(OUT PVOID Dest, IN PVOID Src, IN ULONG Bytes)
#define RTL_FIELD_SIZE(type, field)
static BOOLEAN RpnpParseExpression(IN PRPN_STACK Stack, IN PCHAR Expression, OUT PCHAR *End OPTIONAL, IN ULONG CharacterOffset, OUT PLONG ErrOffset OPTIONAL, OUT PCHAR ErrMsg OPTIONAL)
Parses an expression.
static BOOLEAN RpnpPushStack(IN OUT PRPN_STACK Stack, IN PRPN_OP Op)
Pushes an RPN_OP onto the stack.
ULONGLONG RpnBinaryOperatorSub(ULONGLONG a, ULONGLONG b)
ULONGLONG RpnBinaryOperatorGreaterThanOrEquals(ULONGLONG a, ULONGLONG b)
ULONGLONG RpnBinaryOperatorDiv(ULONGLONG a, ULONGLONG b)
static const INT RegisterToTrapFrameCount
enum _RPN_OP_TYPE RPN_OP_TYPE
PVOID KdbpRpnParseExpression(IN PCHAR Expression, OUT PLONG ErrOffset OPTIONAL, OUT PCHAR ErrMsg OPTIONAL)
Parses the given expression and returns a "handle" to it.
ULONGLONG RpnBinaryOperatorGreaterThan(ULONGLONG a, ULONGLONG b)
RPN_OP Ops[RPN_OP_STACK_SIZE]
BOOLEAN KdbpRpnEvaluateExpression(IN PCHAR Expression, IN PKDB_KTRAP_FRAME TrapFrame, OUT PULONGLONG Result, OUT PLONG ErrOffset OPTIONAL, OUT PCHAR ErrMsg OPTIONAL)
Evaluates the given expression.
BOOLEAN KdbpRpnEvaluateParsedExpression(IN PVOID Expression, IN PKDB_KTRAP_FRAME TrapFrame, OUT PULONGLONG Result, OUT PLONG ErrOffset OPTIONAL, OUT PCHAR ErrMsg OPTIONAL)
Evaluates the given expression and returns the result.
ULONGLONG RpnBinaryOperatorMod(ULONGLONG a, ULONGLONG b)
static VOID RpnpClearStack(OUT PRPN_STACK Stack)
Clears the given RPN stack.
ULONGLONG RpnBinaryOperatorLessThanOrEquals(ULONGLONG a, ULONGLONG b)
static BOOLEAN RpnpPopStack(IN OUT PRPN_STACK Stack, OUT PRPN_OP Op OPTIONAL)
Pops the top op from the stack.
#define RPN_VALUE_STACK_SIZE
struct _RPN_STACK RPN_STACK
ULONGLONG RpnBinaryOperatorNotEquals(ULONGLONG a, ULONGLONG b)
struct _RPN_STACK * PRPN_STACK
ULONGLONG(* RPN_BINARY_OPERATOR)(ULONGLONG a, ULONGLONG b)
#define CONST_STRCPY(dst, src)
static struct @1794 RpnStack
static BOOLEAN RpnpTopStack(IN PRPN_STACK Stack, OUT PRPN_OP Op)
Gets the top op from the stack (not popping it)
ULONGLONG RpnBinaryOperatorAdd(ULONGLONG a, ULONGLONG b)
ULONGLONG RpnBinaryOperatorMul(ULONGLONG a, ULONGLONG b)
static BOOLEAN RpnpEvaluateStack(IN PRPN_STACK Stack, IN PKDB_KTRAP_FRAME TrapFrame, OUT PULONGLONG Result, OUT PLONG ErrOffset OPTIONAL, OUT PCHAR ErrMsg OPTIONAL)
Evaluates the RPN op stack and returns the result.
#define RPN_OP_STACK_SIZE
VOID RpnpDumpStack(IN PRPN_STACK Stack)
Dumps the given RPN stack content.
static const struct @1795 RegisterToTrapFrame[]
ULONGLONG RpnBinaryOperatorLessThan(ULONGLONG a, ULONGLONG b)
ULONGLONG RpnBinaryOperatorEquals(ULONGLONG a, ULONGLONG b)
#define memcpy(s1, s2, n)
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
_Check_return_ _CRTIMP size_t __cdecl strcspn(_In_z_ const char *_Str, _In_z_ const char *_Control)
PULONG MinorVersion OPTIONAL
RPN_BINARY_OPERATOR BinaryOperator
union _RPN_OP::@1796 Data
static CONST DWORD MemorySize[]
#define FIELD_OFFSET(t, f)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList