ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

devctrl.c
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:        See COPYING in the top level directory
00003  * PROJECT:          ReactOS kernel
00004  * FILE:             drivers/filesystems/cdfs/devctrl.c
00005  * PURPOSE:          CDROM (ISO 9660) filesystem driver
00006  * PROGRAMMER:       Pierre Schweitzer
00007  *
00008  */
00009 
00010 /* INCLUDES *****************************************************************/
00011 
00012 #include "cdfs.h"
00013 
00014 #define NDEBUG
00015 #include <debug.h>
00016 
00017 /* FUNCTIONS ****************************************************************/
00018 
00019 NTSTATUS NTAPI
00020 CdfsDeviceControl(PDEVICE_OBJECT DeviceObject,
00021                   PIRP Irp)
00022 {
00023     NTSTATUS Status;
00024     PVCB Vcb = NULL;
00025     PFILE_OBJECT FileObject;
00026     PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp);
00027 
00028     FileObject = Stack->FileObject;
00029     Irp->IoStatus.Information = 0;
00030 
00031     /* FIXME: HACK, it means that CD has changed */
00032     if (!FileObject)
00033     {
00034         DPRINT1("FIXME: CdfsDeviceControl called without FileObject!\n");
00035         Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
00036         IoCompleteRequest(Irp, IO_NO_INCREMENT);
00037         return STATUS_INVALID_DEVICE_REQUEST;
00038     }
00039 
00040     /* Only support such operations on volume */
00041     if (!(FileObject->RelatedFileObject == NULL || FileObject->RelatedFileObject->FsContext2 != NULL))
00042     {
00043         Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
00044         IoCompleteRequest(Irp, IO_NO_INCREMENT);
00045         return STATUS_INVALID_PARAMETER;
00046     }
00047 
00048     if (Stack->Parameters.DeviceIoControl.IoControlCode == IOCTL_CDROM_DISK_TYPE)
00049     {
00050         /* We should handle this one, but we don't! */
00051         Status = STATUS_NOT_IMPLEMENTED;
00052         Irp->IoStatus.Status = Status;
00053         IoCompleteRequest(Irp, IO_NO_INCREMENT);
00054     }
00055     else
00056     {
00057         /* Pass it to storage driver */
00058         IoSkipCurrentIrpStackLocation(Irp);
00059         Vcb = (PVCB)Stack->DeviceObject->DeviceExtension;
00060         Status = IoCallDriver(Vcb->StorageDevice, Irp);
00061     }
00062 
00063     return Status;
00064 }

Generated on Sat May 26 2012 04:26:04 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.