/*
 * Copyright (c) 2022 Winsider Seminars & Solutions, Inc.  All rights reserved.
 *
 * This file is part of System Informer.
 *
 * THIS IS AN AUTOGENERATED FILE, DO NOT MODIFY
 *
 */

#pragma once

#include <kphlibbase.h>

#define KPH_DYN_CONFIGURATION_VERSION           ((ULONG)15)
#define KPH_DYN_SESSION_TOKEN_PUBLIC_KEY_LENGTH ((ULONG)539)
#define KPH_DYN_CLASS_NTOSKRNL                  ((USHORT)0)
#define KPH_DYN_CLASS_NTKRLA57                  ((USHORT)1)
#define KPH_DYN_CLASS_LXCORE                    ((USHORT)2)

#include <pshpack1.h>

typedef struct _KPH_DYN_KERNEL_FIELDS
{
    USHORT EgeGuid;                      // dt nt!_ETW_GUID_ENTRY Guid
    USHORT EpObjectTable;                // dt nt!_EPROCESS ObjectTable
    USHORT EreGuidEntry;                 // dt nt!_ETW_REG_ENTRY GuidEntry
    USHORT HtHandleContentionEvent;      // dt nt!_HANDLE_TABLE HandleContentionEvent
    USHORT OtName;                       // dt nt!_OBJECT_TYPE Name
    USHORT OtIndex;                      // dt nt!_OBJECT_TYPE Index
    USHORT ObDecodeShift;                // dt nt!_HANDLE_TABLE_ENTRY ObjectPointerBits
    USHORT ObAttributesShift;            // dt nt!_HANDLE_TABLE_ENTRY Attributes
    USHORT AlpcCommunicationInfo;        // dt nt!_ALPC_PORT CommunicationInfo
    USHORT AlpcOwnerProcess;             // dt nt!_ALPC_PORT OwnerProcess
    USHORT AlpcConnectionPort;           // dt nt!_ALPC_COMMUNICATION_INFO ConnectionPort
    USHORT AlpcServerCommunicationPort;  // dt nt!_ALPC_COMMUNICATION_INFO ServerCommunicationPort
    USHORT AlpcClientCommunicationPort;  // dt nt!_ALPC_COMMUNICATION_INFO ClientCommunicationPort
    USHORT AlpcHandleTable;              // dt nt!_ALPC_COMMUNICATION_INFO HandleTable
    USHORT AlpcHandleTableLock;          // dt nt!_ALPC_HANDLE_TABLE Lock
    USHORT AlpcAttributes;               // dt nt!_ALPC_PORT PortAttributes
    USHORT AlpcAttributesFlags;          // dt nt!_ALPC_PORT_ATTRIBUTES Flags
    USHORT AlpcPortContext;              // dt nt!_ALPC_PORT PortContext
    USHORT AlpcPortObjectLock;           // dt nt!_ALPC_PORT PortObjectLock
    USHORT AlpcSequenceNo;               // dt nt!_ALPC_PORT SequenceNo
    USHORT AlpcState;                    // dt nt!_ALPC_PORT u1.State
    USHORT KtReadOperationCount;         // dt nt!_KTHREAD ReadOperationCount
    USHORT KtWriteOperationCount;        // dt nt!_KTHREAD WriteOperationCount
    USHORT KtOtherOperationCount;        // dt nt!_KTHREAD OtherOperationCount
    USHORT KtReadTransferCount;          // dt nt!_KTHREAD ReadTransferCount
    USHORT KtWriteTransferCount;         // dt nt!_KTHREAD WriteTransferCount
    USHORT KtOtherTransferCount;         // dt nt!_KTHREAD OtherTransferCount
    USHORT MmSectionControlArea;         // dt nt!_SECTION u1.ControlArea
    USHORT MmControlAreaListHead;        // dt nt!_CONTROL_AREA ListHead
    USHORT MmControlAreaLock;            // dt nt!_CONTROL_AREA ControlAreaLock
    USHORT EpSectionObject;              // dt nt!_EPROCESS SectionObject
} KPH_DYN_KERNEL_FIELDS, *PKPH_DYN_KERNEL_FIELDS;

typedef KPH_DYN_KERNEL_FIELDS KPH_DYN_NTOSKRNL_FIELDS;
typedef PKPH_DYN_KERNEL_FIELDS PKPH_DYN_NTOSKRNL_FIELDS;
typedef KPH_DYN_KERNEL_FIELDS KPH_DYN_NTKRLA57_FIELDS;
typedef PKPH_DYN_KERNEL_FIELDS PKPH_DYN_NTKRLA57_FIELDS;

typedef struct _KPH_DYN_LXCORE_FIELDS
{
    USHORT LxPicoProc;                   // uf lxcore!LxpSyscall_GETPID
    USHORT LxPicoProcInfo;               // uf lxcore!LxpSyscall_GETPID
    USHORT LxPicoProcInfoPID;            // uf lxcore!LxpSyscall_GETPID
    USHORT LxPicoThrdInfo;               // uf lxcore!LxpSyscall_GETTID
    USHORT LxPicoThrdInfoTID;            // uf lxcore!LxpSyscall_GETTID
} KPH_DYN_LXCORE_FIELDS, *PKPH_DYN_LXCORE_FIELDS;

typedef struct _KPH_DYN_FIELDS
{
    ULONG FieldsId;
    USHORT Length;
    BYTE Fields[ANYSIZE_ARRAY];
} KPH_DYN_FIELDS, *PKPH_DYN_FIELDS;

typedef struct _KPH_DYN_DATA
{
    USHORT Class;
    USHORT Machine;
    ULONG TimeDateStamp;
    ULONG SizeOfImage;
    ULONG Offset;
} KPH_DYN_DATA, *PKPH_DYN_DATA;

typedef struct _KPH_DYN_CONFIG
{
    ULONG Version;
    BYTE SessionTokenPublicKey[KPH_DYN_SESSION_TOKEN_PUBLIC_KEY_LENGTH];
    ULONG Count;
    KPH_DYN_DATA Data[ANYSIZE_ARRAY];
    // BYTE Fields[ANYSIZE_ARRAY];
} KPH_DYN_CONFIG, *PKPH_DYN_CONFIG;

#include <poppack.h>

#ifdef _WIN64
extern CONST BYTE KphDynConfig[];
extern CONST ULONG KphDynConfigLength;
#endif
