Move handle table definitions to OB

This commit is contained in:
2026-08-06 10:02:06 +02:00
parent 1ecc9bd298
commit a2b23b2ef4
3 changed files with 89 additions and 81 deletions

View File

@@ -17,24 +17,6 @@
/* Rundown protection flags */ /* Rundown protection flags */
#define EX_RUNDOWN_ACTIVE 0x1 #define EX_RUNDOWN_ACTIVE 0x1
/* Defines maximum number of handles */
#define MAX_HANDLES (1<<24)
/* Handle Table Architecture Dimensions */
#define HANDLE_HILEVEL_COUNT MAX_HANDLES / (LOWLEVEL_COUNT * MIDLEVEL_COUNT)
#define HANDLE_MIDLEVEL_COUNT (MM_PAGE_SIZE / sizeof(PHANDLE_TABLE_ENTRY))
#define HANDLE_LOWLEVEL_COUNT (MM_PAGE_SIZE / sizeof(HANDLE_TABLE_ENTRY))
/* Handle Value and Table Routing Constants */
#define HANDLE_LEVEL_CODE_MASK 3
#define HANDLE_VALUE_INCREMENT 4
/* Handle table entry lock bit */
#define EXHANDLE_TABLE_ENTRY_LOCK_BIT 1
/* Handle additional information signature */
#define HANDLE_ADDITIONAL_INFO_SIGNATURE (-2)
/* Number of lookaside lists */ /* Number of lookaside lists */
#define POOL_LOOKASIDE_LISTS 32 #define POOL_LOOKASIDE_LISTS 32
@@ -99,18 +81,6 @@ typedef struct _ERESOURCE
KSPIN_LOCK SpinLock; KSPIN_LOCK SpinLock;
} ERESOURCE, *PERESOURCE; } ERESOURCE, *PERESOURCE;
/* Handle table interface union definition */
typedef union _EXHANDLE
{
struct
{
ULONG TagBits:2;
ULONG Index:30;
};
HANDLE GenericHandleOverlay;
ULONG_PTR Value;
} EXHANDLE, *PEXHANDLE;
/* Executive rundown protection structure definition */ /* Executive rundown protection structure definition */
typedef union _EX_RUNDOWN_REFERENCE typedef union _EX_RUNDOWN_REFERENCE
{ {
@@ -169,56 +139,6 @@ typedef struct _GENERAL_LOOKASIDE
ULONG Future[2]; ULONG Future[2];
} GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE; } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
/* Handle table entry structure definition */
typedef struct _HANDLE_TABLE_ENTRY
{
union
{
PVOID Object;
ULONG_PTR ObAttributes;
PHANDLE_TABLE_ENTRY_INFO InfoTable;
ULONG_PTR Value;
};
union
{
ULONG GrantedAccess;
struct
{
USHORT GrantedAccessIndex;
USHORT CreatorBackTraceIndex;
};
LONG NextFreeTableEntry;
};
} HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY;
/* Handle table entry info structure definition */
typedef struct _HANDLE_TABLE_ENTRY_INFO
{
ULONG AuditMask;
} HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO;
/* Handle table structure definition */
typedef struct _HANDLE_TABLE
{
ULONG_PTR TableCode;
PEPROCESS QuotaProcess;
PVOID UniqueProcessId;
KPUSH_LOCK HandleTableLock[4];
LIST_ENTRY HandleTableList;
KPUSH_LOCK HandleContentionEvent;
PVOID Reserved;
LONG ExtraInfoPages;
union
{
ULONG Flags;
UCHAR StrictFIFO:1;
};
PHANDLE_TABLE_ENTRY FirstFreeHandle;
PHANDLE_TABLE_ENTRY LastFreeHandle;
LONG HandleCount;
ULONG NextHandleNeedingPool;
} HANDLE_TABLE, *PHANDLE_TABLE;
/* Lookaside list pointers structure definition */ /* Lookaside list pointers structure definition */
typedef struct _LOOKASIDE_LIST typedef struct _LOOKASIDE_LIST
{ {

View File

@@ -51,6 +51,32 @@
OBJECT_INHERIT | \ OBJECT_INHERIT | \
OBJECT_AUDIT_OBJECT_CLOSE) OBJECT_AUDIT_OBJECT_CLOSE)
/* Defines maximum number of handles */
#define OBJECT_MAX_HANDLES (1<<24)
/* Handle Table Architecture Dimensions */
#define OBJECT_HANDLE_HIGHLEVEL_COUNT OBJECT_MAX_HANDLES / (OBJECT_HANDLE_LOWLEVEL_COUNT * OBJECT_HANDLE_MEDIUMLEVEL_COUNT)
#define OBJECT_HANDLE_MEDIUMLEVEL_COUNT (MM_PAGE_SIZE / sizeof(PHANDLE_TABLE_ENTRY))
#define OBJECT_HANDLE_LOWLEVEL_COUNT (MM_PAGE_SIZE / sizeof(HANDLE_TABLE_ENTRY))
#define OBJECT_HANDLE_HIGHLEVEL_SIZE (OBJECT_HANDLE_HIGHLEVEL_COUNT * sizeof(PHANDLE_TABLE_ENTRY))
#define OBJECT_HANDLE_MEDIUMLEVEL_THRESHOLD (OBJECT_HANDLE_MEDIUMLEVEL_COUNT * OBJECT_HANDLE_LOWLEVEL_COUNT)
/* Handle Value and Table Routing Constants */
#define OBJECT_HANDLE_LEVEL_CODE_MASK 3
#define OBJECT_HANDLE_VALUE_INCREMENT 4
/* Handle free mask */
#define OBJECT_FREE_HANDLE_MASK 0xFFFFFFFF
/* Handle table entry lock bit */
#define OBJECT_HANDLE_TABLE_ENTRY_LOCK_BIT 1
/* Handle additional information signature */
#define OBJECT_HANDLE_ADDITIONAL_INFO_SIGNATURE (-2)
/* Handle tracing constants */
#define OBJECT_HANDLE_TRACE_DB_STACK_SIZE 8
/* Object protect-on-close access bit */ /* Object protect-on-close access bit */
#define OBJECT_ACCESS_PROTECT_CLOSE_BIT 0x02000000L #define OBJECT_ACCESS_PROTECT_CLOSE_BIT 0x02000000L
@@ -128,6 +154,56 @@ typedef struct _DEVICE_MAP
UCHAR DriveType[32]; UCHAR DriveType[32];
} DEVICE_MAP, *PDEVICE_MAP; } DEVICE_MAP, *PDEVICE_MAP;
/* Handle table entry structure definition */
typedef struct _HANDLE_TABLE_ENTRY
{
union
{
PVOID Object;
ULONG_PTR ObAttributes;
PHANDLE_TABLE_ENTRY_INFO InfoTable;
ULONG_PTR Value;
};
union
{
ULONG GrantedAccess;
struct
{
USHORT GrantedAccessIndex;
USHORT CreatorBackTraceIndex;
};
LONG NextFreeTableEntry;
};
} HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY;
/* Handle table entry info structure definition */
typedef struct _HANDLE_TABLE_ENTRY_INFO
{
ULONG AuditMask;
} HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO;
/* Handle table structure definition */
typedef struct _HANDLE_TABLE
{
ULONG_PTR TableCode;
PEPROCESS QuotaProcess;
PVOID UniqueProcessId;
KPUSH_LOCK HandleTableLock[4];
LIST_ENTRY HandleTableList;
KPUSH_LOCK HandleContentionEvent;
PVOID Reserved;
LONG ExtraInfoPages;
union
{
ULONG Flags;
UCHAR StrictFIFO:1;
};
PHANDLE_TABLE_ENTRY FirstFreeHandle;
PHANDLE_TABLE_ENTRY LastFreeHandle;
LONG HandleCount;
ULONG NextHandleNeedingPool;
} HANDLE_TABLE, *PHANDLE_TABLE;
/* Parameters provided by a caller when creating or opening an object */ /* Parameters provided by a caller when creating or opening an object */
typedef struct _OBJECT_ATTRIBUTES typedef struct _OBJECT_ATTRIBUTES
{ {
@@ -185,6 +261,18 @@ typedef struct _OBJECT_DUMP_CONTROL
ULONG Detail; ULONG Detail;
} OBJECT_DUMP_CONTROL, *POBJECT_DUMP_CONTROL; } OBJECT_DUMP_CONTROL, *POBJECT_DUMP_CONTROL;
/* Handle table interface union definition */
typedef union _OBJECT_HANDLE
{
struct
{
ULONG TagBits:2;
ULONG Index:30;
};
HANDLE GenericHandleOverlay;
ULONG_PTR Value;
} OBJECT_HANDLE, *POBJECT_HANDLE;
/* Entry tracking the number of open handles a specific process holds */ /* Entry tracking the number of open handles a specific process holds */
typedef struct _OBJECT_HANDLE_COUNT_ENTRY typedef struct _OBJECT_HANDLE_COUNT_ENTRY
{ {

View File

@@ -504,10 +504,10 @@ typedef union _EFI_HASH_OUTPUT EFI_HASH_OUTPUT, *PEFI_HASH_OUTPUT;
typedef union _EFI_IA32_REGISTER_SET EFI_IA32_REGISTER_SET, *PEFI_IA32_REGISTER_SET; typedef union _EFI_IA32_REGISTER_SET EFI_IA32_REGISTER_SET, *PEFI_IA32_REGISTER_SET;
typedef union _EFI_IP_ADDRESS EFI_IP_ADDRESS, *PEFI_IP_ADDRESS; typedef union _EFI_IP_ADDRESS EFI_IP_ADDRESS, *PEFI_IP_ADDRESS;
typedef union _EFI_PXE_BASE_CODE_PACKET EFI_PXE_BASE_CODE_PACKET, *PEFI_PXE_BASE_CODE_PACKET; typedef union _EFI_PXE_BASE_CODE_PACKET EFI_PXE_BASE_CODE_PACKET, *PEFI_PXE_BASE_CODE_PACKET;
typedef union _EXHANDLE EXHANDLE, *PEXHANDLE;
typedef union _EX_RUNDOWN_REFERENCE EX_RUNDOWN_REFERENCE, *PEX_RUNDOWN_REFERENCE; typedef union _EX_RUNDOWN_REFERENCE EX_RUNDOWN_REFERENCE, *PEX_RUNDOWN_REFERENCE;
typedef union _KPUSH_LOCK KPUSH_LOCK, *PKPUSH_LOCK; typedef union _KPUSH_LOCK KPUSH_LOCK, *PKPUSH_LOCK;
typedef union _LARGE_INTEGER LARGE_INTEGER, *PLARGE_INTEGER; typedef union _LARGE_INTEGER LARGE_INTEGER, *PLARGE_INTEGER;
typedef union _OBJECT_HANDLE OBJECT_HANDLE, *POBJECT_HANDLE;
typedef union _OBJECT_HEADER_HANDLE_INFO OBJECT_HEADER_HANDLE_INFO, *POBJECT_HEADER_HANDLE_INFO; typedef union _OBJECT_HEADER_HANDLE_INFO OBJECT_HEADER_HANDLE_INFO, *POBJECT_HEADER_HANDLE_INFO;
typedef union _POWER_STATE POWER_STATE, *PPOWER_STATE; typedef union _POWER_STATE POWER_STATE, *PPOWER_STATE;
typedef union _ULARGE_INTEGER ULARGE_INTEGER, *PULARGE_INTEGER; typedef union _ULARGE_INTEGER ULARGE_INTEGER, *PULARGE_INTEGER;