📄 wintype.pas
字号:
type
PLuid = ^LUID;
_LUID = record
LowPart: DWORD;
HighPart: LONG;
end;
{$EXTERNALSYM _LUID}
LUID = _LUID;
{$EXTERNALSYM LUID}
TLuid = LUID;
DWORDLONG = ULONGLONG;
{$EXTERNALSYM DWORDLONG}
PDWORDLONG = ^DWORDLONG;
{$EXTERNALSYM PDWORDLONG}
//
// Physical address.
//
PHYSICAL_ADDRESS = LARGE_INTEGER;
{$EXTERNALSYM PHYSICAL_ADDRESS}
PPHYSICAL_ADDRESS = ^LARGE_INTEGER;
{$EXTERNALSYM PPHYSICAL_ADDRESS}
//
// Define operations to logically shift an int64 by 0..31 bits and to multiply
// 32-bits by 32-bits to form a 64-bit product.
//
//
// The x86 C compiler understands inline assembler. Therefore, inline functions
// that employ inline assembler are used for shifts of 0..31. The multiplies
// rely on the compiler recognizing the cast of the multiplicand to int64 to
// generate the optimal code inline.
//
function Int32x32To64(a, b: LONG): LONGLONG;
{$EXTERNALSYM Int32x32To64}
function UInt32x32To64(a, b: DWORD): ULONGLONG;
{$EXTERNALSYM UInt32x32To64}
function Int64ShllMod32(Value: ULONGLONG; ShiftCount: DWORD): ULONGLONG;
{$EXTERNALSYM Int64ShllMod32}
function Int64ShraMod32(Value: LONGLONG; ShiftCount: DWORD): LONGLONG; assembler;
{$EXTERNALSYM Int64ShraMod32}
function Int64ShrlMod32(Value: ULONGLONG; ShiftCount: DWORD): ULONGLONG;
{$EXTERNALSYM Int64ShrlMod32}
//
// Event type
//
type
_EVENT_TYPE = (NotificationEvent, SynchronizationEvent);
{$EXTERNALSYM _EVENT_TYPE}
EVENT_TYPE = _EVENT_TYPE;
{$EXTERNALSYM EVENT_TYPE}
TEventType = _EVENT_TYPE;
//
// Timer type
//
_TIMER_TYPE = (NotificationTimer, SynchronizationTimer);
{$EXTERNALSYM _TIMER_TYPE}
TIMER_TYPE = _TIMER_TYPE;
{$EXTERNALSYM TIMER_TYPE}
//
// Wait type
//
_WAIT_TYPE = (WaitAll, WaitAny);
{$EXTERNALSYM _WAIT_TYPE}
WAIT_TYPE = _WAIT_TYPE;
{$EXTERNALSYM WAIT_TYPE}
//
// Pointer to an Asciiz string
//
PSZ = ^CHAR;
{$EXTERNALSYM PSZ}
PCSZ = ^CHAR;
{$EXTERNALSYM PCSZ}
//
// Counted String
//
PString = ^TString;
_STRING = record
Length: USHORT;
MaximumLength: USHORT;
Buffer: PCHAR;
end;
{$EXTERNALSYM _STRING}
TString = _STRING;
ANSI_STRING = _STRING;
{$EXTERNALSYM ANSI_STRING}
PANSI_STRING = PSTRING;
{$EXTERNALSYM PANSI_STRING}
OEM_STRING = _STRING;
{$EXTERNALSYM OEM_STRING}
POEM_STRING = PSTRING;
{$EXTERNALSYM POEM_STRING}
//
// CONSTCounted String
//
PCString = ^CSTRING;
_CSTRING = record
Length: USHORT;
MaximumLength: USHORT;
Buffer: PCHAR;
end;
{$EXTERNALSYM _CSTRING}
CSTRING = _CSTRING;
{$EXTERNALSYM CSTRING}
TCString = CSTRING;
const
ANSI_NULL = CHAR(0);
{$EXTERNALSYM ANSI_NULL}
type
CANSI_STRING = _STRING;
{$EXTERNALSYM CANSI_STRING}
PCANSI_STRING = PSTRING;
{$EXTERNALSYM PCANSI_STRING}
//
// Unicode strings are counted 16-bit character strings. If they are
// NULL terminated, Length does not include trailing NULL.
//
PUNICODE_STRING = ^UNICODE_STRING;
{$EXTERNALSYM PUNICODE_STRING}
_UNICODE_STRING = record
Length: USHORT;
MaximumLength: USHORT;
Buffer: PWSTR;
end;
{$EXTERNALSYM _UNICODE_STRING}
UNICODE_STRING = _UNICODE_STRING;
{$EXTERNALSYM UNICODE_STRING}
PCUNICODE_STRING = ^UNICODE_STRING;
{$EXTERNALSYM PCUNICODE_STRING}
TUnicodeString = UNICODE_STRING;
PUnicodeString = PUNICODE_STRING;
const
UNICODE_NULL = WCHAR(0);
{$EXTERNALSYM UNICODE_NULL}
//
// Boolean
//
type
//typedef UCHAR BOOLEAN;
PBOOLEAN = ^ByteBool;
{$EXTERNALSYM PBOOLEAN}
//
// Doubly linked list structure. Can be used as either a list head, or
// as link words.
//
type
PLIST_ENTRY = ^LIST_ENTRY;
{$EXTERNALSYM PLIST_ENTRY}
_LIST_ENTRY = record
Flink: PLIST_ENTRY;
Blink: PLIST_ENTRY;
end;
{$EXTERNALSYM _LIST_ENTRY}
LIST_ENTRY = _LIST_ENTRY;
{$EXTERNALSYM LIST_ENTRY}
PRLIST_ENTRY = ^LIST_ENTRY;
{$EXTERNALSYM PLIST_ENTRY}
TListEntry = LIST_ENTRY;
PListEntry = PLIST_ENTRY;
//
// Singly linked list structure. Can be used as either a list head, or
// as link words.
//
PSINGLE_LIST_ENTRY = ^SINGLE_LIST_ENTRY;
{$EXTERNALSYM PSINGLE_LIST_ENTRY}
_SINGLE_LIST_ENTRY = record
Next: PSINGLE_LIST_ENTRY;
end;
{$EXTERNALSYM _SINGLE_LIST_ENTRY}
SINGLE_LIST_ENTRY = _SINGLE_LIST_ENTRY;
{$EXTERNALSYM SINGLE_LIST_ENTRY}
TSingleListEntry = SINGLE_LIST_ENTRY;
PSingleListEntry = PSINGLE_LIST_ENTRY;
//
// These are needed for portable debugger support.
//
PLIST_ENTRY32 = ^LIST_ENTRY32;
{$EXTERNALSYM PLIST_ENTRY32}
{$EXTERNALSYM PLIST_ENTRY32}
LIST_ENTRY32 = record
Flink: DWORD;
Blink: DWORD;
end;
{$EXTERNALSYM LIST_ENTRY32}
TListEntry32 = LIST_ENTRY32;
PListEntry32 = PLIST_ENTRY32;
PLIST_ENTRY64 = ^LIST_ENTRY64;
{$EXTERNALSYM PLIST_ENTRY64}
LIST_ENTRY64 = record
Flink: ULONGLONG;
Blink: ULONGLONG;
end;
{$EXTERNALSYM LIST_ENTRY64}
TListEntry64 = LIST_ENTRY64;
PListEntry64 = PLIST_ENTRY64;
procedure ListEntry32To64(l32: PLIST_ENTRY32; l64: PLIST_ENTRY64);
{$EXTERNALSYM ListEntry32To64}
procedure ListEntry64To32(l64: PLIST_ENTRY64; l32: PLIST_ENTRY32);
{$EXTERNALSYM ListEntry64To32}
//
// These macros are used to walk lists on a target system
//
{
#define CONTAINING_RECORD32(address, type, field) ( \
(ULONG_PTR)(address) - \
(ULONG_PTR)(&((type *)0)->field))
#define CONTAINING_RECORD64(address, type, field) ( \
(ULONGLONG)(address) - \
(ULONGLONG)(&((type *)0)->field))
}
type
PString32 = ^STRING32;
_STRING32 = record
Length: USHORT;
MaximumLength: USHORT;
Buffer: ULONG;
end;
{$EXTERNALSYM _STRING32}
STRING32 = _STRING32;
{$EXTERNALSYM STRING32}
TString32 = STRING32;
UNICODE_STRING32 = STRING32;
{$EXTERNALSYM UNICODE_STRING32}
PUNICODE_STRING32 = ^UNICODE_STRING32;
{$EXTERNALSYM PUNICODE_STRING32}
ANSI_STRING32 = STRING32;
{$EXTERNALSYM ANSI_STRING32}
PANSI_STRING32 = ^ANSI_STRING32;
{$EXTERNALSYM PANSI_STRING32}
PString64 = ^STRING64;
_STRING64 = record
Length: USHORT;
MaximumLength: USHORT;
Buffer: ULONGLONG;
end;
{$EXTERNALSYM _STRING64}
STRING64 = _STRING64;
{$EXTERNALSYM STRING64}
TString64 = STRING64;
UNICODE_STRING64 = STRING64;
{$EXTERNALSYM UNICODE_STRING64}
PUNICODE_STRING64 = ^UNICODE_STRING64;
{$EXTERNALSYM PUNICODE_STRING64}
ANSI_STRING64 = STRING64;
{$EXTERNALSYM ANSI_STRING64}
PANSI_STRING64 = ^ANSI_STRING64;
{$EXTERNALSYM PANSI_STRING64}
//
// Valid values for the Attributes field
//
const
OBJ_INHERIT = $00000002;
{$EXTERNALSYM OBJ_INHERIT}
OBJ_PERMANENT = $00000010;
{$EXTERNALSYM OBJ_PERMANENT}
OBJ_EXCLUSIVE = $00000020;
{$EXTERNALSYM OBJ_EXCLUSIVE}
OBJ_CASE_INSENSITIVE = $00000040;
{$EXTERNALSYM OBJ_CASE_INSENSITIVE}
OBJ_OPENIF = $00000080;
{$EXTERNALSYM OBJ_OPENIF}
OBJ_OPENLINK = $00000100;
{$EXTERNALSYM OBJ_OPENLINK}
OBJ_KERNEL_HANDLE = $00000200;
{$EXTERNALSYM OBJ_KERNEL_HANDLE}
OBJ_VALID_ATTRIBUTES = $000003F2;
{$EXTERNALSYM OBJ_VALID_ATTRIBUTES}
//
// Object Attributes structure
//
type
POBJECT_ATTRIBUTES = ^OBJECT_ATTRIBUTES;
{$EXTERNALSYM POBJECT_ATTRIBUTES}
_OBJECT_ATTRIBUTES = record
Length: ULONG;
RootDirectory: HANDLE;
ObjectName: PUNICODE_STRING;
Attributes: ULONG;
SecurityDescriptor: PVOID; // Points to type SECURITY_DESCRIPTOR
SecurityQualityOfService: PVOID; // Points to type SECURITY_QUALITY_OF_SERVICE
end;
{$EXTERNALSYM _OBJECT_ATTRIBUTES}
OBJECT_ATTRIBUTES = _OBJECT_ATTRIBUTES;
{$EXTERNALSYM OBJECT_ATTRIBUTES}
TObjectAttributes = OBJECT_ATTRIBUTES;
PObjectAttributes = POBJECT_ATTRIBUTES;
procedure InitializeObjectAttributes(p: POBJECT_ATTRIBUTES; n: PUNICODE_STRING;
a: ULONG; r: HANDLE; s: PVOID{PSECURITY_DESCRIPTOR});
{$EXTERNALSYM InitializeObjectAttributes}
//
// Constants
//
const
//#define FALSE 0
//#define TRUE 1
NULL = 0;
{$EXTERNALSYM NULL}
NULL64 = 0;
{$EXTERNALSYM NULL64}
//#include <guiddef.h>
type
PObjectId = ^OBJECTID;
_OBJECTID = record // size is 20
Lineage: GUID;
Uniquifier: ULONG;
end;
{$EXTERNALSYM _OBJECTID}
OBJECTID = _OBJECTID;
{$EXTERNALSYM OBJECTID}
TObjectId = OBJECTID;
const
MINCHAR = $80;
{$EXTERNALSYM MINCHAR}
MAXCHAR = $7f;
{$EXTERNALSYM MAXCHAR}
MINSHORT = $8000;
{$EXTERNALSYM MINSHORT}
MAXSHORT = $7fff;
{$EXTERNALSYM MAXSHORT}
MINLONG = DWORD($80000000);
{$EXTERNALSYM MINLONG}
MAXLONG = $7fffffff;
{$EXTERNALSYM MAXLONG}
MAXUCHAR = $ff;
{$EXTERNALSYM MAXUCHAR}
MAXUSHORT = $ffff;
{$EXTERNALSYM MAXUSHORT}
MAXULONG = DWORD($ffffffff);
{$EXTERNALSYM MAXULONG}
//
// Useful Helper Macros
//
//
// Determine if an argument is present by testing the value of the pointer
// to the argument value.
//
function ARGUMENT_PRESENT(ArgumentPointer: Pointer): BOOL;
{$EXTERNALSYM ARGUMENT_PRESENT}
//
// Exception handler routine definition.
//
// struct _CONTEXT;
// struct _EXCEPTION_RECORD;
//type
// PEXCEPTION_ROUTINE = function (ExceptionRecord: LP_EXCEPTION_RECORD;
// EstablisherFrame: PVOID; ContextRecord: LPCONTEXT;
// DispatcherContext: PVOID): EXCEPTION_DISPOSITION; stdcall;
// {$EXTERNALSYM PEXCEPTION_ROUTINE}
//
// Interrupt Request Level (IRQL)
//
type
KIRQL = UCHAR;
{$EXTERNALSYM KIRQL}
PKIRQL = ^KIRQL;
{$EXTERNALSYM PKIRQL}
//
// Product types
//
_NT_PRODUCT_TYPE = (Filler0, NtProductWinNt, NtProductLanManNt, NtProductServer);
{$EXTERNALSYM _NT_PRODUCT_TYPE}
NT_PRODUCT_TYPE = _NT_PRODUCT_TYPE;
{$EXTERNALSYM NT_PRODUCT_TYPE}
PNT_PRODUCT_TYPE = ^NT_PRODUCT_TYPE;
TNtProductType = _NT_PRODUCT_TYPE;
//
// the bit mask, SharedUserData->SuiteMask, is a ULONG
// so there can be a maximum of 32 entries
// in this enum.
//
type
_SUITE_TYPE = (
SmallBusiness,
Enterprise,
BackOffice,
CommunicationServer,
TerminalServer,
SmallBusinessRestricted,
EmbeddedNT,
DataCenter,
SingleUserTS,
MaxSuiteType);
{$EXTERNALSYM _SUITE_TYPE}
SUITE_TYPE = _SUITE_TYPE;
{$EXTERNALSYM SUITE_TYPE}
TSuiteType = SUITE_TYPE;
const
VER_SERVER_NT = DWORD($80000000);
{$EXTERNALSYM VER_SERVER_NT}
VER_WORKSTATION_NT = $40000000;
{$EXTERNALSYM VER_WORKSTATION_NT}
VER_SUITE_SMALLBUSINESS = $00000001;
{$EXTERNALSYM VER_SUITE_SMALLBUSINESS}
VER_SUITE_ENTERPRISE = $00000002;
{$EXTERNALSYM VER_SUITE_ENTERPRISE}
VER_SUITE_BACKOFFICE = $00000004;
{$EXTERNALSYM VER_SUITE_BACKOFFICE}
VER_SUITE_COMMUNICATIONS = $00000008;
{$EXTERNALSYM VER_SUITE_COMMUNICATIONS}
VER_SUITE_TERMINAL = $00000010;
{$EXTERNALSYM VER_SUITE_TERMINAL}
VER_SUITE_SMALLBUSINESS_RESTRICTED = $00000020;
{$EXTERNALSYM VER_SUITE_SMALLBUSINESS_RESTRICTED}
VER_SUITE_EMBEDDEDNT = $00000040;
{$EXTERNALSYM VER_SUITE_EMBEDDEDNT}
VER_SUITE_DATACENTER = $00000080;
{$EXTERNALSYM VER_SUITE_DATACENTER}
VER_SUITE_SINGLEUSERTS = $00000100;
{$EXTERNALSYM VER_SUITE_SINGLEUSERTS}
// ntdef.h
type
error_status_t = Longword;
{$EXTERNALSYM error_status_t}
wchar_t = Word;
{$EXTERNALSYM wchar_t}
//
// The following types are guaranteed to be signed and 32 bits wide.
//
type
INT_PTR = Integer;
{$EXTERNALSYM INT_PTR}
PINT_PTR = ^INT_PTR;
{$EXTERNALSYM PINT_PTR}
UINT_PTR = Longword;
{$EXTERNALSYM UINT_PTR}
PUINT_PTR = ^UINT_PTR;
{$EXTERNALSYM PUINT_PTR}
LONG_PTR = Longint;
{$EXTERNALSYM LONG_PTR}
PLONG_PTR = ^LONG_PTR;
{$EXTERNALSYM PLONG_PTR}
ULONG_PTR = Longword;
{$EXTERNALSYM ULONG_PTR}
PULONG_PTR = ^PULONG_PTR;
{$EXTERNALSYM PULONG_PTR}
LONG32 = Integer;
{$EXTERNALSYM LONG32}
PLONG32 = ^LONG32;
{$EXTERNALSYM PLONG32}
INT32 = Integer;
{$EXTERNALSYM INT32}
PINT32 = ^INT32;
{$EXTERNALSYM PINT32}
//
// The following types are guaranteed to be unsigned and 32 bits wide.
//
ULONG32 = Longword;
{$EXTERNALSYM ULONG32}
PULONG32 = ^ULONG32;
{$EXTERNALSYM PULONG32}
DWORD32 = Longword;
{$EXTERNALSYM DWORD32}
PDWORD32 = ^DWORD32;
{$EXTERNALSYM PDWORD32}
UINT32 = Longword;
{$EXTERNALSYM UINT32}
PUINT32 = ^UINT32;
{$EXTERNALSYM PUINT32}
const
MAX_PATH = 260;
{$EXTERNALSYM MAX_PATH}
type
//unsigned char BYTE;
//unsigned short WORD;
FLOAT = Single;
{$EXTERNALSYM FLOAT}
PFLOAT = ^FLOAT;
{$EXTERNALSYM PFLOAT}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -