212 lines
3.5 KiB
C
212 lines
3.5 KiB
C
/*++
|
|
|
|
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
|
|
);
|
|
|