mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 15:39:24 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			2237 lines
		
	
	
		
			96 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			2237 lines
		
	
	
		
			96 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
{
 | 
						|
    This file is part of the Free Pascal run time library.
 | 
						|
    Copyright (c) 2014 by the Free Pascal development team.
 | 
						|
 | 
						|
    Additional OS/2 API functions implemented in DOSCALL1.DLL:
 | 
						|
    - File handling (64-bit functions available in WSeB/MCP/eCS and
 | 
						|
      protected access to file handles as available in OS/2 2.1+)
 | 
						|
    - Certain SMP related functions for querying and setting status
 | 
						|
      of processors and thread and system affinity (available
 | 
						|
      in SMP-ready versions of OS/2 kernels)
 | 
						|
    - Support for working with extended LIBPATH (available in
 | 
						|
      OS/2 Warp 4.0 and higher).
 | 
						|
    Availability of individual functions is checked dynamically during
 | 
						|
    initialization and fake (simulated) functions are used if running
 | 
						|
    under an OS/2 version not providing the respective functionality.
 | 
						|
 | 
						|
    See the file COPYING.FPC, included in this distribution,
 | 
						|
    for details about the copyright.
 | 
						|
 | 
						|
    This program is distributed in the hope that it will be useful,
 | 
						|
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
						|
 | 
						|
 **********************************************************************}
 | 
						|
 | 
						|
unit DosCall2;
 | 
						|
 | 
						|
{***************************************************************************}
 | 
						|
interface
 | 
						|
{***************************************************************************}
 | 
						|
 | 
						|
uses
 | 
						|
  DosCalls, Strings;
 | 
						|
 | 
						|
const
 | 
						|
(* Status in DosGet/SetProcessorStatus *)
 | 
						|
  PROC_OFFLINE = 0; (* Processor is offline *)
 | 
						|
  PROC_ONLINE = 1;  (* Processor is online *)
 | 
						|
(* Scope in DosQueryThreadAffinity *)
 | 
						|
  AFNTY_THREAD = 0; (* Return the current threads processor affinity mask. *)
 | 
						|
  AFNTY_SYSTEM = 1; (* Return the system's current capable processor affinity
 | 
						|
                       mask. *)
 | 
						|
(* Flags in DosQuery/SetExtLibPath *)
 | 
						|
  BEGIN_LIBPATH = 1; (* The new path is searched before the LIBPATH. *)
 | 
						|
  END_LIBPATH = 2;   (* The new path is searched after the LIBPATH. *)
 | 
						|
 | 
						|
(* Constants for DosSuppressPopups *)
 | 
						|
  SPU_DisableSuppression = 0;
 | 
						|
  SPU_EnableSuppression = 1;
 | 
						|
 | 
						|
(* Constants for DosDumpProcess *)
 | 
						|
  DDP_DisableProcDump = 0;
 | 
						|
  DDP_EnableProcDump = 1;
 | 
						|
  DDP_PerformProcDump = 2;
 | 
						|
 | 
						|
(* Constants for DosPerfSysCall *)
 | 
						|
  Cmd_KI_Enable = $60;
 | 
						|
  Cmd_KI_RdCnt = $63;
 | 
						|
  Cmd_SoftTrace_Log = $14;
 | 
						|
 | 
						|
(* Constants for DosQueryABIOSSupport *)
 | 
						|
  HW_Cfg_MCA = 1;
 | 
						|
  HW_Cfg_EISA = 2;
 | 
						|
  HW_Cfg_ABIOS_Supported = 4;
 | 
						|
  HW_Cfg_ABIOS_Present = 8;
 | 
						|
  HW_Cfg_PCI = 16;
 | 
						|
  HW_Cfg_OEM_ABIOS = 32;
 | 
						|
  HW_Cfg_IBM_ABIOS = 0;
 | 
						|
  HW_Cfg_Pentium_CPU = 64;
 | 
						|
 | 
						|
(* Constants for DosQueryThreadContext - Level *)
 | 
						|
  Context_Control = 1; { Control registers: SS:ESP, CS:EIP, EFLAGS and EBP }
 | 
						|
  Context_Integer = 2; { EAX, EBX, ECX, EDX, ESI and EDI }
 | 
						|
  Context_Segments = 4; { Segment registers:  DS, ES, FS, and GS }
 | 
						|
  Context_Floating_Point = 8; { Numeric coprocessor state }
 | 
						|
  Context_Full = 15; { All of the above }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
type
 | 
						|
  TFileLockL = record
 | 
						|
   case boolean of
 | 
						|
    false:
 | 
						|
     (Offset: int64;  (* Offset to beginning of the lock (or unlock) range.  *)
 | 
						|
       Range: int64); (* Length of the lock (or unlock) range in bytes.      *)
 | 
						|
                      (* Length of 0 => locking (or unlocking) not required. *)
 | 
						|
    true:
 | 
						|
     (lOffset: int64;
 | 
						|
      lRange: int64);
 | 
						|
  end;
 | 
						|
  PFileLockL = ^TFileLockL;
 | 
						|
 | 
						|
  TMPAffinity = record
 | 
						|
   Mask: array [0..1] of cardinal;
 | 
						|
  end;
 | 
						|
  PMPAffinity = ^TMPAffinity;
 | 
						|
 | 
						|
  TCPUUtil = record
 | 
						|
   TotalLow,
 | 
						|
   TotalHigh,
 | 
						|
   IdleLow,
 | 
						|
   IdleHigh,
 | 
						|
   BusyLow,
 | 
						|
   BusyHigh,
 | 
						|
   IntrLow,
 | 
						|
   IntrHigh: cardinal;
 | 
						|
  end;
 | 
						|
  PCPUUtil = ^TCPUUtil;
 | 
						|
 | 
						|
 | 
						|
function DosOpenL (FileName: PChar; var Handle: THandle;
 | 
						|
                        var Action: cardinal; InitSize: int64;
 | 
						|
                        Attrib, OpenFlags, FileMode: cardinal;
 | 
						|
                                                 EA: pointer): cardinal; cdecl;
 | 
						|
 | 
						|
function DosSetFilePtrL (Handle: THandle; Pos: int64; Method: cardinal;
 | 
						|
                                        var PosActual: int64): cardinal; cdecl;
 | 
						|
 | 
						|
