mirror of
https://github.com/reactos/reactos.git
synced 2024-10-02 15:34:13 +00:00
Reworked code for handling of asynchonous i/o requests.
svn path=/trunk/; revision=2347
This commit is contained in:
parent
c2c9804f47
commit
547896ce6f
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: vfat.h,v 1.36 2001/10/10 22:20:48 hbirr Exp $ */
|
/* $Id: vfat.h,v 1.37 2001/11/02 22:57:14 hbirr Exp $ */
|
||||||
|
|
||||||
#include <ddk/ntifs.h>
|
#include <ddk/ntifs.h>
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
ERESOURCE DirResource;
|
ERESOURCE DirResource;
|
||||||
ERESOURCE FatResource;
|
ERESOURCE FatResource;
|
||||||
|
|
||||||
KSPIN_LOCK FcbListLock;
|
KSPIN_LOCK FcbListLock;
|
||||||
LIST_ENTRY FcbListHead;
|
LIST_ENTRY FcbListHead;
|
||||||
|
|
||||||
|
@ -110,11 +110,14 @@ typedef struct
|
||||||
int FATEntriesPerSector, FATUnit;
|
int FATEntriesPerSector, FATUnit;
|
||||||
ULONG BytesPerCluster;
|
ULONG BytesPerCluster;
|
||||||
ULONG FatType;
|
ULONG FatType;
|
||||||
|
ULONG LastAvailableCluster;
|
||||||
|
ULONG NumberOfClusters;
|
||||||
} DEVICE_EXTENSION, *PDEVICE_EXTENSION, VCB, *PVCB;
|
} DEVICE_EXTENSION, *PDEVICE_EXTENSION, VCB, *PVCB;
|
||||||
|
|
||||||
#define FCB_CACHE_INITIALIZED 0x0001
|
#define FCB_CACHE_INITIALIZED 0x0001
|
||||||
#define FCB_DELETE_PENDING 0x0002
|
#define FCB_DELETE_PENDING 0x0002
|
||||||
#define FCB_IS_FAT 0x0004
|
#define FCB_IS_FAT 0x0004
|
||||||
|
#define FCB_IS_PAGE_FILE 0x0008
|
||||||
|
|
||||||
typedef struct _VFATFCB
|
typedef struct _VFATFCB
|
||||||
{
|
{
|
||||||
|
@ -132,6 +135,8 @@ typedef struct _VFATFCB
|
||||||
ULONG Flags;
|
ULONG Flags;
|
||||||
PFILE_OBJECT FileObject;
|
PFILE_OBJECT FileObject;
|
||||||
ULONG dirIndex;
|
ULONG dirIndex;
|
||||||
|
ERESOURCE PagingIoResource;
|
||||||
|
ERESOURCE MainResource;
|
||||||
} VFATFCB, *PVFATFCB;
|
} VFATFCB, *PVFATFCB;
|
||||||
|
|
||||||
typedef struct _VFATCCB
|
typedef struct _VFATCCB
|
||||||
|
@ -158,45 +163,51 @@ typedef struct _VFATCCB
|
||||||
|
|
||||||
typedef struct __DOSTIME
|
typedef struct __DOSTIME
|
||||||
{
|
{
|
||||||
WORD Second:5;
|
WORD Second:5;
|
||||||
WORD Minute:6;
|
WORD Minute:6;
|
||||||
WORD Hour:5;
|
WORD Hour:5;
|
||||||
} DOSTIME, *PDOSTIME;
|
} DOSTIME, *PDOSTIME;
|
||||||
|
|
||||||
typedef struct __DOSDATE
|
typedef struct __DOSDATE
|
||||||
{
|
{
|
||||||
WORD Day:5;
|
WORD Day:5;
|
||||||
WORD Month:4;
|
WORD Month:4;
|
||||||
WORD Year:5;
|
WORD Year:5;
|
||||||
} DOSDATE, *PDOSDATE;
|
} DOSDATE, *PDOSDATE;
|
||||||
|
|
||||||
|
#define IRPCONTEXT_CANWAIT 0x0001
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
PIRP Irp;
|
||||||
|
PDEVICE_OBJECT DeviceObject;
|
||||||
|
PDEVICE_EXTENSION DeviceExt;
|
||||||
|
ULONG Flags;
|
||||||
|
WORK_QUEUE_ITEM WorkQueueItem;
|
||||||
|
PIO_STACK_LOCATION Stack;
|
||||||
|
UCHAR MajorFunction;
|
||||||
|
UCHAR MinorFunction;
|
||||||
|
PFILE_OBJECT FileObject;
|
||||||
|
}
|
||||||
|
VFAT_IRP_CONTEXT, *PVFAT_IRP_CONTEXT;
|
||||||
|
|
||||||
|
|
||||||
/* functions called by i/o manager : */
|
/* functions called by i/o manager : */
|
||||||
NTSTATUS STDCALL
|
NTSTATUS STDCALL
|
||||||
DriverEntry(PDRIVER_OBJECT _DriverObject,PUNICODE_STRING RegistryPath);
|
DriverEntry(PDRIVER_OBJECT _DriverObject,PUNICODE_STRING RegistryPath);
|
||||||
NTSTATUS STDCALL
|
NTSTATUS VfatDirectoryControl (PVFAT_IRP_CONTEXT);
|
||||||
VfatDirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
NTSTATUS VfatRead (PVFAT_IRP_CONTEXT);
|
||||||
NTSTATUS STDCALL
|
NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT);
|
||||||
VfatRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
NTSTATUS VfatCreate (PVFAT_IRP_CONTEXT);
|
||||||
NTSTATUS STDCALL
|
NTSTATUS VfatClose (PVFAT_IRP_CONTEXT);
|
||||||
VfatWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
NTSTATUS VfatFileSystemControl (PVFAT_IRP_CONTEXT);
|
||||||
NTSTATUS STDCALL
|
NTSTATUS VfatQueryInformation (PVFAT_IRP_CONTEXT);
|
||||||
VfatCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
NTSTATUS VfatSetInformation (PVFAT_IRP_CONTEXT);
|
||||||
NTSTATUS STDCALL
|
NTSTATUS VfatCleanup (PVFAT_IRP_CONTEXT);
|
||||||
VfatClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
||||||
NTSTATUS STDCALL
|
|
||||||
VfatFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
||||||
NTSTATUS STDCALL
|
|
||||||
VfatQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
||||||
NTSTATUS STDCALL
|
|
||||||
VfatSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
||||||
NTSTATUS STDCALL
|
|
||||||
VfatCleanup (PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
||||||
NTSTATUS STDCALL
|
NTSTATUS STDCALL
|
||||||
VfatShutdown(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
VfatShutdown(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
||||||
NTSTATUS STDCALL
|
NTSTATUS VfatQueryVolumeInformation (PVFAT_IRP_CONTEXT);
|
||||||
VfatQueryVolumeInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
NTSTATUS VfatSetVolumeInformation (PVFAT_IRP_CONTEXT);
|
||||||
NTSTATUS STDCALL
|
|
||||||
VfatSetVolumeInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -235,7 +246,7 @@ NTSTATUS
|
||||||
VfatReadFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject,
|
VfatReadFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject,
|
||||||
PVOID Buffer, ULONG Length, ULONG ReadOffset,
|
PVOID Buffer, ULONG Length, ULONG ReadOffset,
|
||||||
PULONG LengthRead, ULONG NoCache);
|
PULONG LengthRead, ULONG NoCache);
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
VfatWriteFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject,
|
VfatWriteFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject,
|
||||||
PVOID Buffer, ULONG Length, ULONG WriteOffset, BOOLEAN NoCache, BOOLEAN PageIo);
|
PVOID Buffer, ULONG Length, ULONG WriteOffset, BOOLEAN NoCache, BOOLEAN PageIo);
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -272,7 +283,7 @@ wchar_t*
|
||||||
vfat_movstr(wchar_t *src, ULONG dpos, ULONG spos, ULONG len);
|
vfat_movstr(wchar_t *src, ULONG dpos, ULONG spos, ULONG len);
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
wstrcmpi(PWSTR s1, PWSTR s2);
|
wstrcmpi(PWSTR s1, PWSTR s2);
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
wstrcmpjoki(PWSTR s1, PWSTR s2);
|
wstrcmpjoki(PWSTR s1, PWSTR s2);
|
||||||
PWCHAR vfatGetNextPathElement (PWCHAR pFileName);
|
PWCHAR vfatGetNextPathElement (PWCHAR pFileName);
|
||||||
void vfatWSubString (PWCHAR pTarget, const PWCHAR pSource, size_t pLength);
|
void vfatWSubString (PWCHAR pTarget, const PWCHAR pSource, size_t pLength);
|
||||||
|
@ -370,7 +381,7 @@ NTSTATUS vfatDirFindFile (PDEVICE_EXTENSION pVCB,
|
||||||
PVFATFCB parentFCB,
|
PVFATFCB parentFCB,
|
||||||
PWSTR elementName,
|
PWSTR elementName,
|
||||||
PVFATFCB * fileFCB);
|
PVFATFCB * fileFCB);
|
||||||
NTSTATUS vfatGetFCBForFile (PDEVICE_EXTENSION pVCB,
|
NTSTATUS vfatGetFCBForFile (PDEVICE_EXTENSION pVCB,
|
||||||
PVFATFCB *pParentFCB,
|
PVFATFCB *pParentFCB,
|
||||||
PVFATFCB *pFCB,
|
PVFATFCB *pFCB,
|
||||||
const PWSTR pFileName);
|
const PWSTR pFileName);
|
||||||
|
@ -385,4 +396,9 @@ NTSTATUS vfatMakeFCBFromDirEntry(PVCB vcb,
|
||||||
|
|
||||||
NTSTATUS vfatExtendSpace (PDEVICE_EXTENSION pDeviceExt, PFILE_OBJECT pFileObject, ULONG NewSize);
|
NTSTATUS vfatExtendSpace (PDEVICE_EXTENSION pDeviceExt, PFILE_OBJECT pFileObject, ULONG NewSize);
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------- misc.c */
|
||||||
|
NTSTATUS VfatQueueRequest(PVFAT_IRP_CONTEXT IrpContext);
|
||||||
|
PVFAT_IRP_CONTEXT VfatAllocateIrpContext(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
||||||
|
VOID VfatFreeIrpContext(PVFAT_IRP_CONTEXT IrpContext);
|
||||||
|
NTSTATUS STDCALL VfatBuildRequest (PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue