mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 01:39:35 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			169 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
unit cdromioctl;
 | 
						|
{$mode objfpc}
 | 
						|
interface
 | 
						|
 | 
						|
uses windows;
 | 
						|
 | 
						|
{
 | 
						|
  Automatically converted by H2Pas 0.99.15 from cdromioctl.h
 | 
						|
  The following command line parameters were used:
 | 
						|
    cdromioctl.h
 | 
						|
}
 | 
						|
 | 
						|
{$PACKRECORDS C}
 | 
						|
 | 
						|
  {
 | 
						|
     distilled information from various header files from Microsoft's
 | 
						|
     DDK for Windows NT 4.0
 | 
						|
  }
 | 
						|
 | 
						|
  type
 | 
						|
 | 
						|
     SCSI_PASS_THROUGH = record
 | 
						|
          Length : USHORT;
 | 
						|
          ScsiStatus : UCHAR;
 | 
						|
          PathId : UCHAR;
 | 
						|
          TargetId : UCHAR;
 | 
						|
          Lun : UCHAR;
 | 
						|
          CdbLength : UCHAR;
 | 
						|
          SenseInfoLength : UCHAR;
 | 
						|
          DataIn : UCHAR;
 | 
						|
          DataTransferLength : ULONG;
 | 
						|
          TimeOutValue : ULONG;
 | 
						|
          DataBufferOffset : ULONG;
 | 
						|
          SenseInfoOffset : ULONG;
 | 
						|
          Cdb : array[0..15] of UCHAR;
 | 
						|
       end;
 | 
						|
     PSCSI_PASS_THROUGH = ^SCSI_PASS_THROUGH;
 | 
						|
 | 
						|
     SCSI_PASS_THROUGH_DIRECT = record
 | 
						|
          Length : USHORT;
 | 
						|
          ScsiStatus : UCHAR;
 | 
						|
          PathId : UCHAR;
 | 
						|
          TargetId : UCHAR;
 | 
						|
          Lun : UCHAR;
 | 
						|
          CdbLength : UCHAR;
 | 
						|
          SenseInfoLength : UCHAR;
 | 
						|
          DataIn : UCHAR;
 | 
						|
          DataTransferLength : ULONG;
 | 
						|
          TimeOutValue : ULONG;
 | 
						|
          DataBuffer : PVOID;
 | 
						|
          SenseInfoOffset : ULONG;
 | 
						|
          Cdb : array[0..15] of UCHAR;
 | 
						|
       end;
 | 
						|
     PSCSI_PASS_THROUGH_DIRECT = ^SCSI_PASS_THROUGH_DIRECT;
 | 
						|
 | 
						|
     SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER = record
 | 
						|
          spt : SCSI_PASS_THROUGH_DIRECT;
 | 
						|
          Filler : ULONG;
 | 
						|
          ucSenseBuf : array[0..31] of UCHAR;
 | 
						|
       end;
 | 
						|
     PSCSI_PASS_THROUGH_DIRECT_WITH_BUFFER = ^SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER;
 | 
						|
  {
 | 
						|
     method codes
 | 
						|
    }
 | 
						|
 | 
						|
  const
 | 
						|
     METHOD_BUFFERED = 0;
 | 
						|
     METHOD_IN_DIRECT = 1;
 | 
						|
     METHOD_OUT_DIRECT = 2;
 | 
						|
     METHOD_NEITHER = 3;
 | 
						|
  {
 | 
						|
     file access values
 | 
						|
    }
 | 
						|
     FILE_ANY_ACCESS = 0;
 | 
						|
     FILE_READ_ACCESS = $0001;
 | 
						|
     FILE_WRITE_ACCESS = $0002;
 | 
						|
     IOCTL_CDROM_BASE = $00000002;
 | 
						|
     IOCTL_SCSI_BASE = $00000004;
 | 
						|
  {
 | 
						|
     constants for DataIn member of SCSI_PASS_THROUGH  structures
 | 
						|
    }
 | 
						|
     SCSI_IOCTL_DATA_OUT = 0;
 | 
						|
     SCSI_IOCTL_DATA_IN = 1;
 | 
						|
     SCSI_IOCTL_DATA_UNSPECIFIED = 2;
 | 
						|
 | 
						|
    {
 | 
						|
     Standard IOCTL define
 | 
						|
    }
 | 
						|
 | 
						|
    Function CTL_CODE( ADevType, AFunction, AMethod, AAccess : Longint) : Longint;
 | 
						|
    function IOCTL_CDROM_READ_TOC : Longint;
 | 
						|
    function IOCTL_CDROM_GET_LAST_SESSION : longint;
 | 
						|
    function IOCTL_SCSI_PASS_THROUGH : longint;
 | 
						|
    function IOCTL_SCSI_MINIPORT : longint;
 | 
						|
    function IOCTL_SCSI_GET_INQUIRY_DATA : longint;
 | 
						|
    function IOCTL_SCSI_GET_CAPABILITIES : longint;
 | 
						|
    function IOCTL_SCSI_PASS_THROUGH_DIRECT : longint;
 | 
						|
    function IOCTL_SCSI_GET_ADDRESS : longint;
 | 
						|
 | 
						|
 | 
						|
