{**************************************************************************************************} { } { Project JEDI Code Library (JCL) } { } { The contents of this file are 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/ } { } { 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. } { } { The Original Code is JclWin32.pas. } { } { The Initial Developers of the Original Code are documented in the accompanying help file } { JCLHELP.hlp. Portions created by these individuals are Copyright (C) of these individuals. } { } {**************************************************************************************************} { } { This unit defines various Win32 API declarations which are either missing or incorrect in one or } { more of the supported Delphi versions. This unit is not intended for regular code, only API } { declarations. } { } { Unit owner: Peter Friese } { } {**************************************************************************************************} // $Id: JclWin32.pas,v 1.2 2004/04/14 21:55:07 druid Exp $ unit JclWin32; {$I jcl.inc} {$IFDEF SUPPORTS_WEAKPACKAGEUNIT} {$WEAKPACKAGEUNIT ON} {$ENDIF SUPPORTS_WEAKPACKAGEUNIT} interface uses Windows, ActiveX, {$IFNDEF FPC} AccCtrl, {$IFNDEF BCB5} ImageHlp, {$ENDIF BCB5} {$ENDIF FPC} JclBase; {$HPPEMIT '#include <winnt.h>'} {$HPPEMIT 'typedef _IMAGE_THUNK_DATA32 _IMAGE_THUNK_DATA;'} {$HPPEMIT 'typedef _IMAGE_TLS_DIRECTORY32 _IMAGE_TLS_DIRECTORY;'} {$HPPEMIT '#include <winioctl.h>'} {$HPPEMIT '#include <delayimp.h>'} {$HPPEMIT '#include <nb30.h>'} //================================================================================================== // FPC compatibility //================================================================================================== {$IFDEF FPC} // from unit Windows const FILE_ATTRIBUTE_OFFLINE = $00001000; HKEY_CLASSES_ROOT = DWORD($80000000); HKEY_CURRENT_USER = DWORD($80000001); HKEY_LOCAL_MACHINE = DWORD($80000002); HKEY_USERS = DWORD($80000003); HKEY_PERFORMANCE_DATA = DWORD($80000004); HKEY_CURRENT_CONFIG = DWORD($80000005); HKEY_DYN_DATA = DWORD($80000006); VOS__BASE = 0; VOS__WINDOWS16 = 1; VOS__PM16 = 2; VOS__PM32 = 3; VOS__WINDOWS32 = 4; { VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV } VFT2_UNKNOWN = 0; VFT2_DRV_PRINTER = 1; VFT2_DRV_KEYBOARD = 2; VFT2_DRV_LANGUAGE = 3; VFT2_DRV_DISPLAY = 4; VFT2_DRV_MOUSE = 5; VFT2_DRV_NETWORK = 6; VFT2_DRV_SYSTEM = 7; VFT2_DRV_INSTALLABLE = 8; VFT2_DRV_SOUND = 9; VFT2_DRV_COMM = 10; type _GET_FILEEX_INFO_LEVELS = (GetFileExInfoStandard, GetFileExMaxInfoLevel); TGetFileExInfoLevels = _GET_FILEEX_INFO_LEVELS; GET_FILEEX_INFO_LEVELS = _GET_FILEEX_INFO_LEVELS; type PKeyboardState = ^TKeyboardState; TKeyboardState = array[0..255] of Byte; function GetFileAttributesEx(lpFileName: PChar; fInfoLevelId: TGetFileExInfoLevels; lpFileInformation: Pointer): BOOL; stdcall; external kernel32 name 'GetFileAttributesExA'; function CancelWaitableTimer(hTimer: THandle): BOOL; stdcall; external kernel32 name 'CancelWaitableTimer'; function CreateWaitableTimer(lpTimerAttributes: PSecurityAttributes; bManualReset: BOOL; lpTimerName: PChar): THandle; stdcall; external kernel32 name 'CreateWaitableTimerA'; function OpenWaitableTimer(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpTimerName: PChar): THandle; stdcall; external kernel32 name 'OpenWaitableTimerA'; // from unit AccCtrl type SE_OBJECT_TYPE = ( SE_UNKNOWN_OBJECT_TYPE, SE_FILE_OBJECT, SE_SERVICE, SE_PRINTER, SE_REGISTRY_KEY, SE_LMSHARE, SE_KERNEL_OBJECT, SE_WINDOW_OBJECT, SE_DS_OBJECT, SE_DS_OBJECT_ALL, SE_PROVIDER_DEFINED_OBJECT, SE_WMIGUID_OBJECT ); // from ActiveX const DROPEFFECT_NONE = 0; DROPEFFECT_COPY = 1; DROPEFFECT_MOVE = 2; DROPEFFECT_LINK = 4; DROPEFFECT_SCROLL = DWORD($80000000); {$ENDIF FPC} //-------------------------------------------------------------------------------------------------- // Locales related //-------------------------------------------------------------------------------------------------- const KLF_SETFORPROCESS = $00000100; LCID_ALTERNATE_SORTS = $00000004; CP_THREAD_ACP = 3; CP_SYMBOL = 42; CTRY_ALBANIA = 355; // Albania CTRY_ALGERIA = 213; // Algeria CTRY_ARGENTINA = 54; // Argentina CTRY_ARMENIA = 374; // Armenia CTRY_AUSTRALIA = 61; // Australia CTRY_AUSTRIA = 43; // Austria CTRY_AZERBAIJAN = 994; // Azerbaijan CTRY_BAHRAIN = 973; // Bahrain CTRY_BELARUS = 375; // Belarus CTRY_BELGIUM = 32; // Belgium CTRY_BELIZE = 501; // Belize CTRY_BOLIVIA = 591; // Bolivia CTRY_BRAZIL = 55; // Brazil CTRY_BRUNEI_DARUSSALAM = 673; // Brunei Darussalam CTRY_BULGARIA = 359; // Bulgaria CTRY_CANADA = 2; // Canada CTRY_CARIBBEAN = 1; // Caribbean CTRY_CHILE = 56; // Chile CTRY_COLOMBIA = 57; // Colombia CTRY_COSTA_RICA = 506; // Costa Rica CTRY_CROATIA = 385; // Croatia CTRY_CZECH = 420; // Czech Republic CTRY_DENMARK = 45; // Denmark CTRY_DOMINICAN_REPUBLIC = 1; // Dominican Republic CTRY_ECUADOR = 593; // Ecuador CTRY_EGYPT = 20; // Egypt CTRY_EL_SALVADOR = 503; // El Salvador CTRY_ESTONIA = 372; // Estonia CTRY_FAEROE_ISLANDS = 298; // Faeroe Islands CTRY_FINLAND = 358; // Finland CTRY_FRANCE = 33; // France CTRY_GEORGIA = 995; // Georgia CTRY_GERMANY = 49; // Germany CTRY_GREECE = 30; // Greece CTRY_GUATEMALA = 502; // Guatemala CTRY_HONDURAS = 504; // Honduras CTRY_HONG_KONG = 852; // Hong Kong S.A.R., P.R.C. CTRY_HUNGARY = 36; // Hungary CTRY_ICELAND = 354; // Iceland CTRY_INDIA = 91; // India CTRY_INDONESIA = 62; // Indonesia CTRY_IRAN = 981; // Iran CTRY_IRAQ = 964; // Iraq CTRY_IRELAND = 353; // Ireland CTRY_ISRAEL = 972; // Israel CTRY_ITALY = 39; // Italy CTRY_JAMAICA = 1; // Jamaica CTRY_JAPAN = 81; // Japan CTRY_JORDAN = 962; // Jordan CTRY_KAZAKSTAN = 7; // Kazakstan CTRY_KENYA = 254; // Kenya CTRY_KUWAIT = 965; // Kuwait CTRY_KYRGYZSTAN = 996; // Kyrgyzstan CTRY_LATVIA = 371; // Latvia CTRY_LEBANON = 961; // Lebanon CTRY_LIBYA = 218; // Libya CTRY_LIECHTENSTEIN = 41; // Liechtenstein CTRY_LITHUANIA = 370; // Lithuania CTRY_LUXEMBOURG = 352; // Luxembourg CTRY_MACAU = 853; // Macau S.A.R., PRC CTRY_MACEDONIA = 389; // Former Yugoslav Republic of Macedonia CTRY_MALAYSIA = 60; // Malaysia CTRY_MALDIVES = 960; // Maldives CTRY_MEXICO = 52; // Mexico CTRY_MONACO = 33; // Principality of Monaco CTRY_MONGOLIA = 976; // Mongolia CTRY_MOROCCO = 212; // Morocco CTRY_NETHERLANDS = 31; // Netherlands CTRY_NEW_ZEALAND = 64; // New Zealand CTRY_NICARAGUA = 505; // Nicaragua CTRY_NORWAY = 47; // Norway CTRY_OMAN = 968; // Oman CTRY_PAKISTAN = 92; // Islamic Republic of Pakistan CTRY_PANAMA = 507; // Panama CTRY_PARAGUAY = 595; // Paraguay CTRY_PERU = 51; // Peru CTRY_PHILIPPINES = 63; // Republic of the Philippines CTRY_POLAND = 48; // Poland CTRY_PORTUGAL = 351; // Portugal CTRY_PRCHINA = 86; // People's Republic of China CTRY_PUERTO_RICO = 1; // Puerto Rico CTRY_QATAR = 974; // Qatar CTRY_ROMANIA = 40; // Romania CTRY_RUSSIA = 7; // Russia CTRY_SAUDI_ARABIA = 966; // Saudi Arabia CTRY_SERBIA = 381; // Serbia CTRY_SINGAPORE = 65; // Singapore CTRY_SLOVAK = 421; // Slovak Republic CTRY_SLOVENIA = 386; // Slovenia CTRY_SOUTH_AFRICA = 27; // South Africa CTRY_SOUTH_KOREA = 82; // Korea CTRY_SPAIN = 34; // Spain CTRY_SWEDEN = 46; // Sweden CTRY_SWITZERLAND = 41; // Switzerland CTRY_SYRIA = 963; // Syria CTRY_TAIWAN = 886; // Taiwan CTRY_TATARSTAN = 7; // Tatarstan CTRY_THAILAND = 66; // Thailand CTRY_TRINIDAD_Y_TOBAGO = 1; // Trinidad y Tobago CTRY_TUNISIA = 216; // Tunisia CTRY_TURKEY = 90; // Turkey CTRY_UAE = 971; // U.A.E. CTRY_UKRAINE = 380; // Ukraine CTRY_UNITED_KINGDOM = 44; // United Kingdom CTRY_UNITED_STATES = 1; // United States CTRY_URUGUAY = 598; // Uruguay CTRY_UZBEKISTAN = 7; // Uzbekistan CTRY_VENEZUELA = 58; // Venezuela CTRY_VIET_NAM = 84; // Viet Nam CTRY_YEMEN = 967; // Yemen CTRY_ZIMBABWE = 263; // Zimbabwe LOCALE_RETURN_NUMBER = $20000000; LOCALE_IDEFAULTEBCDICCODEPAGE = $00001012; LOCALE_IPAPERSIZE = $0000100A; LOCALE_SENGCURRNAME = $00001007; LOCALE_SNATIVECURRNAME = $00001008; LOCALE_SYEARMONTH = $00001006; LOCALE_SSORTNAME = $00001013; LOCALE_IDIGITSUBSTITUTION = $00001014; DATE_YEARMONTH = $00000008; DATE_LTRREADING = $00000010; DATE_RTLREADING = $00000020; CAL_SYEARMONTH = $0000002F; CAL_ITWODIGITYEARMAX = $00000030; CAL_NOUSEROVERRIDE = LOCALE_NOUSEROVERRIDE; CAL_USE_CP_ACP = LOCALE_USE_CP_ACP; CAL_RETURN_NUMBER = LOCALE_RETURN_NUMBER; CAL_GREGORIAN_ME_FRENCH = 9; // Gregorian Middle East French calendar CAL_GREGORIAN_ARABIC = 10; // Gregorian Arabic calendar CAL_GREGORIAN_XLIT_ENGLISH = 11; // Gregorian Transliterated English calendar CAL_GREGORIAN_XLIT_FRENCH = 12; // Gregorian Transliterated French calendar LGRPID_WESTERN_EUROPE = $0001; // Western Europe & U.S. LGRPID_CENTRAL_EUROPE = $0002; // Central Europe LGRPID_BALTIC = $0003; // Baltic LGRPID_GREEK = $0004; // Greek LGRPID_CYRILLIC = $0005; // Cyrillic LGRPID_TURKISH = $0006; // Turkish LGRPID_JAPANESE = $0007; // Japanese LGRPID_KOREAN = $0008; // Korean LGRPID_TRADITIONAL_CHINESE = $0009; // Traditional Chinese LGRPID_SIMPLIFIED_CHINESE = $000A; // Simplified Chinese LGRPID_THAI = $000B; // Thai LGRPID_HEBREW = $000C; // Hebrew LGRPID_ARABIC = $000D; // Arabic LGRPID_VIETNAMESE = $000E; // Vietnamese LGRPID_INDIC = $000F; // Indic LGRPID_GEORGIAN = $0010; // Georgian LGRPID_ARMENIAN = $0011; // Armenian function LANGIDFROMLCID(const lcid: LCID): Word; function MAKELANGID(const usPrimaryLanguage, usSubLanguage: Byte): Word; function PRIMARYLANGID(const lgid: Word): Word; function SUBLANGID(const lgid: Word): Word; function MAKELCID(const wLanguageID, wSortID: Word): LCID; function SORTIDFROMLCID(const lcid: LCID): Word; function GetCalendarInfoA(Locale: LCID; Calendar: CALID; CalType: CALTYPE; lpCalData: PAnsiChar; cchData: Integer; lpValue: PDWORD): Integer; stdcall; function GetCalendarInfoW(Locale: LCID; Calendar: CALID; CalType: CALTYPE; lpCalData: PWideChar; cchData: Integer; lpValue: PDWORD): Integer; stdcall; function SetCalendarInfoA(Locale: LCID; Calendar: CALID; CalType: CALTYPE; lpCalData: PAnsiChar): Integer; stdcall; function SetCalendarInfoW(Locale: LCID; Calendar: CALID; CalType: CALTYPE; lpCalData: PWideChar): Integer; stdcall; type TEnumCalendarInfoProcEx = function (lpCalendarInfoString: PChar; Calendar: CALID): BOOL; stdcall; function EnumCalendarInfoEx(lpCalInfoEnumProc: TEnumCalendarInfoProcEx; Locale: LCID; Calendar: CALID; CalType: CALTYPE): BOOL; stdcall; //-------------------------------------------------------------------------------------------------- // Various Base Services declarations //-------------------------------------------------------------------------------------------------- function InterlockedExchangePointer(var Target: Pointer; Value: Pointer): Pointer; stdcall; external kernel32 name 'InterlockedExchangePointer'; function SignalObjectAndWait(hObjectToSignal: THandle; hObjectToWaitOn: THandle; dwMilliseconds: DWORD; bAlertable: BOOL): DWORD; stdcall; external kernel32 name 'SignalObjectAndWait'; const // ProductType VER_NT_WORKSTATION = $0000001; VER_NT_DOMAIN_CONTROLLER = $0000002; VER_NT_SERVER = $0000003; // SuiteMask VER_SUITE_SMALLBUSINESS = $00000001; VER_SUITE_ENTERPRISE = $00000002; VER_SUITE_BACKOFFICE = $00000004; VER_SUITE_COMMUNICATIONS = $00000008; VER_SUITE_TERMINAL = $00000010; VER_SUITE_SMALLBUSINESS_RESTRICTED = $00000020; VER_SUITE_EMBEDDEDNT = $00000040; VER_SUITE_DATACENTER = $00000080; VER_SUITE_SINGLEUSERTS = $00000100; VER_SUITE_PERSONAL = $00000200; VER_SUITE_SERVERAPPLIANCE = $00000400; type POSVersionInfoEx = ^TOSVersionInfoEx; TOSVersionInfoEx = record dwOSVersionInfoSize: DWORD; dwMajorVersion: DWORD; dwMinorVersion: DWORD; dwBuildNumber: DWORD; dwPlatformId: DWORD; szCSDVersion: array [0..127] of Char; // Maintenance string for PSS usage wServicePackMajor: Word; wServicePackMinor: Word; wSuiteMask: Word; wProductType: Byte; wReserved: Byte; end; function GetVersionEx(lpVersionInformation: POSVersionInfoEx): BOOL; stdcall; function CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: DWORD; lpName: PChar): THandle; stdcall; external kernel32 name 'CreateMutexA'; //================================================================================================== // COM related declarations //================================================================================================== type TCoCreateInstanceExProc = function (const clsid: TGUID; unkOuter: IUnknown; dwClsCtx: Longint; ServerInfo: Pointer{PCoServerInfo}; dwCount: Longint; rgmqResults: Pointer{PMultiQIArray}): HResult stdcall; //================================================================================================== // Security related declarations from winnt.h //================================================================================================== ///////////////////////////////////////////////////////////////////////////// // // // Universal well-known SIDs // // // // Null SID S-1-0-0 // // World S-1-1-0 // // Local S-1-2-0 // // Creator Owner ID S-1-3-0 // // Creator Group ID S-1-3-1 // // Creator Owner Server ID S-1-3-2 // // Creator Group Server ID S-1-3-3 // // // // (Non-unique IDs) S-1-4 // // // ///////////////////////////////////////////////////////////////////////////// const SECURITY_NULL_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 0)); SECURITY_WORLD_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 1)); SECURITY_LOCAL_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 2)); SECURITY_CREATOR_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 3)); SECURITY_NON_UNIQUE_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 4)); SECURITY_NULL_RID = ($00000000); SECURITY_WORLD_RID = ($00000000); SECURITY_LOCAL_RID = ($00000000); SECURITY_CREATOR_OWNER_RID = ($00000000); SECURITY_CREATOR_GROUP_RID = ($00000001); SECURITY_CREATOR_OWNER_SERVER_RID = ($00000002); SECURITY_CREATOR_GROUP_SERVER_RID = ($00000003); ///////////////////////////////////////////////////////////////////////////// // // // NT well-known SIDs // // // // NT Authority S-1-5 // // Dialup S-1-5-1 // // // // Network S-1-5-2 // // Batch S-1-5-3 // // Interactive S-1-5-4 // // Service S-1-5-6 // // AnonymousLogon S-1-5-7 (aka null logon session) // // Proxy S-1-5-8 // // ServerLogon S-1-5-9 (aka domain controller account) // // Self S-1-5-10 (self RID) // // Authenticated User S-1-5-11 (Authenticated user somewhere) // // Restricted Code S-1-5-12 (Running restricted code) // // Terminal Server S-1-5-13 (Running on Terminal Server) // // // // (Logon IDs) S-1-5-5-X-Y // // // // (NT non-unique IDs) S-1-5-0x15-... // // // // (Built-in domain) s-1-5-0x20 // // // ///////////////////////////////////////////////////////////////////////////// const SECURITY_NT_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)); SECURITY_DIALUP_RID = ($00000001); SECURITY_NETWORK_RID = ($00000002); SECURITY_BATCH_RID = ($00000003); SECURITY_INTERACTIVE_RID = ($00000004); SECURITY_SERVICE_RID = ($00000006); SECURITY_ANONYMOUS_LOGON_RID = ($00000007); SECURITY_PROXY_RID = ($00000008); SECURITY_ENTERPRISE_CONTROLLERS_RID = ($00000009); SECURITY_SERVER_LOGON_RID = SECURITY_ENTERPRISE_CONTROLLERS_RID; SECURITY_PRINCIPAL_SELF_RID = ($0000000A); SECURITY_AUTHENTICATED_USER_RID = ($0000000B); SECURITY_RESTRICTED_CODE_RID = ($0000000C); SECURITY_TERMINAL_SERVER_RID = ($0000000D); SECURITY_LOGON_IDS_RID = ($00000005); SECURITY_LOGON_IDS_RID_COUNT = (3); SECURITY_LOCAL_SYSTEM_RID = ($00000012); SECURITY_NT_NON_UNIQUE = ($00000015); SECURITY_BUILTIN_DOMAIN_RID = ($00000020); ///////////////////////////////////////////////////////////////////////////// // // // well-known domain relative sub-authority values (RIDs)... // // // ///////////////////////////////////////////////////////////////////////////// // Well-known users ... DOMAIN_USER_RID_ADMIN = ($000001F4); DOMAIN_USER_RID_GUEST = ($000001F5); DOMAIN_USER_RID_KRBTGT = ($000001F6); // well-known groups ... DOMAIN_GROUP_RID_ADMINS = ($00000200); DOMAIN_GROUP_RID_USERS = ($00000201); DOMAIN_GROUP_RID_GUESTS = ($00000202); DOMAIN_GROUP_RID_COMPUTERS = ($00000203); DOMAIN_GROUP_RID_CONTROLLERS = ($00000204); DOMAIN_GROUP_RID_CERT_ADMINS = ($00000205); DOMAIN_GROUP_RID_SCHEMA_ADMINS = ($00000206); DOMAIN_GROUP_RID_ENTERPRISE_ADMINS = ($00000207); DOMAIN_GROUP_RID_POLICY_ADMINS = ($00000208); // well-known aliases ... DOMAIN_ALIAS_RID_ADMINS = ($00000220); DOMAIN_ALIAS_RID_USERS = ($00000221); DOMAIN_ALIAS_RID_GUESTS = ($00000222); DOMAIN_ALIAS_RID_POWER_USERS = ($00000223); DOMAIN_ALIAS_RID_ACCOUNT_OPS = ($00000224); DOMAIN_ALIAS_RID_SYSTEM_OPS = ($00000225); DOMAIN_ALIAS_RID_PRINT_OPS = ($00000226); DOMAIN_ALIAS_RID_BACKUP_OPS = ($00000227); DOMAIN_ALIAS_RID_REPLICATOR = ($00000228); DOMAIN_ALIAS_RID_RAS_SERVERS = ($00000229); DOMAIN_ALIAS_RID_PREW2KCOMPACCESS = ($0000022A); SE_CREATE_TOKEN_NAME = 'SeCreateTokenPrivilege'; SE_ASSIGNPRIMARYTOKEN_NAME = 'SeAssignPrimaryTokenPrivilege'; SE_LOCK_MEMORY_NAME = 'SeLockMemoryPrivilege'; SE_INCREASE_QUOTA_NAME = 'SeIncreaseQuotaPrivilege'; SE_UNSOLICITED_INPUT_NAME = 'SeUnsolicitedInputPrivilege'; SE_MACHINE_ACCOUNT_NAME = 'SeMachineAccountPrivilege'; SE_TCB_NAME = 'SeTcbPrivilege'; SE_SECURITY_NAME = 'SeSecurityPrivilege'; SE_TAKE_OWNERSHIP_NAME = 'SeTakeOwnershipPrivilege'; SE_LOAD_DRIVER_NAME = 'SeLoadDriverPrivilege'; SE_SYSTEM_PROFILE_NAME = 'SeSystemProfilePrivilege'; SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege'; SE_PROF_SINGLE_PROCESS_NAME = 'SeProfileSingleProcessPrivilege'; SE_INC_BASE_PRIORITY_NAME = 'SeIncreaseBasePriorityPrivilege'; SE_CREATE_PAGEFILE_NAME = 'SeCreatePagefilePrivilege'; SE_CREATE_PERMANENT_NAME = 'SeCreatePermanentPrivilege'; SE_BACKUP_NAME = 'SeBackupPrivilege'; SE_RESTORE_NAME = 'SeRestorePrivilege'; SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; SE_DEBUG_NAME = 'SeDebugPrivilege'; SE_AUDIT_NAME = 'SeAuditPrivilege'; SE_SYSTEM_ENVIRONMENT_NAME = 'SeSystemEnvironmentPrivilege'; SE_CHANGE_NOTIFY_NAME = 'SeChangeNotifyPrivilege'; SE_REMOTE_SHUTDOWN_NAME = 'SeRemoteShutdownPrivilege'; SE_UNDOCK_NAME = 'SeUndockPrivilege'; SE_SYNC_AGENT_NAME = 'SeSyncAgentPrivilege'; SE_ENABLE_DELEGATION_NAME = 'SeEnableDelegationPrivilege'; // TODO SetNamedSecurityInfo is incorrectly declared, at least for Windows 2000 // it is. D5 unit tries to import from aclapi.dll but it is located in advapi3.dll // Have to check whether this is also true for Windows NT 4. type PPSID = ^PSID; _TOKEN_USER = record User: SID_AND_ATTRIBUTES; end; TOKEN_USER = _TOKEN_USER; TTokenUser = TOKEN_USER; PTokenUser = ^TOKEN_USER; {.$IFNDEF FPC} function SetNamedSecurityInfoW(pObjectName: PWideChar; ObjectType: SE_OBJECT_TYPE; SecurityInfo: SECURITY_INFORMATION; ppsidOwner, ppsidGroup: PPSID; ppDacl, ppSacl: PACL): DWORD; stdcall; external 'advapi32.dll' name 'SetNamedSecurityInfoW'; {.$ENDIF FPC} function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL; const NewState: TTokenPrivileges; BufferLength: DWORD; PreviousState: PTokenPrivileges; ReturnLength: PDWORD): BOOL; stdcall; external 'advapi32.dll' name 'AdjustTokenPrivileges'; //================================================================================================== // NTFS related I/O control codes, types and constants from winnt.h, winioctl.h //================================================================================================== type PFileAllocatedRangeBuffer = ^TFileAllocatedRangeBuffer; _FILE_ALLOCATED_RANGE_BUFFER = record FileOffset: TLargeInteger; Length: TLargeInteger; end; TFileAllocatedRangeBuffer = _FILE_ALLOCATED_RANGE_BUFFER; PFileZeroDataInformation = ^TFileZeroDataInformation; _FILE_ZERO_DATA_INFORMATION = record FileOffset: TLargeInteger; BeyondFinalZero: TLargeInteger; end; TFileZeroDataInformation = _FILE_ZERO_DATA_INFORMATION; const COMPRESSION_FORMAT_NONE = $0000; COMPRESSION_FORMAT_DEFAULT = $0001; COMPRESSION_FORMAT_LZNT1 = $0002; FILE_SUPPORTS_SPARSE_FILES = $00000040; FILE_SUPPORTS_REPARSE_POINTS = $00000080; IO_REPARSE_TAG_MOUNT_POINT = DWORD($A0000003); IO_REPARSE_TAG_HSM = DWORD($C0000004); IO_REPARSE_TAG_SIS = DWORD($80000007); FILE_ATTRIBUTE_DEVICE = $00000040; FILE_ATTRIBUTE_SPARSE_FILE = $00000200; FILE_ATTRIBUTE_REPARSE_POINT = $00000400; FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $00002000; FILE_ATTRIBUTE_ENCRYPTED = $00004000; FILE_DEVICE_FILE_SYSTEM = $00000009; METHOD_BUFFERED = 0; METHOD_IN_DIRECT = 1; METHOD_OUT_DIRECT = 2; METHOD_NEITHER = 3; FILE_ANY_ACCESS = 0; FILE_SPECIAL_ACCESS = FILE_ANY_ACCESS; FILE_READ_ACCESS = $0001; FILE_WRITE_ACCESS = $0002; FILE_WRITE_DATA = $0002; FILE_READ_DATA = $0001; FSCTL_GET_COMPRESSION = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (15 shl 2) or METHOD_BUFFERED; FSCTL_SET_COMPRESSION = (FILE_DEVICE_FILE_SYSTEM shl 16) or ((FILE_READ_DATA or FILE_WRITE_DATA) shl 14) or (16 shl 2) or METHOD_BUFFERED; FSCTL_LOCK_VOLUME = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (6 shl 2) or METHOD_BUFFERED; FSCTL_UNLOCK_VOLUME = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (7 shl 2) or METHOD_BUFFERED; FSCTL_SET_SPARSE = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or (49 shl 2) or METHOD_BUFFERED; FSCTL_SET_ZERO_DATA = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_WRITE_DATA shl 14) or (50 shl 2) or METHOD_BUFFERED; FSCTL_QUERY_ALLOCATED_RANGES = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_READ_DATA shl 14) or (51 shl 2) or METHOD_NEITHER; FSCTL_SET_REPARSE_POINT = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or (41 shl 2) or METHOD_BUFFERED; FSCTL_GET_REPARSE_POINT = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (42 shl 2) or METHOD_BUFFERED; FSCTL_DELETE_REPARSE_POINT = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or (43 shl 2) or METHOD_BUFFERED; FSCTL_REQUEST_OPLOCK_LEVEL_1 = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (0 shl 2) or METHOD_BUFFERED; FSCTL_REQUEST_OPLOCK_LEVEL_2 = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (1 shl 2) or METHOD_BUFFERED; FSCTL_REQUEST_BATCH_OPLOCK = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (2 shl 2) or METHOD_BUFFERED; FSCTL_REQUEST_FILTER_OPLOCK = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (23 shl 2) or METHOD_BUFFERED; FSCTL_OPLOCK_BREAK_ACKNOWLEDGE = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (3 shl 2) or METHOD_BUFFERED; FSCTL_OPBATCH_ACK_CLOSE_PENDING = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (4 shl 2) or METHOD_BUFFERED; FSCTL_OPLOCK_BREAK_NOTIFY = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (5 shl 2) or METHOD_BUFFERED; FSCTL_OPLOCK_BREAK_ACK_NO_2 = (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (20 shl 2) or METHOD_BUFFERED; function GetVolumeNameForVolumeMountPoint(lpszVolumeMountPoint: LPCSTR; lpszVolumeName: LPSTR; cchBufferLength: DWORD): BOOL; function SetVolumeMountPoint(lpszVolumeMountPoint: LPCSTR; lpszVolumeName: LPCSTR): BOOL; function DeleteVolumeMountPoint(lpszVolumeMountPoint: LPCSTR): BOOL; //-------------------------------------------------------------------------------------------------- // NTFS Reparse Points //-------------------------------------------------------------------------------------------------- // // The reparse structure is used by layered drivers to store data in a // reparse point. The constraints on reparse tags are defined below. // This version of the reparse data buffer is only for Microsoft tags. // type PReparseDataBuffer = ^TReparseDataBuffer; _REPARSE_DATA_BUFFER = record ReparseTag: DWORD; ReparseDataLength: Word; Reserved: Word; case Integer of 0: ( // SymbolicLinkReparseBuffer and MountPointReparseBuffer SubstituteNameOffset: Word; SubstituteNameLength: Word; PrintNameOffset: Word; PrintNameLength: Word; PathBuffer: array [0..0] of WCHAR); 1: ( // GenericReparseBuffer DataBuffer: array [0..0] of Byte); end; TReparseDataBuffer = _REPARSE_DATA_BUFFER; const REPARSE_DATA_BUFFER_HEADER_SIZE = 8; REPARSE_GUID_DATA_BUFFER_HEADER_SIZE = 24; type PReparsePointInformation = ^TReparsePointInformation; _REPARSE_POINT_INFORMATION = record ReparseDataLength: Word; UnparsedNameLength: Word; end; TReparsePointInformation = _REPARSE_POINT_INFORMATION; const MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024; IO_REPARSE_TAG_RESERVED_ZERO = (0); IO_REPARSE_TAG_RESERVED_ONE = (1); IO_REPARSE_TAG_RESERVED_RANGE = IO_REPARSE_TAG_RESERVED_ONE; IO_REPARSE_TAG_VALID_VALUES = DWORD($E000FFFF); type PReparseGuidDataBuffer = ^TReparseGuidDataBuffer; _REPARSE_GUID_DATA_BUFFER = record ReparseTag: DWORD; ReparseDataLength: Word; Reserved: WORD; ReparseGuid: TGUID; DataBuffer: array [0..0] of Byte; end; TReparseGuidDataBuffer = _REPARSE_GUID_DATA_BUFFER; const FILE_FLAG_OPEN_REPARSE_POINT = $00200000; //-------------------------------------------------------------------------------------------------- // Streams //-------------------------------------------------------------------------------------------------- function BackupSeek(hFile: THandle; dwLowBytesToSeek, dwHighBytesToSeek: DWORD; var lpdwLowByteSeeked, lpdwHighByteSeeked: DWORD; var lpContext: Pointer): BOOL; stdcall; external kernel32 name 'BackupSeek'; //-------------------------------------------------------------------------------------------------- // Hard links //-------------------------------------------------------------------------------------------------- function BackupWrite(hFile: THandle; lpBuffer: PByte; nNumberOfBytesToWrite: DWORD; var lpNumberOfBytesWritten: DWORD; bAbort, bProcessSecurity: BOOL; lpContext: PPointer): BOOL; stdcall; external kernel32 name 'BackupWrite'; //================================================================================================== // Netbios (incorrect/inconvenient declarations in rtl) //================================================================================================== const NCBNAMSZ = 16; // absolute length of a net name MAX_LANA = 254; // lana's in range 0 to MAX_LANA inclusive NRC_GOODRET = $00; // good return NCBASTAT = $33; // NCB ADAPTER STATUS NCBRESET = $32; // NCB RESET NCBENUM = $37; // NCB ENUMERATE LANA NUMBERS type PNCB = ^TNCB; TNCBPostProc = procedure (P: PNCB); stdcall; TNCB = record ncb_command: Byte; ncb_retcode: Byte; ncb_lsn: Byte; ncb_num: Byte; ncb_buffer: PChar; ncb_length: Word; ncb_callname: array [0..NCBNAMSZ - 1] of Char; ncb_name: array [0..NCBNAMSZ - 1] of Char; ncb_rto: Byte; ncb_sto: Byte; ncb_post: TNCBPostProc; ncb_lana_num: Byte; ncb_cmd_cplt: Byte; ncb_reserve: array [0..9] of Char; ncb_event: THandle; end; PAdapterStatus = ^TAdapterStatus; TAdapterStatus = record adapter_address: array [0..5] of Char; // Remaining fields are unused so let's not declare them and save space filler: array [1..4*SizeOf(Char)+19*SizeOf(Word)+3*SizeOf(DWORD)] of Byte; end; PNameBuffer = ^TNameBuffer; TNameBuffer = record name: array [0..NCBNAMSZ - 1] of Char; name_num: Byte; name_flags: Byte; end; ASTAT = record adapt: TAdapterStatus; namebuf: array [0..29] of TNameBuffer; end; PLanaEnum = ^TLanaEnum; TLanaEnum = record length: Byte; lana: array [0..MAX_LANA] of Byte; end; procedure ExitNetbios; function InitNetbios: Boolean; function NetBios(P: PNCB): Byte; //================================================================================================== // JclMiscel //================================================================================================== //-------------------------------------------------------------------------------------------------- // Missing Reason.h translations //-------------------------------------------------------------------------------------------------- const SHTDN_REASON_MAJOR_APPLICATION = $00040000; SHTDN_REASON_MINOR_OTHER = $00000000; //================================================================================================== // JclPeImage //================================================================================================== //-------------------------------------------------------------------------------------------------- // Missing WinNT.h translations //-------------------------------------------------------------------------------------------------- const IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT = 13; // Delay load import descriptors IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14; // COM run-time descriptor -> .NET IMAGE_DLLCHARACTERISTICS_NO_BIND = $0800; IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = $2000; IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000; type { Non-COFF Object file header } PANonObjectHeader = ^TANonObjectHeader; ANON_OBJECT_HEADER = record Sig1: Word; // Must be IMAGE_FILE_MACHINE_UNKNOWN Sig2: Word; // Must be 0xffff Version: Word; // >= 1 (implies the CLSID field is present) Machine: Word; TimeDateStamp: DWORD; ClassID: TCLSID; // Used to invoke CoCreateInstance SizeOfData: DWORD; // Size of data that follows the header end; TANonObjectHeader = ANON_OBJECT_HEADER; { Import format } PImageImportByName = ^TImageImportByName; _IMAGE_IMPORT_BY_NAME = packed record Hint: Word; Name: array [0..0] of Char; end; TImageImportByName = _IMAGE_IMPORT_BY_NAME; IMAGE_IMPORT_BY_NAME = _IMAGE_IMPORT_BY_NAME; PImageThunkData = ^TImageThunkData; _IMAGE_THUNK_DATA = packed record case Integer of 0: (ForwarderString: DWORD;); // PBYTE 1: (Function_: DWORD;); // PDWORD 2: (Ordinal: DWORD;); 3: (AddressOfData: DWORD;); // PIMAGE_IMPORT_BY_NAME end; TImageThunkData = _IMAGE_THUNK_DATA; IMAGE_THUNK_DATA = _IMAGE_THUNK_DATA; const IMAGE_ORDINAL_FLAG = $80000000; function IMAGE_ORDINAL(Ordinal: DWORD): Word; type PImageTlsDirectory = ^TImageTlsDirectory; _IMAGE_TLS_DIRECTORY = packed record StartAddressOfRawData: DWORD; EndAddressOfRawData: DWORD; AddressOfIndex: DWORD; // PDWORD AddressOfCallBacks: DWORD; // PIMAGE_TLS_CALLBACK * SizeOfZeroFill: DWORD; Characteristics: DWORD; end; TImageTlsDirectory = _IMAGE_TLS_DIRECTORY; IMAGE_TLS_DIRECTORY = _IMAGE_TLS_DIRECTORY; PImageImportDescriptor = ^TImageImportDescriptor; _IMAGE_IMPORT_DESCRIPTOR = record Characteristics: DWORD; // 0 for terminating null import descriptor // RVA to original unbound IAT (PIMAGE_THUNK_DATA) TimeDateStamp: DWORD; // 0 if not bound, // -1 if bound, and real date\time stamp // in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND) // O.W. date/time stamp of DLL bound to (Old BIND) ForwarderChain: DWORD; // -1 if no forwarders Name: DWORD; FirstThunk: DWORD; // RVA to IAT (if bound this IAT has actual addresses) end; TImageImportDescriptor = _IMAGE_IMPORT_DESCRIPTOR; IMAGE_IMPORT_DESCRIPTOR = _IMAGE_IMPORT_DESCRIPTOR; { New format import descriptors pointed to by DataDirectory[ IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT ] } PImageBoundImportDescriptor = ^TImageBoundImportDescriptor; _IMAGE_BOUND_IMPORT_DESCRIPTOR = record TimeDateStamp: DWORD; OffsetModuleName: Word; NumberOfModuleForwarderRefs: Word; // Array of zero or more IMAGE_BOUND_FORWARDER_REF follows end; TImageBoundImportDescriptor = _IMAGE_BOUND_IMPORT_DESCRIPTOR; IMAGE_BOUND_IMPORT_DESCRIPTOR = _IMAGE_BOUND_IMPORT_DESCRIPTOR; PImageBoundForwarderRef = ^TImageBoundForwarderRef; _IMAGE_BOUND_FORWARDER_REF = record TimeDateStamp: DWORD; OffsetModuleName: Word; Reserved: Word; end; TImageBoundForwarderRef = _IMAGE_BOUND_FORWARDER_REF; IMAGE_BOUND_FORWARDER_REF = _IMAGE_BOUND_FORWARDER_REF; { Resource Format } const IMAGE_RESOURCE_NAME_IS_STRING = $80000000; IMAGE_RESOURCE_DATA_IS_DIRECTORY = $80000000; type PImageResourceDirectory = ^TImageResourceDirectory; _IMAGE_RESOURCE_DIRECTORY = packed record Characteristics: DWORD; TimeDateStamp: DWORD; MajorVersion: Word; MinorVersion: Word; NumberOfNamedEntries: Word; NumberOfIdEntries: Word; end; TImageResourceDirectory = _IMAGE_RESOURCE_DIRECTORY; IMAGE_RESOURCE_DIRECTORY = _IMAGE_RESOURCE_DIRECTORY; PImageResourceDirectoryEntry = ^TImageResourceDirectoryEntry; _IMAGE_RESOURCE_DIRECTORY_ENTRY = packed record Name: DWORD; // Or ID: Word (Union) OffsetToData: DWORD; end; TImageResourceDirectoryEntry = _IMAGE_RESOURCE_DIRECTORY_ENTRY; IMAGE_RESOURCE_DIRECTORY_ENTRY = _IMAGE_RESOURCE_DIRECTORY_ENTRY; PImageResourceDataEntry = ^TImageResourceDataEntry; _IMAGE_RESOURCE_DATA_ENTRY = packed record OffsetToData: DWORD; Size: DWORD; CodePage: DWORD; Reserved: DWORD; end; TImageResourceDataEntry = _IMAGE_RESOURCE_DATA_ENTRY; IMAGE_RESOURCE_DATA_ENTRY = _IMAGE_RESOURCE_DATA_ENTRY; PImageResourceDirStringU = ^TImageResourceDirStringU; _IMAGE_RESOURCE_DIR_STRING_U = packed record Length: Word; NameString: array [0..0] of WCHAR; end; TImageResourceDirStringU = _IMAGE_RESOURCE_DIR_STRING_U; IMAGE_RESOURCE_DIR_STRING_U = _IMAGE_RESOURCE_DIR_STRING_U; { Load Configuration Directory Entry } PImageLoadConfigDirectory = ^TImageLoadConfigDirectory; IMAGE_LOAD_CONFIG_DIRECTORY = packed record Characteristics: DWORD; TimeDateStamp: DWORD; MajorVersion: Word; MinorVersion: Word; GlobalFlagsClear: DWORD; GlobalFlagsSet: DWORD; CriticalSectionDefaultTimeout: DWORD; DeCommitFreeBlockThreshold: DWORD; DeCommitTotalFreeThreshold: DWORD; LockPrefixTable: DWORD; // VA MaximumAllocationSize: DWORD; VirtualMemoryThreshold: DWORD; ProcessHeapFlags: DWORD; ProcessAffinityMask: DWORD; CSDVersion: Word; Reserved1: Word; EditList: DWORD; // VA Reserved: array [0..0] of DWORD; end; TImageLoadConfigDirectory = IMAGE_LOAD_CONFIG_DIRECTORY; PImgDelayDescr = ^TImgDelayDescr; ImgDelayDescr = packed record grAttrs: DWORD; // attributes szName: DWORD; // pointer to dll name phmod: PDWORD; // address of module handle pIAT: TImageThunkData; // address of the IAT pINT: TImageThunkData; // address of the INT pBoundIAT: TImageThunkData; // address of the optional bound IAT pUnloadIAT: TImageThunkData; // address of optional copy of original IAT dwTimeStamp: DWORD; // 0 if not bound, // O.W. date/time stamp of DLL bound to (Old BIND) end; TImgDelayDescr = ImgDelayDescr; { Relocation } PImageBaseRelocation = ^TImageBaseRelocation; _IMAGE_BASE_RELOCATION = packed record VirtualAddress: DWORD; SizeOfBlock: DWORD; end; TImageBaseRelocation = _IMAGE_BASE_RELOCATION; IMAGE_BASE_RELOCATION =_IMAGE_BASE_RELOCATION; const IMAGE_SIZEOF_BASE_RELOCATION = 8; IMAGE_REL_BASED_ABSOLUTE = 0; IMAGE_REL_BASED_HIGH = 1; IMAGE_REL_BASED_LOW = 2; IMAGE_REL_BASED_HIGHLOW = 3; IMAGE_REL_BASED_HIGHADJ = 4; IMAGE_REL_BASED_MIPS_JMPADDR = 5; IMAGE_REL_BASED_SECTION = 6; IMAGE_REL_BASED_REL32 = 7; IMAGE_REL_BASED_MIPS_JMPADDR16 = 9; IMAGE_REL_BASED_IA64_IMM64 = 9; IMAGE_REL_BASED_DIR64 = 10; IMAGE_REL_BASED_HIGH3ADJ = 11; { Debug format } IMAGE_DEBUG_TYPE_BORLAND = 9; //-------------------------------------------------------------------------------------------------- // Missing WinUser.h translations //-------------------------------------------------------------------------------------------------- {$IFNDEF FPC} const RT_HTML = MakeIntResource(23); RT_MANIFEST = MakeIntResource(24); CREATEPROCESS_MANIFEST_RESOURCE_ID = MakeIntResource(1); ISOLATIONAWARE_MANIFEST_RESOURCE_ID = MakeIntResource(2); ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID = MakeIntResource(3); MINIMUM_RESERVED_MANIFEST_RESOURCE_ID = MakeIntResource(1); MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID = MakeIntResource(16); {$ENDIF FPC} //-------------------------------------------------------------------------------------------------- // CorHdr.h translations (part of CLR) //-------------------------------------------------------------------------------------------------- const COMIMAGE_FLAGS_ILONLY = $00000001; COMIMAGE_FLAGS_32BITREQUIRED = $00000002; COMIMAGE_FLAGS_IL_LIBRARY = $00000004; COMIMAGE_FLAGS_STRONGNAMESIGNED = $00000008; COMIMAGE_FLAGS_TRACKDEBUGDATA = $00010000; {$IFNDEF FPC} type PImageCor20Header = ^TImageCor20Header; IMAGE_COR20_HEADER = record cb: Cardinal; MajorRuntimeVersion: Word; MinorRuntimeVersion: Word; MetaData: TImageDataDirectory; Flags: Cardinal; EntryPointToken: Cardinal; Resources: TImageDataDirectory; StrongNameSignature: TImageDataDirectory; CodeManagerTable: TImageDataDirectory; VTableFixups: TImageDataDirectory; ExportAddressTableJumps: TImageDataDirectory; ManagedNativeHeader: TImageDataDirectory; end; TImageCor20Header = IMAGE_COR20_HEADER; {$ENDIF FPC} //-------------------------------------------------------------------------------------------------- // Incorrect translations //-------------------------------------------------------------------------------------------------- {$IFNDEF BCB5} {$IFNDEF FPC} type {$IFNDEF COMPILER6_UP} // possibly Borland's header translation bug, fixed in Delphi 6 TLoadedImage = LoadedImage; {$ENDIF COMPILER6_UP} PPImageSectionHeader = ^PImageSectionHeader; // wrong translation - LastRvaSection parameter is not var function ImageRvaToVa(NtHeaders: PImageNtHeaders; Base: Pointer; Rva: ULONG; LastRvaSection: PPImageSectionHeader): Pointer; stdcall; external 'imagehlp.dll' name 'ImageRvaToVa'; // wrong translation - last parameter is incorrect function BindImageEx(Flags: DWORD; ImageName, DllPath, SymbolPath: LPSTR; StatusRoutine: TImagehlpStatusRoutine): Bool; stdcall; external 'imagehlp.dll' name 'BindImageEx'; {$ENDIF FPC} // wrong translation - last parameter is incorrect function ImageEnumerateCertificates(FileHandle: THandle; TypeFilter: Word; CertificateCount, Indices: PDWORD; IndexCount: DWORD): Bool; stdcall; external 'imagehlp.dll' name 'ImageEnumerateCertificates'; {$ENDIF BCB5} //================================================================================================== // JclShell //================================================================================================== const DLLVER_PLATFORM_WINDOWS = $00000001; DLLVER_PLATFORM_NT = $00000002; type PDllVersionInfo = ^TDllVersionInfo; _DllVersionInfo = packed record cbSize: DWORD; dwMajorVersion: DWORD; dwMinorVersion: DWORD; dwBuildNumber: DWORD; dwPlatformId: DWORD; end; TDllVersionInfo = _DllVersionInfo; PRasDialDlg = ^TRasDialDlg; TRasDialDlg = packed record dwSize: DWORD; hwndOwner: HWND; dwFlags: DWORD; xDlg: Longint; yDlg: Longint; dwSubEntry: DWORD; dwError: DWORD; reserved: Longword; reserved2: Longword; end; TRasDialDlgA = function(lpszPhonebook, lpszEntry, lpszPhoneNumber: PAnsiChar; lpInfo: PRasDialDlg): BOOL; stdcall; //================================================================================================== // JclSysInfo //================================================================================================== const CSIDL_COMMON_APPDATA = $0023; { All Users\Application Data } CSIDL_WINDOWS = $0024; { GetWindowsDirectory() } CSIDL_SYSTEM = $0025; { GetSystemDirectory() } CSIDL_PROGRAM_FILES = $0026; { C:\Program Files } CSIDL_MYPICTURES = $0027; { C:\Program Files\My Pictures } CSIDL_PROFILE = $0028; { USERPROFILE } CSIDL_PROGRAM_FILES_COMMON = $002B; { C:\Program Files\Common } CSIDL_COMMON_TEMPLATES = $002D; { All Users\Templates } CSIDL_COMMON_DOCUMENTS = $002E; { All Users\Documents } CSIDL_COMMON_ADMINTOOLS = $002F; { All Users\Start Menu\Programs\Administrative Tools } CSIDL_ADMINTOOLS = $0030; { <user name>\Start Menu\Programs\Administrative Tools } CSIDL_CONNECTIONS = $0031; { Network and Dial-up Connections } CSIDL_COMMON_MUSIC = $0035; { All Users\My Music } CSIDL_COMMON_PICTURES = $0036; { All Users\My Pictures } CSIDL_COMMON_VIDEO = $0037; { All Users\My Video } CSIDL_RESOURCES = $0038; { Resource Direcotry } CSIDL_RESOURCES_LOCALIZED = $0039; { Localized Resource Direcotry } CSIDL_COMMON_OEM_LINKS = $003A; { Links to All Users OEM specific apps } CSIDL_CDBURN_AREA = $003B; { USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning } CSIDL_COMPUTERSNEARME = $003D; { Computers Near Me (computered from Workgroup membership) } //-------------------------------------------------------------------------------------------------- {$IFDEF SUPPORTS_EXTSYM} // centralized EXTERNALSYMs to keep this Delphi 3 compatible {$EXTERNALSYM KLF_SETFORPROCESS} {$EXTERNALSYM MAXIMUM_REPARSE_DATA_BUFFER_SIZE} {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_ZERO} {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_ONE} {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_RANGE} {$EXTERNALSYM FILE_FLAG_OPEN_REPARSE_POINT} {$EXTERNALSYM MAKELANGID} {$EXTERNALSYM PRIMARYLANGID} {$EXTERNALSYM SUBLANGID} {$EXTERNALSYM MAKELCID} {$EXTERNALSYM SORTIDFROMLCID} {$EXTERNALSYM LCID_ALTERNATE_SORTS} {$EXTERNALSYM CP_THREAD_ACP} {$EXTERNALSYM CP_SYMBOL} {$EXTERNALSYM CTRY_ALBANIA} {$EXTERNALSYM CTRY_ALGERIA} {$EXTERNALSYM CTRY_ARGENTINA} {$EXTERNALSYM CTRY_ARMENIA} {$EXTERNALSYM CTRY_AUSTRALIA} {$EXTERNALSYM CTRY_AUSTRIA} {$EXTERNALSYM CTRY_AZERBAIJAN} {$EXTERNALSYM CTRY_BAHRAIN} {$EXTERNALSYM CTRY_BELARUS} {$EXTERNALSYM CTRY_BELGIUM} {$EXTERNALSYM CTRY_BELIZE} {$EXTERNALSYM CTRY_BOLIVIA} {$EXTERNALSYM CTRY_BRAZIL} {$EXTERNALSYM CTRY_BRUNEI_DARUSSALAM} {$EXTERNALSYM CTRY_BULGARIA} {$EXTERNALSYM CTRY_CANADA} {$EXTERNALSYM CTRY_CARIBBEAN} {$EXTERNALSYM CTRY_CHILE} {$EXTERNALSYM CTRY_COLOMBIA} {$EXTERNALSYM CTRY_COSTA_RICA} {$EXTERNALSYM CTRY_CROATIA} {$EXTERNALSYM CTRY_CZECH} {$EXTERNALSYM CTRY_DENMARK} {$EXTERNALSYM CTRY_DOMINICAN_REPUBLIC} {$EXTERNALSYM CTRY_ECUADOR} {$EXTERNALSYM CTRY_EGYPT} {$EXTERNALSYM CTRY_EL_SALVADOR} {$EXTERNALSYM CTRY_ESTONIA} {$EXTERNALSYM CTRY_FAEROE_ISLANDS} {$EXTERNALSYM CTRY_FINLAND} {$EXTERNALSYM CTRY_FRANCE} {$EXTERNALSYM CTRY_GEORGIA} {$EXTERNALSYM CTRY_GERMANY} {$EXTERNALSYM CTRY_GREECE} {$EXTERNALSYM CTRY_GUATEMALA} {$EXTERNALSYM CTRY_HONDURAS} {$EXTERNALSYM CTRY_HONG_KONG} {$EXTERNALSYM CTRY_HUNGARY} {$EXTERNALSYM CTRY_ICELAND} {$EXTERNALSYM CTRY_INDIA} {$EXTERNALSYM CTRY_INDONESIA} {$EXTERNALSYM CTRY_IRAN} {$EXTERNALSYM CTRY_IRAQ} {$EXTERNALSYM CTRY_IRELAND} {$EXTERNALSYM CTRY_ISRAEL} {$EXTERNALSYM CTRY_ITALY} {$EXTERNALSYM CTRY_JAMAICA} {$EXTERNALSYM CTRY_JAPAN} {$EXTERNALSYM CTRY_JORDAN} {$EXTERNALSYM CTRY_KAZAKSTAN} {$EXTERNALSYM CTRY_KENYA} {$EXTERNALSYM CTRY_KUWAIT} {$EXTERNALSYM CTRY_KYRGYZSTAN} {$EXTERNALSYM CTRY_LATVIA} {$EXTERNALSYM CTRY_LEBANON} {$EXTERNALSYM CTRY_LIBYA} {$EXTERNALSYM CTRY_LIECHTENSTEIN} {$EXTERNALSYM CTRY_LITHUANIA} {$EXTERNALSYM CTRY_LUXEMBOURG} {$EXTERNALSYM CTRY_MACAU} {$EXTERNALSYM CTRY_MACEDONIA} {$EXTERNALSYM CTRY_MALAYSIA} {$EXTERNALSYM CTRY_MALDIVES} {$EXTERNALSYM CTRY_MEXICO} {$EXTERNALSYM CTRY_MONACO} {$EXTERNALSYM CTRY_MONGOLIA} {$EXTERNALSYM CTRY_MOROCCO} {$EXTERNALSYM CTRY_NETHERLANDS} {$EXTERNALSYM CTRY_NEW_ZEALAND} {$EXTERNALSYM CTRY_NICARAGUA} {$EXTERNALSYM CTRY_NORWAY} {$EXTERNALSYM CTRY_OMAN} {$EXTERNALSYM CTRY_PAKISTAN} {$EXTERNALSYM CTRY_PANAMA} {$EXTERNALSYM CTRY_PARAGUAY} {$EXTERNALSYM CTRY_PERU} {$EXTERNALSYM CTRY_PHILIPPINES} {$EXTERNALSYM CTRY_POLAND} {$EXTERNALSYM CTRY_PORTUGAL} {$EXTERNALSYM CTRY_PRCHINA} {$EXTERNALSYM CTRY_PUERTO_RICO} {$EXTERNALSYM CTRY_QATAR} {$EXTERNALSYM CTRY_ROMANIA} {$EXTERNALSYM CTRY_RUSSIA} {$EXTERNALSYM CTRY_SAUDI_ARABIA} {$EXTERNALSYM CTRY_SERBIA} {$EXTERNALSYM CTRY_SINGAPORE} {$EXTERNALSYM CTRY_SLOVAK} {$EXTERNALSYM CTRY_SLOVENIA} {$EXTERNALSYM CTRY_SOUTH_AFRICA} {$EXTERNALSYM CTRY_SOUTH_KOREA} {$EXTERNALSYM CTRY_SPAIN} {$EXTERNALSYM CTRY_SWEDEN} {$EXTERNALSYM CTRY_SWITZERLAND} {$EXTERNALSYM CTRY_SYRIA} {$EXTERNALSYM CTRY_TAIWAN} {$EXTERNALSYM CTRY_TATARSTAN} {$EXTERNALSYM CTRY_THAILAND} {$EXTERNALSYM CTRY_TRINIDAD_Y_TOBAGO} {$EXTERNALSYM CTRY_TUNISIA} {$EXTERNALSYM CTRY_TURKEY} {$EXTERNALSYM CTRY_UAE} {$EXTERNALSYM CTRY_UKRAINE} {$EXTERNALSYM CTRY_UNITED_KINGDOM} {$EXTERNALSYM CTRY_UNITED_STATES} {$EXTERNALSYM CTRY_URUGUAY} {$EXTERNALSYM CTRY_UZBEKISTAN} {$EXTERNALSYM CTRY_VENEZUELA} {$EXTERNALSYM CTRY_VIET_NAM} {$EXTERNALSYM CTRY_YEMEN} {$EXTERNALSYM CTRY_ZIMBABWE} {$EXTERNALSYM LOCALE_RETURN_NUMBER} {$EXTERNALSYM LOCALE_IDEFAULTEBCDICCODEPAGE} {$EXTERNALSYM LOCALE_IPAPERSIZE} {$EXTERNALSYM LOCALE_SENGCURRNAME} {$EXTERNALSYM LOCALE_SNATIVECURRNAME} {$EXTERNALSYM LOCALE_SYEARMONTH} {$EXTERNALSYM LOCALE_SSORTNAME} {$EXTERNALSYM LOCALE_IDIGITSUBSTITUTION} {$EXTERNALSYM DATE_YEARMONTH} {$EXTERNALSYM DATE_LTRREADING} {$EXTERNALSYM DATE_RTLREADING} {$EXTERNALSYM CAL_SYEARMONTH} {$EXTERNALSYM CAL_ITWODIGITYEARMAX} {$EXTERNALSYM CAL_GREGORIAN_ME_FRENCH} {$EXTERNALSYM CAL_GREGORIAN_ARABIC} {$EXTERNALSYM CAL_GREGORIAN_XLIT_ENGLISH} {$EXTERNALSYM CAL_GREGORIAN_XLIT_FRENCH} {$EXTERNALSYM CAL_NOUSEROVERRIDE} {$EXTERNALSYM CAL_USE_CP_ACP} {$EXTERNALSYM CAL_RETURN_NUMBER} {$EXTERNALSYM LGRPID_WESTERN_EUROPE} {$EXTERNALSYM LGRPID_CENTRAL_EUROPE} {$EXTERNALSYM LGRPID_BALTIC} {$EXTERNALSYM LGRPID_GREEK} {$EXTERNALSYM LGRPID_CYRILLIC} {$EXTERNALSYM LGRPID_TURKISH} {$EXTERNALSYM LGRPID_JAPANESE} {$EXTERNALSYM LGRPID_KOREAN} {$EXTERNALSYM LGRPID_TRADITIONAL_CHINESE} {$EXTERNALSYM LGRPID_SIMPLIFIED_CHINESE} {$EXTERNALSYM LGRPID_THAI} {$EXTERNALSYM LGRPID_HEBREW} {$EXTERNALSYM LGRPID_ARABIC} {$EXTERNALSYM LGRPID_VIETNAMESE} {$EXTERNALSYM LGRPID_INDIC} {$EXTERNALSYM LGRPID_GEORGIAN} {$EXTERNALSYM LGRPID_ARMENIAN} {$EXTERNALSYM LANGIDFROMLCID} {$EXTERNALSYM InterlockedExchangePointer} {$EXTERNALSYM SignalObjectAndWait} {$EXTERNALSYM GetVersionEx} {$EXTERNALSYM CreateMutex} {$EXTERNALSYM VER_NT_WORKSTATION} {$EXTERNALSYM VER_NT_DOMAIN_CONTROLLER} {$EXTERNALSYM VER_NT_SERVER} {$EXTERNALSYM VER_SUITE_SMALLBUSINESS} {$EXTERNALSYM VER_SUITE_ENTERPRISE} {$EXTERNALSYM VER_SUITE_BACKOFFICE} {$EXTERNALSYM VER_SUITE_COMMUNICATIONS} {$EXTERNALSYM VER_SUITE_TERMINAL} {$EXTERNALSYM VER_SUITE_SMALLBUSINESS_RESTRICTED} {$EXTERNALSYM VER_SUITE_EMBEDDEDNT} {$EXTERNALSYM VER_SUITE_DATACENTER} {$EXTERNALSYM VER_SUITE_SINGLEUSERTS} {$EXTERNALSYM VER_SUITE_PERSONAL} {$EXTERNALSYM VER_SUITE_SERVERAPPLIANCE} {$EXTERNALSYM SECURITY_NULL_SID_AUTHORITY} {$EXTERNALSYM SECURITY_WORLD_SID_AUTHORITY} {$EXTERNALSYM SECURITY_LOCAL_SID_AUTHORITY} {$EXTERNALSYM SECURITY_CREATOR_SID_AUTHORITY} {$EXTERNALSYM SECURITY_NON_UNIQUE_AUTHORITY} {$EXTERNALSYM SECURITY_NULL_RID} {$EXTERNALSYM SECURITY_WORLD_RID} {$EXTERNALSYM SECURITY_LOCAL_RID} {$EXTERNALSYM SECURITY_CREATOR_OWNER_RID} {$EXTERNALSYM SECURITY_CREATOR_GROUP_RID} {$EXTERNALSYM SECURITY_CREATOR_OWNER_SERVER_RID} {$EXTERNALSYM SECURITY_CREATOR_GROUP_SERVER_RID} {$EXTERNALSYM SECURITY_NT_AUTHORITY} {$EXTERNALSYM SECURITY_DIALUP_RID} {$EXTERNALSYM SECURITY_NETWORK_RID} {$EXTERNALSYM SECURITY_BATCH_RID} {$EXTERNALSYM SECURITY_INTERACTIVE_RID} {$EXTERNALSYM SECURITY_SERVICE_RID} {$EXTERNALSYM SECURITY_ANONYMOUS_LOGON_RID} {$EXTERNALSYM SECURITY_PROXY_RID} {$EXTERNALSYM SECURITY_ENTERPRISE_CONTROLLERS_RID} {$EXTERNALSYM SECURITY_SERVER_LOGON_RID} {$EXTERNALSYM SECURITY_PRINCIPAL_SELF_RID} {$EXTERNALSYM SECURITY_AUTHENTICATED_USER_RID} {$EXTERNALSYM SECURITY_RESTRICTED_CODE_RID} {$EXTERNALSYM SECURITY_TERMINAL_SERVER_RID} {$EXTERNALSYM SECURITY_LOGON_IDS_RID} {$EXTERNALSYM SECURITY_LOGON_IDS_RID_COUNT} {$EXTERNALSYM SECURITY_LOCAL_SYSTEM_RID} {$EXTERNALSYM SECURITY_NT_NON_UNIQUE} {$EXTERNALSYM SECURITY_BUILTIN_DOMAIN_RID} {$EXTERNALSYM DOMAIN_USER_RID_ADMIN} {$EXTERNALSYM DOMAIN_USER_RID_GUEST} {$EXTERNALSYM DOMAIN_USER_RID_KRBTGT} {$EXTERNALSYM DOMAIN_GROUP_RID_ADMINS} {$EXTERNALSYM DOMAIN_GROUP_RID_USERS} {$EXTERNALSYM DOMAIN_GROUP_RID_GUESTS} {$EXTERNALSYM DOMAIN_GROUP_RID_COMPUTERS} {$EXTERNALSYM DOMAIN_GROUP_RID_CONTROLLERS} {$EXTERNALSYM DOMAIN_GROUP_RID_CERT_ADMINS} {$EXTERNALSYM DOMAIN_GROUP_RID_SCHEMA_ADMINS} {$EXTERNALSYM DOMAIN_GROUP_RID_ENTERPRISE_ADMINS} {$EXTERNALSYM DOMAIN_GROUP_RID_POLICY_ADMINS} {$EXTERNALSYM DOMAIN_ALIAS_RID_ADMINS} {$EXTERNALSYM DOMAIN_ALIAS_RID_USERS} {$EXTERNALSYM DOMAIN_ALIAS_RID_GUESTS} {$EXTERNALSYM DOMAIN_ALIAS_RID_POWER_USERS} {$EXTERNALSYM DOMAIN_ALIAS_RID_ACCOUNT_OPS} {$EXTERNALSYM DOMAIN_ALIAS_RID_SYSTEM_OPS} {$EXTERNALSYM DOMAIN_ALIAS_RID_PRINT_OPS} {$EXTERNALSYM DOMAIN_ALIAS_RID_BACKUP_OPS} {$EXTERNALSYM DOMAIN_ALIAS_RID_REPLICATOR} {$EXTERNALSYM DOMAIN_ALIAS_RID_RAS_SERVERS} {$EXTERNALSYM DOMAIN_ALIAS_RID_PREW2KCOMPACCESS} {$EXTERNALSYM SE_CREATE_TOKEN_NAME} {$EXTERNALSYM SE_ASSIGNPRIMARYTOKEN_NAME} {$EXTERNALSYM SE_LOCK_MEMORY_NAME} {$EXTERNALSYM SE_INCREASE_QUOTA_NAME} {$EXTERNALSYM SE_UNSOLICITED_INPUT_NAME} {$EXTERNALSYM SE_MACHINE_ACCOUNT_NAME} {$EXTERNALSYM SE_TCB_NAME} {$EXTERNALSYM SE_SECURITY_NAME} {$EXTERNALSYM SE_TAKE_OWNERSHIP_NAME} {$EXTERNALSYM SE_LOAD_DRIVER_NAME} {$EXTERNALSYM SE_SYSTEM_PROFILE_NAME} {$EXTERNALSYM SE_SYSTEMTIME_NAME} {$EXTERNALSYM SE_PROF_SINGLE_PROCESS_NAME} {$EXTERNALSYM SE_INC_BASE_PRIORITY_NAME} {$EXTERNALSYM SE_CREATE_PAGEFILE_NAME} {$EXTERNALSYM SE_CREATE_PERMANENT_NAME} {$EXTERNALSYM SE_BACKUP_NAME} {$EXTERNALSYM SE_RESTORE_NAME} {$EXTERNALSYM SE_SHUTDOWN_NAME} {$EXTERNALSYM SE_DEBUG_NAME} {$EXTERNALSYM SE_AUDIT_NAME} {$EXTERNALSYM SE_SYSTEM_ENVIRONMENT_NAME} {$EXTERNALSYM SE_CHANGE_NOTIFY_NAME} {$EXTERNALSYM SE_REMOTE_SHUTDOWN_NAME} {$EXTERNALSYM SE_UNDOCK_NAME} {$EXTERNALSYM SE_SYNC_AGENT_NAME} {$EXTERNALSYM SE_ENABLE_DELEGATION_NAME} {$EXTERNALSYM PPSID} {$EXTERNALSYM _TOKEN_USER} {$EXTERNALSYM TOKEN_USER} {$EXTERNALSYM SetNamedSecurityInfoW} {$EXTERNALSYM AdjustTokenPrivileges} {$EXTERNALSYM _FILE_ALLOCATED_RANGE_BUFFER} {$EXTERNALSYM _FILE_ZERO_DATA_INFORMATION} {$EXTERNALSYM COMPRESSION_FORMAT_NONE} {$EXTERNALSYM COMPRESSION_FORMAT_DEFAULT} {$EXTERNALSYM COMPRESSION_FORMAT_LZNT1} {$EXTERNALSYM FILE_SUPPORTS_SPARSE_FILES} {$EXTERNALSYM FILE_SUPPORTS_REPARSE_POINTS} {$EXTERNALSYM REPARSE_GUID_DATA_BUFFER_HEADER_SIZE} {$EXTERNALSYM IO_REPARSE_TAG_MOUNT_POINT} {$EXTERNALSYM IO_REPARSE_TAG_HSM} {$EXTERNALSYM IO_REPARSE_TAG_SIS} {$EXTERNALSYM FILE_ATTRIBUTE_DEVICE} {$EXTERNALSYM FILE_ATTRIBUTE_SPARSE_FILE} {$EXTERNALSYM FILE_ATTRIBUTE_REPARSE_POINT} {$EXTERNALSYM FILE_ATTRIBUTE_NOT_CONTENT_INDEXED} {$EXTERNALSYM FILE_ATTRIBUTE_ENCRYPTED} {$EXTERNALSYM FILE_DEVICE_FILE_SYSTEM} {$EXTERNALSYM METHOD_BUFFERED} {$EXTERNALSYM METHOD_IN_DIRECT} {$EXTERNALSYM METHOD_OUT_DIRECT} {$EXTERNALSYM METHOD_NEITHER} {$EXTERNALSYM FILE_ANY_ACCESS} {$EXTERNALSYM FILE_SPECIAL_ACCESS} {$EXTERNALSYM FILE_READ_ACCESS} {$EXTERNALSYM FILE_WRITE_ACCESS} {$EXTERNALSYM FILE_WRITE_DATA} {$EXTERNALSYM FILE_READ_DATA} {$EXTERNALSYM FSCTL_GET_COMPRESSION} {$EXTERNALSYM FSCTL_SET_COMPRESSION} {$EXTERNALSYM FSCTL_LOCK_VOLUME} {$EXTERNALSYM FSCTL_UNLOCK_VOLUME} {$EXTERNALSYM FSCTL_SET_SPARSE} {$EXTERNALSYM FSCTL_SET_ZERO_DATA} {$EXTERNALSYM FSCTL_QUERY_ALLOCATED_RANGES} {$EXTERNALSYM FSCTL_SET_REPARSE_POINT} {$EXTERNALSYM FSCTL_GET_REPARSE_POINT} {$EXTERNALSYM FSCTL_DELETE_REPARSE_POINT} {$EXTERNALSYM FSCTL_REQUEST_OPLOCK_LEVEL_1} {$EXTERNALSYM FSCTL_REQUEST_OPLOCK_LEVEL_2} {$EXTERNALSYM FSCTL_REQUEST_BATCH_OPLOCK} {$EXTERNALSYM FSCTL_REQUEST_FILTER_OPLOCK} {$EXTERNALSYM FSCTL_OPLOCK_BREAK_ACKNOWLEDGE} {$EXTERNALSYM FSCTL_OPBATCH_ACK_CLOSE_PENDING} {$EXTERNALSYM FSCTL_OPLOCK_BREAK_NOTIFY} {$EXTERNALSYM FSCTL_OPLOCK_BREAK_ACK_NO_2} {$EXTERNALSYM GetVolumeNameForVolumeMountPoint} {$EXTERNALSYM SetVolumeMountPoint} {$EXTERNALSYM DeleteVolumeMountPoint} {$EXTERNALSYM NCBNAMSZ} {$EXTERNALSYM MAX_LANA} {$EXTERNALSYM NRC_GOODRET} {$EXTERNALSYM NCBASTAT} {$EXTERNALSYM NCBRESET} {$EXTERNALSYM NCBENUM} {$EXTERNALSYM PNCB} {$EXTERNALSYM ASTAT} {$EXTERNALSYM SHTDN_REASON_MAJOR_APPLICATION} {$EXTERNALSYM SHTDN_REASON_MINOR_OTHER} {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT} {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR} {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_NO_BIND} {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_WDM_DRIVER} {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE} {$EXTERNALSYM ANON_OBJECT_HEADER} {$EXTERNALSYM _IMAGE_IMPORT_BY_NAME} {$EXTERNALSYM IMAGE_IMPORT_BY_NAME} {$EXTERNALSYM _IMAGE_THUNK_DATA} {$EXTERNALSYM IMAGE_THUNK_DATA} {$EXTERNALSYM IMAGE_ORDINAL_FLAG} {$EXTERNALSYM IMAGE_ORDINAL} {$EXTERNALSYM _IMAGE_TLS_DIRECTORY} {$EXTERNALSYM IMAGE_TLS_DIRECTORY} {$EXTERNALSYM _IMAGE_IMPORT_DESCRIPTOR} {$EXTERNALSYM IMAGE_IMPORT_DESCRIPTOR} {$EXTERNALSYM _IMAGE_BOUND_IMPORT_DESCRIPTOR} {$EXTERNALSYM IMAGE_BOUND_IMPORT_DESCRIPTOR} {$EXTERNALSYM _IMAGE_BOUND_FORWARDER_REF} {$EXTERNALSYM IMAGE_BOUND_FORWARDER_REF} {$EXTERNALSYM IMAGE_RESOURCE_NAME_IS_STRING} {$EXTERNALSYM IMAGE_RESOURCE_DATA_IS_DIRECTORY} {$EXTERNALSYM _IMAGE_RESOURCE_DIRECTORY} {$EXTERNALSYM IMAGE_RESOURCE_DIRECTORY} {$EXTERNALSYM _IMAGE_RESOURCE_DIRECTORY_ENTRY} {$EXTERNALSYM IMAGE_RESOURCE_DIRECTORY_ENTRY} {$EXTERNALSYM _IMAGE_RESOURCE_DATA_ENTRY} {$EXTERNALSYM IMAGE_RESOURCE_DATA_ENTRY} {$EXTERNALSYM _IMAGE_RESOURCE_DIR_STRING_U} {$EXTERNALSYM IMAGE_RESOURCE_DIR_STRING_U} {$EXTERNALSYM IMAGE_LOAD_CONFIG_DIRECTORY} {$EXTERNALSYM ImgDelayDescr} {$EXTERNALSYM _IMAGE_BASE_RELOCATION} {$EXTERNALSYM IMAGE_BASE_RELOCATION} {$EXTERNALSYM IMAGE_SIZEOF_BASE_RELOCATION} {$EXTERNALSYM IMAGE_REL_BASED_ABSOLUTE} {$EXTERNALSYM IMAGE_REL_BASED_HIGH} {$EXTERNALSYM IMAGE_REL_BASED_LOW} {$EXTERNALSYM IMAGE_REL_BASED_HIGHLOW} {$EXTERNALSYM IMAGE_REL_BASED_HIGHADJ} {$EXTERNALSYM IMAGE_REL_BASED_MIPS_JMPADDR} {$EXTERNALSYM IMAGE_REL_BASED_SECTION} {$EXTERNALSYM IMAGE_REL_BASED_REL32} {$EXTERNALSYM IMAGE_REL_BASED_MIPS_JMPADDR16} {$EXTERNALSYM IMAGE_REL_BASED_IA64_IMM64} {$EXTERNALSYM IMAGE_REL_BASED_DIR64} {$EXTERNALSYM IMAGE_REL_BASED_HIGH3ADJ} {$EXTERNALSYM IMAGE_DEBUG_TYPE_BORLAND} {$EXTERNALSYM RT_HTML} {$EXTERNALSYM RT_MANIFEST} {$EXTERNALSYM CREATEPROCESS_MANIFEST_RESOURCE_ID} {$EXTERNALSYM ISOLATIONAWARE_MANIFEST_RESOURCE_ID} {$EXTERNALSYM ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID} {$EXTERNALSYM MINIMUM_RESERVED_MANIFEST_RESOURCE_ID} {$EXTERNALSYM MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID} {$EXTERNALSYM COMIMAGE_FLAGS_ILONLY} {$EXTERNALSYM COMIMAGE_FLAGS_32BITREQUIRED} {$EXTERNALSYM COMIMAGE_FLAGS_IL_LIBRARY} {$EXTERNALSYM COMIMAGE_FLAGS_STRONGNAMESIGNED} {$EXTERNALSYM COMIMAGE_FLAGS_TRACKDEBUGDATA} {$IFDEF COMPILER6_UP} {$EXTERNALSYM IMAGE_COR20_HEADER} {$ENDIF} {$IFNDEF BCB5} {$EXTERNALSYM ImageRvaToVa} {$EXTERNALSYM BindImageEx} {$EXTERNALSYM ImageEnumerateCertificates} {$ENDIF} {$EXTERNALSYM CSIDL_COMMON_APPDATA} {$EXTERNALSYM CSIDL_WINDOWS} {$EXTERNALSYM CSIDL_SYSTEM} {$EXTERNALSYM CSIDL_PROGRAM_FILES} {$EXTERNALSYM CSIDL_MYPICTURES} {$EXTERNALSYM CSIDL_PROFILE} {$EXTERNALSYM CSIDL_PROGRAM_FILES_COMMON} {$EXTERNALSYM CSIDL_COMMON_TEMPLATES} {$EXTERNALSYM CSIDL_COMMON_DOCUMENTS} {$EXTERNALSYM CSIDL_COMMON_ADMINTOOLS} {$EXTERNALSYM CSIDL_ADMINTOOLS} {$EXTERNALSYM CSIDL_CONNECTIONS} {$EXTERNALSYM CSIDL_COMMON_MUSIC} {$EXTERNALSYM CSIDL_COMMON_PICTURES} {$EXTERNALSYM CSIDL_COMMON_VIDEO} {$EXTERNALSYM CSIDL_RESOURCES} {$EXTERNALSYM CSIDL_RESOURCES_LOCALIZED} {$EXTERNALSYM CSIDL_COMMON_OEM_LINKS} {$EXTERNALSYM CSIDL_CDBURN_AREA} {$EXTERNALSYM CSIDL_COMPUTERSNEARME} {$ENDIF SUPPORTS_EXTSYM} implementation //================================================================================================== // Locales related //================================================================================================== function LANGIDFROMLCID(const lcid: LCID): Word; begin Result := Word(lcid); end; //-------------------------------------------------------------------------------------------------- function MAKELANGID(const usPrimaryLanguage, usSubLanguage: Byte): Word; begin Result := usPrimaryLanguage or (usSubLanguage shl 10); end; //-------------------------------------------------------------------------------------------------- function PRIMARYLANGID(const lgid: Word): Word; begin Result := (lgid and $03FF); end; //-------------------------------------------------------------------------------------------------- function SUBLANGID(const lgid: Word): Word; begin Result := (lgid shr 10); end; //-------------------------------------------------------------------------------------------------- function MAKELCID(const wLanguageID, wSortID: Word): LCID; begin Result := wLanguageID or (wSortID shl 16); end; //-------------------------------------------------------------------------------------------------- function SORTIDFROMLCID(const lcid: LCID): Word; begin Result := (lcid shr 16) and $0F; end; //-------------------------------------------------------------------------------------------------- var _GetCalendarInfoA: function(Locale: LCID; Calendar: CALID; CalType: CALTYPE; lpCalData: PAnsiChar; cchData: Integer; lpValue: PDWORD): Integer; stdcall; _GetCalendarInfoW: function(Locale: LCID; Calendar: CALID; CalType: CALTYPE; lpCalData: PWideChar; cchData: Integer; lpValue: PDWORD): Integer; stdcall; _SetCalendarInfoA: function(Locale: LCID; Calendar: CALID; CalType: CALTYPE; lpCalData: PAnsiChar): Integer; stdcall; _SetCalendarInfoW: function(Locale: LCID; Calendar: CALID; CalType: CALTYPE; lpCalData: PWideChar): Integer; stdcall; _EnumCalendarInfoEx: function(lpCalInfoEnumProc: TEnumCalendarInfoProcEx; Locale: LCID; Calendar: CALID; CalType: CALTYPE): BOOL; stdcall; //-------------------------------------------------------------------------------------------------- function GetCalendarInfoA(Locale: LCID; Calendar: CALID; CalType: CALTYPE; lpCalData: PAnsiChar; cchData: Integer; lpValue: PDWORD): Integer; begin if not Assigned(_GetCalendarInfoA) then @_GetCalendarInfoA := GetProcAddress(GetModuleHandle(kernel32), 'GetCalendarInfoA'); if Assigned(_GetCalendarInfoA) then Result := _GetCalendarInfoA(Locale, Calendar, CalType, lpCalData, cchData, lpValue) else begin Result := 0; SetLastError(ERROR_CALL_NOT_IMPLEMENTED); end; end; //-------------------------------------------------------------------------------------------------- function GetCalendarInfoW(Locale: LCID; Calendar: CALID; CalType: CALTYPE; lpCalData: PWideChar; cchData: Integer; lpValue: PDWORD): Integer; begin if not Assigned(_GetCalendarInfoW) then @_GetCalendarInfoW := GetProcAddress(GetModuleHandle(kernel32), 'GetCalendarInfoW'); if Assigned(_GetCalendarInfoW) then Result := _GetCalendarInfoW(Locale, Calendar, CalType, lpCalData, cchData, lpValue) else begin Result := 0; SetLastError(ERROR_CALL_NOT_IMPLEMENTED); end; end; //-------------------------------------------------------------------------------------------------- function SetCalendarInfoA(Locale: LCID; Calendar: CALID; CalType: CALTYPE; lpCalData: PAnsiChar): Integer; begin if not Assigned(_SetCalendarInfoA) then @_SetCalendarInfoA := GetProcAddress(GetModuleHandle(kernel32), 'SetCalendarInfoA'); if Assigned(_SetCalendarInfoA) then Result := _SetCalendarInfoA(Locale, Calendar, CalType, lpCalData) else begin Result := 0; SetLastError(ERROR_CALL_NOT_IMPLEMENTED); end; end; //-------------------------------------------------------------------------------------------------- function SetCalendarInfoW(Locale: LCID; Calendar: CALID; CalType: CALTYPE; lpCalData: PWideChar): Integer; begin if not Assigned(_SetCalendarInfoW) then @_SetCalendarInfoW := GetProcAddress(GetModuleHandle(kernel32), 'SetCalendarInfoW'); if Assigned(_SetCalendarInfoW) then Result := _SetCalendarInfoW(Locale, Calendar, CalType, lpCalData) else begin Result := 0; SetLastError(ERROR_CALL_NOT_IMPLEMENTED); end; end; //-------------------------------------------------------------------------------------------------- function EnumCalendarInfoEx(lpCalInfoEnumProc: TEnumCalendarInfoProcEx; Locale: LCID; Calendar: CALID; CalType: CALTYPE): BOOL; begin if not Assigned(_EnumCalendarInfoEx) then @_EnumCalendarInfoEx := GetProcAddress(GetModuleHandle(kernel32), 'EnumCalendarInfoExA'); if Assigned(_EnumCalendarInfoEx) then Result := _EnumCalendarInfoEx(lpCalInfoEnumProc, Locale, Calendar, CalType) else begin Result := False; SetLastError(ERROR_CALL_NOT_IMPLEMENTED); end; end; //-------------------------------------------------------------------------------------------------- // NTFS related I/O control codes, types and constants from winnt.h, winioctl.h //-------------------------------------------------------------------------------------------------- var _GetVolumeNameForVolumeMountPoint: function(lpszVolumeMountPoint: LPCSTR; lpszVolumeName: LPSTR; cchBufferLength: DWORD): BOOL; stdcall; _SetVolumeMountPoint: function(lpszVolumeMountPoint: LPCSTR; lpszVolumeName: LPCSTR): BOOL; stdcall; _DeleteVolumeMountPoint: function(lpszVolumeMountPoint: LPCSTR): BOOL; stdcall; //-------------------------------------------------------------------------------------------------- function GetVolumeNameForVolumeMountPoint(lpszVolumeMountPoint: LPCSTR; lpszVolumeName: LPSTR; cchBufferLength: DWORD): BOOL; var Kernel32Handle: THandle; begin if not Assigned(_GetVolumeNameForVolumeMountPoint) then begin Kernel32Handle := GetModuleHandle(kernel32); if Kernel32Handle <> 0 then @_GetVolumeNameForVolumeMountPoint := GetProcAddress(Kernel32Handle, PChar('GetVolumeNameForVolumeMountPointA')); end; if Assigned(_GetVolumeNameForVolumeMountPoint) then Result := _GetVolumeNameForVolumeMountPoint(lpszVolumeMountPoint, lpszVolumeName, cchBufferLength) else Result := False; end; //-------------------------------------------------------------------------------------------------- function SetVolumeMountPoint(lpszVolumeMountPoint: LPCSTR; lpszVolumeName: LPCSTR): BOOL; var Kernel32Handle: THandle; begin if not Assigned(_SetVolumeMountPoint) then begin Kernel32Handle := GetModuleHandle(kernel32); if Kernel32Handle <> 0 then @_SetVolumeMountPoint := GetProcAddress(Kernel32Handle, PChar('SetVolumeMountPointA')); end; if Assigned(_SetVolumeMountPoint) then Result := _SetVolumeMountPoint(lpszVolumeMountPoint, lpszVolumeName) else Result := False; end; //-------------------------------------------------------------------------------------------------- function DeleteVolumeMountPoint(lpszVolumeMountPoint: LPCSTR): BOOL; var Kernel32Handle: THandle; begin if not Assigned(_DeleteVolumeMountPoint) then begin Kernel32Handle := GetModuleHandle(kernel32); if Kernel32Handle <> 0 then @_DeleteVolumeMountPoint := GetProcAddress(Kernel32Handle, PChar('DeleteVolumeMountPointA')); end; if Assigned(_DeleteVolumeMountPoint) then Result := _DeleteVolumeMountPoint(lpszVolumeMountPoint) else Result := False; end; function GetVersionEx; external kernel32 name 'GetVersionExA'; //================================================================================================== // Netbios //================================================================================================== type TNetBios = function(P: PNCB): Byte; stdcall; var NetBiosLib: HINST = 0; _NetBios: TNetBios; //-------------------------------------------------------------------------------------------------- procedure ExitNetbios; begin if NetBiosLib <> 0 then begin FreeLibrary(NetBiosLib); NetBiosLib := 0; end; end; //-------------------------------------------------------------------------------------------------- function InitNetbios: Boolean; begin Result := True; if NetBiosLib = 0 then begin NetBiosLib := LoadLibrary(PChar('netapi32.dll')); Result := NetBiosLib <> 0; if Result then begin @_NetBios := GetProcAddress(NetBiosLib, PChar('Netbios')); Result := @_NetBios <> nil; if not Result then ExitNetbios; end; end; end; //-------------------------------------------------------------------------------------------------- function NetBios(P: PNCB): Byte; begin if InitNetbios then Result := _NetBios(P) else Result := 1; // anything other than NRC_GOODRET will do end; //================================================================================================== // JclPeImage //================================================================================================== function IMAGE_ORDINAL(Ordinal: DWORD): Word; begin Result := Ordinal and $FFFF; end; end.