00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
#include "fs_rec.h"
00027 
00028 
00029 
00030 
00031 
00032 #define Dbg                              (FSREC_DEBUG_LEVEL_CDFS)
00033 
00034 
#ifdef ALLOC_PRAGMA
00035 
#pragma alloc_text(PAGE,CdfsRecFsControl)
00036 
#endif // ALLOC_PRAGMA
00037 
00038 
00039 
NTSTATUS
00040 CdfsRecFsControl(
00041     IN 
PDEVICE_OBJECT DeviceObject,
00042     IN 
PIRP Irp
00043     )
00044 
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060 
00061 
00062 
00063 
00064 
00065 
00066 {
00067     
NTSTATUS status;
00068     
PIO_STACK_LOCATION irpSp;
00069     
PDEVICE_EXTENSION deviceExtension;
00070 
00071     
PAGED_CODE();
00072 
00073     
00074     
00075     
00076 
00077     deviceExtension = (
PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
00078     irpSp = 
IoGetCurrentIrpStackLocation( 
Irp );
00079 
00080     
switch ( irpSp->
MinorFunction ) {
00081 
00082     
case IRP_MN_MOUNT_VOLUME:
00083 
00084         
00085         
00086         
00087         
00088         status = STATUS_FS_DRIVER_REQUIRED;
00089         
break;
00090 
00091     
case IRP_MN_LOAD_FILE_SYSTEM:
00092 
00093         status = 
FsRecLoadFileSystem( DeviceObject,
00094                                       
L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\Cdfs" );
00095         
break;
00096 
00097     
default:
00098         
00099         status = STATUS_INVALID_DEVICE_REQUEST;
00100         
break;
00101     }
00102 
00103     
00104     
00105     
00106     
00107 
00108     
Irp->
IoStatus.Status = status;
00109     
IoCompleteRequest( 
Irp, 
IO_NO_INCREMENT );
00110 
00111     
return status;
00112 }