46 if (NULL == Invariants)
56 for (
size_t lastOffset = 0; inv < Count; inv++)
62 for (
size_t i = lastOffset; i < Size; )
65 status = Invariants[inv].Getter(Buffer, Size, &i, Context);
68 Invariants[inv].Offset = lastOffset;
76 lastOffset = Invariants[inv].Offset;
77 status = Invariants[inv].Getter(Buffer, Size, &lastOffset, Context);
84 ERROR(
"[ERROR] Failed applying invariant %zu @ 0x%zx\n", inv, lastOffset);
INTSTATUS IntStructFill(const void *Buffer, size_t Size, INT_STRUCT_INVARIANT *Invariants, size_t Count, BOOLEAN LogErrors, void *Context)
Fill an internal structure with information gathered from the guest by applying a list of invariants ...
#define INT_STATUS_SUCCESS
#define INT_SUCCESS(Status)
int INTSTATUS
The status data type.
#define INT_STATUS_NOT_FOUND
#define INT_STATUS_NOT_INITIALIZED
#define INT_STATUS_INVALID_PARAMETER_4
#define INT_STRUCT_MAX_INVARIANT_CNT
Upper limit of the number of invariants to be applied to a bufffer.
#define _Inout_updates_(expr)
#define _In_reads_bytes_(expr)
#define INT_STRUCT_MAX_SEARCH_SIZE
Maximum size of a buffer in which to search for fields/structures.
#define INT_STATUS_INVALID_PARAMETER_1
#define INT_STATUS_INVALID_PARAMETER_2
#define INT_OFFSET_NOT_INITIALIZED
Specifies that an offset value is yet to be searched for.
#define INT_STATUS_INVALID_PARAMETER_3