- Update to r53061
[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 FileObject = Stack->FileObject;
29 Irp->IoStatus.Information = 0;
30
31 /* FIXME: HACK, it means that CD has changed */
32 if (!FileObject)
33 {
34 DPRINT1("FIXME: CdfsDeviceControl called without FileObject!\n");
35 Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
36 IoCompleteRequest(Irp, IO_NO_INCREMENT);
37 return STATUS_INVALID_DEVICE_REQUEST;
38 }
39
40 /* Only support such operations on volume */
41 if (!(FileObject->RelatedFileObject == NULL || FileObject->RelatedFileObject->FsContext2 != NULL))
42 {
43 Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
44 IoCompleteRequest(Irp, IO_NO_INCREMENT);
45 return STATUS_INVALID_PARAMETER;
46 }
47
48 if (Stack->Parameters.DeviceIoControl.IoControlCode == IOCTL_CDROM_DISK_TYPE)
49 {
50 /* We should handle this one, but we don't! */
51 Status = STATUS_NOT_IMPLEMENTED;
52 Irp->IoStatus.Status = Status;
53 IoCompleteRequest(Irp, IO_NO_INCREMENT);
54 }
55 else
56 {
57 /* Pass it to storage driver */
58 IoSkipCurrentIrpStackLocation(Irp);
59 Vcb = (PVCB)Stack->DeviceObject->DeviceExtension;
60 Status = IoCallDriver(Vcb->StorageDevice, Irp);
61 }
62
63 return Status;
64 }