📄 jwawinbase.pas
字号:
{******************************************************************************}
{ }
{ Windows Base Services API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: winbase.h, released August 2001. The original Pascal }
{ code is: WinBase.pas, released December 2000. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm@chello.nl). }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ 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 or my personal homepage located at }
{ http://members.chello.nl/m.vanbrakel2 }
{ }
{ 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. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}
unit JwaWinBase;
{$HPPEMIT ''}
{$HPPEMIT '#include "WinBase.h"'}
{$HPPEMIT ''}
{$I WINDEFINES.INC}
{$STACKFRAMES ON}
interface
uses
{$IFDEF USE_DELPHI_TYPES}Windows,{$ENDIF}
JwaNtStatus, JwaWinNT, JwaWinType;
const
INVALID_HANDLE_VALUE = HANDLE(-1);
{$EXTERNALSYM INVALID_HANDLE_VALUE}
INVALID_FILE_SIZE = DWORD($FFFFFFFF);
{$EXTERNALSYM INVALID_FILE_SIZE}
INVALID_SET_FILE_POINTER = DWORD(-1);
{$EXTERNALSYM INVALID_SET_FILE_POINTER}
INVALID_FILE_ATTRIBUTES = DWORD(-1);
{$EXTERNALSYM INVALID_FILE_ATTRIBUTES}
FILE_BEGIN = 0;
{$EXTERNALSYM FILE_BEGIN}
FILE_CURRENT = 1;
{$EXTERNALSYM FILE_CURRENT}
FILE_END = 2;
{$EXTERNALSYM FILE_END}
TIME_ZONE_ID_INVALID = DWORD($FFFFFFFF);
{$EXTERNALSYM TIME_ZONE_ID_INVALID}
WAIT_FAILED = DWORD($FFFFFFFF);
{$EXTERNALSYM WAIT_FAILED}
WAIT_OBJECT_0 = STATUS_WAIT_0 + 0;
{$EXTERNALSYM WAIT_OBJECT_0}
WAIT_ABANDONED = STATUS_ABANDONED_WAIT_0 + 0;
{$EXTERNALSYM WAIT_ABANDONED}
WAIT_ABANDONED_0 = STATUS_ABANDONED_WAIT_0 + 0;
{$EXTERNALSYM WAIT_ABANDONED_0}
WAIT_IO_COMPLETION = STATUS_USER_APC;
{$EXTERNALSYM WAIT_IO_COMPLETION}
STILL_ACTIVE = STATUS_PENDING;
{$EXTERNALSYM STILL_ACTIVE}
EXCEPTION_ACCESS_VIOLATION = STATUS_ACCESS_VIOLATION;
{$EXTERNALSYM EXCEPTION_ACCESS_VIOLATION}
EXCEPTION_DATATYPE_MISALIGNMENT = STATUS_DATATYPE_MISALIGNMENT;
{$EXTERNALSYM EXCEPTION_DATATYPE_MISALIGNMENT}
EXCEPTION_BREAKPOINT = STATUS_BREAKPOINT;
{$EXTERNALSYM EXCEPTION_BREAKPOINT}
EXCEPTION_SINGLE_STEP = STATUS_SINGLE_STEP;
{$EXTERNALSYM EXCEPTION_SINGLE_STEP}
EXCEPTION_ARRAY_BOUNDS_EXCEEDED = STATUS_ARRAY_BOUNDS_EXCEEDED;
{$EXTERNALSYM EXCEPTION_ARRAY_BOUNDS_EXCEEDED}
EXCEPTION_FLT_DENORMAL_OPERAND = STATUS_FLOAT_DENORMAL_OPERAND;
{$EXTERNALSYM EXCEPTION_FLT_DENORMAL_OPERAND}
EXCEPTION_FLT_DIVIDE_BY_ZERO = STATUS_FLOAT_DIVIDE_BY_ZERO;
{$EXTERNALSYM EXCEPTION_FLT_DIVIDE_BY_ZERO}
EXCEPTION_FLT_INEXACT_RESULT = STATUS_FLOAT_INEXACT_RESULT;
{$EXTERNALSYM EXCEPTION_FLT_INEXACT_RESULT}
EXCEPTION_FLT_INVALID_OPERATION = STATUS_FLOAT_INVALID_OPERATION;
{$EXTERNALSYM EXCEPTION_FLT_INVALID_OPERATION}
EXCEPTION_FLT_OVERFLOW = STATUS_FLOAT_OVERFLOW;
{$EXTERNALSYM EXCEPTION_FLT_OVERFLOW}
EXCEPTION_FLT_STACK_CHECK = STATUS_FLOAT_STACK_CHECK;
{$EXTERNALSYM EXCEPTION_FLT_STACK_CHECK}
EXCEPTION_FLT_UNDERFLOW = STATUS_FLOAT_UNDERFLOW;
{$EXTERNALSYM EXCEPTION_FLT_UNDERFLOW}
EXCEPTION_INT_DIVIDE_BY_ZERO = STATUS_INTEGER_DIVIDE_BY_ZERO;
{$EXTERNALSYM EXCEPTION_INT_DIVIDE_BY_ZERO}
EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW;
{$EXTERNALSYM EXCEPTION_INT_OVERFLOW}
EXCEPTION_PRIV_INSTRUCTION = STATUS_PRIVILEGED_INSTRUCTION;
{$EXTERNALSYM EXCEPTION_PRIV_INSTRUCTION}
EXCEPTION_IN_PAGE_ERROR = STATUS_IN_PAGE_ERROR;
{$EXTERNALSYM EXCEPTION_IN_PAGE_ERROR}
EXCEPTION_ILLEGAL_INSTRUCTION = STATUS_ILLEGAL_INSTRUCTION;
{$EXTERNALSYM EXCEPTION_ILLEGAL_INSTRUCTION}
EXCEPTION_NONCONTINUABLE_EXCEPTION = STATUS_NONCONTINUABLE_EXCEPTION;
{$EXTERNALSYM EXCEPTION_NONCONTINUABLE_EXCEPTION}
EXCEPTION_STACK_OVERFLOW = STATUS_STACK_OVERFLOW;
{$EXTERNALSYM EXCEPTION_STACK_OVERFLOW}
EXCEPTION_INVALID_DISPOSITION = STATUS_INVALID_DISPOSITION;
{$EXTERNALSYM EXCEPTION_INVALID_DISPOSITION}
EXCEPTION_GUARD_PAGE = STATUS_GUARD_PAGE_VIOLATION;
{$EXTERNALSYM EXCEPTION_GUARD_PAGE}
EXCEPTION_INVALID_HANDLE = STATUS_INVALID_HANDLE;
{$EXTERNALSYM EXCEPTION_INVALID_HANDLE}
CONTROL_C_EXIT = STATUS_CONTROL_C_EXIT;
{$EXTERNALSYM CONTROL_C_EXIT}
procedure MoveMemory(Destination, Source: PVOID; Length: SIZE_T);
{$EXTERNALSYM MoveMemory}
procedure CopyMemory(Destination, Source: PVOID; Length: SIZE_T);
{$EXTERNALSYM CopyMemory}
procedure FillMemory(Destination: PVOID; Length: SIZE_T; Fill: BYTE);
{$EXTERNALSYM FillMemory}
procedure ZeroMemory(Destination: PVOID; Length: SIZE_T);
{$EXTERNALSYM ZeroMemory}
//#define SecureZeroMemory RtlSecureZeroMemory TODO
//
// File creation flags must start at the high end since they
// are combined with the attributes
//
const
FILE_FLAG_WRITE_THROUGH = DWORD($80000000);
{$EXTERNALSYM FILE_FLAG_WRITE_THROUGH}
FILE_FLAG_OVERLAPPED = $40000000;
{$EXTERNALSYM FILE_FLAG_OVERLAPPED}
FILE_FLAG_NO_BUFFERING = $20000000;
{$EXTERNALSYM FILE_FLAG_NO_BUFFERING}
FILE_FLAG_RANDOM_ACCESS = $10000000;
{$EXTERNALSYM FILE_FLAG_RANDOM_ACCESS}
FILE_FLAG_SEQUENTIAL_SCAN = $08000000;
{$EXTERNALSYM FILE_FLAG_SEQUENTIAL_SCAN}
FILE_FLAG_DELETE_ON_CLOSE = $04000000;
{$EXTERNALSYM FILE_FLAG_DELETE_ON_CLOSE}
FILE_FLAG_BACKUP_SEMANTICS = $02000000;
{$EXTERNALSYM FILE_FLAG_BACKUP_SEMANTICS}
FILE_FLAG_POSIX_SEMANTICS = $01000000;
{$EXTERNALSYM FILE_FLAG_POSIX_SEMANTICS}
FILE_FLAG_OPEN_REPARSE_POINT = $00200000;
{$EXTERNALSYM FILE_FLAG_OPEN_REPARSE_POINT}
FILE_FLAG_OPEN_NO_RECALL = $00100000;
{$EXTERNALSYM FILE_FLAG_OPEN_NO_RECALL}
FILE_FLAG_FIRST_PIPE_INSTANCE = $00080000;
{$EXTERNALSYM FILE_FLAG_FIRST_PIPE_INSTANCE}
CREATE_NEW = 1;
{$EXTERNALSYM CREATE_NEW}
CREATE_ALWAYS = 2;
{$EXTERNALSYM CREATE_ALWAYS}
OPEN_EXISTING = 3;
{$EXTERNALSYM OPEN_EXISTING}
OPEN_ALWAYS = 4;
{$EXTERNALSYM OPEN_ALWAYS}
TRUNCATE_EXISTING = 5;
{$EXTERNALSYM TRUNCATE_EXISTING}
//
// Define possible return codes from the CopyFileEx callback routine
//
PROGRESS_CONTINUE = 0;
{$EXTERNALSYM PROGRESS_CONTINUE}
PROGRESS_CANCEL = 1;
{$EXTERNALSYM PROGRESS_CANCEL}
PROGRESS_STOP = 2;
{$EXTERNALSYM PROGRESS_STOP}
PROGRESS_QUIET = 3;
{$EXTERNALSYM PROGRESS_QUIET}
//
// Define CopyFileEx callback routine state change values
//
CALLBACK_CHUNK_FINISHED = $00000000;
{$EXTERNALSYM CALLBACK_CHUNK_FINISHED}
CALLBACK_STREAM_SWITCH = $00000001;
{$EXTERNALSYM CALLBACK_STREAM_SWITCH}
//
// Define CopyFileEx option flags
//
COPY_FILE_FAIL_IF_EXISTS = $00000001;
{$EXTERNALSYM COPY_FILE_FAIL_IF_EXISTS}
COPY_FILE_RESTARTABLE = $00000002;
{$EXTERNALSYM COPY_FILE_RESTARTABLE}
COPY_FILE_OPEN_SOURCE_FOR_WRITE = $00000004;
{$EXTERNALSYM COPY_FILE_OPEN_SOURCE_FOR_WRITE}
COPY_FILE_ALLOW_DECRYPTED_DESTINATION = $00000008;
{$EXTERNALSYM COPY_FILE_ALLOW_DECRYPTED_DESTINATION}
//
// Define ReplaceFile option flags
//
REPLACEFILE_WRITE_THROUGH = $00000001;
{$EXTERNALSYM REPLACEFILE_WRITE_THROUGH}
REPLACEFILE_IGNORE_MERGE_ERRORS = $00000002;
{$EXTERNALSYM REPLACEFILE_IGNORE_MERGE_ERRORS}
//
// Define the NamedPipe definitions
//
//
// Define the dwOpenMode values for CreateNamedPipe
//
PIPE_ACCESS_INBOUND = $00000001;
{$EXTERNALSYM PIPE_ACCESS_INBOUND}
PIPE_ACCESS_OUTBOUND = $00000002;
{$EXTERNALSYM PIPE_ACCESS_OUTBOUND}
PIPE_ACCESS_DUPLEX = $00000003;
{$EXTERNALSYM PIPE_ACCESS_DUPLEX}
//
// Define the Named Pipe End flags for GetNamedPipeInfo
//
PIPE_CLIENT_END = $00000000;
{$EXTERNALSYM PIPE_CLIENT_END}
PIPE_SERVER_END = $00000001;
{$EXTERNALSYM PIPE_SERVER_END}
//
// Define the dwPipeMode values for CreateNamedPipe
//
PIPE_WAIT = $00000000;
{$EXTERNALSYM PIPE_WAIT}
PIPE_NOWAIT = $00000001;
{$EXTERNALSYM PIPE_NOWAIT}
PIPE_READMODE_BYTE = $00000000;
{$EXTERNALSYM PIPE_READMODE_BYTE}
PIPE_READMODE_MESSAGE = $00000002;
{$EXTERNALSYM PIPE_READMODE_MESSAGE}
PIPE_TYPE_BYTE = $00000000;
{$EXTERNALSYM PIPE_TYPE_BYTE}
PIPE_TYPE_MESSAGE = $00000004;
{$EXTERNALSYM PIPE_TYPE_MESSAGE}
//
// Define the well known values for CreateNamedPipe nMaxInstances
//
PIPE_UNLIMITED_INSTANCES = 255;
{$EXTERNALSYM PIPE_UNLIMITED_INSTANCES}
//
// Define the Security Quality of Service bits to be passed
// into CreateFile
//
SECURITY_ANONYMOUS = (Ord(SecurityAnonymous) shl 16);
{$EXTERNALSYM SECURITY_ANONYMOUS}
SECURITY_IDENTIFICATION = (Ord(SecurityIdentification) shl 16);
{$EXTERNALSYM SECURITY_IDENTIFICATION}
SECURITY_IMPERSONATION = (Ord(SecurityImpersonation) shl 16);
{$EXTERNALSYM SECURITY_IMPERSONATION}
SECURITY_DELEGATION = (Ord(SecurityDelegation) shl 16);
{$EXTERNALSYM SECURITY_DELEGATION}
SECURITY_CONTEXT_TRACKING = $00040000;
{$EXTERNALSYM SECURITY_CONTEXT_TRACKING}
SECURITY_EFFECTIVE_ONLY = $00080000;
{$EXTERNALSYM SECURITY_EFFECTIVE_ONLY}
SECURITY_SQOS_PRESENT = $00100000;
{$EXTERNALSYM SECURITY_SQOS_PRESENT}
SECURITY_VALID_SQOS_FLAGS = $001F0000;
{$EXTERNALSYM SECURITY_VALID_SQOS_FLAGS}
//
// File structures
//
type
LPOVERLAPPED = ^OVERLAPPED;
{$EXTERNALSYM LPOVERLAPPED}
_OVERLAPPED = record
Internal: ULONG_PTR;
InternalHigh: ULONG_PTR;
Union: record
case Integer of
0: (
Offset: DWORD;
OffsetHigh: DWORD);
1: (
Pointer: PVOID);
end;
hEvent: HANDLE;
end;
{$EXTERNALSYM _OVERLAPPED}
OVERLAPPED = _OVERLAPPED;
{$EXTERNALSYM OVERLAPPED}
TOverlapped = OVERLAPPED;
POverlapped = LPOVERLAPPED;
PSECURITY_ATTRIBUTES = ^SECURITY_ATTRIBUTES;
{$EXTERNALSYM PSECURITY_ATTRIBUTES}
_SECURITY_ATTRIBUTES = record
nLength: DWORD;
lpSecurityDescriptor: LPVOID;
bInheritHandle: BOOL;
end;
{$EXTERNALSYM _SECURITY_ATTRIBUTES}
SECURITY_ATTRIBUTES = _SECURITY_ATTRIBUTES;
{$EXTERNALSYM SECURITY_ATTRIBUTES}
LPSECURITY_ATTRIBUTES = ^SECURITY_ATTRIBUTES;
{$EXTERNALSYM LPSECURITY_ATTRIBUTES}
TSecurityAttributes = SECURITY_ATTRIBUTES;
PSecurityAttributes = PSECURITY_ATTRIBUTES;
PPROCESS_INFORMATION = ^PROCESS_INFORMATION;
{$EXTERNALSYM PPROCESS_INFORMATION}
_PROCESS_INFORMATION = record
hProcess: HANDLE;
hThread: HANDLE;
dwProcessId: DWORD;
dwThreadId: DWORD;
end;
{$EXTERNALSYM _PROCESS_INFORMATION}
PROCESS_INFORMATION = _PROCESS_INFORMATION;
{$EXTERNALSYM PROCESS_INFORMATION}
LPPROCESS_INFORMATION = ^PROCESS_INFORMATION;
{$EXTERNALSYM LPPROCESS_INFORMATION}
TProcessInformation = PROCESS_INFORMATION;
PProcessInformation = PPROCESS_INFORMATION;
//
// File System time stamps are represented with the following structure:
//
{$IFNDEF _FILETIME_}
{$DEFINE _FILETIME_}
LPFILETIME = ^FILETIME;
{$EXTERNALSYM LPFILETIME}
_FILETIME = record
dwLowDateTime: DWORD;
dwHighDateTime: DWORD;
end;
{$EXTERNALSYM _FILETIME}
FILETIME = _FILETIME;
{$EXTERNALSYM FILETIME}
TFileTime = FILETIME;
PFileTime = LPFILETIME;
{$ENDIF}
//
// System time is represented with the following structure:
//
LPSYSTEMTIME = ^SYSTEMTIME;
{$EXTERNALSYM LPSYSTEMTIME}
{$IFDEF USE_DELPHI_TYPES}
_SYSTEMTIME = Windows._SYSTEMTIME;
SYSTEMTIME = Windows.SYSTEMTIME;
TSystemTime = Windows.TSystemTime;
PSystemtime = Windows.PSystemTime;
{$ELSE}
_SYSTEMTIME = record
wYear: Word;
wMonth: Word;
wDayOfWeek: Word;
wDay: Word;
wHour: Word;
wMinute: Word;
wSecond: Word;
wMilliseconds: Word;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -