⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ext2fs.h

📁 ext2 file system driver for win nt
💻 H
📖 第 1 页 / 共 2 页
字号:
typedef struct _EXT2_CCB {
	
	// Identifier for this structure
	EXT2_IDENTIFIER  Identifier;
	
	// State that may need to be maintained
	ULONG           CurrentByteOffset;
	UNICODE_STRING  DirectorySearchPattern;
	
} EXT2_CCB, *PEXT2_CCB;

//
// EXT2_IRP_CONTEXT
//
// Used to pass information about a request between the drivers functions
//
typedef struct _EXT2_IRP_CONTEXT {
	
	// Identifier for this structure
	EXT2_IDENTIFIER     Identifier;
	
	// Pointer to the IRP this request describes
	PIRP                Irp;
	
	// The major and minor function code for the request
	UCHAR               MajorFunction;
	UCHAR               MinorFunction;
	
	// The device object
	PDEVICE_OBJECT      DeviceObject;
	
	// The file object
	PFILE_OBJECT        FileObject;
	
	// If the request is synchronous (we are allowed to block)
	BOOLEAN             IsSynchronous;
	
	// If the request is top level
	BOOLEAN             IsTopLevel;
	
	// Used if the request needs to be queued for later processing
	WORK_QUEUE_ITEM     WorkQueueItem;
	
	// If an exception is currently in progress
	BOOLEAN             ExceptionInProgress;
	
	// The exception code when an exception is in progress
	NTSTATUS            ExceptionCode;
	
} EXT2_IRP_CONTEXT, *PEXT2_IRP_CONTEXT;

//
// EXT2_ALLOC_HEADER
//
// In the checked version of the driver this header is put in the beginning of
// every memory allocation
//
typedef struct _EXT2_ALLOC_HEADER {
	EXT2_IDENTIFIER Identifier;
} EXT2_ALLOC_HEADER, *PEXT2_ALLOC_HEADER;

typedef struct _FCB_LIST_ENTRY {
	PEXT2_FCB    Fcb;
	LIST_ENTRY   Next;
} FCB_LIST_ENTRY, *PFCB_LIST_ENTRY;

#pragma pack()

/* FUNCTIONS DECLARATION *****************************************************/

LARGE_INTEGER
Ext2SysTime (IN ULONG i_time);

ULONG
Ext2InodeTime (IN LARGE_INTEGER SysTime);

NTSTATUS
Ext2ReadSectors(IN PDEVICE_OBJECT pDeviceObject,
		IN ULONG DiskSector,
		IN ULONG SectorCount,
		IN PVOID Buffer);
NTSTATUS
Ext2WriteSectors(IN PDEVICE_OBJECT pDeviceObject,
		 IN ULONG	DiskSector,
		 IN ULONG       SectorCount,
		 IN PVOID	Buffer);
NTSTATUS
Ext2ReadDisk(IN PDEVICE_OBJECT pDeviceObject,
	     IN ULONG lba,
	     IN ULONG offset,
	     IN ULONG Size,
	     IN PVOID Buffer);
NTSTATUS
Ext2WriteDisk(IN PDEVICE_OBJECT pDeviceObject,
	      IN ULONG	lba,
	      IN ULONG  offset,
	      IN ULONG  Size,
	      IN PVOID	Buffer);
NTSTATUS 
Ext2DiskIoControl (IN PDEVICE_OBJECT   pDeviceObject,
		   IN ULONG            IoctlCode,
		   IN PVOID            InputBuffer,
		   IN ULONG            InputBufferSize,
		   IN OUT PVOID        OutputBuffer,
		   IN OUT PULONG       OutputBufferSize);

NTSTATUS
Ext2ReadDiskOverrideVerify (IN PDEVICE_OBJECT pDeviceObject,
			    IN ULONG DiskSector, 
			    IN ULONG SectorCount,
			    IN OUT PUCHAR Buffer);


struct ext2_super_block *
Ext2LoadSuper(IN PDEVICE_OBJECT pDeviceObject);

NTSTATUS
Ext2SaveSuper(IN PDEVICE_OBJECT pDeviceObject,
	      IN struct ext2_super_block * sb);