implementation
 | 
						|
 | 
						|
    { was #define dname def_expr }
 | 
						|
    function IOCTL_CDROM_GET_LAST_SESSION : longint;
 | 
						|
        { return type might be wrong }
 | 
						|
        begin
 | 
						|
           IOCTL_CDROM_GET_LAST_SESSION:=CTL_CODE(IOCTL_CDROM_BASE,$000E,METHOD_BUFFERED,FILE_READ_ACCESS);
 | 
						|
        end;
 | 
						|
 | 
						|
    { was #define dname def_expr }
 | 
						|
    function IOCTL_SCSI_PASS_THROUGH : longint;
 | 
						|
        { return type might be wrong }
 | 
						|
        begin
 | 
						|
           IOCTL_SCSI_PASS_THROUGH:=CTL_CODE(IOCTL_SCSI_BASE,$0401,METHOD_BUFFERED,FILE_READ_ACCESS or FILE_WRITE_ACCESS);
 | 
						|
        end;
 | 
						|
 | 
						|
    { was #define dname def_expr }
 | 
						|
    function IOCTL_SCSI_MINIPORT : longint;
 | 
						|
        { return type might be wrong }
 | 
						|
        begin
 | 
						|
           IOCTL_SCSI_MINIPORT:=CTL_CODE(IOCTL_SCSI_BASE,$0402,METHOD_BUFFERED,FILE_READ_ACCESS or FILE_WRITE_ACCESS);
 | 
						|
        end;
 | 
						|
 | 
						|
    { was #define dname def_expr }
 | 
						|
    function IOCTL_SCSI_GET_INQUIRY_DATA : longint;
 | 
						|
        { return type might be wrong }
 | 
						|
        begin
 | 
						|
           IOCTL_SCSI_GET_INQUIRY_DATA:=CTL_CODE(IOCTL_SCSI_BASE,$0403,METHOD_BUFFERED,FILE_ANY_ACCESS);
 | 
						|
        end;
 | 
						|
 | 
						|
    { was #define dname def_expr }
 | 
						|
    function IOCTL_SCSI_GET_CAPABILITIES : longint;
 | 
						|
        { return type might be wrong }
 | 
						|
        begin
 | 
						|
           IOCTL_SCSI_GET_CAPABILITIES:=CTL_CODE(IOCTL_SCSI_BASE,$0404,METHOD_BUFFERED,FILE_ANY_ACCESS);
 | 
						|
        end;
 | 
						|
 | 
						|
    { was #define dname def_expr }
 | 
						|
    function IOCTL_SCSI_PASS_THROUGH_DIRECT : longint;
 | 
						|
        { return type might be wrong }
 | 
						|
        begin
 | 
						|
           IOCTL_SCSI_PASS_THROUGH_DIRECT:=CTL_CODE(IOCTL_SCSI_BASE,$0405,METHOD_BUFFERED,FILE_READ_ACCESS or FILE_WRITE_ACCESS);
 | 
						|
        end;
 | 
						|
 | 
						|
    { was #define dname def_expr }
 | 
						|
    function IOCTL_SCSI_GET_ADDRESS : longint;
 | 
						|
        { return type might be wrong }
 | 
						|
        begin
 | 
						|
           IOCTL_SCSI_GET_ADDRESS:=CTL_CODE(IOCTL_SCSI_BASE,$0406,METHOD_BUFFERED,FILE_ANY_ACCESS);
 | 
						|
        end;
 | 
						|
 | 
						|
Function CTL_CODE( ADevType, AFunction, AMethod, AAccess : Longint) : Longint;
 | 
						|
 | 
						|
begin
 | 
						|
    Result:= (ADevType shl 16 )
 | 
						|
             Or (AAccess shl 14)
 | 
						|
             Or (AFunction SHL 2)
 | 
						|
             Or AMethod;
 | 
						|
end;
 | 
						|
 | 
						|
function IOCTL_CDROM_READ_TOC : Longint;
 | 
						|
 | 
						|
begin
 | 
						|
  Result:=CTL_CODE(IOCTL_CDROM_BASE, 0, METHOD_BUFFERED, FILE_READ_ACCESS )
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
end.
 |