📄 wintype.pas
字号:
{******************************************************************}
{ }
{ Borland Delphi Runtime Library }
{ Windows Base Types interface unit }
{ }
{ Portions created by Microsoft are }
{ Copyright (C) 1995-1999 Microsoft Corporation. }
{ All Rights Reserved. }
{ }
{ The original file is: various released June 2000. }
{ The original Pascal code is: WinType.pas, released December 2000 }
{ The initial developer of the Pascal code is Marcel van Brakel }
{ (brakelm@bart.nl). }
{ }
{ Portions created by Marcel van Brakel are }
{ Copyright (C) 1999 Marcel van Brakel. }
{ }
{ Obtained through: }
{ Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project }
{ JEDI home page, located at http://delphi-jedi.org }
{ }
{ The contents of this file are used with permission, subject to }
{ the Mozilla Public License Version 1.1 (the "License"); you may }
{ not use this file except in compliance with the License. You may }
{ obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an }
{ "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or }
{ implied. See the License for the specific language governing }
{ rights and limitations under the License. }
{ }
{******************************************************************}
unit WinType;
{$WEAKPACKAGEUNIT}
{$HPPEMIT ''}
{$HPPEMIT '#include "BaseTsd.h"'}
{$HPPEMIT '#include "BaseTyps.h"'}
{$HPPEMIT '#include "NtDef.h"'}
{$HPPEMIT '#include "WinDef.h"'}
{$HPPEMIT ''}
{$HPPEMIT 'typedef LPVOID *LPLPVOID'}
{$HPPEMIT 'typedef GUID TGUID'}
{$HPPEMIT 'typedef GUID *LPGUID'}
{$HPPEMIT 'typedef GUID CLSID'}
{$HPPEMIT 'typedef HMODULE *PHMODULE'}
{$HPPEMIT ''}
{$I WINDEFINES.INC}
interface
uses
Windows;
type
LPLPSTR = ^LPSTR;
{$NODEFINE LPLPSTR}
LPLPCSTR = ^LPCSTR;
{$NODEFINE LPLPCSTR}
LPLPCWSTR = ^LPCWSTR;
{$NODEFINE LPLPCWSTR}
LPLPWSTR = ^LPWSTR;
{$NODEFINE LPLPWSTR}
PPChar = ^PChar;
PPWideChar = ^PWideChar;
PPointer = ^Pointer;
GUID = TGUID;
{$NODEFINE GUID}
LPGUID = ^GUID;
{$NODEFINE LPGUID}
CLSID = TGUID;
{$NODEFINE CLSID}
// ntdef.h
type
//typedef double DOUBLE;
PQuad = ^TQuad;
_QUAD = record // QUAD is for those times we want
DoNotUseThisField: Double; // an 8 byte aligned 8 byte long structure
end; // which is NOT really a floating point
{$EXTERNALSYM _QUAD} // number. Use DOUBLE if you want an FP number.
QUAD = _QUAD;
{$EXTERNALSYM QUAD}
TQuad = _QUAD;
//
// Unsigned Basics
//
UCHAR = Char;
{$EXTERNALSYM UCHAR}
USHORT = Word;
{$EXTERNALSYM USHORT}
ULONG = Longword;
{$EXTERNALSYM ULONG}
UQUAD = QUAD;
{$EXTERNALSYM UQUAD}
//
// __int64 is only supported by 2.0 and later midl.
// __midl is set by the 2.0 midl and not by 1.0 midl.
//
type
LONGLONG = Int64;
{$EXTERNALSYM LONGLONG}
ULONGLONG = Int64;
{$EXTERNALSYM ULONGLONG}
const
MAXLONGLONG = $7fffffffffffffff;
{$EXTERNALSYM MAXLONGLONG}
type
PLONGLONG = ^LONGLONG;
{$EXTERNALSYM PLONGLONG}
PULONGLONG = ^ULONGLONG;
{$EXTERNALSYM PULONGLONG}
BOOL = LongBool;
{$EXTERNALSYM BOOL}
DWORD = Longword;
{$EXTERNALSYM DWORD}
const
ANYSIZE_ARRAY = 1;
{$EXTERNALSYM ANYSIZE_ARRAY}
MAX_NATURAL_ALIGNMENT = SizeOf(ULONG);
{$EXTERNALSYM MAX_NATURAL_ALIGNMENT}
//
// Void
//
type
PVOID = Pointer;
{$EXTERNALSYM PVOID}
PPVOID = ^PVOID;
{$EXTERNALSYM PPVOID}
PVOID64 = Pointer;
{$EXTERNALSYM PVOID64}
//
// Basics
//
SHORT = Smallint;
{$EXTERNALSYM SHORT}
LONG = Longint;
{$EXTERNALSYM LONG}
//
// UNICODE (Wide Character) types
//
WCHAR = WideChar; // wc, 16-bit UNICODE character
{$EXTERNALSYM WCHAR}
//DELPHI PWCHAR = ^WCHAR;
PWCHAR = Windows.PWChar;
{$EXTERNALSYM PWCHAR}
LPWCH = ^WCHAR;
{$EXTERNALSYM LPWCH}
PWCH = ^WCHAR;
{$EXTERNALSYM PWCH}
LPCWCH = ^WCHAR;
{$EXTERNALSYM LPCWCH}
PCWCH = ^WCHAR;
{$EXTERNALSYM PCWCH}
NWPSTR = ^WCHAR;
{$EXTERNALSYM NWPSTR}
//DELPHI LPWSTR = ^WCHAR;
LPWSTR = Windows.LPWSTR;
{$EXTERNALSYM LPWSTR}
//DELPHI LPCWSTR = ^WCHAR;
LPCWSTR = Windows.LPCWSTR;
{$EXTERNALSYM LPCWSTR}
//DELPHI PWSTR = ^WCHAR;
PWSTR = Windows.LPWSTR;
{$EXTERNALSYM PWSTR}
//
// ANSI (Multi-byte Character) types
//
LPCH = ^CHAR;
{$EXTERNALSYM LPCH}
PCH = ^CHAR;
{$EXTERNALSYM PCH}
LPCCH = ^CHAR;
{$EXTERNALSYM LPCCH}
PCCH = ^CHAR;
{$EXTERNALSYM PCCH}
NPSTR = ^CHAR;
{$EXTERNALSYM NPSTR}
//DELPHI LPSTR = ^CHAR;
LPSTR = Windows.LPSTR;
//DELPHI {$EXTERNALSYM LPSTR}
PSTR = ^CHAR;
{$EXTERNALSYM PSTR}
//DELPHI LPCSTR = ^CHAR;
LPCSTR = Windows.LPCSTR;
//DELPHI {$EXTERNALSYM LPCSTR}
PCSTR = ^CHAR;
{$EXTERNALSYM PCSTR}
//
// Neutral ANSI/UNICODE types and macros
//
{$IFDEF UNICODE}
TCHAR = WCHAR;
{$EXTERNALSYM TCHAR}
PTCHAR = ^TCHAR;
{$EXTERNALSYM PTCHAR}
TUCHAR = WCHAR;
{$EXTERNALSYM TUCHAR}
PTUCHAR = ^TUCHAR;
{$EXTERNALSYM PTUCHAR}
LPTCH = LPWSTR;
{$EXTERNALSYM LPTCH}
PTCH = LPWSTR;
{$EXTERNALSYM PTCH}
PTSTR = LPWSTR;
{$EXTERNALSYM PTSTR}
//DELPHI LPTSTR = LPWSTR;
LPTSTR = Windows.LPTSTR;
//DELPHI {$EXTERNALSYM LPTSTR}
PCTSTR = LPCWSTR;
{$EXTERNALSYM PCTSTR}
//DELPHI LPCTSTR = LPCWSTR;
LPCTSTR = Windows.LPCTSTR;
//DELPHI {$EXTERNALSYM LPCTSTR}
//__TEXT = LPWSTR;
//{$EXTERNALSYM __TEXT}
{$ELSE}
TCHAR = CHAR;
{$EXTERNALSYM TCHAR}
PTCHAR = ^TCHAR;
{$EXTERNALSYM PTCHAR}
TUCHAR = CHAR;
{$EXTERNALSYM TUCHAR}
PTUCHAR = ^TUCHAR;
{$EXTERNALSYM PTUCHAR}
LPTCH = LPSTR;
{$EXTERNALSYM LPTCH}
PTCH = LPSTR;
{$EXTERNALSYM PTCH}
PTSTR = LPSTR;
{$EXTERNALSYM PTSTR}
//DELPHI LPTSTR = LPSTR;
LPTSTR = Windows.LPTSTR;
//DELPHI {$EXTERNALSYM LPTSTR}
PCTSTR = LPCSTR;
{$EXTERNALSYM PCTSTR}
//DELPHI LPCTSTR = LPCSTR;
LPCTSTR = Windows.LPCTSTR;
//DELPHI {$EXTERNALSYM LPCTSTR}
//__TEXT = LPSTR;
//{$EXTERNALSYM __TEXT}
{$ENDIF}
//TEXT = __TEXT;
//{$EXTERNALSYM TEXT}
//
// Pointer to Basics
//
PSHORT = ^SHORT;
{$EXTERNALSYM PSHORT}
PLONG = ^LONG;
{$EXTERNALSYM PLONG}
//
// Pointer to Unsigned Basics
//
PUCHAR = ^UCHAR;
{$EXTERNALSYM PUCHAR}
PUSHORT = ^USHORT;
{$EXTERNALSYM PUSHORT}
PULONG = ^ULONG;
{$EXTERNALSYM PULONG}
PUQUAD = ^UQUAD;
{$EXTERNALSYM PUQUAD}
//
// Signed characters
//
SCHAR = Shortint;
{$EXTERNALSYM SCHAR}
PSCHAR = ^SCHAR;
{$EXTERNALSYM PSCHAR}
//
// Handle to an Object
//
HANDLE = Longword;
{$EXTERNALSYM HANDLE}
PHANDLE = ^HANDLE;
{$EXTERNALSYM PHANDLE}
THandle = HANDLE;
//
// Flag (bit) fields
//
FCHAR = UCHAR;
{$EXTERNALSYM FCHAR}
FSHORT = USHORT;
{$EXTERNALSYM FSHORT}
FLONG = ULONG;
{$EXTERNALSYM FLONG}
// Component Object Model defines, and macros
HRESULT = LONG;
{$EXTERNALSYM HRESULT}
//
// Low order two bits of a handle are ignored by the system and available
// for use by application code as tag bits. The remaining bits are opaque
// and used to store a serial number and table index.
//
const
OBJ_HANDLE_TAGBITS = $00000003;
{$EXTERNALSYM OBJ_HANDLE_TAGBITS}
//
// Cardinal Data Types [0 - 2**N-2)
//
type
CCHAR = Char;
{$EXTERNALSYM CCHAR}
CSHORT = Shortint;
{$EXTERNALSYM CSHORT}
CLONG = ULONG;
{$EXTERNALSYM CLONG}
PCCHAR = ^CCHAR;
{$EXTERNALSYM PCCHAR}
PCSHORT = ^CSHORT;
{$EXTERNALSYM PCSHORT}
PCLONG = ^CLONG;
{$EXTERNALSYM PCLONG}
//
// NLS basics (Locale and Language Ids)
//
LCID = ULONG;
{$EXTERNALSYM LCID}
PLCID = PULONG;
{$EXTERNALSYM PLCID}
LANGID = USHORT;
{$EXTERNALSYM LANGID}
//
// Logical Data Type - These are 32-bit logical values.
//
LOGICAL = ULONG;
{$EXTERNALSYM LOGICAL}
PLOGICAL = ^ULONG;
{$EXTERNALSYM PLOGICAL}
//
// NTSTATUS
//
NTSTATUS = LONG;
{$EXTERNALSYM NTSTATUS}
PNTSTATUS = ^NTSTATUS;
{$EXTERNALSYM PNTSTATUS}
//
// Status values are 32 bit values layed out as follows:
//
// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
// +---+-+-------------------------+-------------------------------+
// |Sev|C| Facility | Code |
// +---+-+-------------------------+-------------------------------+
//
// where
//
// Sev - is the severity code
//
// 00 - Success
// 01 - Informational
// 10 - Warning
// 11 - Error
//
// C - is the Customer code flag
//
// Facility - is the facility code
//
// Code - is the facility's status code
//
//
// Generic test for success on any status value (non-negative numbers
// indicate success).
//
function NT_SUCCESS(Status: NTSTATUS): BOOL;
{$EXTERNALSYM NT_SUCCESS}
//
// Generic test for information on any status value.
//
function NT_INFORMATION(Status: NTSTATUS): BOOL;
{$EXTERNALSYM NT_INFORMATION}
//
// Generic test for warning on any status value.
//
function NT_WARNING(Status: NTSTATUS): BOOL;
{$EXTERNALSYM NT_WARNING}
//
// Generic test for error on any status value.
//
function NT_ERROR(Status: NTSTATUS): BOOL;
{$EXTERNALSYM NT_ERROR}
const
APPLICATION_ERROR_MASK = $20000000;
{$EXTERNALSYM APPLICATION_ERROR_MASK}
ERROR_SEVERITY_SUCCESS = $00000000;
{$EXTERNALSYM ERROR_SEVERITY_SUCCESS}
ERROR_SEVERITY_INFORMATIONAL = $40000000;
{$EXTERNALSYM ERROR_SEVERITY_INFORMATIONAL}
ERROR_SEVERITY_WARNING = DWORD($80000000);
{$EXTERNALSYM ERROR_SEVERITY_WARNING}
ERROR_SEVERITY_ERROR = DWORD($C0000000);
{$EXTERNALSYM ERROR_SEVERITY_ERROR}
//
// Large (64-bit) integer types and operations
//
type
LPLARGE_INTEGER = ^LARGE_INTEGER;
{$EXTERNALSYM LPLARGE_INTEGER}
_LARGE_INTEGER = record
case Integer of
0: (
LowPart: DWORD;
HighPart: LONG);
1: (
QuadPart: LONGLONG);
end;
{$EXTERNALSYM _LARGE_INTEGER}
LARGE_INTEGER = _LARGE_INTEGER;
{$EXTERNALSYM LARGE_INTEGER}
PLARGE_INTEGER = ^LARGE_INTEGER;
{$EXTERNALSYM PLARGE_INTEGER}
TLargeInteger = LARGE_INTEGER;
PLargeInteger = LPLARGE_INTEGER;
LPULARGE_INTEGER = ^ULARGE_INTEGER;
{$EXTERNALSYM LPULARGE_INTEGER}
ULARGE_INTEGER = record
case Integer of
0: (
LowPart: DWORD;
HighPart: DWORD);
1: (
QuadPart: LONGLONG);
end;
{$EXTERNALSYM ULARGE_INTEGER}
PULARGE_INTEGER = ^ULARGE_INTEGER;
{$EXTERNALSYM PULARGE_INTEGER}
TULargeInteger = ULARGE_INTEGER;
PULargeInteger = LPULARGE_INTEGER;
TIME = LARGE_INTEGER;
{$EXTERNALSYM TIME}
_TIME = _LARGE_INTEGER;
{$EXTERNALSYM _TIME}
PTIME = PLARGE_INTEGER;
{$EXTERNALSYM PTIME}
//
// _M_IX86 included so that EM CONTEXT structure compiles with
// x86 programs. *** TBD should this be for all architectures?
//
//
// 16 byte aligned type for 128 bit floats
//
//
// For we define a 128 bit structure and use __declspec(align(16)) pragma to
// align to 128 bits.
//
type
PFloat128 = ^TFloat128;
_FLOAT128 = record
LowPart: Int64;
HighPart: Int64;
end;
{$EXTERNALSYM _FLOAT128}
FLOAT128 = _FLOAT128;
{$EXTERNALSYM FLOAT128}
TFloat128 = FLOAT128;
// Update Sequence Number
USN = LONGLONG;
{$EXTERNALSYM USN}
//
// Locally Unique Identifier
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -