cdromioctl.pp 4.7 KB

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