struct ext2_group_desc *
Ext2LoadGroup(IN PEXT2_VCB vcb);

NTSTATUS
Ext2SaveGroup(IN PEXT2_VCB vcb,
	      IN struct ext2_group_desc * gd);
BOOLEAN
Ext2GetInodeLba (IN PEXT2_VCB vcb,
		 IN ULONG inode,
		 OUT PULONG lba,
		 OUT PULONG offset);
BOOLEAN
Ext2LoadInode (IN PEXT2_VCB vcb,
	       IN ULONG inode,
	       IN struct ext2_inode *ext2_inode);
BOOLEAN
Ext2SaveInode (IN PEXT2_VCB vcb,
	       IN ULONG inode,
	       IN struct ext2_inode *ext2_inode);

ULONG Ext2GetBlock(IN PEXT2_VCB vcb,
		   ULONG dwContent,
		   ULONG Index,
		   int layer);

ULONG Ext2BlockMap(IN PEXT2_VCB vcb,
	       IN struct ext2_inode* ext2_inode,
	       IN ULONG Index);

ULONG
Ext2ReadInode (IN PEXT2_VCB vcb,
	       IN struct ext2_inode* ext2_inode,
	       IN ULONG offset,
	       IN PVOID Buffer,
	       IN ULONG size);
ULONG
Ext2WriteInode (IN PEXT2_VCB vcb,
		IN struct ext2_inode* ext2_inode,
		IN ULONG offset,
		IN PVOID Buffer,
		IN ULONG size);

PEXT2_IRP_CONTEXT
Ext2AllocateIrpContext (IN PDEVICE_OBJECT   DeviceObject,
			IN PIRP             Irp );
VOID
Ext2FreeIrpContext (IN PEXT2_IRP_CONTEXT IrpContext);

PEXT2_FCB
Ext2AllocateFcb (IN PEXT2_VCB            Vcb,
		 IN PUNICODE_STRING      FileName,
		 IN ULONG                IndexNumber,
		 IN ULONG		 inode,
		 IN ULONG		 dir_inode,
		 IN struct ext2_inode*   ext2_inode );

VOID
Ext2FreeFcb (IN PEXT2_FCB Fcb);

PEXT2_CCB
Ext2AllocateCcb (VOID);

VOID
Ext2FreeCcb (IN PEXT2_CCB Ccb);

VOID
Ext2FreeVcb (IN PEXT2_VCB Vcb );


BOOLEAN
Ext2FastIoQueryBasicInfo (IN PFILE_OBJECT             FileObject,
			  IN BOOLEAN                  Wait,
			  OUT PFILE_BASIC_INFORMATION Buffer,
			  OUT PIO_STATUS_BLOCK        IoStatus,
			  IN PDEVICE_OBJECT           DeviceObject);

BOOLEAN
Ext2FastIoQueryStandardInfo (IN PFILE_OBJECT                 FileObject,
			     IN BOOLEAN                      Wait,
			     OUT PFILE_STANDARD_INFORMATION  Buffer,
			     OUT PIO_STATUS_BLOCK            IoStatus,
			     IN PDEVICE_OBJECT               DeviceObject);

BOOLEAN
Ext2FastIoLock (
	       IN PFILE_OBJECT         FileObject,
	       IN PLARGE_INTEGER       FileOffset,
	       IN PLARGE_INTEGER       Length,
	       IN PEPROCESS            ProcessId,
	       IN ULONG                Key,
	       IN BOOLEAN              FailImmediately,
	       IN BOOLEAN              ExclusiveLock,
	       OUT PIO_STATUS_BLOCK    IoStatus,
	       IN PDEVICE_OBJECT       DeviceObject
	       );

BOOLEAN
Ext2FastIoUnlockSingle (
		       IN PFILE_OBJECT         FileObject,
		       IN PLARGE_INTEGER       FileOffset,
		       IN PLARGE_INTEGER       Length,
		       IN PEPROCESS            ProcessId,
		       IN ULONG                Key,
		       OUT PIO_STATUS_BLOCK    IoStatus,
		       IN PDEVICE_OBJECT       DeviceObject
		       );

BOOLEAN
Ext2FastIoUnlockAll (
		    IN PFILE_OBJECT         FileObject,
		    IN PEPROCESS            ProcessId,
		    OUT PIO_STATUS_BLOCK    IoStatus,
		    IN PDEVICE_OBJECT       DeviceObject
		    );

BOOLEAN
Ext2FastIoUnlockAllByKey (
			 IN PFILE_OBJECT         FileObject,
			 IN PEPROCESS            ProcessId,
			 IN ULONG                Key,
			 OUT PIO_STATUS_BLOCK    IoStatus,
			 IN PDEVICE_OBJECT       DeviceObject
			 );
NTSTATUS
Ext2LockControl (IN PEXT2_IRP_CONTEXT IrpContext);

BOOLEAN
Ext2FastIoQueryNetworkOpenInfo (
	 IN PFILE_OBJECT                     FileObject,
	 IN BOOLEAN                          Wait,
	 OUT PFILE_NETWORK_OPEN_INFORMATION  Buffer,
	 OUT PIO_STATUS_BLOCK                IoStatus,
	 IN PDEVICE_OBJECT                   DeviceObject );

BOOLEAN
Ext2FastIoQueryNetworkOpenInfo (IN PFILE_OBJECT                     FileObject,
				IN BOOLEAN                          Wait,
				OUT PFILE_NETWORK_OPEN_INFORMATION  Buffer,
				OUT PIO_STATUS_BLOCK                IoStatus,
				IN PDEVICE_OBJECT                   DeviceObject);

BOOLEAN
Ext2AcquireForLazyWrite (IN PVOID    Context,
			 IN BOOLEAN  Wait );
VOID
Ext2ReleaseFromLazyWrite (IN PVOID Context);

BOOLEAN
Ext2AcquireForReadAhead (IN PVOID    Context,
			 IN BOOLEAN  Wait );

VOID
Ext2ReleaseFromReadAhead (IN PVOID Context);

NTSTATUS
Ext2Close (IN PEXT2_IRP_CONTEXT IrpContext);

VOID
Ext2QueueCloseRequest (IN PEXT2_IRP_CONTEXT IrpContext);

VOID
Ext2DeQueueCloseRequest (IN PVOID Context);

NTSTATUS
Ext2ScanDir (IN PEXT2_VCB        Vcb,
	     IN ULONG            inode,
	     IN PUNICODE_STRING  FileName,
	     IN OUT PULONG       Index,
	     IN PEXT2_INODE	 ext2_inode,
	     IN PEXT2_DIR_ENTRY  dir_entry);

NTSTATUS
Ext2LookupFileName (IN PEXT2_VCB        Vcb,
		    IN PUNICODE_STRING  FullFileName,
		    IN OUT PULONG       Offset,
		    IN OUT PULONG	Inode,
		    IN OUT PULONG	DirInode,
		    IN OUT PEXT2_INODE  ext2_inode);
NTSTATUS
Ext2OpenFile(PEXT2_VCB Vcb, PIRP Irp);

NTSTATUS
Ext2Create (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2ReadFileData (IN PEXT2_VCB		  Vcb,
		  IN ULONG                Index,
		  IN struct ext2_inode*   Inode,
		  IN PLARGE_INTEGER       Offset,
		  IN ULONG                Length,
		  IN OUT PVOID            Buffer);

NTSTATUS
Ext2Read (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2ReadNormal (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2ReadComplete (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2SetInformation (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2QueryVolumeInformation (IN PEXT2_IRP_CONTEXT IrpContext);

VOID
Ext2CharToWchar (IN OUT PWCHAR   Destination,
		 IN PCHAR        Source,
		 IN ULONG        Length);
NTSTATUS
Ext2WcharToChar (IN OUT PCHAR    Destination,
		 IN PWCHAR       Source,
		 IN ULONG        Length);

NTSTATUS
Ext2LockUserBuffer (IN PIRP             Irp,
		    IN ULONG            Length,
		    IN LOCK_OPERATION   Operation);
PVOID
Ext2GetUserBuffer (IN PIRP Irp);

ULONG
Ext2GetInfoLength(IN FILE_INFORMATION_CLASS  FileInformationClass);

ULONG
Ext2ProcessDirEntry(IN PEXT2_VCB         Vcb,
		    IN FILE_INFORMATION_CLASS  FileInformationClass,
		    IN ULONG		 in,
		    IN PVOID		 Buffer,
		    IN ULONG		 UsedLength,
		    IN ULONG		 Length,
		    IN ULONG		 FileIndex,
		    IN UNICODE_STRING*	 pName,
		    IN BOOLEAN		 Single );

NTSTATUS
Ext2QueryDirectory (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2DirectoryControl (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2QueueRequest (IN PEXT2_IRP_CONTEXT IrpContext);

VOID
Ext2DeQueueRequest (IN PVOID Context);

NTSTATUS
Ext2Cleanup (IN PEXT2_IRP_CONTEXT IrpContext);

#if DBG

NTSTATUS
Ext2DeviceControlCompletion (IN PDEVICE_OBJECT   DeviceObject,
			    IN PIRP             Irp,
			    IN PVOID            Context);
#endif

NTSTATUS
Ext2DeviceControlNormal (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2PrepareToUnload (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2DeviceControl (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2VerifyVolume (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2IsVolumeMounted (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2DismountVolume (IN PEXT2_IRP_CONTEXT IrpContext);

VOID
Ext2PurgeVolume (IN PEXT2_VCB Vcb,
		 IN BOOLEAN  FlushBeforePurge);
VOID
Ext2PurgeFile (IN PEXT2_FCB Fcb,
	       IN BOOLEAN  FlushBeforePurge);

NTSTATUS
Ext2LockVolume (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2UnlockVolume (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2UserFsRequest (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2MountVolume (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2FileSystemControl (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2DispatchRequest (IN PEXT2_IRP_CONTEXT IrpContext);

NTSTATUS
Ext2ExceptionFilter (IN PEXT2_IRP_CONTEXT    IrpContext,
		     IN NTSTATUS             ExceptionCode);
NTSTATUS
Ext2ExceptionHandler (IN PEXT2_IRP_CONTEXT IrpContext);

VOID
Ext2SetVpbFlag (IN PVPB     Vpb,
		IN USHORT   Flag );

VOID
Ext2ClearVpbFlag (IN PVPB     Vpb,
		  IN USHORT   Flag );

NTSTATUS
Ext2BuildRequest (IN PDEVICE_OBJECT   DeviceObject,
		  IN PIRP             Irp);

VOID
DriverUnload (IN PDRIVER_OBJECT DriverObject);

BOOLEAN
Ext2FastIoCheckIfPossible (
			  IN PFILE_OBJECT         FileObject,
			  IN PLARGE_INTEGER       FileOffset,
			  IN ULONG                Length,
			  IN BOOLEAN              Wait,
			  IN ULONG                LockKey,
			  IN BOOLEAN              CheckForReadOperation,
			  OUT PIO_STATUS_BLOCK    IoStatus,
			  IN PDEVICE_OBJECT       DeviceObject );

PUCHAR
Ext2NtStatusToString (IN NTSTATUS Status );

#if DBG

BOOLEAN
Ext2FastIoRead (IN PFILE_OBJECT         FileObject,
		IN PLARGE_INTEGER       FileOffset,
		IN ULONG                Length,
		IN BOOLEAN              Wait,
		IN ULONG                LockKey,
		OUT PVOID               Buffer,
		OUT PIO_STATUS_BLOCK    IoStatus,
		IN PDEVICE_OBJECT       DeviceObject);
VOID
Ext2DbgPrintCall (IN PDEVICE_OBJECT   DeviceObject,
		  IN PIRP             Irp );

VOID
Ext2DbgPrintComplete (IN PIRP Irp);

#define Ext2CompleteRequest(Irp, PriorityBoost) \
        Ext2DbgPrintComplete(Irp); \
        IoCompleteRequest(Irp, PriorityBoost)

#else

#define Ext2DbgPrintCall(DeviceObject, Irp)

#define Ext2CompleteRequest(Irp, PriorityBoost) \
        IoCompleteRequest(Irp, PriorityBoost)

#endif /* DBG */


#endif /* _EXT2_HEADER_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -