/*++ Copyright (c) 1992 Microsoft Corporation Module Name: fs_rec.h Abstract: This module contains the main header file for the mini-file system recognizer driver. Author: Darryl E. Havens (darrylh) 22-nov-1993 Environment: Kernel mode, local to I/O system Revision History: --*/ #include "ntifs.h" #include "ntdddisk.h" #include "ntddcdrm.h" // // Define the debug trace levels. // #define FSREC_DEBUG_LEVEL_FSREC 0x00000001 #define FSREC_DEBUG_LEVEL_NTFS 0x00000002 #define FSREC_DEBUG_LEVEL_CDFS 0x00000004 #define FSREC_DEBUG_LEVEL_UDFS 0x00000008 #define FSREC_DEBUG_LEVEL_FAT 0x00000010 #define FSREC_POOL_TAG 'crsF' //#ifndef SetFlag //#define SetFlag(Flags,SingleFlag) ( \ // (Flags) |= (SingleFlag) \ //) //#endif //#ifndef ClearFlag //#define ClearFlag(Flags,SingleFlag) ( \ // (Flags) &= ~(SingleFlag) \ //) //#endif // // Define the file system types for the device extension. // typedef enum _FILE_SYSTEM_TYPE { CdfsFileSystem = 1, FatFileSystem, HpfsFileSystem, NtfsFileSystem, UdfsFileSystem } FILE_SYSTEM_TYPE, *PFILE_SYSTEM_TYPE; // // Define the device extension for this driver. // typedef enum _RECOGNIZER_STATE { Active, Transparent, FastUnload } RECOGNIZER_STATE, *PRECOGNIZER_STATE; typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT CoRecognizer; FILE_SYSTEM_TYPE FileSystemType; RECOGNIZER_STATE State; } DEVICE_EXTENSION, *PDEVICE_EXTENSION; // // Define the functions provided by this driver. // NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ); NTSTATUS FsRecCleanupClose( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS FsRecShutdown( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS FsRecCreate( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS FsRecCreateAndRegisterDO( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT HeadRecognizer OPTIONAL, OUT PDEVICE_OBJECT *NewRecognizer OPTIONAL, IN PWCHAR RecFileSystem, IN PWCHAR FileSystemName, IN FILE_SYSTEM_TYPE FileSystemType, IN DEVICE_TYPE DeviceType ); NTSTATUS FsRecFsControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID FsRecUnload( IN PDRIVER_OBJECT DriverObject ); NTSTATUS FsRecLoadFileSystem ( IN PDEVICE_OBJECT DeviceObject, IN PWCHAR DriverServiceKey ); BOOLEAN FsRecGetDeviceSectorSize ( IN PDEVICE_OBJECT DeviceObject, OUT PULONG BytesPerSector ); BOOLEAN FsRecGetDeviceSectors ( IN PDEVICE_OBJECT DeviceObject, IN ULONG BytesPerSector, OUT PLARGE_INTEGER NumberOfSectors ); BOOLEAN FsRecReadBlock( IN PDEVICE_OBJECT DeviceObject, IN PLARGE_INTEGER ByteOffset, IN ULONG MinimumBytes, IN ULONG BytesPerSector, OUT PVOID *Buffer, OUT PBOOLEAN IsDeviceFailure OPTIONAL ); #if DBG extern LONG FsRecDebugTraceLevel; extern LONG FsRecDebugTraceIndent; BOOLEAN FsRecDebugTrace ( LONG IndentIncrement, ULONG TraceMask, PCHAR Format, ... ); #define DebugTrace(M) FsRecDebugTrace M #else #define DebugTrace(M) TRUE #endif // // Define the per-type recognizers. // NTSTATUS CdfsRecFsControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS UdfsRecFsControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS FatRecFsControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS NtfsRecFsControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );