Fix merge r65567.
[reactos.git] / drivers / filesystems / cdfs / devctrl.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: drivers/filesystems/cdfs/devctrl.c
5 * PURPOSE: CDROM (ISO 9660) filesystem driver
6 * PROGRAMMER: Pierre Schweitzer
7 *
8 */
9
10 /* INCLUDES *****************************************************************/
11
12 #include "cdfs.h"
13
14 #define NDEBUG
15 #include <debug.h>
16
17 /* FUNCTIONS ****************************************************************/
18
19 NTSTATUS NTAPI
20 CdfsDeviceControl(PDEVICE_OBJECT DeviceObject,
21 PIRP Irp)
22 {
23 NTSTATUS Status;
24 PVCB Vcb = NULL;
25 PFILE_OBJECT FileObject;
26 PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp);
27
28 UNREFERENCED_PARAMETER(DeviceObject);
29
30 FileObject = Stack->FileObject;
31 Irp->IoStatus.Information = 0;
32
33 /* FIXME: HACK, it means that CD has changed */
34 if (!FileObject)
35 {
36 DPRINT1("FIXME: CdfsDeviceControl called without FileObject!\n");
37 Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
38 IoCompleteRequest(Irp, IO_NO_INCREMENT);
39 return STATUS_INVALID_DEVICE_REQUEST;
40 }
41
42 /* Only support such operations on volume */
43 if (!(FileObject->RelatedFileObject == NULL || FileObject->RelatedFileObject->FsContext2 != NULL))
44 {
45 Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
46 IoCompleteRequest(Irp, IO_NO_INCREMENT);
47 return STATUS_INVALID_PARAMETER;
48 }
49
50 if (Stack->Parameters.DeviceIoControl.IoControlCode == IOCTL_CDROM_DISK_TYPE)
51 {
52 /* We should handle this one, but we don't! */
53 Status = STATUS_NOT_IMPLEMENTED;
54 Irp->IoStatus.Status = Status;
55 IoCompleteRequest(Irp, IO_NO_INCREMENT);
56 }
57 else
58 {
59 /* Pass it to storage driver */
60 IoSkipCurrentIrpStackLocation(Irp);
61 Vcb = (PVCB)Stack->DeviceObject->DeviceExtension;
62 Status = IoCallDriver(Vcb->StorageDevice, Irp);
63 }
64
65 return Status;
66 }