function DosSetFileSizeL (Handle: THandle; Size: int64): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectOpen (FileName: PChar; var Handle: longint;
 | 
						|
                         var Action: longint; InitSize, Attrib,
 | 
						|
                         OpenFlags, OpenMode: longint; ea: PEAOp2;
 | 
						|
                              var FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectOpen (const FileName: string; var Handle: longint;
 | 
						|
                         var Action: longint; InitSize, Attrib,
 | 
						|
                         OpenFlags, OpenMode: longint; ea: PEAOp2;
 | 
						|
                                     var FileHandleLockID: cardinal): cardinal;
 | 
						|
 | 
						|
function DosProtectOpen (const FileName: string; var Handle: THandle;
 | 
						|
                         var Action: cardinal; InitSize, Attrib,
 | 
						|
                         OpenFlags, OpenMode: cardinal; ea: PEAOp2;
 | 
						|
                                     var FileHandleLockID: cardinal): cardinal;
 | 
						|
 | 
						|
function DosProtectRead (Handle: longint; var Buffer; Count: longint;
 | 
						|
           var ActCount: longint; FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectWrite (Handle: longint; const Buffer; Count: longint;
 | 
						|
                          var ActCount: longint;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectSetFilePtr (Handle: longint; Pos, Method: longint;
 | 
						|
                               var PosActual: longint;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectSetFilePtr (Handle: THandle; Pos: longint;
 | 
						|
                                         FileHandleLockID: cardinal): cardinal;
 | 
						|
 | 
						|
function DosProtectGetFilePtr (Handle: longint;
 | 
						|
                 var PosActual: longint; FileHandleLockID: cardinal): cardinal;
 | 
						|
 | 
						|
function DosProtectGetFilePtr (Handle: THandle;
 | 
						|
                var PosActual: cardinal; FileHandleLockID: cardinal): cardinal;
 | 
						|
 | 
						|
function DosProtectEnumAttribute (Handle: THandle; Entry: cardinal; var Buf;
 | 
						|
                                  BufSize: cardinal; var Count: cardinal;
 | 
						|
                                  InfoLevel: cardinal;
 | 
						|
                                         FileHandleLockID: cardinal): cardinal;
 | 
						|
 | 
						|
function DosProtectEnumAttribute (const FileName: string; Entry: cardinal;
 | 
						|
                                  var Buf; BufSize: cardinal;
 | 
						|
                                  var Count: cardinal; InfoLevel: cardinal;
 | 
						|
                                         FileHandleLockID: cardinal): cardinal;
 | 
						|
 | 
						|
function DosProtectOpen (FileName: PChar; var Handle: THandle;
 | 
						|
                              var Action: cardinal; InitSize, Attrib,
 | 
						|
                              OpenFlags, OpenMode: cardinal; ea: PEAOp2;
 | 
						|
                              var FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectClose (Handle: THandle;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectRead (Handle: THandle; var Buffer; Count: cardinal;
 | 
						|
          var ActCount: cardinal; FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectWrite (Handle: THandle; const Buffer; Count: cardinal;
 | 
						|
                          var ActCount: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectSetFilePtr (Handle: THandle; Pos: longint;
 | 
						|
                               Method: cardinal; var PosActual: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectSetFileSize (Handle: THandle; Size: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectQueryFHState (Handle: THandle; var FileMode: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectSetFHState (Handle: THandle; FileMode: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectQueryFileInfo (Handle: THandle; InfoLevel: cardinal;
 | 
						|
                            AFileStatus: PFileStatus; FileStatusLen: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectSetFileInfo (Handle: THandle; InfoLevel: cardinal;
 | 
						|
                            AFileStatus: PFileStatus; FileStatusLen: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectEnumAttribute (RefType: cardinal; AFile: pointer;
 | 
						|
                                  Entry: cardinal; var Buf; BufSize: cardinal;
 | 
						|
                                  var Count: cardinal; InfoLevel: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
function DosProtectSetFileLocks (Handle: THandle;
 | 
						|
                                      var Unlock, Lock: TFileLock;
 | 
						|
                                      Timeout, Flags: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
 | 
						|
(*
 | 
						|
 DosCancelLockRequestL cancels an outstanding DosSetFileLocksL request.
 | 
						|
 If two threads in a process are waiting on a lock file range, and another
 | 
						|
 thread issues DosCancelLockRequestL for that lock file range, then both
 | 
						|
 waiting threads are released.
 | 
						|
 Not all file-system drivers (FSDs) can cancel an outstanding lock request.
 | 
						|
 Local Area Network (LAN) servers cannot cancel an outstanding lock request
 | 
						|
 if they use a version of the operating system prior to OS/2 Version 2.00.
 | 
						|
 | 
						|
Possible results:
 | 
						|
     0 No_Error
 | 
						|
     6 Error_Invalid_Handle
 | 
						|
    87 Error_Invalid_Parameter
 | 
						|
   173 Error_Cancel_Violation
 | 
						|
 | 
						|
 Handle = File handle used in the DosSetFileLocksL function
 | 
						|
          that is to be cancelled.
 | 
						|
 Lock   = Specification of the lock request to be cancelled.
 | 
						|
*)
 | 
						|
function DosCancelLockRequestL (Handle: THandle;
 | 
						|
                                        var Lock: TFileLockL): cardinal; cdecl;
 | 
						|
 | 
						|
(*
 | 
						|
DosProtectSetFileLocksL locks and unlocks a range of an open file. 
 | 
						|
 | 
						|
Parameters:
 | 
						|
 Handle = file handle
 | 
						|
 Unlock = record containing the offset and length of a range to be unlocked
 | 
						|
 Lock = record containing the offset and length of a range to be locked 
 | 
						|
 Timeout = the maximum time that the process is to wait for the requested locks
 | 
						|
           (in milliseconds)
 | 
						|
 Flags = bit mask specifying action to be taken.
 | 
						|
     Bits 31..2 are reserved.
 | 
						|
     Bit 1 (Atomic) means request for atomic locking - if the bit is set
 | 
						|
        and the lock range is equal to the unlock range, an atomic lock occurs.
 | 
						|
        If this bit is set to 1 and the lock range is not equal to the unlock
 | 
						|
        range, an error is returned. If this bit is set to 0, then the lock
 | 
						|
        may or may not occur atomically with the unlock.
 | 
						|
     Bit 0 (Share) defines the type of access that other processes may have
 | 
						|
        to the file range that is being locked. If this bit is set to 0
 | 
						|
        (default), other processes have no access to the locked file range.
 | 
						|
        The current process has exclusive access to the locked file range,
 | 
						|
        which must not overlap any other locked file range. If this bit is set
 | 
						|
        to 1, the current process and other processes have shared read only
 | 
						|
        access to the locked file range. A file range with shared access may
 | 
						|
        overlap any other file range with shared access, but must not overlap
 | 
						|
        any other file range with exclusive access.
 | 
						|
 | 
						|
 FileHandleLockID = filehandle lockid returned by a previous DosProtectOpenL.
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
0 NO_ERROR 
 | 
						|
6 ERROR_INVALID_HANDLE 
 | 
						|
33 ERROR_LOCK_VIOLATION 
 | 
						|
36 ERROR_SHARING_BUFFER_EXCEEDED 
 | 
						|
87 ERROR_INVALID_PARAMETER 
 | 
						|
95 ERROR_INTERRUPT 
 | 
						|
174 ERROR_ATOMIC_LOCK_NOT_SUPPORTED 
 | 
						|
175 ERROR_READ_LOCKS_NOT_SUPPORTED 
 | 
						|
 | 
						|
Remarks:
 | 
						|
DosProtectSetFileLocksL allows a process to lock and unlock a range in a file.
 | 
						|
The time during which a file range is locked should be short.
 | 
						|
 | 
						|
If the lock and unlock ranges are both zero, ERROR_LOCK_VIOLATION is returned
 | 
						|
to the caller.
 | 
						|
 | 
						|
If you only want to lock a file range, set the unlock file offset and the
 | 
						|
unlock range length to zero.
 | 
						|
 | 
						|
If you only want to unlock a file range, set the lock file offset and the lock
 | 
						|
range length to zero.
 | 
						|
 | 
						|
When the Atomic bit of flags is set to 0, and DosProtectSetFileLocksL specifies
 | 
						|
a lock operation and an unlock operation, the unlock operation occurs first,
 | 
						|
and then the lock operation is performed. If an error occurs during the unlock
 | 
						|
operation, an error code is returned and the lock operation is not performed.
 | 
						|
If an error occurs during the lock operation, an error code is returned and the
 | 
						|
unlock remains in effect if it was successful.
 | 
						|
 | 
						|
The lock operation is atomic when all of these conditions are met:
 | 
						|
- The Atomic bit is set to 1 in flags
 | 
						|
- The unlock range is the same as the lock range
 | 
						|
- The process has shared access to the file range, and has requested exclusive
 | 
						|
  access to it; or the process has exclusive access to the file range, and has
 | 
						|
  requested shared access to it.
 | 
						|
 | 
						|
Some file system drivers (FSDs) may not support atomic lock operations.
 | 
						|
Versions of the operating system prior to OS/2 Version 2.00 do not support
 | 
						|
atomic lock operations. If the application receives the error code
 | 
						|
ERROR_ATOMIC_LOCK_NOT_SUPPORTED, the application should unlock the file range
 | 
						|
and then lock it using a non-atomic operation (with the atomic bit set to 0
 | 
						|
in Flags). The application should also refresh its internal buffers before
 | 
						|
making any changes to the file.
 | 
						|
 | 
						|
If you issue DosProtectClose to close a file with locks still in effect,
 | 
						|
the locks are released in no defined sequence.
 | 
						|
 | 
						|
If you end a process with a file open, and you have locks in effect in that
 | 
						|
file, the file is closed and the locks are released in no defined sequence.
 | 
						|
 | 
						|
The locked range can be anywhere in the logical file. Locking beyond the end
 | 
						|
of the file is not an error. A file range to be locked exclusively must first
 | 
						|
be cleared of any locked file sub-ranges or overlapping locked file ranges.
 | 
						|
 | 
						|
If you repeat DosProtectSetFileLocksL for the same file handle and file range,
 | 
						|
then you duplicate access to the file range. Access to locked file ranges
 | 
						|
is not duplicated across DosExecPgm. The proper method of using locks is
 | 
						|
to attempt to lock the file range, and to examine the return value.
 | 
						|
 | 
						|
The following table shows the level of access granted when the accessed file
 | 
						|
range is locked with an exclusive lock or a shared lock.  Owner  refers to
 | 
						|
a process that owns the lock.  Non-owner  refers to a process that does not own
 | 
						|
the lock.
 | 
						|
 | 
						|
 Action       Exclusive Lock             Shared Lock
 | 
						|
===================================================================
 | 
						|
 Owner read   Success                    Success
 | 
						|
-------------------------------------------------------------------
 | 
						|
 Non-owner    Wait for unlock. Return    Success
 | 
						|
 read         error code after time-out.
 | 
						|
-------------------------------------------------------------------
 | 
						|
 Owner write  Success                    Wait for unlock. Return
 | 
						|
                                         error code after time-out.
 | 
						|
-------------------------------------------------------------------
 | 
						|
 Non-owner    Wait for unlock. Return    Wait for unlock. Return
 | 
						|
 write        error code after time-out. error code after time-out.
 | 
						|
-------------------------------------------------------------------
 | 
						|
 | 
						|
 | 
						|
If only locking is specified, DosProtectSetFileLocksL locks the specified file
 | 
						|
range using Lock. If the lock operation cannot be accomplished, an error is
 | 
						|
returned, and the file range is not locked.
 | 
						|
 | 
						|
After the lock request is processed, a file range can be unlocked using the
 | 
						|
Unlock parameter of another DosProtectSetFileLocksL request. If unlocking
 | 
						|
cannot be accomplished, an error is returned.
 | 
						|
 | 
						|
Instead of denying read/write access to an entire file by specifying access
 | 
						|
and sharing modes with DosProtectOpenL requests, a process attempts to lock
 | 
						|
only the range needed for read/write access and examines the error code
 | 
						|
returned.
 | 
						|
 | 
						|
Once a specified file range is locked exclusively, read and write access by
 | 
						|
another process is denied until the file range is unlocked. If both unlocking
 | 
						|
and locking are specified by DosProtectSetFileLocksL, the unlocking operation
 | 
						|
is performed first, then locking is done.
 | 
						|
*)
 | 
						|
function DosProtectSetFileLocksL (Handle: THandle; var Unlock: TFileLockL;
 | 
						|
                   var Lock: TFileLockL; Timeout: cardinal; Flags: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
(*
 | 
						|
DosSetFileLocksL locks and unlocks a range of an open file. 
 | 
						|
 | 
						|
Parameters:
 | 
						|
 Handle = file handle
 | 
						|
 Unlock = record containing the offset and length of a range to be unlocked
 | 
						|
 Lock = record containing the offset and length of a range to be locked
 | 
						|
 Timeout = the maximum time that the process is to wait for the requested locks
 | 
						|
           (in milliseconds)
 | 
						|
 Flags = bit mask specifying action to be taken.
 | 
						|
     Bits 31..2 are reserved.
 | 
						|
     Bit 1 (Atomic) means request for atomic locking - if the bit is set
 | 
						|
        and the lock range is equal to the unlock range, an atomic lock occurs.
 | 
						|
        If this bit is set to 1 and the lock range is not equal to the unlock
 | 
						|
        range, an error is returned. If this bit is set to 0, then the lock
 | 
						|
        may or may not occur atomically with the unlock.
 | 
						|
     Bit 0 (Share) defines the type of access that other processes may have
 | 
						|
        to the file range that is being locked. If this bit is set to 0
 | 
						|
        (default), other processes have no access to the locked file range.
 | 
						|
        The current process has exclusive access to the locked file range,
 | 
						|
        which must not overlap any other locked file range. If this bit is set
 | 
						|
        to 1, the current process and other processes have shared read only
 | 
						|
        access to the locked file range. A file range with shared access may
 | 
						|
        overlap any other file range with shared access, but must not overlap
 | 
						|
        any other file range with exclusive access.
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
  0 NO_ERROR 
 | 
						|
  1 ERROR_INVALID_FUNCTION 
 | 
						|
  6 ERROR_INVALID_HANDLE 
 | 
						|
 33 ERROR_LOCK_VIOLATION 
 | 
						|
 36 ERROR_SHARING_BUFFER_EXCEEDED 
 | 
						|
 87 ERROR_INVALID_PARAMETER 
 | 
						|
 95 ERROR_INTERRUPT 
 | 
						|
174 ERROR_ATOMIC_LOCK_NOT_SUPPORTED 
 | 
						|
175 ERROR_READ_LOCKS_NOT_SUPPORTED 
 | 
						|
 | 
						|
Remarks:
 | 
						|
DosSetFileLocksL allows a process to lock and unlock a range in a file. The
 | 
						|
time during which a file range is locked should be short.
 | 
						|
 | 
						|
If the lock and unlock ranges are both zero, ERROR_LOCK_VIOLATION is returned
 | 
						|
to the caller.
 | 
						|
 | 
						|
If you only want to lock a file range, set the unlock file offset and the
 | 
						|
unlock range length to zero.
 | 
						|
 | 
						|
If you only want to unlock a file range, set the lock file offset and the lock
 | 
						|
range length to zero.
 | 
						|
 | 
						|
When the Atomic bit of flags is set to 0, and DosSetFileLocksL specifies a lock
 | 
						|
operation and an unlock operation, the unlock operation occurs first, and then
 | 
						|
the lock operation is performed. If an error occurs during the unlock
 | 
						|
operation, an error code is returned and the lock operation is not performed.
 | 
						|
If an error occurs during the lock operation, an error code is returned and the
 | 
						|
unlock remains in effect if it was successful.
 | 
						|
 | 
						|
The lock operation is atomic when all of these conditions are met:
 | 
						|
- The Atomic bit is set to 1 in flags
 | 
						|
- The unlock range is the same as the lock range
 | 
						|
- The process has shared access to the file range, and has requested exclusive
 | 
						|
  access to it; or the process has exclusive access to the file range, and has
 | 
						|
  requested shared access to it.
 | 
						|
 | 
						|
Some file system drivers (FSDs) may not support atomic lock operations.
 | 
						|
Versions of the operating system prior to OS/2 Version 2.00 do not support
 | 
						|
atomic lock operations. If the application receives the error code
 | 
						|
ERROR_ATOMIC_LOCK_NOT_SUPPORTED, the application should unlock the file range
 | 
						|
and then lock it using a non-atomic operation (with the atomic bit set to 0 in
 | 
						|
flags). The application should also refresh its internal buffers before making
 | 
						|
any changes to the file.
 | 
						|
 | 
						|
If you issue DosClose to close a file with locks still in effect, the locks are
 | 
						|
released in no defined sequence.
 | 
						|
 | 
						|
If you end a process with a file open, and you have locks in effect in that
 | 
						|
file, the file is closed and the locks are released in no defined sequence.
 | 
						|
 | 
						|
The locked range can be anywhere in the logical file. Locking beyond the end of
 | 
						|
the file is not an error. A file range to be locked exclusively must first be
 | 
						|
cleared of any locked file subranges or overlapping locked file ranges.
 | 
						|
 | 
						|
If you repeat DosSetFileLocksL for the same file handle and file range, then
 | 
						|
you duplicate access to the file range. Access to locked file ranges is not
 | 
						|
duplicated across DosExecPgm. The proper method of using locks is to attempt to
 | 
						|
lock the file range, and to examine the return value.
 | 
						|
 | 
						|
The following table shows the level of access granted when the accessed file
 | 
						|
range is locked with an exclusive lock or a shared lock.  Owner  refers to
 | 
						|
a process that owns the lock.  Non-owner  refers to a process that does not own
 | 
						|
the lock.
 | 
						|
 | 
						|
 Action       Exclusive Lock             Shared Lock
 | 
						|
===================================================================
 | 
						|
 Owner read   Success                    Success
 | 
						|
-------------------------------------------------------------------
 | 
						|
 Non-owner    Wait for unlock. Return    Success
 | 
						|
 read         error code after time-out.
 | 
						|
-------------------------------------------------------------------
 | 
						|
 Owner write  Success                    Wait for unlock. Return
 | 
						|
                                         error code after time-out.
 | 
						|
-------------------------------------------------------------------
 | 
						|
 Non-owner    Wait for unlock. Return    Wait for unlock. Return
 | 
						|
 write        error code after time-out. error code after time-out.
 | 
						|
-------------------------------------------------------------------
 | 
						|
 | 
						|
If only locking is specified, DosSetFileLocksL locks the specified file range
 | 
						|
using Lock. If the lock operation cannot be accomplished, an error is
 | 
						|
returned, and the file range is not locked.
 | 
						|
 | 
						|
After the lock request is processed, a file range can be unlocked using the
 | 
						|
Unlock parameter of another DosSetFileLocksL request. If unlocking cannot be
 | 
						|
accomplished, an error is returned.
 | 
						|
 | 
						|
Instead of denying read/write access to an entire file by specifying access and
 | 
						|
sharing modes with DosOpenL requests, a process attempts to lock only the range
 | 
						|
needed for read/write access and examines the error code returned.
 | 
						|
 | 
						|
Once a specified file range is locked exclusively, read and write access by
 | 
						|
another process is denied until the file range is unlocked. If both unlocking
 | 
						|
and locking are specified by DosSetFileLocksL, the unlocking operation is
 | 
						|
performed first, then locking is done.
 | 
						|
*)
 | 
						|
function DosSetFileLocksL (Handle: THandle; var Unlock: TFileLockL;
 | 
						|
    var Lock: TFileLockL; Timeout: cardinal; Flags: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
(*
 | 
						|
DosProtectOpenL opens a new file, an existing file, or a replacement for an
 | 
						|
existing file and returns a protected file handle. An open file can have
 | 
						|
extended attributes.
 | 
						|
 | 
						|
Parameters:
 | 
						|
 FileName = ASCIIZ path name of the file or device to be opened.
 | 
						|
 Handle = handle for the file is returned here.
 | 
						|
 Action = value that specifies the action taken by DosProtectOpenL is returned
 | 
						|
          here; if DosProtectOpenL fails, this value has no meaning, otherwise,
 | 
						|
          it is one of the following values:
 | 
						|
   1 FILE_EXISTED - file already existed.
 | 
						|
   2 FILE_CREATED - file was created.
 | 
						|
   3 FILE_TRUNCATED - file existed and was changed to a given size (file was
 | 
						|
                      replaced).
 | 
						|
 InitSize = new logical size of the file (end of data, EOD), in bytes; this
 | 
						|
            parameter is significant only when creating a new file or replacing
 | 
						|
            an existing one. Otherwise, it is ignored. It is an error to create
 | 
						|
            or replace a file with a nonzero length if the OpenMode
 | 
						|
            Access-Mode flag is set to read-only.
 | 
						|
 Attrib = file attributes; this parameter contains the following bit fields:
 | 
						|
      Bits Description 
 | 
						|
 | 
						|
     31..6 - reserved, must be 0.
 | 
						|
         5 FILE_ARCHIVED (0x00000020) - file has been archived.
 | 
						|
         4 FILE_DIRECTORY (0x00000010) - file is a subdirectory.
 | 
						|
         3 - reserved, must be 0.
 | 
						|
         2 FILE_SYSTEM (0x00000004) - file is a system file.
 | 
						|
         1 FILE_HIDDEN (0x00000002) - file is hidden and does not appear in
 | 
						|
                                      a directory listing.
 | 
						|
         0 FILE_READONLY (0x00000001) - file can be read from, but not written
 | 
						|
                                        to.
 | 
						|
         0 FILE_NORMAL (0x00000000) - file can be read from or written to.
 | 
						|
 | 
						|
File attributes apply only if the file is created. These bits may be set
 | 
						|
individually or in combination. For example, an attribute value of 0x00000021
 | 
						|
(bits 5 and 0 set to 1) indicates a read-only file that has been archived.
 | 
						|
 | 
						|
 OpenFlags = the action to be taken depending on whether the file exists or
 | 
						|
             does not exist. This parameter contains the following bit fields:
 | 
						|
     Bits Description 
 | 
						|
    31..8 - reserved, must be 0.
 | 
						|
     7..4 - the following flags apply if the file does not exist:
 | 
						|
        0000 OPEN_ACTION_FAIL_IF_NEW 
 | 
						|
             Open an existing file; fail if the file does not exist. 
 | 
						|
        0001 OPEN_ACTION_CREATE_IF_NEW 
 | 
						|
             Create the file if the file does not exist. 
 | 
						|
     3..0 The following flags apply if the file does not exist:
 | 
						|
        0000 OPEN_ACTION_FAIL_IF_EXISTS 
 | 
						|
             Open the file; fail if the file already exists. 
 | 
						|
        0001 OPEN_ACTION_OPEN_IF_EXISTS 
 | 
						|
             Open the file if it already exists. 
 | 
						|
        0010 OPEN_ACTION_REPLACE_IF_EXISTS 
 | 
						|
             Replace the file if it already exists. 
 | 
						|
 | 
						|
 OpenMode = the mode of the open function. This parameter contains the
 | 
						|
            following bit fields:
 | 
						|
      Bits Description 
 | 
						|
        31 - reserved, must be zero. 
 | 
						|
        30 OPEN_FLAGS_PROTECTED_HANDLE (0x40000000) - protected file handle flag.
 | 
						|
             0 - unprotected Handle
 | 
						|
             1 - protected Handle
 | 
						|
  Protected handle requires the FileHandleLockID to be specified on subsequent
 | 
						|
  DosProtectxxxx calls.
 | 
						|
 | 
						|
  Unprotected handle requires the FileHandleLockID value to be specified as
 | 
						|
  zero on subsequent DosProtectxxxx calls. An unprotected handle may be used
 | 
						|
  with the unprotected calls such as DosRead and DosWrite.
 | 
						|
 | 
						|
        29 OPEN_SHARE_DENYLEGACY (0x10000000)
 | 
						|
           Deny read/write access by the DosOpen command:
 | 
						|
             0 - allow read/write access by the DosOpen command.
 | 
						|
             1 - deny read/write access by the DosOpen command.
 | 
						|
  A file opened by DosOpenL will not be allowed to grow larger than 2GB while
 | 
						|
  that same file is open via a legacy DosOpen call. Setting this bit to 1 will
 | 
						|
  prevent access by the obsolete DosOpen API and ensure that no error will
 | 
						|
  occur when growing the file.
 | 
						|
    28..16 - reserved, must be zero.
 | 
						|
        15 OPEN_FLAGS_DASD (0x00008000)
 | 
						|
           Direct Open flag:
 | 
						|
             0 - FileName represents a file to be opened normally. 
 | 
						|
             1 - FileName is drive (such as C or A), and represents a mounted
 | 
						|
                 disk or diskette volume to be opened for direct access.
 | 
						|
        14 OPEN_FLAGS_WRITE_THROUGH (0x00004000) 
 | 
						|
           Write-Through flag:
 | 
						|
             0 - writes to the file may go through the file-system driver's
 | 
						|
                 cache; the file-system driver writes the sectors when the
 | 
						|
                 cache is full or the file is closed.
 | 
						|
             1 - writes to the file may go through the file-system driver's
 | 
						|
                 cache, but the sectors are written (the actual file I/O
 | 
						|
                 operation is completed) before a synchronous write call
 | 
						|
                 returns. This state of the file defines it as a synchronous
 | 
						|
                 file. For synchronous files, this bit must be set, because the
 | 
						|
                 data must be written to the medium for synchronous write
 | 
						|
                 operations.
 | 
						|
  This bit flag is not inherited by child processes. 
 | 
						|
       13 OPEN_FLAGS_FAIL_ON_ERROR (0x00002000) 
 | 
						|
          Fail-Errors flag. Media I/O errors are handled as follows:
 | 
						|
            0 - reported through the system critical-error handler.
 | 
						|
            1 - reported directly to the caller by way of a return code.
 | 
						|
  Media I/O errors generated through Category 08h Logical Disk Control IOCtl
 | 
						|
  Commands always get reported directly to the caller by way of return code.
 | 
						|
  The Fail-Errors function applies only to non-IOCtl handle-based file I/O
 | 
						|
  calls.
 | 
						|
 | 
						|
  This flag bit is not inherited by child processes. 
 | 
						|
 | 
						|
       12 OPEN_FLAGS_NO_CACHE (0x00001000) 
 | 
						|
          No-Cache/Cache flag:
 | 
						|
            0 - the file-system driver should place data from I/O operations
 | 
						|
                into its cache.
 | 
						|
            1 - I/O operations to the file need not be done through the
 | 
						|
                file-system driver's cache.
 | 
						|
  The setting of this bit determines whether file-system drivers should place
 | 
						|
  data into the cache. Like the write-through bit, this is a per-handle bit,
 | 
						|
  and is not inherited by child processes. 
 | 
						|
       11 - reserved; must be 0.
 | 
						|
    10..8 - the locality of reference flags contain information about how the
 | 
						|
            application is to get access to the file. The values are as
 | 
						|
            follows:
 | 
						|
          000 OPEN_FLAGS_NO_LOCALITY (0x00000000)
 | 
						|
              No locality known.
 | 
						|
          001 OPEN_FLAGS_SEQUENTIAL (0x00000100)
 | 
						|
              Mainly sequential access.
 | 
						|
          010 OPEN_FLAGS_RANDOM (0x00000200)
 | 
						|
              Mainly random access.
 | 
						|
          011 OPEN_FLAGS_RANDOMSEQUENTIAL (0x00000300)
 | 
						|
              Random with some locality.
 | 
						|
        7 OPEN_FLAGS_NOINHERIT (0x00000080)
 | 
						|
          Inheritance flag:
 | 
						|
            0 - file handle is inherited by a process created from a call to
 | 
						|
                DosExecPgm.
 | 
						|
            1 - file handle is private to the current process.
 | 
						|
  This bit is not inherited by child processes. 
 | 
						|
    6..4 Sharing Mode flags; this field defines any restrictions to file
 | 
						|
         access placed by the caller on other processes. The values are as
 | 
						|
         follows:
 | 
						|
         001 OPEN_SHARE_DENYREADWRITE (0x00000010)
 | 
						|
             Deny read write access.
 | 
						|
         010 OPEN_SHARE_DENYWRITE (0x00000020)
 | 
						|
             Deny write access.
 | 
						|
         011 OPEN_SHARE_DENYREAD (0x00000030)
 | 
						|
             Deny read access.
 | 
						|
         100 OPEN_SHARE_DENYNONE (0x00000040)
 | 
						|
             Deny neither read nor write access (deny none).
 | 
						|
         Any other value is invalid. 
 | 
						|
       3 Reserved; must be 0. 
 | 
						|
    2..0 Access-Mode flags. This field defines the file access required by the
 | 
						|
         caller. The values are as follows:
 | 
						|
         000 OPEN_ACCESS_READONLY (0x00000000)
 | 
						|
         Read-only access
 | 
						|
         001 OPEN_ACCESS_WRITEONLY (0x00000001)
 | 
						|
         Write-only access
 | 
						|
         010 OPEN_ACCESS_READWRITE (0x00000002)
 | 
						|
         Read/write access.
 | 
						|
         Any other value is invalid, as are any other combinations.   
 | 
						|
 | 
						|
File sharing requires the cooperation of sharing processes. This cooperation is
 | 
						|
communicated through sharing and access modes. Any sharing restrictions placed
 | 
						|
on a file opened by a process are removed when the process closes the file with
 | 
						|
a DosClose request.
 | 
						|
 | 
						|
Sharing Mode:
 | 
						|
Specifies the type of file access that other processes may have. For example,
 | 
						|
if other processes can continue to read the file while your process is
 | 
						|
operating on it, specify Deny Write. The sharing mode prevents other processes
 | 
						|
from writing to the file but still allows them to read it.
 | 
						|
 | 
						|
Access Mode:
 | 
						|
Specifies the type of file access (access mode) needed by your process. For
 | 
						|
example, if your process requires read/write access, and another process has
 | 
						|
already opened the file with a sharing mode of Deny None, your DosProtectOpenL
 | 
						|
request succeeds. However, if the file is open with a sharing mode of Deny
 | 
						|
Write, the process is denied access.
 | 
						|
 | 
						|
If the file is inherited by a child process, all sharing and access
 | 
						|
restrictions also are inherited.
 | 
						|
 | 
						|
If an open file handle is duplicated by a call to DosDupHandle, all sharing and
 | 
						|
access restrictions also are duplicated.
 | 
						|
 | 
						|
 EA = pointer to an extended attribute buffer. The address of the
 | 
						|
      extended-attribute buffer, which contains an EAOP2 structure. The
 | 
						|
      fpFEA2List field in the EAOP2 structure points to a data area where the
 | 
						|
      relevant FEA2 list is to be found. The fpGEA2List and oError fields are
 | 
						|
      ignored.
 | 
						|
Output fpGEA2List and fpFEA2List are unchanged. The area that fpFEA2List points
 | 
						|
to is unchanged. If an error occurred during the set, oError is the offset of
 | 
						|
the FEA2 entry where the error occurred. The return code from DosProtectOpenL
 | 
						|
is the error code for that error condition. If no error occurred, oError is
 | 
						|
undefined.
 | 
						|
 | 
						|
 EA is nil, then no extended attributes are defined for the file. If extended
 | 
						|
 attributes are not to be defined or modified, the pointer EA must be set to
 | 
						|
 nil.
 | 
						|
 | 
						|
 FileHandleLockID = 32-bit LockID for the file handle is returned here.
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
  0 NO_ERROR
 | 
						|
  2 ERROR_FILE_NOT_FOUND
 | 
						|
  3 ERROR_PATH_NOT_FOUND
 | 
						|
  4 ERROR_TOO_MANY_OPEN_FILES
 | 
						|
  5 ERROR_ACCESS_DENIED
 | 
						|
 12 ERROR_INVALID_ACCESS
 | 
						|
 26 ERROR_NOT_DOS_DISK
 | 
						|
 32 ERROR_SHARING_VIOLATION
 | 
						|
 36 ERROR_SHARING_BUFFER_EXCEEDED
 | 
						|
 82 ERROR_CANNOT_MAKE
 | 
						|
 87 ERROR_INVALID_PARAMETER
 | 
						|
 99 ERROR_DEVICE_IN_USE
 | 
						|
108 ERROR_DRIVE_LOCKED
 | 
						|
110 ERROR_OPEN_FAILED
 | 
						|
112 ERROR_DISK_FULL
 | 
						|
206 ERROR_FILENAME_EXCED_RANGE
 | 
						|
231 ERROR_PIPE_BUSY
 | 
						|
 | 
						|
Remarks:
 | 
						|
A successful DosProtectOpenL request returns a handle and a 32-bit LockID for
 | 
						|
accessing the file. The read/write pointer is set at the first byte of the
 | 
						|
file. The position of the pointer can be changed with DosProtectSetFilePtrL or
 | 
						|
by read and write operations on the file.
 | 
						|
 | 
						|
The file s date and time can be queried with DosProtectQueryFileInfo. They are
 | 
						|
set with DosProtectSetFileInfo.
 | 
						|
 | 
						|
The read-only attribute of a file can be set with the ATTRIB command.
 | 
						|
 | 
						|
ulAttribute cannot be set to Volume Label. To set volume-label information,
 | 
						|
issue DosProtectSetFileInfo with a logical drive number. Volume labels cannot
 | 
						|
be opened.
 | 
						|
 | 
						|
InitSize affects the size of the file only when the file is new or is
 | 
						|
a replacement. If an existing file is opened, cbFile is ignored. To change the
 | 
						|
size of the existing file, issue DosProtectSetFileSizeL.
 | 
						|
 | 
						|
The value in InitSize is a recommended size. If the full size cannot be
 | 
						|
allocated, the open request may still succeed. The file system makes
 | 
						|
a reasonable attempt to allocate the new size in an area that is as nearly
 | 
						|
contiguous as possible on the medium. When the file size is extended, the
 | 
						|
values of the new bytes are undefined.
 | 
						|
 | 
						|
The Direct Open bit provides direct access to an entire disk or diskette
 | 
						|
volume, independent of the file system. This mode of opening the volume that is
 | 
						|
currently on the drive returns a handle to the calling function; the handle
 | 
						|
represents the logical volume as a single file. The calling function specifies
 | 
						|
this handle with a DosDevIOCtl Category 8, DSK_LOCKDRIVE request to prevent
 | 
						|
other processes from accessing the logical volume. When you are finished using
 | 
						|
the logical volume, issue a DosDevIOCtl Category 8, DSK_UNLOCKDRIVE request to
 | 
						|
allow other processes to access the logical volume.
 | 
						|
 | 
						|
The file-handle state bits can be set by DosProtectOpenL and
 | 
						|
DosProtectSetFHState. An application can query the file-handle state bits, as
 | 
						|
well as the rest of the Open Mode field, by issuing DosProtectQueryFHState.
 | 
						|
 | 
						|
You can use an TEAOP2 structure to set extended attributes in EA when creating
 | 
						|
a file, replacing an existing file, or truncating an existing file. No extended
 | 
						|
attributes are set when an existing file is just opened.
 | 
						|
 | 
						|
A replacement operation is logically equivalent to atomically deleting and
 | 
						|
re-creating the file. This means that any extended attributes associated with
 | 
						|
the file also are deleted before the file is re-created.
 | 
						|
 | 
						|
The FileHandleLockID returned is required on each of the DosProtectxxx
 | 
						|
functions. An incorrect pfhFileHandleLockID on subsequent DosProtectxxx calls
 | 
						|
results in an ERROR_ACCESS_DENIED return code.
 | 
						|
 | 
						|
The DosProtectxxx functions can be used with a NULL filehandle LockID, if the
 | 
						|
subject filehandle was obtained from DosOpen.
 | 
						|
*)
 | 
						|
function DosProtectOpenL (FileName: PChar; var Handle: THandle;
 | 
						|
                         var Action: cardinal; InitSize: int64; Attrib,
 | 
						|
                         OpenFlags, OpenMode: cardinal; EA: PEAOp2;
 | 
						|
                              var FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
 | 
						|
(*
 | 
						|
DosProtectSetFilePtrL moves the read or write pointer according to the type
 | 
						|
of move specified.
 | 
						|
 | 
						|
Parameters:
 | 
						|
 Handle = the handle returned by a previous DosOpenL function.
 | 
						|
 Pos = The signed distance (offset) to move, in bytes.
 | 
						|
 Method = The method of moving - location in the file at which the read/write
 | 
						|
          pointer starts before adding the Pos offset. The values and their
 | 
						|
          meanings are as shown in the following list:
 | 
						|
    0 FILE_BEGIN - move the pointer from the beginning of the file. 
 | 
						|
    1 FILE_CURRENT - move the pointer from the current location of the
 | 
						|
                     read/write pointer.
 | 
						|
    2 FILE_END - move the pointer from the end of the file; use this method
 | 
						|
                 to determine a file's size.
 | 
						|
 PosActual = address of the new pointer location.
 | 
						|
 FileHandleLockID = The filehandle lockid returned by a previous
 | 
						|
                    DosProtectOpenL. 
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
  0 NO_ERROR
 | 
						|
  1 ERROR_INVALID_FUNCTION
 | 
						|
  6 ERROR_INVALID_HANDLE
 | 
						|
132 ERROR_SEEK_ON_DEVICE
 | 
						|
131 ERROR_NEGATIVE_SEEK
 | 
						|
130 ERROR_DIRECT_ACCESS_HANDLE
 | 
						|
 | 
						|
Remarks:
 | 
						|
 | 
						|
The read/write pointer in a file is a signed 64-bit number. A negative value
 | 
						|
for Pos moves the pointer backward in the file; a positive value moves it
 | 
						|
forward. DosProtectSetFilePtrL cannot be used to move to a negative position in
 | 
						|
the file.
 | 
						|
 | 
						|
DosProtectSetFilePtrL cannot be used for a character device or pipe.
 | 
						|
*)
 | 
						|
function DosProtectSetFilePtrL (Handle: THandle; Pos: int64;
 | 
						|
                              Method: cardinal; var PosActual: int64; 
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
(*
 | 
						|
DosProtectSetFileSizeL changes the size of a file.
 | 
						|
 | 
						|
Parameters:
 | 
						|
 Handle = handle of the file whose size to be changed.
 | 
						|
 Size = new size, in bytes, of the file.
 | 
						|
 FileHandleLockID = the filehandle lockid obtained from DosProtectOpenL.
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
  0 NO_ERROR
 | 
						|
  5 ERROR_ACCESS_DENIED
 | 
						|
  6 ERROR_INVALID_HANDLE
 | 
						|
 26 ERROR_NOT_DOS_DISK
 | 
						|
 33 ERROR_LOCK_VIOLATION
 | 
						|
 87 ERROR_INVALID_PARAMETER
 | 
						|
112 ERROR_DISK_FULL
 | 
						|
 | 
						|
Remarks:
 | 
						|
 | 
						|
When DosProtectSetFileSizeL is issued, the file must be open in a mode that
 | 
						|
allows write access. 
 | 
						|
 | 
						|
The size of the open file can be truncated or extended. If the file size is
 | 
						|
being extended, the file system tries to allocate additional bytes in
 | 
						|
a contiguous (or nearly contiguous) space on the medium. The values of the new
 | 
						|
bytes are undefined.
 | 
						|
*)
 | 
						|
function DosProtectSetFileSizeL (Handle: THandle; Size: int64;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
(*
 | 
						|
DosGetProcessorStatus allows checking status of individual processors
 | 
						|
in a SMP machine.
 | 
						|
 | 
						|
Parameters:
 | 
						|
ProcID = Procesor ID numbered 1 through n, where there are n processors in
 | 
						|
         total.
 | 
						|
Status = Returned processor status defined as follows:
 | 
						|
  PROC_OFFLINE 0x00000000 Processor is offline 
 | 
						|
  PROC_ONLINE 0x00000001 Processor is online 
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
 0 NO_ERROR
 | 
						|
87 ERROR_INVALID_PARAMETER
 | 
						|
*)
 | 
						|
function DosGetProcessorStatus (ProcID: cardinal;
 | 
						|
                                        var Status: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
 | 
						|
(*
 | 
						|
DosSetProcessorStatus sets the ONLINE or OFFLINE status of a processor on
 | 
						|
an SMP system. The processor status may be queried using DosGetProcessorStatus.
 | 
						|
ONLINE status implies the processor is available for running work. OFFLINE
 | 
						|
status implies the processor is not available for running work. The processor
 | 
						|
that executes DosSetProcessorStatus must be ONLINE.
 | 
						|
 | 
						|
Parameters:
 | 
						|
ProcID = Processor ID numbered from 1 through n, where there are n processors
 | 
						|
         in total.
 | 
						|
Status = Requested processor status defined as follows:
 | 
						|
  PROC_OFFLINE 0x00000000 Processor is offline. 
 | 
						|
  PROC_ONLINE 0x00000001 Processor is online. 
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
 0 NO_ERROR 
 | 
						|
87 ERROR_INVALID_PARAMETER
 | 
						|
*)
 | 
						|
function DosSetProcessorStatus (ProcID: cardinal;
 | 
						|
                                            Status: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
(*
 | 
						|
DosQueryThreadAffinity allows a thread to inquire for the current thread's
 | 
						|
processor affinity mask and the system's capable processor affinity mask.
 | 
						|
 | 
						|
Parameters:
 | 
						|
Scope = Scope of the query defined by one of the following values:
 | 
						|
  AFNTY_THREAD Return the current threads processor affinity mask. 
 | 
						|
  AFNTY_SYSTEM Return the system's current capable processor affinity mask. 
 | 
						|
AffinityMask = Affinity mask is returned here; processors 0..31 are in Mask [0]
 | 
						|
               and processors 32..63 are in Mask [1].
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
13 ERROR_INVALID_DATA 
 | 
						|
87 ERROR_INVALID_PARAMETER
 | 
						|
*)
 | 
						|
function DosQueryThreadAffinity (Scope: cardinal;
 | 
						|
                               var AffinityMask: TMPAffinity): cardinal; cdecl;
 | 
						|
 | 
						|
(*
 | 
						|
DosQueryExtLibPath returns the current path to be searched before or after the
 | 
						|
system LIBPATH when locating DLLs.
 | 
						|
 | 
						|
Parameters:
 | 
						|
ExtLIBPATH = Buffer for receiving the extended LIBPATH string.
 | 
						|
 | 
						|
???
 | 
						|
If the buffer pointed to by this parameter is not large enough to hold
 | 
						|
the extended LIBPATH or an extended LIBPATH is not currently defined, this
 | 
						|
parameter returns a pointer to a NULL string.
 | 
						|
??? How is it detected if the size is not passed???
 | 
						|
 | 
						|
Flags - flag indicating when the new path is searched - possible values:
 | 
						|
  BEGIN_LIBPATH - The new path is searched before the LIBPATH.
 | 
						|
  END_LIBPATH - The new path is searched after the LIBPATH.
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
  0 NO_ERROR 
 | 
						|
 87 ERROR_INVALID_PARAMETER 
 | 
						|
122 ERROR_INSUFFICIENT_BUFER
 | 
						|
*)
 | 
						|
function DosQueryExtLibPath (ExtLibPath: PChar; Flags: cardinal): cardinal;
 | 
						|
                                                                         cdecl;
 | 
						|
 | 
						|
(*
 | 
						|
DosSetExtLibPath defines the current path to be searched before or after the
 | 
						|
system LIBPATH when locating DLLs.
 | 
						|
 | 
						|
Parameters:
 | 
						|
ExtLIBPATH = New extended LIBPATH string. Maximum size is 1024 bytes.
 | 
						|
             A pointer to a NULL string removes the extended LIBPATH.
 | 
						|
Flags = When the new path is searched - possible values:
 | 
						|
  BEGIN_LIBPATH (1) - the new path is searched before the LIBPATH.
 | 
						|
  END_LIBPATH (2) - the new path is searched after the LIBPATH.
 | 
						|
 | 
						|
The LIBPATH string is an environment variable found in the CONFIG.SYS file
 | 
						|
consisting of a set of paths. If a fully-qualified path is not specified when
 | 
						|
a module is loaded, the system searches these paths to find the DLL.
 | 
						|
 | 
						|
There are two extended LIBPATH strings, BeginLIBPATH and EndLIBPATH.
 | 
						|
BeginLIBPATH is searched before the system LIBPATH, and EndLIBPATH is searched
 | 
						|
after both BeginLIBPATH and the system LIBPATH. These extended LIBPATHs can be
 | 
						|
set either from the command line using the "SET" command, or by calling
 | 
						|
DosSetExtLIBPATH. When DosSetExtLIBPATH is called, all modifications become
 | 
						|
specific to that process. Initial settings can be set for all processes in the
 | 
						|
system by setting the values in CONFIG.SYS using the "set" command.
 | 
						|
 | 
						|
Note: The extended LIBPATHs are not true environment variables, and do not
 | 
						|
appear when querying the environment.
 | 
						|
 | 
						|
Every process inherits the settings of BeginLIBPATH and EndLIBPATH from the
 | 
						|
process that starts it. If the extended library paths are initialized in
 | 
						|
CONFIG.SYS, those extended library paths become the initial settings for new
 | 
						|
processes. If a process changes BeginLIBPATH or EndLIBPATH and starts a new
 | 
						|
process, the new child process inherits the changed contents. Child processes
 | 
						|
that inherit their parent's extended LIBPATHs maintain their own copy.
 | 
						|
Modifications made by the parent after the child has been created have no
 | 
						|
effect on the children.
 | 
						|
 | 
						|
This function permits the use of two symbols within the path string:
 | 
						|
%BeginLIBPATH% and %EndLIBPATH%. These symbols are replaced with the current
 | 
						|
string settings for the extended library paths.
 | 
						|
 | 
						|
The LIBPATHs strings are only searched when the specified DLL is not currently
 | 
						|
loaded. The only way to guarantee that the DLL being used is the correct
 | 
						|
version is to set the fully-qualified path in DosLoadModule. When a request is
 | 
						|
made to load a module and a path is not specified, the system searches the
 | 
						|
paths in the LIBPATH string and uses the first instance of the specified DLL it
 | 
						|
finds. If the new paths are added to the search strings, the system does not
 | 
						|
check those directories to see if a different version exists. Consequently, if
 | 
						|
two processes started from different directories use the same DLL, but
 | 
						|
different versions of that DLL exist in both directories, the version of the
 | 
						|
DLL loaded by the first process is the one used by both processes. The only way
 | 
						|
to prevent this from occurring is to specify the path to the DLL when
 | 
						|
DosLoadModule is called.
 | 
						|
 | 
						|
Consequently, if one process sets its BeginLIBPATH to C:\PROCESS1\DLL and loads
 | 
						|
the DLL MYAPP.DLL from that directory, and then a second process sets its
 | 
						|
BeginLIBPATH to C:\PROCESS2\DLL and there is for a different version of
 | 
						|
MYAPP.DLL in C:\PROCESS2\DLL, the second process will link to the DLL from
 | 
						|
C:\PROCESS1\DLL since it was already loaded.
 | 
						|
 | 
						|
Both BeginLIBPATH and EndLIBPATH can be set from the command line using the SET
 | 
						|
command.
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
0 NO_ERROR 
 | 
						|
8 ERROR_NOT_ENOUGH_MEMORY 
 | 
						|
87 ERROR_INVALID_PARAMETER 
 | 
						|
161 ERROR_BAD_PATHNAME 
 | 
						|
*)
 | 
						|
function DosSetExtLibPath (ExtLibPath: PChar; Flags: cardinal): cardinal;
 | 
						|
                                                                         cdecl;
 | 
						|
 | 
						|
(*
 | 
						|
DosQueryModFromEIP queries a module handle and name from a given flat address.
 | 
						|
It takes a flat 32 bit address as a parameter and returns information about the
 | 
						|
module (a protected mode application currently executing) owning the storage.
 | 
						|
 | 
						|
Parameters:
 | 
						|
HMod = Address of a location in which the module handle is returned.
 | 
						|
ObjNum = Address of a cardinal where the module object number corresponding to
 | 
						|
         the Address is returned. The object number is zero based.
 | 
						|
BuffLen = Length of the user supplied buffer pointed to by Buff.
 | 
						|
Buff = Address of a user supplied buffer in which the module name is returned.
 | 
						|
Offset = Address where the offset to the object corresponding to the Address is
 | 
						|
         returned. The offset is zero based.
 | 
						|
Address = Input address to be queried.
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
  0 NO_ERROR 
 | 
						|
 87 ERROR_INVALID_PARAMETER 
 | 
						|
487 ERROR_INVALID_ADDRESS
 | 
						|
*)
 | 
						|
function DosQueryModFromEIP (var HMod: THandle; var ObjNum: cardinal;
 | 
						|
                         BuffLen: cardinal; Buff: PChar; var Offset: cardinal;
 | 
						|
                                            Address: PtrUInt): cardinal; cdecl;
 | 
						|
 | 
						|
 | 
						|
(*
 | 
						|
DosDumpProcess initiates a process dump from a specified process. This may be used as part of an error handling routine to gather information about an error that may be analyzed later using the OS/2 System Dump Formatter. Configuration of Process Dump may be done using the PDUMPSYS, PDUMPUSR, and PROCDUMP commands. 
 | 
						|
 | 
						|
Parameters:
 | 
						|
Flag = Function to be performed (one of DDP_* constants).
 | 
						|
  DDP_DISABLEPROCDUMP (0) - disable process dumps
 | 
						|
  DDP_ENABLEPROCDUMP  (1) - enable process dumps
 | 
						|
  DDP_PERFORMPROCDUMP (2) - perform process dump (if the user enabled it using
 | 
						|
                            the PROCDUMP command; ERROR_INVALID_PARAMETER is
 | 
						|
                            returned otherwise)
 | 
						|
Drive = The ASCII character for the drive on which process dump files are
 | 
						|
        to be created, or 0 to use the drive originally specified by the user
 | 
						|
        using the PROCDUMP command. This is required only with the
 | 
						|
        DDP_ENABLEPROCDUMP (PROCDUMP command allows customizing fully the drive
 | 
						|
        and path).
 | 
						|
PID = The process to be dumped. 0 specifies the current process; otherwise
 | 
						|
      a valid process ID must be specified. This parameter is actioned only
 | 
						|
      with DDP_PERFORMPROCDUMP.
 | 
						|
 | 
						|
Possible return Codes.
 | 
						|
 0 NO_ERROR
 | 
						|
87 ERROR_INVALID PARAMETER
 | 
						|
 | 
						|
Remarks:
 | 
						|
Use the PDUMPUSR command to specify what information will be dumped.
 | 
						|
 | 
						|
Use the PROCDUMP command to customize options per process and in particular
 | 
						|
to specify whether child or parent process will be dumped.
 | 
						|
 | 
						|
For maximum flexibility the use of DosDumpProcess should be limited
 | 
						|
to the DDP_PERFORMPROCDUMP function. This allows you to specify whether
 | 
						|
Process Dump should be enabled through the use of the PROCDUMP command.
 | 
						|
You may customize Process Dump completely through use of the PDUMPUSR,
 | 
						|
PDUMPSYS, AND PROCDUMP commands. For further information, see PROCDUMP.DOC
 | 
						|
in the OS2\SYSTEM\RAS directory. DDP_ENABLEPROCDUMP and DDP_DISABLEPROCDUMP
 | 
						|
are provided for backwards compatibility only.
 | 
						|
*)
 | 
						|
function DosDumpProcess (Flag: cardinal; Drive: char;
 | 
						|
                                               PID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
 | 
						|
(*
 | 
						|
Suppress application trap popups and log them to the file POPUPLOG.OS2.
 | 
						|
 | 
						|
Parameters:
 | 
						|
Flag = Flag indicating whether pop-up suppression should be enabled
 | 
						|
       or disabled (one of SPU_* constants - 0 or 1).
 | 
						|
Drive = The drive letter for the log file (used only when pop-up suppression is
 | 
						|
        enabled).
 | 
						|
 | 
						|
Remarks:
 | 
						|
When pop-ups are suppressed through DosSuppressPopUps, the system does not
 | 
						|
display trap screens on the user's terminal. The user will not be required
 | 
						|
to respond to the abort, retry, continue message. Instead, the system displays
 | 
						|
message SYS3571 and logs the name of the process to the POPUPLOG.OS2 log file
 | 
						|
in the root directory of the specified drive. The system will also log
 | 
						|
the message inserts in the log file.
 | 
						|
 | 
						|
If the log file does not exist, the system will create it. If the log file
 | 
						|
exists, the system appends to it. If the system cannot open the file (for
 | 
						|
example, because the drive does not exist), the system will not log the pop-up
 | 
						|
information.
 | 
						|
 | 
						|
When pop-up suppression is enabled, the system overrides any settings
 | 
						|
established by DosError on a per-process basis.
 | 
						|
 | 
						|
This API overrides the potential initial setting (e.g. 'SUPPRESSPOPUPS=c')
 | 
						|
in CONFIG.SYS.
 | 
						|
 | 
						|
The drive letter for the log file may also be specified on the
 | 
						|
DosSuppressPopUps API.
 | 
						|
 | 
						|
If an invalid flag (a flag other than SPU_ENABLESUPPRESSION
 | 
						|
or SPU_DISABLESUPPRESSION) or an invalid drive (a drive other than an upper- or
 | 
						|
lowercase letter) is specified on DosSuppressPopUps, the system returns error
 | 
						|
code ERROR_INVALID_PARAMETER. Otherwise, the system returns NO_ERROR.
 | 
						|
 | 
						|
Possible error codes:
 | 
						|
 0 NO_ERROR
 | 
						|
87 ERROR_INVALID_PARAMETER
 | 
						|
*)
 | 
						|
function DosSuppressPopups (Flag: cardinal; Drive: char): cardinal; cdecl;
 | 
						|
 | 
						|
 | 
						|
(*
 | 
						|
DosPerfSysCall retrieves system performance information and performs software
 | 
						|
tracing.
 | 
						|
 | 
						|
Parameters:
 | 
						|
Command = Command to be performed; the following commands are accepted:
 | 
						|
  CMD_KI_RDCNT ($63) - reads CPU utilization information in both uniprocessor
 | 
						|
                       and symmetric multi-processor (SMP) environments by
 | 
						|
                       taking a snapshot of the time stamp counters. To
 | 
						|
                       determine CPU utilization, the application must compute
 | 
						|
                       the difference between two time stamp snapshots using 64
 | 
						|
                       bit aritimetic.
 | 
						|
  CMD_SOFTTRACE_LOG ($14) - records software trace information.
 | 
						|
Parm1 (CPUUtil) = Command-specific. In case of CMD_KI_RDCNT, pointer to
 | 
						|
                  TCPUUtil record. In case of CMD_SOFTTRACE_LOG, major code for
 | 
						|
                  the trace entry in the range of 0 to 255. Major codes 184
 | 
						|
                  ($B8) and 185 ($B9) have been reserved for IBM customer use.
 | 
						|
                  Major code 1 is reserved for exclusive use by IBM.
 | 
						|
Parm2 = Command-specific. In case of CMD_KI_RdCnt, it must be 0. In case of
 | 
						|
        CMD_SOFTTRACE_LOG, minor code for the trace entry in the range of
 | 
						|
        0 to 255.
 | 
						|
Parm3 (HookData) = Command-specific. In case of CMD_KI_RdCnt, it must be 0. In
 | 
						|
                   case of CMD_SOFTTRACE_LOG, pointer to a HOOKDATA data
 | 
						|
                   structure (see example code).
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
0 NO_ERROR 
 | 
						|
1 ERROR_INVALID_FUNCTION
 | 
						|
 | 
						|
Remarks:
 | 
						|
DosPerfSysCall is a general purpose performance function. This function accepts
 | 
						|
four parameters. The first parameter is the command requested. The other three
 | 
						|
parameters are command specific.
 | 
						|
 | 
						|
Some functions of DosPerfSysCall may have a dependency on Intel Pentium or
 | 
						|
Pentium-Pro (or higher) support. If a function cannot be provided because OS/2
 | 
						|
is not running on a processor with the required features, a return code will
 | 
						|
indicate an attempt to use an unsupported function.
 | 
						|
 | 
						|
Example code (C):
 | 
						|
  int main (int argc, char *argv[])
 | 
						|
  {
 | 
						|
     APIRET     rc;
 | 
						|
     BYTE       HookBuffer [256];
 | 
						|
     HOOKDATA   Hookdata = {0,HookBuffer};
 | 
						|
     ULONG      ulMajor, ulMinor;
 | 
						|
     *((PULONG)  HookBuffer[0]) = 1;
 | 
						|
     *((PULONG)  HookBuffer[4]) = 2;
 | 
						|
     *((PULONG)  HookBuffer[8]) = 3;
 | 
						|
     strcpy((PSZ  HookBuffer[12], "Test of 3 ULONG values and a string.")
 | 
						|
     HookData.ulLength = 12 + strlen((PSZ HookBuffer[12]) + 1;
 | 
						|
 | 
						|
     ulMajor = 0x00b8 
 | 
						|
     ulMinor = 0x0001
 | 
						|
 | 
						|
     rc = DosPerfSystCall(CMD_SOFTTRACE_LOG, ulMajor, ulMinor, (ULONG)  HookData);
 | 
						|
     if (rc != NO_ERROR) {
 | 
						|
       fprintf (stderr, "CMD_SOFTTRACE_LOG failed   rc = %u\n", rc);
 | 
						|
       return 1;
 | 
						|
       }
 | 
						|
 | 
						|
     return NO_ERROR;
 | 
						|
  }
 | 
						|
*)
 | 
						|
function DosPerfSysCall (Command, Parm1, Parm2,
 | 
						|
                                             Parm3: cardinal): cardinal; cdecl;
 | 
						|
function DosPerfSysCall (Command, Parm1, Parm2: cardinal;
 | 
						|
                                                var HookData): cardinal; cdecl;
 | 
						|
function DosPerfSysCall (Command: cardinal; var CpuUtil: TCPUUtil; Parm2,
 | 
						|
                                             Parm3: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
 | 
						|
(*
 | 
						|
Query context of a suspended thread.
 | 
						|
 | 
						|
Parameters:
 | 
						|
TID = Thread ID
 | 
						|
Level = Desired level of information
 | 
						|
Context = Thread context record
 | 
						|
 | 
						|
DosQueryThreadContext returns the context record of a suspended thread.
 | 
						|
A thread may be suspended by using DosSuspendThread or DosEnterCritSec.
 | 
						|
If DosSuspendThread is used, the caller must allow some time for OS/2 to
 | 
						|
suspend the thread before querying its context.
 | 
						|
 | 
						|
Note: Values from the thread context should be used only when the state
 | 
						|
of the target thread is known.
 | 
						|
 | 
						|
Possible return codes:
 | 
						|
  0 NO_ERROR
 | 
						|
 87 ERROR_INVALID_PARAMETER
 | 
						|
 90 ERROR_NOT_FROZEN
 | 
						|
115 ERROR_PROTECTION_VIOLATION
 | 
						|
309 ERROR_INVALID_THREADID
 | 
						|
*)
 | 
						|
function DosQueryThreadContext (TID: cardinal; Level: cardinal;
 | 
						|
                                 var Context: TContextRecord): cardinal; cdecl;
 | 
						|
 | 
						|
 | 
						|
(*
 | 
						|
DosQueryABIOSSupport returns flags that indicate various basic hardware
 | 
						|
configurations.
 | 
						|
 | 
						|
Parameters:
 | 
						|
Reserved = Must be set to 0, no other value is defined.
 | 
						|
 | 
						|
The result of this function contains combination of flags (HW_Cfg_* constants)
 | 
						|
signalizing the underlying hardware configuration.
 | 
						|
*)
 | 
						|
function DosQueryABIOSSupport (Reserved: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
 | 
						|
{***************************************************************************}
 | 
						|
implementation
 | 
						|
{***************************************************************************}
 | 
						|
 | 
						|
uses
 | 
						|
  OS2Def;
 | 
						|
 | 
						|
 | 
						|
function DummyDosCancelLockRequestL (Handle: THandle; var Lock: TFileLockL): cardinal; cdecl;
 | 
						|
var
 | 
						|
  Lock0: TFileLock;
 | 
						|
begin
 | 
						|
  if (Lock.Offset > high (longint)) or (Lock.Range > high (longint)) or
 | 
						|
                                     (Lock.Offset < 0) or (Lock.Range < 0) then
 | 
						|
   DummyDosCancelLockRequestL := Error_Invalid_Parameter
 | 
						|
  else
 | 
						|
   begin
 | 
						|
    Lock0.Offset := longint (Lock.Offset);
 | 
						|
    Lock0.Range := longint (Lock.Range);
 | 
						|
    DummyDosCancelLockRequestL := DosCancelLockRequest (Handle, Lock0);
 | 
						|
   end;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectSetFileLocksL (Handle: THandle; var Unlock: TFileLockL;
 | 
						|
                   var Lock: TFileLockL; Timeout: cardinal; Flags: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
var
 | 
						|
  Lock0: TFileLock;
 | 
						|
  UnLock0: TFileLock;
 | 
						|
begin
 | 
						|
  if (Lock.Offset > high (longint)) or (Lock.Range > high (longint)) or
 | 
						|
       (Unlock.Offset > high (longint)) or (Unlock.Range > high (longint)) then
 | 
						|
   DummyDosProtectSetFileLocksL := Error_Invalid_Parameter
 | 
						|
  else
 | 
						|
   begin
 | 
						|
    Lock0.Offset := longint (Lock.Offset);
 | 
						|
    Lock0.Range := longint (Lock.Range);
 | 
						|
    Unlock0.Offset := longint (Unlock.Offset);
 | 
						|
    Unlock0.Range := longint (Lock.Range);
 | 
						|
    DummyDosProtectSetFileLocksL := DosProtectSetFileLocks (Handle, Unlock0,
 | 
						|
                                      Lock0, Timeout, Flags, FileHandleLockID);
 | 
						|
   end;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosSetFileLocksL (Handle: THandle; var Unlock: TFileLockL;
 | 
						|
    var Lock: TFileLockL; Timeout: cardinal; Flags: cardinal): cardinal; cdecl;
 | 
						|
var
 | 
						|
  Lock0: TFileLock;
 | 
						|
  UnLock0: TFileLock;
 | 
						|
begin
 | 
						|
  if (Lock.Offset > high (longint)) or (Lock.Range > high (longint)) or
 | 
						|
      (Lock.Offset < 0) or (Lock.Range < 0) or
 | 
						|
      (Unlock.Offset < 0) or (Unlock.Range < 0) or
 | 
						|
       (Unlock.Offset > high (longint)) or (Unlock.Range > high (longint)) then
 | 
						|
   DummyDosSetFileLocksL := Error_Invalid_Parameter
 | 
						|
  else
 | 
						|
   begin
 | 
						|
    Lock0.Offset := longint (Lock.Offset);
 | 
						|
    Lock0.Range := longint (Lock.Range);
 | 
						|
    Unlock0.Offset := longint (Unlock.Offset);
 | 
						|
    Unlock0.Range := longint (Lock.Range);
 | 
						|
    DummyDosSetFileLocksL := DosSetFileLocks (Handle, Unlock0, Lock0, Timeout,
 | 
						|
                                                                        Flags);
 | 
						|
   end;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectOpenL (FileName: PChar; var Handle: THandle;
 | 
						|
                         var Action: cardinal; InitSize: int64; Attrib,
 | 
						|
                         OpenFlags, OpenMode: cardinal; EA: PEAOp2;
 | 
						|
                              var FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  if InitSize > high (longint) then
 | 
						|
   DummyDosProtectOpenL := Error_Invalid_Parameter
 | 
						|
  else
 | 
						|
   DummyDosProtectOpenL := DosProtectOpen (FileName, Handle, Action,
 | 
						|
        longint (InitSize), Attrib, OpenFlags, OpenMode, EA, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectSetFilePtrL (Handle: THandle; Pos: int64;
 | 
						|
                              Method: cardinal; var PosActual: int64; 
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
var
 | 
						|
  PosActual0: cardinal;
 | 
						|
begin
 | 
						|
  if (Pos < low (longint)) or (Pos > high (longint)) then
 | 
						|
   DummyDosProtectSetFilePtrL := Error_Invalid_Parameter
 | 
						|
  else
 | 
						|
   begin
 | 
						|
    DummyDosProtectSetFilePtrL := DosProtectSetFilePtr (Handle, longint (Pos),
 | 
						|
                                         Method, PosActual0, FileHandleLockID);
 | 
						|
    PosActual := PosActual0;
 | 
						|
   end;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectSetFileSizeL (Handle: THandle; Size: int64;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  if (Size > high (cardinal)) then
 | 
						|
   DummyDosProtectSetFileSizeL := Error_Invalid_Parameter
 | 
						|
  else
 | 
						|
   DummyDosProtectSetFileSizeL := DosProtectSetFileSize (Handle,
 | 
						|
                                            cardinal (Size), FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectSetFileLocks (Handle: THandle;
 | 
						|
                                      var Unlock, Lock: TFileLock;
 | 
						|
                                      Timeout, Flags: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  if FileHandleLockID <> 0 then
 | 
						|
   DummyDosProtectSetFileLocks := Error_Invalid_Parameter
 | 
						|
  else
 | 
						|
   DummyDosProtectSetFileLocks := DosSetFileLocks (Handle, Unlock, Lock,
 | 
						|
                                                               Timeout, Flags);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectOpen (FileName: PChar; var Handle: THandle;
 | 
						|
                              var Action: cardinal; InitSize, Attrib,
 | 
						|
                              OpenFlags, OpenMode: cardinal; ea: PEAOp2;
 | 
						|
                              var FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosProtectOpen := DosOpen (FileName, Handle, Action, InitSize, Attrib,
 | 
						|
                                                      OpenFlags, OpenMode, EA);
 | 
						|
  FileHandleLockID := 0;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectClose (Handle: THandle;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosProtectClose := DosClose (Handle);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectRead (Handle: THandle; var Buffer; Count: cardinal;
 | 
						|
          var ActCount: cardinal; FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosProtectRead := DosRead (Handle, Buffer, Count, ActCount);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectWrite (Handle: THandle; const Buffer; Count: cardinal;
 | 
						|
                                var ActCount: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosProtectWrite := DosWrite (Handle, Buffer, Count, ActCount);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectSetFilePtr (Handle: THandle; Pos: longint;
 | 
						|
                                    Method: cardinal; var PosActual: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosProtectSetFilePtr := DosSetFilePtr (Handle, Pos, Method, PosActual);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectSetFileSize (Handle: THandle; Size: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosProtectSetFileSize := DosSetFileSize (Handle, Size);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectQueryFHState (Handle: THandle; var FileMode: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosProtectQueryFHState := DosQueryFHState (Handle, FileMode);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectSetFHState (Handle: THandle; FileMode: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosProtectSetFHState := DosSetFHState (Handle, FileMode);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectQueryFileInfo (Handle: THandle; InfoLevel: cardinal;
 | 
						|
                            AFileStatus: PFileStatus; FileStatusLen: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosProtectQueryFileInfo := DosQueryFileInfo (Handle, InfoLevel,
 | 
						|
                                                   AFileStatus, FileStatusLen);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectSetFileInfo (Handle: THandle; InfoLevel: cardinal;
 | 
						|
                            AFileStatus: PFileStatus; FileStatusLen: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosProtectSetFileInfo := DosSetFileInfo (Handle, InfoLevel,
 | 
						|
                                                   AFileStatus, FileStatusLen);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosProtectEnumAttribute (RefType: cardinal; AFile: pointer;
 | 
						|
                                  Entry: cardinal; var Buf; BufSize: cardinal;
 | 
						|
                                     var Count: cardinal; InfoLevel: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosProtectEnumAttribute := DosEnumAttribute (RefType, AFile, Entry,
 | 
						|
                                               Buf, BufSize, Count, InfoLevel);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosGetProcessorStatus (ProcID: cardinal;
 | 
						|
                                        var Status: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  if ProcID = 1 then
 | 
						|
   begin
 | 
						|
    Status := 1;
 | 
						|
    DummyDosGetProcessorStatus := No_Error;
 | 
						|
   end
 | 
						|
  else
 | 
						|
   DummyDosGetProcessorStatus := Error_Invalid_Parameter;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosSetProcessorStatus (ProcID: cardinal;
 | 
						|
                                            Status: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosSetProcessorStatus := Error_Invalid_Parameter;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosQueryThreadAffinity (Scope: cardinal;
 | 
						|
                               var AffinityMask: TMPAffinity): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosQueryThreadAffinity := Error_Invalid_Function;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosSetThreadAffinity (var AffinityMask: TMPAffinity): cardinal;
 | 
						|
                                                                         cdecl;
 | 
						|
begin
 | 
						|
  DummyDosSetThreadAffinity := Error_Invalid_Function;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosQueryExtLibPath (ExtLibPath: PChar;
 | 
						|
                                             Flags: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  if ExtLibPath <> nil then
 | 
						|
   begin
 | 
						|
    ExtLibPath := #0;
 | 
						|
    DummyDosQueryExtLibPath := No_Error;
 | 
						|
   end
 | 
						|
  else
 | 
						|
   DummyDosQueryExtLibPath := Error_Invalid_Parameter;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosSetExtLibPath (ExtLibPath: PChar; Flags: cardinal): cardinal;
 | 
						|
                                                                         cdecl;
 | 
						|
begin
 | 
						|
  DummyDosSetExtLibPath := Error_Not_Enough_Memory;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosQueryModFromEIP (var HMod: THandle; var ObjNum: cardinal;
 | 
						|
                         BuffLen: cardinal; Buff: PChar; var Offset: cardinal;
 | 
						|
                                            Address: PtrUInt): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosQueryModFromEIP := Error_Invalid_Parameter;
 | 
						|
  HMod := THandle (-1);
 | 
						|
  ObjNum := 0;
 | 
						|
  if Buff <> nil then
 | 
						|
   Buff^ := #0;
 | 
						|
  Offset := 0;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosDumpProcess (Flag: cardinal; Drive: cardinal;
 | 
						|
                                               PID: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosDumpProcess := Error_Invalid_Function;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosSuppressPopups (Flag: cardinal; Drive: char): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosSuppressPopups := Error_Invalid_Function;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosPerfSysCall (Command, Parm1, Parm2,
 | 
						|
                                             Parm3: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosPerfSysCall := Error_Invalid_Function;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosQueryThreadContext (TID: cardinal; Level: cardinal;
 | 
						|
                                 var Context: TContextRecord): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosQueryThreadContext := Error_Invalid_Function;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DummyDosQueryABIOSSupport (Reserved: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DummyDosQueryABIOSSupport := 0;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
type
 | 
						|
  TDosProtectOpen = function (FileName: PChar; var Handle: THandle;
 | 
						|
                              var Action: cardinal; InitSize, Attrib,
 | 
						|
                              OpenFlags, OpenMode: cardinal; ea: PEAOp2;
 | 
						|
                              var FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectClose = function (Handle: THandle;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectRead = function (Handle: THandle; var Buffer; Count: cardinal;
 | 
						|
          var ActCount: cardinal; FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectWrite = function (Handle: THandle; const Buffer; Count: cardinal;
 | 
						|
                               var ActCount: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectSetFilePtr = function (Handle: THandle; Pos: longint;
 | 
						|
                                    Method: cardinal; var PosActual: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectSetFileSize = function (Handle: THandle; Size: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectQueryFHState = function (Handle: THandle; var FileMode: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectSetFHState = function (Handle: THandle; FileMode: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectQueryFileInfo = function (Handle: THandle; InfoLevel: cardinal;
 | 
						|
                            AFileStatus: PFileStatus; FileStatusLen: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectSetFileInfo = function (Handle: THandle; InfoLevel: cardinal;
 | 
						|
                            AFileStatus: PFileStatus; FileStatusLen: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectEnumAttribute = function (RefType: cardinal; AFile: pointer;
 | 
						|
                                  Entry: cardinal; var Buf; BufSize: cardinal;
 | 
						|
                                  var Count: cardinal; InfoLevel: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectSetFileLocks = function (Handle: THandle;
 | 
						|
                                      var Unlock, Lock: TFileLock;
 | 
						|
                                      Timeout, Flags: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosCancelLockRequestL = function (Handle: THandle; var Lock: TFileLockL):
 | 
						|
                                                               cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectSetFileLocksL = function (Handle: THandle; var Unlock: TFileLockL;
 | 
						|
                   var Lock: TFileLockL; Timeout: cardinal; Flags: cardinal;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosSetFileLocksL = function (Handle: THandle; var Unlock: TFileLockL;
 | 
						|
    var Lock: TFileLockL; Timeout: cardinal; Flags: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectOpenL = function (FileName: PChar; var Handle: THandle;
 | 
						|
                         var Action: cardinal; InitSize: int64; Attrib,
 | 
						|
                         OpenFlags, OpenMode: cardinal; EA: PEAOp2;
 | 
						|
                              var FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectSetFilePtrL = function (Handle: THandle; Pos: int64;
 | 
						|
          Method: cardinal;
 | 
						|
            var PosActual: int64; FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosProtectSetFileSizeL = function (Handle: THandle; Size: int64;
 | 
						|
                                  FileHandleLockID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosGetProcessorStatus = function (ProcID: cardinal;
 | 
						|
                                        var Status: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosSetProcessorStatus = function (ProcID: cardinal;
 | 
						|
                                            Status: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosQueryThreadAffinity = function (Scope: cardinal;
 | 
						|
                               var AffinityMask: TMPAffinity): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosSetThreadAffinity = function (var AffinityMask: TMPAffinity): cardinal;
 | 
						|
                                                                         cdecl;
 | 
						|
 | 
						|
  TDosQueryExtLibPath = function (ExtLibPath: PChar;
 | 
						|
                                             Flags: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosSetExtLibPath = function (ExtLibPath: PChar; Flags: cardinal): cardinal;
 | 
						|
                                                                         cdecl;
 | 
						|
 | 
						|
  TDosQueryModFromEIP = function (var HMod: THandle; var ObjNum: cardinal;
 | 
						|
                         BuffLen: cardinal; Buff: PChar; var Offset: cardinal;
 | 
						|
                                            Address: PtrUInt): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosDumpProcess = function (Flag: cardinal; Drive: cardinal;
 | 
						|
                                               PID: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosSuppressPopups = function (Flag: cardinal; Drive: char): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosPerfSysCall = function (Command, Parm1, Parm2,
 | 
						|
                                             Parm3: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosQueryThreadContext = function (TID: cardinal; Level: cardinal;
 | 
						|
                                 var Context: TContextRecord): cardinal; cdecl;
 | 
						|
 | 
						|
  TDosQueryABIOSSupport = function (Reserved: cardinal): cardinal; cdecl;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
const
 | 
						|
  Sys_DosCancelLockRequestL: TDosCancelLockRequestL =
 | 
						|
                                                   @DummyDosCancelLockRequestL;
 | 
						|
  Sys_DosSetFileLocksL: TDosSetFileLocksL = @DummyDosSetFileLocksL;
 | 
						|
  Sys_DosProtectSetFileLocksL: TDosProtectSetFileLocksL =
 | 
						|
                                                 @DummyDosProtectSetFileLocksL;
 | 
						|
  Sys_DosProtectOpenL: TDosProtectOpenL = @DummyDosProtectOpenL;
 | 
						|
  Sys_DosProtectSetFilePtrL: TDosProtectSetFilePtrL =
 | 
						|
                                                   @DummyDosProtectSetFilePtrL;
 | 
						|
  Sys_DosProtectSetFileSizeL: TDosProtectSetFileSizeL =
 | 
						|
                                                  @DummyDosProtectSetFileSizeL;
 | 
						|
  Sys_DosProtectOpen: TDosProtectOpen = @DummyDosProtectOpen;
 | 
						|
  Sys_DosProtectClose: TDosProtectClose = @DummyDosProtectClose;
 | 
						|
  Sys_DosProtectRead: TDosProtectRead = @DummyDosProtectRead;
 | 
						|
  Sys_DosProtectWrite: TDosProtectWrite = @DummyDosProtectWrite;
 | 
						|
  Sys_DosProtectSetFilePtr: TDosProtectSetFilePtr = @DummyDosProtectSetFilePtr;
 | 
						|
  Sys_DosProtectSetFileSize: TDosProtectSetFileSize =
 | 
						|
                                                   @DummyDosProtectSetFileSize;
 | 
						|
  Sys_DosProtectQueryFHState: TDosProtectQueryFHState =
 | 
						|
                                                  @DummyDosProtectQueryFHState;
 | 
						|
  Sys_DosProtectSetFHState: TDosProtectSetFHState = @DummyDosProtectSetFHState;
 | 
						|
  Sys_DosProtectQueryFileInfo: TDosProtectQueryFileInfo =
 | 
						|
                                                 @DummyDosProtectQueryFileInfo;
 | 
						|
  Sys_DosProtectSetFileInfo: TDosProtectSetFileInfo =
 | 
						|
                                                   @DummyDosProtectSetFileInfo;
 | 
						|
  Sys_DosProtectEnumAttribute: TDosProtectEnumAttribute =
 | 
						|
                                                 @DummyDosProtectEnumAttribute;
 | 
						|
  Sys_DosProtectSetFileLocks: TDosProtectSetFileLocks =
 | 
						|
                                                  @DummyDosProtectSetFileLocks;
 | 
						|
  Sys_DosGetProcessorStatus: TDosGetProcessorStatus =
 | 
						|
                                                   @DummyDosGetProcessorStatus;
 | 
						|
  Sys_DosSetProcessorStatus: TDosSetProcessorStatus =
 | 
						|
                                                   @DummyDosSetProcessorStatus;
 | 
						|
  Sys_DosQueryThreadAffinity: TDosQueryThreadAffinity =
 | 
						|
                                                  @DummyDosQueryThreadAffinity;
 | 
						|
  Sys_DosSetThreadAffinity: TDosSetThreadAffinity = @DummyDosSetThreadAffinity;
 | 
						|
  Sys_DosQueryExtLibPath: TDosQueryExtLibPath = @DummyDosQueryExtLibPath;
 | 
						|
  Sys_DosSetExtLibPath: TDosSetExtLibPath = @DummyDosSetExtLibPath;
 | 
						|
  Sys_DosQueryModFromEIP: TDosQueryModFromEIP = @DummyDosQueryModFromEIP;
 | 
						|
  Sys_DosDumpProcess: TDosDumpProcess = @DummyDosDumpProcess;
 | 
						|
  Sys_DosSuppressPopups: TDosSuppressPopups = @DummyDosSuppressPopups;
 | 
						|
  Sys_DosPerfSysCall: TDosPerfSysCall = @DummyDosPerfSysCall;
 | 
						|
  Sys_DosQueryThreadContext: TDosQueryThreadContext =
 | 
						|
                                                   @DummyDosQueryThreadContext;
 | 
						|
  Sys_DosQueryABIOSSupport: TDosQueryABIOSSupport = @DummyDosQueryABIOSSupport;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
function DosOpenL (FileName: PChar; var Handle: THandle;
 | 
						|
                        var Action: cardinal; InitSize: int64;
 | 
						|
                        Attrib, OpenFlags, FileMode: cardinal;
 | 
						|
                                         EA: pointer): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosOpenL := Sys_DosOpenL (FileName, Handle, Action, InitSize, Attrib,
 | 
						|
                                                      OpenFlags, FileMode, EA);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosSetFilePtrL (Handle: THandle; Pos: int64; Method: cardinal;
 | 
						|
                                var PosActual: int64): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosSetFilePtrL := Sys_DosSetFilePtrL (Handle, Pos, Method, PosActual);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosSetFileSizeL (Handle: THandle; Size: int64): cardinal; cdecl;
 | 
						|
                                                                        inline;
 | 
						|
begin
 | 
						|
  DosSetFileSizeL := Sys_DosSetFileSizeL (Handle, Size);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectOpen (FileName: PChar; var Handle: THandle;
 | 
						|
                              var Action: cardinal; InitSize, Attrib,
 | 
						|
                              OpenFlags, OpenMode: cardinal; EA: PEAOp2;
 | 
						|
                      var FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectOpen := Sys_DosProtectOpen (FileName, Handle, Action, InitSize,
 | 
						|
                            Attrib, OpenFlags, OpenMode, EA, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectClose (Handle: THandle;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectClose := Sys_DosProtectClose (Handle, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectRead (Handle: THandle; var Buffer; Count: cardinal;
 | 
						|
  var ActCount: cardinal; FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectRead := Sys_DosProtectRead (Handle, Buffer, Count, ActCount,
 | 
						|
                                                             FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectWrite (Handle: THandle; const Buffer; Count: cardinal;
 | 
						|
                          var ActCount: cardinal;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectWrite := Sys_DosProtectWrite (Handle, Buffer, Count, ActCount,
 | 
						|
                                                             FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectSetFilePtr (Handle: THandle; Pos: longint;
 | 
						|
                               Method: cardinal; var PosActual: cardinal;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectSetFilePtr := Sys_DosProtectSetFilePtr (Handle, Pos, Method,
 | 
						|
                                                  PosActual, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectSetFileSize (Handle: THandle; Size: cardinal;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectSetFileSize := Sys_DosProtectSetFileSize (Handle, Size,
 | 
						|
                                                             FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectQueryFHState (Handle: THandle; var FileMode: cardinal;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectQueryFHState := Sys_DosProtectQueryFHState (Handle, FileMode,
 | 
						|
                                                             FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectSetFHState (Handle: THandle; FileMode: cardinal;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectSetFHState := Sys_DosProtectSetFHState (Handle, FileMode,
 | 
						|
                                                             FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectQueryFileInfo (Handle: THandle; InfoLevel: cardinal;
 | 
						|
                            AFileStatus: PFileStatus; FileStatusLen: cardinal;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectQueryFileInfo := Sys_DosProtectQueryFileInfo (Handle, InfoLevel,
 | 
						|
                                 AFileStatus, FileStatusLen, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectSetFileInfo (Handle: THandle; InfoLevel: cardinal;
 | 
						|
                            AFileStatus: PFileStatus; FileStatusLen: cardinal;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectSetFileInfo := Sys_DosProtectSetFileInfo (Handle, InfoLevel,
 | 
						|
                                 AFileStatus, FileStatusLen, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectEnumAttribute (RefType: cardinal; AFile: pointer;
 | 
						|
                                  Entry: cardinal; var Buf; BufSize: cardinal;
 | 
						|
                                  var Count: cardinal; InfoLevel: cardinal;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectEnumAttribute := Sys_DosProtectEnumAttribute (RefType, AFile,
 | 
						|
                      Entry, Buf, BufSize, Count, InfoLevel, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectSetFileLocks (Handle: THandle;
 | 
						|
                                 var Unlock, Lock: TFileLock;
 | 
						|
                                 Timeout, Flags: cardinal;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectSetFileLocks := Sys_DosProtectSetFileLocks (Handle, Unlock, Lock,
 | 
						|
                                             Timeout, Flags, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectOpen (FileName: PChar; var Handle: longint;
 | 
						|
                         var Action: longint; InitSize, Attrib,
 | 
						|
                         OpenFlags, OpenMode: longint; ea: PEAOp2;
 | 
						|
                      var FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectOpen := Sys_DosProtectOpen (FileName, THandle (Handle),
 | 
						|
            cardinal (Action), cardinal (InitSize), cardinal (Attrib),
 | 
						|
              cardinal (OpenFlags), cardinal (OpenMode), EA, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectOpen (const FileName: string; var Handle: longint;
 | 
						|
                         var Action: longint; InitSize, Attrib,
 | 
						|
                         OpenFlags, OpenMode: longint; ea: PEAOp2;
 | 
						|
                                     var FileHandleLockID: cardinal): cardinal;
 | 
						|
var
 | 
						|
  T: array [0..255] of char;
 | 
						|
begin
 | 
						|
  StrPCopy (@T, FileName);
 | 
						|
  DosProtectOpen := Sys_DosProtectOpen (@T, THandle (Handle),
 | 
						|
         cardinal (Action), cardinal (InitSize), cardinal (Attrib),
 | 
						|
              cardinal (OpenFlags), cardinal (OpenMode), EA, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectOpen (const FileName: string; var Handle: THandle;
 | 
						|
                         var Action: cardinal; InitSize, Attrib,
 | 
						|
                         OpenFlags, OpenMode: cardinal; ea: PEAOp2;
 | 
						|
                               var FileHandleLockID: cardinal): cardinal;
 | 
						|
var
 | 
						|
  T: array [0..255] of char;
 | 
						|
begin
 | 
						|
  StrPCopy (@T, FileName);
 | 
						|
  DosProtectOpen := Sys_DosProtectOpen (@T, Handle, Action, InitSize, Attrib,
 | 
						|
                                    OpenFlags, OpenMode, EA, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectRead (Handle: longint; var Buffer; Count: longint;
 | 
						|
   var ActCount: longint; FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectRead := Sys_DosProtectRead (THandle (Handle), Buffer,
 | 
						|
                      cardinal (Count), cardinal (ActCount), FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectWrite (Handle: longint; const Buffer; Count: longint;
 | 
						|
                          var ActCount: longint;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectWrite := Sys_DosProtectWrite (THandle (Handle), Buffer,
 | 
						|
                      cardinal (Count), cardinal (ActCount), FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectSetFilePtr (Handle: longint; Pos, Method: longint;
 | 
						|
                               var PosActual: longint;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectSetFilePtr := Sys_DosProtectSetFilePtr (THandle (Handle),
 | 
						|
    cardinal (Pos), cardinal (Method), cardinal (PosActual), FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectSetFilePtr (Handle: THandle; Pos: longint;
 | 
						|
                                         FileHandleLockID: cardinal): cardinal;
 | 
						|
var
 | 
						|
  PosActual: cardinal;
 | 
						|
begin
 | 
						|
  DosProtectSetFilePtr := DosProtectSetFilePtr (Handle, Pos, 0, PosActual,
 | 
						|
                                                             FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectGetFilePtr (Handle: longint;
 | 
						|
                 var PosActual: longint; FileHandleLockID: cardinal): cardinal;
 | 
						|
begin
 | 
						|
  DosProtectGetFilePtr := DosProtectSetFilePtr (THandle (Handle), 0, 1,
 | 
						|
                                       cardinal (PosActual), FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectGetFilePtr (Handle: THandle;
 | 
						|
                var PosActual: cardinal; FileHandleLockID: cardinal): cardinal;
 | 
						|
begin
 | 
						|
  DosProtectGetFilePtr := DosProtectSetFilePtr (Handle, 0, 1, PosActual,
 | 
						|
                                                             FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectEnumAttribute (Handle: THandle; Entry: cardinal; var Buf;
 | 
						|
                                  BufSize: cardinal; var Count: cardinal;
 | 
						|
                                  InfoLevel: cardinal;
 | 
						|
                                         FileHandleLockID: cardinal): cardinal;
 | 
						|
begin
 | 
						|
    DosProtectEnumAttribute := DosProtectEnumAttribute (0, @Handle, Entry, Buf,
 | 
						|
                                  BufSize, Count, InfoLevel, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectEnumAttribute (const FileName: string; Entry: cardinal;
 | 
						|
                                  var Buf; BufSize: cardinal;
 | 
						|
                                  var Count: cardinal; InfoLevel: cardinal;
 | 
						|
                                         FileHandleLockID: cardinal): cardinal;
 | 
						|
var
 | 
						|
  T: array [0..255] of char;
 | 
						|
begin
 | 
						|
  StrPCopy (@T, FileName);
 | 
						|
  DosProtectEnumAttribute := DosProtectEnumAttribute (1, @T, Entry, Buf,
 | 
						|
                                  BufSize, Count, InfoLevel, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosCancelLockRequestL (Handle: THandle;
 | 
						|
                                var Lock: TFileLockL): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosCancelLockRequestL := Sys_DosCancelLockRequestL (Handle, Lock);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectSetFileLocksL (Handle: THandle; var Unlock: TFileLockL;
 | 
						|
                   var Lock: TFileLockL; Timeout: cardinal; Flags: cardinal;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectSetFileLocksL := Sys_DosProtectSetFileLocksL (Handle, Unlock, Lock,
 | 
						|
                                             Timeout, Flags, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosSetFileLocksL (Handle: THandle; var Unlock: TFileLockL;
 | 
						|
    var Lock: TFileLockL; Timeout: cardinal; Flags: cardinal): cardinal; cdecl;
 | 
						|
                                                                        inline;
 | 
						|
begin
 | 
						|
  DosSetFileLocksL := Sys_DosSetFileLocksL (Handle, Unlock, Lock, Timeout,
 | 
						|
                                                                        Flags);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectOpenL (FileName: PChar; var Handle: THandle;
 | 
						|
                         var Action: cardinal; InitSize: int64; Attrib,
 | 
						|
                         OpenFlags, OpenMode: cardinal; EA: PEAOp2;
 | 
						|
                      var FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectOpenL := Sys_DosProtectOpenL (FileName, Handle, Action, InitSize,
 | 
						|
                            Attrib, OpenFlags, OpenMode, EA, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectSetFilePtrL (Handle: THandle; Pos: int64;
 | 
						|
                              Method: cardinal; var PosActual: int64; 
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectSetFilePtrL := Sys_DosProtectSetFilePtrL (Handle, Pos, Method,
 | 
						|
                                                  PosActual, FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosProtectSetFileSizeL (Handle: THandle; Size: int64;
 | 
						|
                          FileHandleLockID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosProtectSetFileSizeL := Sys_DosProtectSetFileSizeL (Handle, Size,
 | 
						|
                                                             FileHandleLockID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosGetProcessorStatus (ProcID: cardinal;
 | 
						|
                                var Status: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosGetProcessorStatus := Sys_DosGetProcessorStatus (ProcID, Status);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosSetProcessorStatus (ProcID: cardinal;
 | 
						|
                                    Status: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosSetProcessorStatus := Sys_DosSetProcessorStatus (ProcID, Status);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosQueryThreadAffinity (Scope: cardinal;
 | 
						|
                       var AffinityMask: TMPAffinity): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosQueryThreadAffinity := Sys_DosQueryThreadAffinity (Scope, AffinityMask);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosSetThreadAffinity (var AffinityMask: TMPAffinity): cardinal; cdecl;
 | 
						|
                                                                        inline;
 | 
						|
begin
 | 
						|
  DosSetThreadAffinity := Sys_DosSetThreadAffinity (AffinityMask);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosQueryExtLibPath (ExtLibPath: PChar; Flags: cardinal): cardinal;
 | 
						|
                                                                 cdecl; inline;
 | 
						|
begin
 | 
						|
  DosQueryExtLibPath := Sys_DosQueryExtLibPath (ExtLibPath, Flags);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosSetExtLibPath (ExtLibPath: PChar; Flags: cardinal): cardinal;
 | 
						|
                                                                 cdecl; inline;
 | 
						|
begin
 | 
						|
  DosSetExtLibPath := Sys_DosSetExtLibPath (ExtLibPath, Flags);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosQueryModFromEIP (var HMod: THandle; var ObjNum: cardinal;
 | 
						|
                         BuffLen: cardinal; Buff: PChar; var Offset: cardinal;
 | 
						|
                                    Address: PtrUInt): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosQueryModFromEIP := Sys_DosQueryModFromEIP (HMod, ObjNum, BuffLen, Buff,
 | 
						|
                                                              Offset, Address);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosDumpProcess (Flag: cardinal; Drive: char;
 | 
						|
                                       PID: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosDumpProcess := Sys_DosDumpProcess (Flag, cardinal (Drive), PID);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosSuppressPopups (Flag: cardinal;
 | 
						|
                                         Drive: char): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosSuppressPopups := Sys_DosSuppressPopups (Flag, Drive);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosPerfSysCall (Command, Parm1, Parm2,
 | 
						|
                                     Parm3: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosPerfSysCall := Sys_DosPerfSysCall (Command, Parm1, Parm2, Parm3);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosPerfSysCall (Command, Parm1, Parm2: cardinal;
 | 
						|
                                                var HookData): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DosPerfSysCall := Sys_DosPerfSysCall (Command, Parm1, Parm2,
 | 
						|
                                                           PtrUInt (HookData));
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosPerfSysCall (Command: cardinal; var CpuUtil: TCPUUtil; Parm2,
 | 
						|
                                             Parm3: cardinal): cardinal; cdecl;
 | 
						|
begin
 | 
						|
  DosPerfSysCall := Sys_DosPerfSysCall (Command, PtrUInt (@CPUUtil), Parm2,
 | 
						|
                                                                        Parm3);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosQueryThreadContext (TID: cardinal; Level: cardinal;
 | 
						|
                         var Context: TContextRecord): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosQueryThreadContext := Sys_DosQueryThreadContext (TID, Level, Context);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function DosQueryABIOSSupport (Reserved: cardinal): cardinal; cdecl; inline;
 | 
						|
begin
 | 
						|
  DosQueryABIOSSupport := Sys_DosQueryABIOSSupport (Reserved);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
var
 | 
						|
  P: pointer;
 | 
						|
 | 
						|
begin
 | 
						|
  if FSApi64 then
 | 
						|
  (* DosCallsHandle successfully initialized during initialization of unit *)
 | 
						|
  (* System and basic 64-bit functions were loaded successfully.           *)
 | 
						|
   begin
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32CancelLockRequestL, nil, P)
 | 
						|
                                                                       = 0 then
 | 
						|
     Sys_DosCancelLockRequestL := TDosCancelLockRequestL (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectSetFileLocksL, nil, P)
 | 
						|
                                                                       = 0 then
 | 
						|
     Sys_DosProtectSetFileLocksL := TDosProtectSetFileLocksL (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32SetFileLocksL, nil, P)
 | 
						|
                                                                       = 0 then
 | 
						|
     Sys_DosSetFileLocksL := TDosSetFileLocksL (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectOpenL, nil, P) = 0
 | 
						|
                                                                           then
 | 
						|
     Sys_DosProtectOpenL := TDosProtectOpenL (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectSetFilePtrL, nil, P)
 | 
						|
                                                                       = 0 then
 | 
						|
     Sys_DosProtectSetFilePtrL := TDosProtectSetFilePtrL (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectSetFileSizeL, nil, P)
 | 
						|
                                                                       = 0 then
 | 
						|
     Sys_DosProtectSetFileSizeL := TDosProtectSetFileSizeL (P);
 | 
						|
   end;
 | 
						|
 | 
						|
  if DosCallsHandle = THandle (-1) then
 | 
						|
   Exit;
 | 
						|
 | 
						|
  if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectOpen, nil, P) = 0 then
 | 
						|
   begin
 | 
						|
    Sys_DosProtectOpen := TDosProtectOpen (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectClose, nil, P) = 0
 | 
						|
                                                                           then
 | 
						|
     Sys_DosProtectClose := TDosProtectClose (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectRead, nil, P) = 0 then
 | 
						|
     Sys_DosProtectRead := TDosProtectRead (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectWrite, nil, P) = 0
 | 
						|
                                                                           then
 | 
						|
     Sys_DosProtectWrite := TDosProtectWrite (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectSetFilePtr, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
     Sys_DosProtectSetFilePtr := TDosProtectSetFilePtr (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectSetFileSize, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
     Sys_DosProtectSetFileSize := TDosProtectSetFileSize (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectQueryFHState, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
     Sys_DosProtectQueryFHState := TDosProtectQueryFHState (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectSetFHState, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
     Sys_DosProtectSetFHState := TDosProtectSetFHState (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectQueryFileInfo, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
     Sys_DosProtectQueryFileInfo := TDosProtectQueryFileInfo (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectSetFileInfo, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
     Sys_DosProtectSetFileInfo := TDosProtectSetFileInfo (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectEnumAttribute, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
     Sys_DosProtectEnumAttribute := TDosProtectEnumAttribute (P);
 | 
						|
    if DosQueryProcAddr (DosCallsHandle, Ord_Dos32ProtectSetFileLocks, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
     Sys_DosProtectSetFileLocks := TDosProtectSetFileLocks (P);
 | 
						|
   end;
 | 
						|
 | 
						|
   if DosQueryProcAddr (DosCallsHandle, Ord_Dos32GetProcessorStatus, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
    Sys_DosGetProcessorStatus := TDosGetProcessorStatus (P);
 | 
						|
   if DosQueryProcAddr (DosCallsHandle, Ord_Dos32SetProcessorStatus, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
    Sys_DosSetProcessorStatus := TDosSetProcessorStatus (P);
 | 
						|
   if DosQueryProcAddr (DosCallsHandle, Ord_Dos32QueryThreadAffinity, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
    Sys_DosQueryThreadAffinity := TDosQueryThreadAffinity (P);
 | 
						|
   if DosQueryProcAddr (DosCallsHandle, Ord_Dos32SetThreadAffinity, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
    Sys_DosSetThreadAffinity := TDosSetThreadAffinity (P);
 | 
						|
   if DosQueryProcAddr (DosCallsHandle, Ord_Dos32QueryExtLibPath, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
    Sys_DosQueryExtLibPath := TDosQueryExtLibPath (P);
 | 
						|
   if DosQueryProcAddr (DosCallsHandle, Ord_Dos32SetExtLibPath, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
    Sys_DosSetExtLibPath := TDosSetExtLibPath (P);
 | 
						|
   if DosQueryProcAddr (DosCallsHandle, Ord_Dos32QueryModFromEIP, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
    Sys_DosQueryModFromEIP := TDosQueryModFromEIP (P);
 | 
						|
   if DosQueryProcAddr (DosCallsHandle, Ord_Dos32DumpProcess, nil, P) = 0 then
 | 
						|
    Sys_DosDumpProcess := TDosDumpProcess (P);
 | 
						|
   if DosQueryProcAddr (DosCallsHandle, Ord_Dos32SuppressPopups, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
    Sys_DosSuppressPopups := TDosSuppressPopups (P);
 | 
						|
   if DosQueryProcAddr (DosCallsHandle, Ord_Dos32PerfSysCall, nil, P) = 0 then
 | 
						|
    Sys_DosPerfSysCall := TDosPerfSysCall (P);
 | 
						|
   if DosQueryProcAddr (DosCallsHandle, Ord_Dos32QueryThreadContext, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
    Sys_DosQueryThreadContext := TDosQueryThreadContext (P);
 | 
						|
   if DosQueryProcAddr (DosCallsHandle, Ord_Dos32QueryABIOSSupport, nil,
 | 
						|
                                                                    P) = 0 then
 | 
						|
    Sys_DosQueryABIOSSupport := TDosQueryABIOSSupport (P);
 | 
						|
end.
 | 
						|
 | 
						|
(*
 | 
						|
Todo:
 | 
						|
DosCreateSpinLock     = DOSCALLS.449 - might be simulated using semaphores on non-SMP
 | 
						|
DosAcquireSpinLock    = DOSCALLS.450 - might be simulated using semaphores on non-SMP
 | 
						|
DosReleaseSpinLock    = DOSCALLS.451 - might be simulated using semaphores on non-SMP
 | 
						|
DosFreeSpinLock       = DOSCALLS.452 - might be simulated using semaphores on non-SMP
 | 
						|
 | 
						|
type
 | 
						|
  TSpinLock = cardinal;
 | 
						|
  HSpinLock = TSpinLock;
 | 
						|
  PSpinLock = ^TSpinLock;
 | 
						|
  PHSpinLock = PSpinLock;
 | 
						|
 | 
						|
function DosCreateSpinLock (var SpinLock: TSpinLock): cardinal; cdecl;
 | 
						|
procedure DosAcquireSpinLock (SpinLock: TSpinLock); cdecl;
 | 
						|
procedure DosReleaseSpinLock (SpinLock: TSpinLock); cdecl;
 | 
						|
function DosFreeSpinLock (SpinLock: TSpinLock): cardinal; cdecl;
 | 
						|
 | 
						|
 DosQueryModFromEIP - may be simulated by returning empty value if not available or possibly by using data returned by DosQuerySysState (if they are equal across different OS/2 versions?)
 | 
						|
 | 
						|
___ function Dos16QueryModFromCS (...): ...
 | 
						|
external 'DOSCALLS' index 359;
 | 
						|
 | 
						|
 | 
						|
 DosVerifyPidTid - may be implemented by analyzing information returned by DosQuerySysState
 | 
						|
 | 
						|
x DosQueryExtLibPath - may be simulated by providing empty result if not available
 | 
						|
x DosSetExtLibPath - may be simulated by returning ERROR_NOT_ENOUGH_MEMORY if not available
 | 
						|
 | 
						|
  Dos32AcquireSpinLock              | DOSCALLS | SMP   | SMP
 | 
						|
  Dos32FreeSpinLock                 | DOSCALLS | SMP   | SMP
 | 
						|
x  Dos32GetProcessorStatus           | DOSCALLS | SMP   | SMP
 | 
						|
  Dos32ReleaseSpinLock              | DOSCALLS | SMP   | SMP
 | 
						|
x  Dos32SetProcessorStatus           | DOSCALLS | SMP   | SMP
 | 
						|
  Dos32TestPSD                      | DOSCALLS | SMP   | SMP
 | 
						|
 | 
						|
x  Dos32QueryThreadAffinity          | DOSCALLS | PROC  | 2.45
 | 
						|
(x)  Dos32QueryThreadContext           | DOSCALLS | XCPT  | 2.40
 | 
						|
x  Dos32SetThreadAffinity            | DOSCALLS | PROC  | 2.45
 | 
						|
 | 
						|
  Dos32AllocThreadLocalMemory       | DOSCALLS | PROC  | 2.30
 | 
						|
  Dos32FreeThreadLocalMemory        | DOSCALLS | PROC  | 2.30
 | 
						|
  Dos32ListIO                       | DOSCALLS | FILE  | 2.45
 | 
						|
x  Dos32ProtectClose                 | DOSCALLS | FILE  | 2.10
 | 
						|
x  Dos32ProtectEnumAttribute         | DOSCALLS | FILE  | 2.10
 | 
						|
x  Dos32ProtectOpen                  | DOSCALLS | FILE  | 2.10
 | 
						|
x  Dos32ProtectQueryFHState          | DOSCALLS | FILE  | 2.10
 | 
						|
x  Dos32ProtectQueryFileInfo         | DOSCALLS | FILE  | 2.10
 | 
						|
x  Dos32ProtectRead                  | DOSCALLS | FILE  | 2.10
 | 
						|
x  Dos32ProtectSetFHState            | DOSCALLS | FILE  | 2.10
 | 
						|
x  Dos32ProtectSetFileInfo           | DOSCALLS | FILE  | 2.10
 | 
						|
x  Dos32ProtectSetFileLocks          | DOSCALLS | FILE  | 2.10
 | 
						|
x  Dos32ProtectSetFilePtr            | DOSCALLS | FILE  | 2.10
 | 
						|
x  Dos32ProtectSetFileSize           | DOSCALLS | FILE  | 2.10
 | 
						|
x  Dos32ProtectWrite                 | DOSCALLS | FILE  | 2.10
 | 
						|
  Dos32QueryABIOSSupport            | DOSCALLS | MOD   | 2.10
 | 
						|
(x)  Dos32QueryModFromEIP              | DOSCALLS | MOD   | 2.10
 | 
						|
(x)  Dos32SuppressPopUps               | DOSCALLS | MISC  | 2.10
 | 
						|
  Dos32VerifyPidTid                 | DOSCALLS | MISC  | 2.30
 | 
						|
*)
 |