mirror of
https://github.com/mirror/processhacker
synced 2026-06-08 16:03:24 +00:00
666df2e06f
* ability to set handle flags such as protect-from-close and inherit git-svn-id: svn://svn.code.sf.net/p/processhacker/code@1256 21ef857c-d57f-4fe0-8362-d861dc6d29cd
219 lines
5.6 KiB
C
219 lines
5.6 KiB
C
/*
|
|
* Process Hacker Driver -
|
|
* object manager
|
|
*
|
|
* Copyright (C) 2009 wj32
|
|
*
|
|
* This file is part of Process Hacker.
|
|
*
|
|
* Process Hacker is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Process Hacker is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with Process Hacker. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef _OB_H
|
|
#define _OB_H
|
|
|
|
#include "types.h"
|
|
#include "ex.h"
|
|
|
|
#define OBJECT_TO_OBJECT_HEADER(o) \
|
|
CONTAINING_RECORD((o), OBJECT_HEADER, Body)
|
|
|
|
#define OBJ_PROTECT_CLOSE 0x00000001L
|
|
#define OBJ_INHERIT 0x00000002L
|
|
#define OBJ_AUDIT_OBJECT_CLOSE 0x00000004L
|
|
#define OBJ_HANDLE_ATTRIBUTES (OBJ_PROTECT_CLOSE | OBJ_INHERIT | OBJ_AUDIT_OBJECT_CLOSE)
|
|
|
|
/* FUNCTION DEFS */
|
|
|
|
struct _OBJECT_HANDLE_FLAG_INFORMATION;
|
|
|
|
NTSTATUS NTAPI ObOpenObjectByName(
|
|
POBJECT_ATTRIBUTES ObjectAttributes,
|
|
POBJECT_TYPE ObjectType,
|
|
KPROCESSOR_MODE PreviousMode,
|
|
PACCESS_STATE AccessState,
|
|
ACCESS_MASK DesiredAccess,
|
|
PVOID ParseContext,
|
|
PHANDLE Handle
|
|
);
|
|
|
|
NTSTATUS NTAPI ObSetHandleAttributes(
|
|
HANDLE Handle,
|
|
struct _OBJECT_HANDLE_FLAG_INFORMATION *HandleFlags,
|
|
KPROCESSOR_MODE PreviousMode
|
|
);
|
|
|
|
/* STRUCTS */
|
|
|
|
typedef struct _OBP_SET_HANDLE_GRANTED_ACCESS_DATA
|
|
{
|
|
HANDLE Handle;
|
|
ACCESS_MASK GrantedAccess;
|
|
} OBP_SET_HANDLE_GRANTED_ACCESS_DATA, *POBP_SET_HANDLE_GRANTED_ACCESS_DATA;
|
|
|
|
typedef struct _OBJECT_HANDLE_FLAG_INFORMATION
|
|
{
|
|
BOOLEAN Inherit;
|
|
BOOLEAN ProtectFromClose;
|
|
} OBJECT_HANDLE_FLAG_INFORMATION, *POBJECT_HANDLE_FLAG_INFORMATION;
|
|
|
|
typedef struct _OBJECT_CREATE_INFORMATION
|
|
{
|
|
ULONG Attributes;
|
|
PVOID RootDirectory;
|
|
PVOID ParseContext;
|
|
CHAR ProbeMode;
|
|
ULONG PagedPoolCharge;
|
|
ULONG NonPagedPoolCharge;
|
|
ULONG SecurityDescriptorCharge;
|
|
PVOID SecurityDescriptor;
|
|
PSECURITY_QUALITY_OF_SERVICE SecurityQos;
|
|
SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;
|
|
} OBJECT_CREATE_INFORMATION, *POBJECT_CREATE_INFORMATION;
|
|
|
|
typedef struct _OBJECT_HEADER
|
|
{
|
|
LONG PointerCount;
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
LONG HandleCount;
|
|
};
|
|
PVOID NextToFree;
|
|
};
|
|
POBJECT_TYPE Type;
|
|
UCHAR NameInfoOffset;
|
|
UCHAR HandleInfoOffset;
|
|
UCHAR QuotaInfoOffset;
|
|
UCHAR Flags;
|
|
union
|
|
{
|
|
POBJECT_CREATE_INFORMATION ObjectCreateInfo;
|
|
PVOID QuotaBlockCharged;
|
|
};
|
|
PVOID SecurityDescriptor;
|
|
QUAD Body;
|
|
} OBJECT_HEADER, *POBJECT_HEADER;
|
|
|
|
typedef struct _OBJECT_TYPE_INITIALIZER
|
|
{
|
|
USHORT Length;
|
|
UCHAR ObjectTypeFlags;
|
|
ULONG CaseInsensitive: 1;
|
|
ULONG UnnamedObjectsOnly: 1;
|
|
ULONG UseDefaultObject: 1;
|
|
ULONG SecurityRequired: 1;
|
|
ULONG MaintainHandleCount: 1;
|
|
ULONG MaintainTypeList: 1;
|
|
ULONG ObjectTypeCode;
|
|
ULONG InvalidAttributes;
|
|
GENERIC_MAPPING GenericMapping;
|
|
ULONG ValidAccessMask;
|
|
POOL_TYPE PoolType;
|
|
ULONG DefaultPagedPoolCharge;
|
|
ULONG DefaultNonPagedPoolCharge;
|
|
PVOID DumpProcedure;
|
|
PVOID OpenProcedure;
|
|
PVOID CloseProcedure;
|
|
PVOID DeleteProcedure;
|
|
PVOID ParseProcedure;
|
|
PVOID SecurityProcedure;
|
|
PVOID QueryNameProcedure;
|
|
PVOID OkayToCloseProcedure;
|
|
} OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;
|
|
|
|
typedef struct _OBJECT_TYPE
|
|
{
|
|
ERESOURCE Mutex;
|
|
LIST_ENTRY TypeList;
|
|
UNICODE_STRING Name;
|
|
PVOID DefaultObject;
|
|
ULONG Index;
|
|
ULONG TotalNumberOfObjects;
|
|
ULONG TotalNumberOfHandles;
|
|
ULONG HighWaterNumberOfObjects;
|
|
ULONG HighWaterNumberOfHandles;
|
|
OBJECT_TYPE_INITIALIZER TypeInfo;
|
|
ULONG Key;
|
|
EX_PUSH_LOCK ObjectLocks[32];
|
|
} OBJECT_TYPE;
|
|
|
|
typedef struct _HANDLE_TRACE_DB_ENTRY
|
|
{
|
|
CLIENT_ID ClientId;
|
|
PVOID Handle;
|
|
ULONG Type;
|
|
VOID *StackTrace[16];
|
|
} HANDLE_TRACE_DB_ENTRY, *PHANDLE_TRACE_DB_ENTRY;
|
|
|
|
typedef struct _HANDLE_TRACE_DEBUG_INFO
|
|
{
|
|
LONG RefCount;
|
|
ULONG TableSize;
|
|
ULONG BitMaskFlags;
|
|
FAST_MUTEX CloseCompactionLock;
|
|
ULONG CurrentStackIndex;
|
|
HANDLE_TRACE_DB_ENTRY TraceDb[1];
|
|
} HANDLE_TRACE_DEBUG_INFO, *PHANDLE_TRACE_DEBUG_INFO;
|
|
|
|
typedef struct _HANDLE_TABLE_ENTRY_INFO
|
|
{
|
|
ULONG AuditMask;
|
|
} HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO;
|
|
|
|
typedef struct _HANDLE_TABLE_ENTRY
|
|
{
|
|
union
|
|
{
|
|
PVOID Object;
|
|
ULONG ObAttributes;
|
|
PHANDLE_TABLE_ENTRY_INFO InfoTable;
|
|
ULONG Value;
|
|
};
|
|
union
|
|
{
|
|
ULONG GrantedAccess;
|
|
struct
|
|
{
|
|
SHORT GrantedAccessIndex;
|
|
SHORT CreatorBackTraceIndex;
|
|
};
|
|
LONG NextFreeTableEntry;
|
|
};
|
|
} HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY;
|
|
|
|
typedef struct _HANDLE_TABLE
|
|
{
|
|
ULONG TableCode;
|
|
PEPROCESS QuotaProcess;
|
|
PVOID UniqueProcessId;
|
|
EX_PUSH_LOCK HandleLock;
|
|
LIST_ENTRY HandleTableList;
|
|
EX_PUSH_LOCK HandleContentionEvent;
|
|
PHANDLE_TRACE_DEBUG_INFO DebugInfo;
|
|
LONG ExtraInfoPages;
|
|
union
|
|
{
|
|
ULONG Flags;
|
|
ULONG StrictFIFO: 1;
|
|
};
|
|
LONG FirstFreeHandle;
|
|
PHANDLE_TABLE_ENTRY LastFreeHandleEntry;
|
|
LONG HandleCount;
|
|
ULONG NextHandleNeedingPool;
|
|
} HANDLE_TABLE, *PHANDLE_TABLE;
|
|
|
|
#endif
|