mirror of
https://github.com/mirror/processhacker
synced 2026-06-08 16:03:24 +00:00
1547bf6beb
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@3219 21ef857c-d57f-4fe0-8362-d861dc6d29cd
152 lines
3.4 KiB
C
152 lines
3.4 KiB
C
#ifndef NTBASIC_H
|
|
#define NTBASIC_H
|
|
|
|
// This header file provides basic NT types not included in Win32.
|
|
|
|
// Basic types
|
|
|
|
typedef struct _QUAD
|
|
{
|
|
double DoNotUseThisField;
|
|
} QUAD, *PQUAD, UQUAD, *PUQUAD;
|
|
|
|
// This isn't in NT, but it's useful.
|
|
typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _QUAD_PTR
|
|
{
|
|
ULONG_PTR DoNotUseThisField1;
|
|
ULONG_PTR DoNotUseThisField2;
|
|
} QUAD_PTR, *PQUAD_PTR, UQUAD_PTR, *PUQUAD_PTR;
|
|
|
|
typedef PVOID *PPVOID;
|
|
|
|
typedef ULONG LOGICAL;
|
|
typedef ULONG *PLOGICAL;
|
|
|
|
typedef __success(return >= 0) LONG NTSTATUS;
|
|
typedef NTSTATUS *PNTSTATUS;
|
|
|
|
// Cardinal types
|
|
|
|
typedef char CCHAR;
|
|
typedef short CSHORT;
|
|
typedef ULONG CLONG;
|
|
|
|
typedef CCHAR *PCCHAR;
|
|
typedef CSHORT *PCSHORT;
|
|
typedef CLONG *PCLONG;
|
|
|
|
// Specific
|
|
|
|
typedef LONG KPRIORITY;
|
|
typedef USHORT RTL_ATOM, *PRTL_ATOM;
|
|
|
|
// NT status macros
|
|
|
|
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
|
|
#define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1)
|
|
#define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2)
|
|
#define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3)
|
|
|
|
#define NT_FACILITY_MASK 0xfff
|
|
#define NT_FACILITY_SHIFT 16
|
|
#define NT_FACILITY(Status) ((((ULONG)(Status)) >> NT_FACILITY_SHIFT) & NT_FACILITY_MASK)
|
|
|
|
#define NT_NTWIN32(Status) (NT_FACILITY(Status) == FACILITY_NTWIN32)
|
|
#define WIN32_FROM_NTSTATUS(Status) (((ULONG)(Status)) & 0xffff)
|
|
|
|
// Functions
|
|
|
|
#define FASTCALL __fastcall
|
|
|
|
// Synchronization enumerations
|
|
|
|
typedef enum _EVENT_TYPE
|
|
{
|
|
NotificationEvent,
|
|
SynchronizationEvent
|
|
} EVENT_TYPE;
|
|
|
|
typedef enum _TIMER_TYPE
|
|
{
|
|
NotificationTimer,
|
|
SynchronizationTimer
|
|
} TIMER_TYPE;
|
|
|
|
typedef enum _WAIT_TYPE
|
|
{
|
|
WaitAll,
|
|
WaitAny
|
|
} WAIT_TYPE;
|
|
|
|
// String types
|
|
|
|
typedef struct _ANSI_STRING
|
|
{
|
|
USHORT Length;
|
|
USHORT MaximumLength;
|
|
PSTR Buffer;
|
|
} STRING, *PSTRING, ANSI_STRING, *PANSI_STRING, OEM_STRING, *POEM_STRING;
|
|
|
|
typedef const STRING *PCSTRING;
|
|
typedef const ANSI_STRING *PCANSI_STRING;
|
|
typedef const OEM_STRING *PCOEM_STRING;
|
|
|
|
typedef struct _UNICODE_STRING
|
|
{
|
|
USHORT Length;
|
|
USHORT MaximumLength;
|
|
PWSTR Buffer;
|
|
} UNICODE_STRING, *PUNICODE_STRING;
|
|
|
|
typedef const UNICODE_STRING *PCUNICODE_STRING;
|
|
|
|
// Valid flags for Attributes field
|
|
|
|
#define OBJ_INHERIT 0x00000002
|
|
#define OBJ_PERMANENT 0x00000010
|
|
#define OBJ_EXCLUSIVE 0x00000020
|
|
#define OBJ_CASE_INSENSITIVE 0x00000040
|
|
#define OBJ_OPENIF 0x00000080
|
|
#define OBJ_OPENLINK 0x00000100
|
|
#define OBJ_KERNEL_HANDLE 0x00000200
|
|
#define OBJ_FORCE_ACCESS_CHECK 0x00000400
|
|
#define OBJ_VALID_ATTRIBUTES 0x000007f2
|
|
|
|
typedef struct _OBJECT_ATTRIBUTES
|
|
{
|
|
ULONG Length;
|
|
HANDLE RootDirectory;
|
|
PUNICODE_STRING ObjectName;
|
|
ULONG Attributes;
|
|
PVOID SecurityDescriptor;
|
|
PVOID SecurityQualityOfService;
|
|
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
|
|
|
|
#define InitializeObjectAttributes(p, n, a, r, s) { \
|
|
(p)->Length = sizeof(OBJECT_ATTRIBUTES); \
|
|
(p)->RootDirectory = r; \
|
|
(p)->Attributes = a; \
|
|
(p)->ObjectName = n; \
|
|
(p)->SecurityDescriptor = s; \
|
|
(p)->SecurityQualityOfService = NULL; \
|
|
}
|
|
|
|
typedef struct _CLIENT_ID
|
|
{
|
|
HANDLE UniqueProcess;
|
|
HANDLE UniqueThread;
|
|
} CLIENT_ID, *PCLIENT_ID;
|
|
|
|
#include <pshpack4.h>
|
|
|
|
typedef struct _KSYSTEM_TIME
|
|
{
|
|
ULONG LowPart;
|
|
LONG High1Time;
|
|
LONG High2Time;
|
|
} KSYSTEM_TIME, *PKSYSTEM_TIME;
|
|
|
|
#include <poppack.h>
|
|
|
|
#endif
|