3003 PDEVICE_EXTENSION physicalExtension = deviceExtension->PhysicalDevice->DeviceExtension;
3029 "CdRomDeviceControlCompletion: Irp %lx, Srb %lx Real Irp %lx Status %lx\n",
3040 DebugPrint((2,
"CdRomDeviceControlCompletion: Releasing Queue\n"));
3048 irpStack->
Parameters.DeviceIoControl.IoControlCode,
3052 DebugPrint((2,
"CdRomDeviceControlCompletion: IRP will %sbe retried\n",
3053 (retry ?
"" :
"not ")));
3093 if (
Irp->MdlAddress) {
3106 DebugPrint((2,
"CdRomDeviceControlCompletion: [%lx] CdRomUpdateCapacity completed with status %lx\n", realIrp,
status));
3128 DebugPrint((1,
"Retry request %lx - Calling StartIo\n",
Irp));
3136 if (
Irp->MdlAddress) {
3168 switch (realIrpStack->
Parameters.DeviceIoControl.IoControlCode) {
3198 lastBit = (
ULONG) -1;
3206 deviceExtension->DiskGeometry->Geometry.BytesPerSector = bps;
3209 "CdRomDeviceControlCompletion: Calculated bps %#x\n",
3210 deviceExtension->DiskGeometry->Geometry.BytesPerSector));
3226 WHICH_BIT(bps, deviceExtension->SectorShift);
3228 DebugPrint((2,
"SCSI ScsiClassReadDriveCapacity: Sector size is %d\n",
3229 deviceExtension->DiskGeometry->Geometry.BytesPerSector));
3231 DebugPrint((2,
"SCSI ScsiClassReadDriveCapacity: Number of Sectors is %d\n",
3238 deviceExtension->PartitionLength.QuadPart = (
LONGLONG)(lastSector + 1);
3244 deviceExtension->DiskGeometry->Geometry.Cylinders.QuadPart = (
LONGLONG)((lastSector + 1)/(32 * 64));
3246 deviceExtension->PartitionLength.QuadPart =
3247 (deviceExtension->PartitionLength.QuadPart << deviceExtension->SectorShift);
3255 deviceExtension->DiskGeometry->Geometry.MediaType =
RemovableMedia;
3263 deviceExtension->DiskGeometry->Geometry.MediaType =
FixedMedia;
3270 deviceExtension->DiskGeometry->Geometry.SectorsPerTrack = 32;
3276 deviceExtension->DiskGeometry->Geometry.TracksPerCylinder = 64;
3283 &deviceExtension->PartitionLength,
3324 lastBit = (
ULONG) -1;
3332 deviceExtension->DiskGeometry->Geometry.BytesPerSector = bps;
3335 "CdRomDeviceControlCompletion: Calculated bps %#x\n",
3336 deviceExtension->DiskGeometry->Geometry.BytesPerSector));
3352 WHICH_BIT(bps, deviceExtension->SectorShift);
3354 DebugPrint((2,
"SCSI ScsiClassReadDriveCapacity: Sector size is %d\n",
3355 deviceExtension->DiskGeometry->Geometry.BytesPerSector));
3357 DebugPrint((2,
"SCSI ScsiClassReadDriveCapacity: Number of Sectors is %d\n",
3364 deviceExtension->PartitionLength.QuadPart = (
LONGLONG)(lastSector + 1);
3370 deviceExtension->DiskGeometry->Geometry.Cylinders.QuadPart = (
LONGLONG)((lastSector + 1)/(32 * 64));
3372 deviceExtension->PartitionLength.QuadPart =
3373 (deviceExtension->PartitionLength.QuadPart << deviceExtension->SectorShift);
3381 deviceExtension->DiskGeometry->Geometry.MediaType =
RemovableMedia;
3389 deviceExtension->DiskGeometry->Geometry.MediaType =
FixedMedia;
3396 deviceExtension->DiskGeometry->Geometry.SectorsPerTrack = 32;
3402 deviceExtension->DiskGeometry->Geometry.TracksPerCylinder = 64;
3408 geometryEx = realIrp->AssociatedIrp.SystemBuffer;
3410 &deviceExtension->DiskGeometry->Geometry,
3417 geometryEx->
DiskSize = deviceExtension->PartitionLength;
3456 lastBit = (
ULONG) -1;
3464 deviceExtension->DiskGeometry->Geometry.BytesPerSector = bps;
3467 "CdRomDeviceControlCompletion: Calculated bps %#x\n",
3468 deviceExtension->DiskGeometry->Geometry.BytesPerSector));
3484 WHICH_BIT(bps, deviceExtension->SectorShift);
3486 DebugPrint((2,
"SCSI ScsiClassReadDriveCapacity: Sector size is %d\n",
3487 deviceExtension->DiskGeometry->Geometry.BytesPerSector));
3489 DebugPrint((2,
"SCSI ScsiClassReadDriveCapacity: Number of Sectors is %d\n",
3496 deviceExtension->PartitionLength.QuadPart = (
LONGLONG)(lastSector + 1);
3502 deviceExtension->DiskGeometry->Geometry.Cylinders.QuadPart = (
LONGLONG)((lastSector + 1)/(32 * 64));
3504 deviceExtension->PartitionLength.QuadPart =
3505 (deviceExtension->PartitionLength.QuadPart << deviceExtension->SectorShift);
3513 deviceExtension->DiskGeometry->Geometry.MediaType =
RemovableMedia;
3521 deviceExtension->DiskGeometry->Geometry.MediaType =
FixedMedia;
3528 deviceExtension->DiskGeometry->Geometry.SectorsPerTrack = 32;
3534 deviceExtension->DiskGeometry->Geometry.TracksPerCylinder = 64;
3541 deviceExtension->DiskGeometry,
3555 (realIrpStack->
Parameters.DeviceIoControl.OutputBufferLength)) {
3557 *((
PULONG)realIrp->AssociatedIrp.SystemBuffer) =
3558 physicalExtension->MediaChangeCount;
3564 DebugPrint((2,
"CdRomDeviceControlCompletion: [%lx] completing CHECK_VERIFY buddy irp %lx\n", realIrp,
Irp));
3603 switch( inputBuffer->
Format ) {
3647 if (realIrpStack->
Parameters.DeviceIoControl.OutputBufferLength <
3651 realIrpStack->
Parameters.DeviceIoControl.OutputBufferLength;
3693 ULONG bytesTransferred;
3703 bytesTransferred = (
PCHAR) audioOutput - (
PCHAR) audioControl +
3706 if (audioOutput !=
NULL &&
3728 ULONG i,bytesTransferred;
3739 bytesTransferred = (
PCHAR) audioOutput - (
PCHAR) volumeControl +
3742 if (audioOutput !=
NULL &&
3745 for (
i=0;
i<4;
i++) {
3792 if (realIrp->PendingReturned) {
3796 if (
Irp->MdlAddress) {
3819 DebugPrint((1,
"CdRomDeviceCompletion - Setting Hard Error on realIrp %lx\n",
#define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
#define IOCTL_CDROM_GET_CONTROL
#define STATUS_DATA_OVERRUN
#define STATUS_MORE_PROCESSING_REQUIRED
#define IOCTL_CDROM_CHECK_VERIFY
#define IoIsErrorUserInduced(Status)
#define IOCTL_CDROM_GET_LAST_SESSION
#define CDROM_AUDIO_CONTROL_PAGE
#define STATUS_INVALID_DEVICE_REQUEST
#define IOCTL_CDROM_CURRENT_POSITION
ULONG LogicalBlockAddress
VOID ScsiClassReleaseQueue(IN PDEVICE_OBJECT DeviceObject)
#define STATUS_VERIFY_REQUIRED
#define SRB_STATUS(Status)
#define RtlMoveMemory(Destination, Source, Length)
VOID NTAPI ScsiCdRomStartIo(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define IOCTL_CDROM_GET_DRIVE_GEOMETRY_EX
#define IOCTL_CDROM_SET_VOLUME
#define STATUS_IO_DEVICE_ERROR
_In_ PDEVICE_OBJECT DeviceObject
struct _AUDIO_OUTPUT AUDIO_OUTPUT
#define IO_DISK_INCREMENT
#define IOCTL_CDROM_MEDIA_CATALOG
PVOID NTAPI ScsiClassFindModePage(IN PCHAR ModeSenseBuffer, IN ULONG Length, IN UCHAR PageMode, IN BOOLEAN Use6Byte)
#define FILE_REMOVABLE_MEDIA
#define IOCTL_CDROM_STOP_AUDIO
struct _GET_LENGTH_INFORMATION GET_LENGTH_INFORMATION
#define IOCTL_CDROM_SEEK_AUDIO_MSF
struct _CDROM_DATA * PCDROM_DATA
#define IOCTL_CDROM_PLAY_AUDIO_MSF
#define IoCompleteRequest
#define SL_OVERRIDE_VERIFY_VOLUME
#define AUDIO_STATUS_IN_PROGRESS
#define IOCTL_DISK_GET_LENGTH_INFO
PORT_OUTPUT PortOutput[4]
#define NT_SUCCESS(StatCode)
#define IOCTL_CDROM_GET_DRIVE_GEOMETRY
#define IOCTL_CDROM_GET_VOLUME
#define IRP_MJ_INTERNAL_DEVICE_CONTROL
VOID NTAPI IoFreeMdl(PMDL Mdl)
#define SRB_STATUS_QUEUE_FROZEN
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
BOOLEAN NTAPI ScsiClassInterpretSenseInfo(IN PDEVICE_OBJECT DeviceObject, IN PSCSI_REQUEST_BLOCK Srb, IN UCHAR MajorFunctionCode, IN ULONG IoDeviceCode, IN ULONG RetryCount, OUT NTSTATUS *Status)
#define IOCTL_CDROM_PAUSE_AUDIO
ULONG NTAPI DebugPrint(IN PSTRING DebugString, IN ULONG ComponentId, IN ULONG Level)
SUB_Q_TRACK_ISRC TrackIsrc
#define IOCTL_CDROM_RESUME_AUDIO
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
struct _DISK_GEOMETRY DISK_GEOMETRY
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
SUB_Q_CURRENT_POSITION CurrentPosition
#define IOCTL_CDROM_TRACK_ISRC
#define FIELD_OFFSET(t, f)
struct _CDROM_AUDIO_CONTROL CDROM_AUDIO_CONTROL
SUB_Q_MEDIA_CATALOG_NUMBER MediaCatalog
UCHAR TrackRelativeAddress[4]
struct tagContext Context
VOID NTAPI IoFreeIrp(IN PIRP Irp)
#define PLAY_ACTIVE(DeviceExtension)
NTSTATUS NTAPI CdRomUpdateCapacity(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP IrpToComplete, IN OPTIONAL PKEVENT IoctlEvent)
#define SRB_STATUS_SUCCESS
VOID NTAPI IoSetHardErrorOrVerifyDevice(IN PIRP Irp, IN PDEVICE_OBJECT DeviceObject)
#define IOCTL_CDROM_READ_TOC
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
#define IOCTL_CDROM_READ_Q_CHANNEL
static SERVICE_STATUS status
#define IOCTL_DISK_GET_DRIVE_GEOMETRY
struct _VOLUME_CONTROL VOLUME_CONTROL
UCHAR LogicalBlocksPerSecond[2]
#define IRP_MJ_DEVICE_CONTROL
USHORT LogicalBlocksPerSecond
VOID NTAPI IoStartNextPacket(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN Cancelable)