mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-01-13 04:24:42 +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.
|