mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 17:03:02 +00:00
Added support for accessing the raw volume.
svn path=/trunk/; revision=2911
This commit is contained in:
parent
11cc443546
commit
d31b1c24ca
3 changed files with 56 additions and 9 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: close.c,v 1.9 2001/11/02 22:44:34 hbirr Exp $
|
/* $Id: close.c,v 1.10 2002/05/05 20:18:33 hbirr Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -39,12 +39,18 @@ VfatCloseFile (PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject)
|
||||||
{
|
{
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
if (FileObject->FileName.Buffer)
|
pFcb = pCcb->pFcb;
|
||||||
|
if (pFcb->Flags & FCB_IS_VOLUME)
|
||||||
|
{
|
||||||
|
DPRINT1("Volume\n");
|
||||||
|
pFcb->RefCount--;
|
||||||
|
FileObject->FsContext2 = NULL;
|
||||||
|
}
|
||||||
|
else if (FileObject->FileName.Buffer)
|
||||||
{
|
{
|
||||||
// This a FO, that was created outside from FSD.
|
// This a FO, that was created outside from FSD.
|
||||||
// Some FO's are created with IoCreateStreamFileObject() insid from FSD.
|
// Some FO's are created with IoCreateStreamFileObject() insid from FSD.
|
||||||
// This FO's haven't a FileName.
|
// This FO's haven't a FileName.
|
||||||
pFcb = pCcb->pFcb;
|
|
||||||
if (FileObject->DeletePending)
|
if (FileObject->DeletePending)
|
||||||
{
|
{
|
||||||
if (pFcb->Flags & FCB_DELETE_PENDING)
|
if (pFcb->Flags & FCB_DELETE_PENDING)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: create.c,v 1.39 2002/03/18 22:37:12 hbirr Exp $
|
/* $Id: create.c,v 1.40 2002/05/05 20:18:33 hbirr Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -583,6 +583,43 @@ VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
DeviceExt = DeviceObject->DeviceExtension;
|
DeviceExt = DeviceObject->DeviceExtension;
|
||||||
assert (DeviceExt);
|
assert (DeviceExt);
|
||||||
|
|
||||||
|
if (FileObject->FileName.Length == 0 && FileObject->RelatedFileObject == NULL)
|
||||||
|
{
|
||||||
|
/* This a open operation for the volume itself */
|
||||||
|
if (RequestedDisposition == FILE_CREATE ||
|
||||||
|
RequestedDisposition == FILE_OVERWRITE_IF ||
|
||||||
|
RequestedDisposition == FILE_SUPERSEDE)
|
||||||
|
{
|
||||||
|
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;
|
||||||
|
return STATUS_ACCESS_DENIED;
|
||||||
|
}
|
||||||
|
if (RequestedOptions & FILE_DIRECTORY_FILE)
|
||||||
|
{
|
||||||
|
Irp->IoStatus.Status = STATUS_NOT_A_DIRECTORY;
|
||||||
|
return STATUS_NOT_A_DIRECTORY;
|
||||||
|
}
|
||||||
|
pFcb = DeviceExt->VolumeFcb;
|
||||||
|
pCcb = ExAllocatePoolWithTag (NonPagedPool, sizeof (VFATCCB), TAG_CCB);
|
||||||
|
if (pCcb == NULL)
|
||||||
|
{
|
||||||
|
Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
}
|
||||||
|
memset(pCcb, 0, sizeof(VFATCCB));
|
||||||
|
FileObject->Flags |= FO_FCB_IS_VALID;
|
||||||
|
FileObject->SectionObjectPointers = &pFcb->SectionObjectPointers;
|
||||||
|
FileObject->FsContext = (PVOID) &pFcb->RFCB;
|
||||||
|
FileObject->FsContext2 = pCcb;
|
||||||
|
pCcb->pFcb = pFcb;
|
||||||
|
pCcb->PtrFileObject = FileObject;
|
||||||
|
pFcb->pDevExt = DeviceExt;
|
||||||
|
pFcb->RefCount++;
|
||||||
|
|
||||||
|
Irp->IoStatus.Information = FILE_OPENED;
|
||||||
|
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for illegal characters in the file name
|
* Check for illegal characters in the file name
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: vfat.h,v 1.40 2002/03/18 22:37:13 hbirr Exp $ */
|
/* $Id: vfat.h,v 1.41 2002/05/05 20:18:33 hbirr Exp $ */
|
||||||
|
|
||||||
#include <ddk/ntifs.h>
|
#include <ddk/ntifs.h>
|
||||||
|
|
||||||
|
@ -113,9 +113,12 @@ typedef struct
|
||||||
ULONG BytesPerCluster;
|
ULONG BytesPerCluster;
|
||||||
ULONG NumberOfClusters;
|
ULONG NumberOfClusters;
|
||||||
ULONG FatType;
|
ULONG FatType;
|
||||||
|
ULONG Sectors;
|
||||||
}
|
}
|
||||||
FATINFO, *PFATINFO;
|
FATINFO, *PFATINFO;
|
||||||
|
|
||||||
|
struct _VFATFCB;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
ERESOURCE DirResource;
|
ERESOURCE DirResource;
|
||||||
|
@ -131,6 +134,7 @@ typedef struct
|
||||||
ULONG AvailableClusters;
|
ULONG AvailableClusters;
|
||||||
BOOLEAN AvailableClustersValid;
|
BOOLEAN AvailableClustersValid;
|
||||||
ULONG Flags;
|
ULONG Flags;
|
||||||
|
struct _VFATFCB * VolumeFcb;
|
||||||
}
|
}
|
||||||
DEVICE_EXTENSION, *PDEVICE_EXTENSION, VCB, *PVCB;
|
DEVICE_EXTENSION, *PDEVICE_EXTENSION, VCB, *PVCB;
|
||||||
|
|
||||||
|
@ -148,6 +152,7 @@ extern PVFAT_GLOBAL_DATA VfatGlobalData;
|
||||||
#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
|
#define FCB_IS_PAGE_FILE 0x0008
|
||||||
|
#define FCB_IS_VOLUME 0x0010
|
||||||
|
|
||||||
typedef struct _VFATFCB
|
typedef struct _VFATFCB
|
||||||
{
|
{
|
||||||
|
@ -482,7 +487,7 @@ NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext);
|
||||||
NTSTATUS vfatExtendSpace (PDEVICE_EXTENSION pDeviceExt,
|
NTSTATUS vfatExtendSpace (PDEVICE_EXTENSION pDeviceExt,
|
||||||
PFILE_OBJECT pFileObject,
|
PFILE_OBJECT pFileObject,
|
||||||
ULONG NewSize);
|
ULONG NewSize);
|
||||||
/*
|
|
||||||
NTSTATUS VfatWriteFile (PDEVICE_EXTENSION DeviceExt,
|
NTSTATUS VfatWriteFile (PDEVICE_EXTENSION DeviceExt,
|
||||||
PFILE_OBJECT FileObject,
|
PFILE_OBJECT FileObject,
|
||||||
PVOID Buffer,
|
PVOID Buffer,
|
||||||
|
@ -498,7 +503,6 @@ NTSTATUS VfatReadFile (PDEVICE_EXTENSION DeviceExt,
|
||||||
ULONG ReadOffset,
|
ULONG ReadOffset,
|
||||||
PULONG LengthRead,
|
PULONG LengthRead,
|
||||||
ULONG NoCache);
|
ULONG NoCache);
|
||||||
*/
|
|
||||||
|
|
||||||
NTSTATUS NextCluster(PDEVICE_EXTENSION DeviceExt,
|
NTSTATUS NextCluster(PDEVICE_EXTENSION DeviceExt,
|
||||||
PVFATFCB Fcb,
|
PVFATFCB Fcb,
|
||||||
|
@ -517,11 +521,11 @@ VOID VfatFreeIrpContext(PVFAT_IRP_CONTEXT IrpContext);
|
||||||
|
|
||||||
NTSTATUS STDCALL VfatBuildRequest (PDEVICE_OBJECT DeviceObject,
|
NTSTATUS STDCALL VfatBuildRequest (PDEVICE_OBJECT DeviceObject,
|
||||||
PIRP Irp);
|
PIRP Irp);
|
||||||
/*
|
|
||||||
PVOID VfatGetUserBuffer(IN PIRP);
|
PVOID VfatGetUserBuffer(IN PIRP);
|
||||||
|
|
||||||
NTSTATUS VfatLockUserBuffer(IN PIRP, IN ULONG,
|
NTSTATUS VfatLockUserBuffer(IN PIRP, IN ULONG,
|
||||||
IN LOCK_OPERATION);
|
IN LOCK_OPERATION);
|
||||||
*/
|
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue