#define NTFS_H
#include <ntifs.h>
+#include <pseh/pseh2.h>
#define CACHEPAGESIZE(pDeviceExt) \
((pDeviceExt)->NtfsInfo.UCHARsPerCluster > PAGE_SIZE ? \
ULONG SectorsPerCluster;
ULONG BytesPerCluster;
ULONGLONG SectorCount;
+ ULONGLONG ClusterCount;
ULARGE_INTEGER MftStart;
ULARGE_INTEGER MftMirrStart;
ULONG BytesPerFileRecord;
UCHAR MinorVersion;
USHORT Flags;
+ ULONG MftZoneReservation;
} NTFS_INFO, *PNTFS_INFO;
#define NTFS_TYPE_CCB '20SF'
PDEVICE_OBJECT DeviceObject;
CACHE_MANAGER_CALLBACKS CacheMgrCallbacks;
ULONG Flags;
+ FAST_IO_DISPATCH FastIoDispatch;
} NTFS_GLOBAL_DATA, *PNTFS_GLOBAL_DATA;
UCHAR Data[1];
} REPARSE_POINT_ATTRIBUTE, *PREPARSE_POINT_ATTRIBUTE;
+#define IRPCONTEXT_CANWAIT 0x1
+
typedef struct
{
NTFSIDENTIFIER Identifier;
ULONG Flags;
+ PIO_STACK_LOCATION Stack;
UCHAR MajorFunction;
UCHAR MinorFunction;
WORK_QUEUE_ITEM WorkQueueItem;
PIRP Irp;
BOOLEAN IsTopLevel;
PDEVICE_OBJECT DeviceObject;
+ PFILE_OBJECT FileObject;
NTSTATUS SavedExceptionCode;
+ CCHAR PriorityBoost;
} NTFS_IRP_CONTEXT, *PNTFS_IRP_CONTEXT;
typedef struct _NTFS_ATTR_CONTEXT
ULONG Flags;
ULONGLONG MFTIndex;
+ USHORT LinkCount;
FILENAME_ATTRIBUTE Entry;
VOID
NtfsDumpFileAttributes(PFILE_RECORD_HEADER FileRecord);
+PSTANDARD_INFORMATION
+GetStandardInformationFromRecord(PFILE_RECORD_HEADER FileRecord);
+
PFILENAME_ATTRIBUTE
GetFileNameFromRecord(PFILE_RECORD_HEADER FileRecord, UCHAR NameType);
PIRP Irp);
-/* dirctl.c */
+/* devctl.c */
-DRIVER_DISPATCH NtfsFsdDirectoryControl;
+DRIVER_DISPATCH NtfsFsdDeviceControl;
NTSTATUS NTAPI
-NtfsFsdDirectoryControl(PDEVICE_OBJECT DeviceObject,
- PIRP Irp);
+NtfsFsdDeviceControl(PDEVICE_OBJECT DeviceObject,
+ PIRP Irp);
+
+
+/* dirctl.c */
+
+NTSTATUS
+NtfsDirectoryControl(PNTFS_IRP_CONTEXT IrpContext);
/* dispatch.c */
VOID NTAPI
NtfsRelReadAhead(PVOID Context);
+FAST_IO_CHECK_IF_POSSIBLE NtfsFastIoCheckIfPossible;
+FAST_IO_READ NtfsFastIoRead;
+FAST_IO_WRITE NtfsFastIoWrite;
+
/* fcb.c */
PNTFS_FCB *pFCB,
const PWSTR pFileName);
+NTSTATUS
+NtfsReadFCBAttribute(PNTFS_VCB Vcb,
+ PNTFS_FCB pFCB,
+ ULONG Type,
+ PCWSTR Name,
+ ULONG NameLength,
+ PVOID * Data);
+
/* finfo.c */
-DRIVER_DISPATCH NtfsFsdQueryInformation;
-NTSTATUS NTAPI
-NtfsFsdQueryInformation(PDEVICE_OBJECT DeviceObject,
- PIRP Irp);
+NTSTATUS
+NtfsQueryInformation(PNTFS_IRP_CONTEXT IrpContext);
/* fsctl.c */
NtfsAllocateIrpContext(PDEVICE_OBJECT DeviceObject,
PIRP Irp);
+PVOID
+NtfsGetUserBuffer(PIRP Irp);
+
#if 0
BOOLEAN
wstrcmpjoki(PWSTR s1, PWSTR s2);