cdromioctl.pp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. {$IFNDEF FPC_DOTTEDUNITS}
  2. unit cdromioctl;
  3. {$ENDIF FPC_DOTTEDUNITS}
  4. {$mode objfpc}
  5. interface
  6. {$IFDEF FPC_DOTTEDUNITS}
  7. uses WinApi.Windows;
  8. {$ELSE FPC_DOTTEDUNITS}
  9. uses windows;
  10. {$ENDIF FPC_DOTTEDUNITS}
  11. {
  12. Automatically converted by H2Pas 0.99.15 from cdromioctl.h
  13. The following command line parameters were used:
  14. cdromioctl.h
  15. }
  16. {$PACKRECORDS C}
  17. {
  18. distilled information from various header files from Microsoft's
  19. DDK for Windows NT 4.0
  20. }
  21. type
  22. SCSI_PASS_THROUGH = record
  23. Length : USHORT;
  24. ScsiStatus : UCHAR;
  25. PathId : UCHAR;
  26. TargetId : UCHAR;
  27. Lun : UCHAR;
  28. CdbLength : UCHAR;
  29. SenseInfoLength : UCHAR;
  30. DataIn : UCHAR;
  31. DataTransferLength : ULONG;
  32. TimeOutValue : ULONG;
  33. DataBufferOffset : ULONG;
  34. SenseInfoOffset : ULONG;
  35. Cdb : array[0..15] of UCHAR;
  36. end;
  37. PSCSI_PASS_THROUGH = ^SCSI_PASS_THROUGH;
  38. SCSI_PASS_THROUGH_DIRECT = record
  39. Length : USHORT;
  40. ScsiStatus : UCHAR;
  41. PathId : UCHAR;
  42. TargetId : UCHAR;
  43. Lun : UCHAR;
  44. CdbLength : UCHAR;
  45. SenseInfoLength : UCHAR;
  46. DataIn : UCHAR;
  47. DataTransferLength : ULONG;
  48. TimeOutValue : ULONG;
  49. DataBuffer : PVOID;
  50. SenseInfoOffset : ULONG;
  51. Cdb : array[0..15] of UCHAR;
  52. end;
  53. PSCSI_PASS_THROUGH_DIRECT = ^SCSI_PASS_THROUGH_DIRECT;
  54. SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER = record
  55. spt : SCSI_PASS_THROUGH_DIRECT;
  56. Filler : ULONG;
  57. ucSenseBuf : array[0..31] of UCHAR;
  58. end;
  59. PSCSI_PASS_THROUGH_DIRECT_WITH_BUFFER = ^SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER;
  60. {
  61. method codes
  62. }
  63. const
  64. METHOD_BUFFERED = 0;
  65. METHOD_IN_DIRECT = 1;
  66. METHOD_OUT_DIRECT = 2;
  67. METHOD_NEITHER = 3;
  68. {
  69. file access values
  70. }
  71. FILE_ANY_ACCESS = 0;
  72. FILE_READ_ACCESS = $0001;
  73. FILE_WRITE_ACCESS = $0002;
  74. IOCTL_CDROM_BASE = $00000002;
  75. IOCTL_SCSI_BASE = $00000004;
  76. {
  77. constants for DataIn member of SCSI_PASS_THROUGH structures
  78. }
  79. SCSI_IOCTL_DATA_OUT = 0;
  80. SCSI_IOCTL_DATA_IN = 1;
  81. SCSI_IOCTL_DATA_UNSPECIFIED = 2;
  82. {
  83. Standard IOCTL define
  84. }
  85. Function CTL_CODE( ADevType, AFunction, AMethod, AAccess : Longint) : Longint;
  86. function IOCTL_CDROM_READ_TOC : Longint;
  87. function IOCTL_CDROM_GET_LAST_SESSION : longint;
  88. function IOCTL_SCSI_PASS_THROUGH : longint;
  89. function IOCTL_SCSI_MINIPORT : longint;
  90. function IOCTL_SCSI_GET_INQUIRY_DATA : longint;
  91. function IOCTL_SCSI_GET_CAPABILITIES : longint;
  92. function IOCTL_SCSI_PASS_THROUGH_DIRECT : longint;
  93. function IOCTL_SCSI_GET_ADDRESS : longint;
  94. implementation
  95. { was #define dname def_expr }
  96. function IOCTL_CDROM_GET_LAST_SESSION : longint;
  97. { return type might be wrong }
  98. begin
  99. IOCTL_CDROM_GET_LAST_SESSION:=CTL_CODE(IOCTL_CDROM_BASE,$000E,METHOD_BUFFERED,FILE_READ_ACCESS);
  100. end;
  101. { was #define dname def_expr }
  102. function IOCTL_SCSI_PASS_THROUGH : longint;
  103. { return type might be wrong }
  104. begin
  105. IOCTL_SCSI_PASS_THROUGH:=CTL_CODE(IOCTL_SCSI_BASE,$0401,METHOD_BUFFERED,FILE_READ_ACCESS or FILE_WRITE_ACCESS);
  106. end;
  107. { was #define dname def_expr }
  108. function IOCTL_SCSI_MINIPORT : longint;
  109. { return type might be wrong }
  110. begin
  111. IOCTL_SCSI_MINIPORT:=CTL_CODE(IOCTL_SCSI_BASE,$0402,METHOD_BUFFERED,FILE_READ_ACCESS or FILE_WRITE_ACCESS);
  112. end;
  113. { was #define dname def_expr }
  114. function IOCTL_SCSI_GET_INQUIRY_DATA : longint;
  115. { return type might be wrong }
  116. begin
  117. IOCTL_SCSI_GET_INQUIRY_DATA:=CTL_CODE(IOCTL_SCSI_BASE,$0403,METHOD_BUFFERED,FILE_ANY_ACCESS);
  118. end;
  119. { was #define dname def_expr }
  120. function IOCTL_SCSI_GET_CAPABILITIES : longint;
  121. { return type might be wrong }
  122. begin
  123. IOCTL_SCSI_GET_CAPABILITIES:=CTL_CODE(IOCTL_SCSI_BASE,$0404,METHOD_BUFFERED,FILE_ANY_ACCESS);
  124. end;
  125. { was #define dname def_expr }
  126. function IOCTL_SCSI_PASS_THROUGH_DIRECT : longint;
  127. { return type might be wrong }
  128. begin
  129. IOCTL_SCSI_PASS_THROUGH_DIRECT:=CTL_CODE(IOCTL_SCSI_BASE,$0405,METHOD_BUFFERED,FILE_READ_ACCESS or FILE_WRITE_ACCESS);
  130. end;
  131. { was #define dname def_expr }
  132. function IOCTL_SCSI_GET_ADDRESS : longint;
  133. { return type might be wrong }
  134. begin
  135. IOCTL_SCSI_GET_ADDRESS:=CTL_CODE(IOCTL_SCSI_BASE,$0406,METHOD_BUFFERED,FILE_ANY_ACCESS);
  136. end;
  137. Function CTL_CODE( ADevType, AFunction, AMethod, AAccess : Longint) : Longint;
  138. begin
  139. Result:= (ADevType shl 16 )
  140. Or (AAccess shl 14)
  141. Or (AFunction SHL 2)
  142. Or AMethod;
  143. end;
  144. function IOCTL_CDROM_READ_TOC : Longint;
  145. begin
  146. Result:=CTL_CODE(IOCTL_CDROM_BASE, 0, METHOD_BUFFERED, FILE_READ_ACCESS )
  147. end;
  148. end.