1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
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.
|