mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 17:05:46 +00:00
[FORMATTING]
- Bring formatting closer to ReactOS kernelmode style. svn path=/trunk/; revision=39038
This commit is contained in:
parent
d1494fca12
commit
44f86392fe
1 changed files with 177 additions and 229 deletions
|
@ -28,93 +28,80 @@ typedef struct _FAT_SCAN_CONTEXT
|
|||
((ULONG) ((xOffset - (xVcb)->DataArea) >> (xVcb)->BytesPerClusterLog) + 0x02)
|
||||
|
||||
ULONG
|
||||
FatScanFat12ForContinousRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN BOOLEAN CanWait);
|
||||
FatScanFat12ForContinousRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN BOOLEAN CanWait);
|
||||
|
||||
ULONG
|
||||
FatSetFat12ContinousRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN CanWait);
|
||||
FatSetFat12ContinousRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN CanWait);
|
||||
|
||||
ULONG
|
||||
FatScanFat12ForValueRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait);
|
||||
FatScanFat12ForValueRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait);
|
||||
|
||||
ULONG
|
||||
FatSetFat12ValueRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait);
|
||||
FatSetFat12ValueRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait);
|
||||
|
||||
ULONG
|
||||
FatScanFat16ForContinousRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN BOOLEAN CanWait);
|
||||
FatScanFat16ForContinousRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN BOOLEAN CanWait);
|
||||
|
||||
ULONG
|
||||
FatSetFat16ContinousRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN CanWait);
|
||||
FatSetFat16ContinousRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN CanWait);
|
||||
|
||||
ULONG
|
||||
FatScanFat16ForValueRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait);
|
||||
FatScanFat16ForValueRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait);
|
||||
|
||||
ULONG
|
||||
FatSetFat16ValueRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait);
|
||||
FatSetFat16ValueRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait);
|
||||
|
||||
ULONG
|
||||
FatScanFat32ForContinousRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN BOOLEAN CanWait);
|
||||
FatScanFat32ForContinousRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN BOOLEAN CanWait);
|
||||
|
||||
ULONG
|
||||
FatSetFat32ContinousRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN CanWait);
|
||||
FatSetFat32ContinousRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN CanWait);
|
||||
|
||||
ULONG
|
||||
FatScanFat32ForValueRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait);
|
||||
FatScanFat32ForValueRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait);
|
||||
|
||||
ULONG
|
||||
FatSetFat32ValueRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait);
|
||||
FatSetFat32ValueRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait);
|
||||
|
||||
BOOLEAN
|
||||
NTAPI
|
||||
FatValidBpb(
|
||||
IN PBIOS_PARAMETER_BLOCK Bpb);
|
||||
FatValidBpb(IN PBIOS_PARAMETER_BLOCK Bpb);
|
||||
|
||||
/* VARIABLES ****************************************************************/
|
||||
FAT_METHODS Fat12Methods = {
|
||||
|
@ -139,10 +126,7 @@ FAT_METHODS Fat32Methods = {
|
|||
};
|
||||
|
||||
/* FUNCTIONS ****************************************************************/
|
||||
FORCEINLINE
|
||||
ULONG
|
||||
FatPowerOfTwo(
|
||||
ULONG Number)
|
||||
|
||||
/*
|
||||
* FUNCTION:
|
||||
* Determines the index of the set bit.
|
||||
|
@ -150,6 +134,10 @@ FatPowerOfTwo(
|
|||
* Number = Number having a single bit set.
|
||||
* RETURNS: Index of the set bit.
|
||||
*/
|
||||
FORCEINLINE
|
||||
ULONG
|
||||
FatPowerOfTwo(
|
||||
ULONG Number)
|
||||
{
|
||||
ULONG Temp;
|
||||
Temp = Number
|
||||
|
@ -159,90 +147,77 @@ FatPowerOfTwo(
|
|||
}
|
||||
|
||||
ULONG
|
||||
FatScanFat12ForContinousRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN BOOLEAN CanWait)
|
||||
FatScanFat12ForContinousRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
ExRaiseStatus(STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
ULONG
|
||||
FatSetFat12ContinousRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN CanWait)
|
||||
FatSetFat12ContinousRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
ExRaiseStatus(STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
ULONG
|
||||
FatScanFat12ForValueRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait)
|
||||
FatScanFat12ForValueRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
ExRaiseStatus(STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
ULONG
|
||||
FatSetFat12ValueRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait)
|
||||
FatSetFat12ValueRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
ExRaiseStatus(STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
ULONG
|
||||
FatScanFat16ForContinousRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN BOOLEAN CanWait)
|
||||
FatScanFat16ForContinousRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
ExRaiseStatus(STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
ULONG
|
||||
FatSetFat16ContinousRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN CanWait)
|
||||
FatSetFat16ContinousRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
ExRaiseStatus(STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
ULONG
|
||||
FatScanFat16ForValueRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait)
|
||||
FatScanFat16ForValueRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
ExRaiseStatus(STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
ULONG
|
||||
FatSetFat16ValueRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait)
|
||||
FatSetFat16ValueRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
ExRaiseStatus(STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
ULONG
|
||||
FatScanFat32ForContinousRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN BOOLEAN CanWait)
|
||||
/*
|
||||
* FUNCTION:
|
||||
* Scans FAT32 for continous chain of clusters
|
||||
|
@ -255,22 +230,24 @@ FatScanFat32ForContinousRun(
|
|||
* RETURNS: Value of the last claster terminated the scan.
|
||||
* NOTES: Raises STATUS_CANT_WAIT race condition.
|
||||
*/
|
||||
ULONG
|
||||
FatScanFat32ForContinousRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
LONGLONG PageOffset;
|
||||
SIZE_T OffsetWithinPage, PageValidLength;
|
||||
PULONG Entry, BeyoudLastEntry;
|
||||
/*
|
||||
* Determine page offset and the offset within page
|
||||
/* Determine page offset and the offset within page
|
||||
* for the first cluster.
|
||||
*/
|
||||
PageValidLength = PAGE_SIZE;
|
||||
PageOffset = ((LONGLONG) *Index) << 0x2;
|
||||
OffsetWithinPage = (SIZE_T) (PageOffset & (PAGE_SIZE - 1));
|
||||
PageOffset -= OffsetWithinPage;
|
||||
/*
|
||||
* Check if the context already has the required page mapped.
|
||||
* Map the first page is necessary.
|
||||
*/
|
||||
/* Check if the context already has the required page mapped.
|
||||
* Map the first page is necessary.
|
||||
*/
|
||||
if (PageOffset != Context->PageOffset.QuadPart)
|
||||
{
|
||||
Context->PageOffset.QuadPart = PageOffset;
|
||||
|
@ -279,17 +256,19 @@ FatScanFat32ForContinousRun(
|
|||
CcUnpinData(Context->PageBcb);
|
||||
Context->PageBcb = NULL;
|
||||
}
|
||||
if (!CcMapData(Context->FileObject, &Context->PageOffset,
|
||||
PAGE_SIZE, CanWait, &Context->PageBcb, &Context->PageBuffer))
|
||||
{
|
||||
if (!CcMapData(Context->FileObject,
|
||||
&Context->PageOffset,
|
||||
PAGE_SIZE,
|
||||
CanWait,
|
||||
&Context->PageBcb,
|
||||
&Context->PageBuffer))
|
||||
{
|
||||
Context->PageOffset.QuadPart = 0LL;
|
||||
ExRaiseStatus(STATUS_CANT_WAIT);
|
||||
}
|
||||
}
|
||||
Entry = Add2Ptr(Context->PageBuffer, OffsetWithinPage, PULONG);
|
||||
/*
|
||||
* Next Page Offset.
|
||||
*/
|
||||
/* Next Page Offset */
|
||||
PageOffset = Context->PageOffset.QuadPart + PAGE_SIZE;
|
||||
if (PageOffset > Context->BeyoundLastEntryOffset)
|
||||
PageValidLength = (SIZE_T) (Context->BeyoundLastEntryOffset
|
||||
|
@ -299,19 +278,15 @@ FatScanFat32ForContinousRun(
|
|||
{
|
||||
do
|
||||
{
|
||||
if ((*Entry & FAT_CLUSTER_LAST) != ++(*Index) )
|
||||
if ((*Entry & FAT_CLUSTER_LAST) != ++(*Index))
|
||||
return (*Entry & FAT_CLUSTER_LAST);
|
||||
}
|
||||
while (++Entry < BeyoudLastEntry);
|
||||
/*
|
||||
* Check if this is the last available entry.
|
||||
*/
|
||||
} while (++Entry < BeyoudLastEntry);
|
||||
/* Check if this is the last available entry */
|
||||
if (PageValidLength < PAGE_SIZE)
|
||||
break;
|
||||
/*
|
||||
* We are getting beyound current page and
|
||||
* are still in the continous run, map the next page.
|
||||
*/
|
||||
/* We are getting beyound current page and
|
||||
* are still in the continous run, map the next page.
|
||||
*/
|
||||
Context->PageOffset.QuadPart = PageOffset;
|
||||
CcUnpinData(Context->PageBcb);
|
||||
if (!CcMapData(Context->FileObject,
|
||||
|
@ -323,9 +298,7 @@ FatScanFat32ForContinousRun(
|
|||
ExRaiseStatus(STATUS_CANT_WAIT);
|
||||
}
|
||||
Entry = (PULONG) Context->PageBuffer;
|
||||
/*
|
||||
* Next Page Offset.
|
||||
*/
|
||||
/* Next Page Offset */
|
||||
PageOffset = Context->PageOffset.QuadPart + PAGE_SIZE;
|
||||
if (PageOffset > Context->BeyoundLastEntryOffset)
|
||||
PageValidLength = (SIZE_T) (Context->BeyoundLastEntryOffset
|
||||
|
@ -336,45 +309,33 @@ FatScanFat32ForContinousRun(
|
|||
}
|
||||
|
||||
ULONG
|
||||
FatSetFat32ContinousRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN CanWait)
|
||||
FatSetFat32ContinousRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
ExRaiseStatus(STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
ULONG
|
||||
FatScanFat32ForValueRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait)
|
||||
FatScanFat32ForValueRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN OUT PULONG Index,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
ExRaiseStatus(STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
ULONG
|
||||
FatSetFat32ValueRun(
|
||||
IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait)
|
||||
FatSetFat32ValueRun(IN OUT PFAT_SCAN_CONTEXT Context,
|
||||
IN ULONG Index,
|
||||
IN ULONG Length,
|
||||
IN ULONG IndexValue,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
ExRaiseStatus(STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
ULONG
|
||||
FatScanFat(
|
||||
IN PFCB Fcb,
|
||||
IN LONGLONG Vbo,
|
||||
OUT PLONGLONG Lbo,
|
||||
IN OUT PLONGLONG Length,
|
||||
OUT PULONG Index,
|
||||
IN BOOLEAN CanWait
|
||||
)
|
||||
/*
|
||||
* FUNCTION:
|
||||
* Queries file MCB for the specified region [Vbo, Vbo + Length],
|
||||
|
@ -395,37 +356,36 @@ FatScanFat(
|
|||
* NOTES: Should be called by I/O routines to split the I/O operation
|
||||
* into sequential or parallel I/O operations.
|
||||
*/
|
||||
ULONG
|
||||
FatScanFat(IN PFCB Fcb,
|
||||
IN LONGLONG Vbo,
|
||||
OUT PLONGLONG Lbo,
|
||||
IN OUT PLONGLONG Length,
|
||||
OUT PULONG Index,
|
||||
IN BOOLEAN CanWait)
|
||||
{
|
||||
LONGLONG CurrentLbo, CurrentVbo, BeyoundLastVbo, CurrentLength;
|
||||
ULONG Entry, NextEntry, NumberOfEntries, CurrentIndex;
|
||||
FAT_SCAN_CONTEXT Context;
|
||||
PVCB Vcb;
|
||||
|
||||
/*
|
||||
* Some often used values
|
||||
*/
|
||||
/* Some often used values */
|
||||
Vcb = Fcb->Vcb;
|
||||
CurrentIndex = 0;
|
||||
BeyoundLastVbo = Vbo + *Length;
|
||||
CurrentLength = ((LONGLONG) Vcb->Clusters) << Vcb->BytesPerClusterLog;
|
||||
if (BeyoundLastVbo > CurrentLength)
|
||||
BeyoundLastVbo = CurrentLength;
|
||||
/*
|
||||
* Try to locate first run.
|
||||
*/
|
||||
/* Try to locate first run */
|
||||
if (FsRtlLookupLargeMcbEntry(&Fcb->Mcb, Vbo, Lbo, Length, NULL, NULL, Index))
|
||||
{
|
||||
/*
|
||||
* Check if we have a single mapped run.
|
||||
*/
|
||||
/* Check if we have a single mapped run */
|
||||
if (Vbo >= BeyoundLastVbo)
|
||||
goto FatScanFcbFatExit;
|
||||
} else {
|
||||
*Length = 0L;
|
||||
}
|
||||
/*
|
||||
* Get the first scan startup values.
|
||||
*/
|
||||
/* Get the first scan startup values */
|
||||
if (FsRtlLookupLastLargeMcbEntryAndIndex(
|
||||
&Fcb->Mcb, &CurrentVbo, &CurrentLbo, &CurrentIndex))
|
||||
{
|
||||
|
@ -433,9 +393,7 @@ FatScanFat(
|
|||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Map is empty, set up initial values.
|
||||
*/
|
||||
/* Map is empty, set up initial values */
|
||||
Entry = Fcb->FirstCluster;
|
||||
if (Entry <= 0x2)
|
||||
ExRaiseStatus(STATUS_FILE_CORRUPT_ERROR);
|
||||
|
@ -452,16 +410,12 @@ FatScanFat(
|
|||
Context.FileObject = Vcb->VolumeFileObject;
|
||||
while (CurrentVbo < BeyoundLastVbo)
|
||||
{
|
||||
/*
|
||||
* Locate Continous run starting with the current entry.
|
||||
*/
|
||||
/* Locate Continous run starting with the current entry */
|
||||
NumberOfEntries = Entry;
|
||||
NextEntry = Vcb->Methods.ScanContinousRun(
|
||||
&Context, &NumberOfEntries, CanWait);
|
||||
NumberOfEntries -= Entry;
|
||||
/*
|
||||
* Check value that terminated the for being valid for FAT.
|
||||
*/
|
||||
/* Check value that terminated the for being valid for FAT */
|
||||
if (NextEntry <= 0x2)
|
||||
ExRaiseStatus(STATUS_FILE_CORRUPT_ERROR);
|
||||
if (NextEntry >= Vcb->Clusters)
|
||||
|
@ -470,18 +424,14 @@ FatScanFat(
|
|||
ExRaiseStatus(STATUS_FILE_CORRUPT_ERROR);
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* Add new run.
|
||||
*/
|
||||
/* Add new run */
|
||||
CurrentLength = ((LONGLONG) NumberOfEntries)
|
||||
<< Vcb->BytesPerClusterLog;
|
||||
FsRtlAddLargeMcbEntry(&Fcb->Mcb,
|
||||
CurrentVbo,
|
||||
FatEntryToDataOffset(Entry, Vcb),
|
||||
CurrentLength);
|
||||
/*
|
||||
* Setup next iteration.
|
||||
*/
|
||||
/* Setup next iteration */
|
||||
Entry = NextEntry;
|
||||
CurrentVbo += CurrentLength;
|
||||
CurrentIndex ++;
|
||||
|
@ -501,8 +451,7 @@ FatScanFcbFatExit:
|
|||
|
||||
BOOLEAN
|
||||
NTAPI
|
||||
FatValidBpb(
|
||||
IN PBIOS_PARAMETER_BLOCK Bpb)
|
||||
FatValidBpb(IN PBIOS_PARAMETER_BLOCK Bpb)
|
||||
{
|
||||
return (FatValidBytesPerSector(Bpb->BytesPerSector)
|
||||
&& FatValidSectorsPerCluster(Bpb->SectorsPerCluster)
|
||||
|
@ -524,8 +473,7 @@ FatValidBpb(
|
|||
}
|
||||
|
||||
VOID
|
||||
FatiInitializeVcb(
|
||||
PVCB Vcb)
|
||||
FatiInitializeVcb(PVCB Vcb)
|
||||
{
|
||||
ULONG ClustersCapacity;
|
||||
|
||||
|
@ -565,10 +513,9 @@ FatiInitializeVcb(
|
|||
}
|
||||
|
||||
NTSTATUS
|
||||
FatInitializeVcb(
|
||||
IN PVCB Vcb,
|
||||
IN PDEVICE_OBJECT TargetDeviceObject,
|
||||
IN PVPB Vpb)
|
||||
FatInitializeVcb(IN PVCB Vcb,
|
||||
IN PDEVICE_OBJECT TargetDeviceObject,
|
||||
IN PVPB Vpb)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
PBCB Bcb;
|
||||
|
@ -577,13 +524,12 @@ FatInitializeVcb(
|
|||
|
||||
RtlZeroMemory(Vcb, sizeof(*Vcb));
|
||||
|
||||
/*
|
||||
* Initialize list head, so that it will
|
||||
* not fail in cleanup.
|
||||
*/
|
||||
/* Initialize list head, so that it will
|
||||
* not fail in cleanup.
|
||||
*/
|
||||
InitializeListHead(&Vcb->VcbLinks);
|
||||
|
||||
/* Setup FCB Header. */
|
||||
/* Setup FCB Header */
|
||||
Vcb->Header.NodeTypeCode = FAT_NTC_VCB;
|
||||
Vcb->Header.NodeByteSize = sizeof(*Vcb);
|
||||
|
||||
|
@ -591,55 +537,54 @@ FatInitializeVcb(
|
|||
Vcb->TargetDeviceObject = TargetDeviceObject;
|
||||
ObReferenceObject(TargetDeviceObject);
|
||||
|
||||
/* Setup FCB Header. */
|
||||
/* Setup FCB Header */
|
||||
ExInitializeFastMutex(&Vcb->HeaderMutex);
|
||||
FsRtlSetupAdvancedHeader(&Vcb->Header, &Vcb->HeaderMutex);
|
||||
|
||||
/* Create Volume File Object. */
|
||||
/* Create Volume File Object */
|
||||
Vcb->VolumeFileObject = IoCreateStreamFileObject(NULL,
|
||||
Vcb->TargetDeviceObject);
|
||||
Vcb->TargetDeviceObject);
|
||||
|
||||
/* We have to setup all FCB fields needed for CC. */
|
||||
/* We have to setup all FCB fields needed for CC */
|
||||
Vcb->VolumeFileObject->FsContext = Vcb;
|
||||
Vcb->VolumeFileObject->SectionObjectPointer = &Vcb->SectionObjectPointers;
|
||||
|
||||
|
||||
/* At least full boot sector should be available. */
|
||||
/* At least full boot sector should be available */
|
||||
Vcb->Header.FileSize.QuadPart = sizeof(PACKED_BOOT_SECTOR);
|
||||
Vcb->Header.AllocationSize.QuadPart = sizeof(PACKED_BOOT_SECTOR);
|
||||
Vcb->Header.ValidDataLength.HighPart = MAXLONG;
|
||||
Vcb->Header.ValidDataLength.LowPart = MAXULONG;
|
||||
|
||||
/* Initialize CC. */
|
||||
/* Initialize CC */
|
||||
CcInitializeCacheMap(Vcb->VolumeFileObject,
|
||||
(PCC_FILE_SIZES) &Vcb->Header.AllocationSize,
|
||||
FALSE,
|
||||
&FatGlobalData.CacheMgrNoopCallbacks,
|
||||
Vcb);
|
||||
(PCC_FILE_SIZES)&Vcb->Header.AllocationSize,
|
||||
FALSE,
|
||||
&FatGlobalData.CacheMgrNoopCallbacks,
|
||||
Vcb);
|
||||
|
||||
/* Read boot sector */
|
||||
Offset.QuadPart = 0;
|
||||
Bcb = NULL;
|
||||
/*
|
||||
* Note: Volume Read path does not require
|
||||
* any of the parameters set further
|
||||
* in this routine.
|
||||
*/
|
||||
Offset.QuadPart = 0;
|
||||
Bcb = NULL;
|
||||
|
||||
/* Note: Volume Read path does not require
|
||||
* any of the parameters set further
|
||||
* in this routine.
|
||||
*/
|
||||
if (CcMapData(Vcb->VolumeFileObject,
|
||||
&Offset,
|
||||
sizeof(PACKED_BOOT_SECTOR),
|
||||
TRUE,
|
||||
&Bcb,
|
||||
&Buffer))
|
||||
&Offset,
|
||||
sizeof(PACKED_BOOT_SECTOR),
|
||||
TRUE,
|
||||
&Bcb,
|
||||
&Buffer))
|
||||
{
|
||||
PPACKED_BOOT_SECTOR BootSector = (PPACKED_BOOT_SECTOR) Buffer;
|
||||
FatUnpackBios(&Vcb->Bpb, &BootSector->PackedBpb);
|
||||
if (!(FatBootSectorJumpValid(BootSector->Jump)
|
||||
&& FatValidBpb(&Vcb->Bpb)))
|
||||
if (!(FatBootSectorJumpValid(BootSector->Jump) &&
|
||||
FatValidBpb(&Vcb->Bpb)))
|
||||
{
|
||||
Status = STATUS_UNRECOGNIZED_VOLUME;
|
||||
}
|
||||
CopyUchar4( &Vpb->SerialNumber, BootSector->Id );
|
||||
CopyUchar4(&Vpb->SerialNumber, BootSector->Id);
|
||||
CcUnpinData(Bcb);
|
||||
}
|
||||
else
|
||||
|
@ -647,7 +592,10 @@ FatInitializeVcb(
|
|||
Status = STATUS_UNRECOGNIZED_VOLUME;
|
||||
goto FatInitializeVcbCleanup;
|
||||
}
|
||||
|
||||
/* Call helper function */
|
||||
FatiInitializeVcb(Vcb);
|
||||
|
||||
/* Add this Vcb to grobal Vcb list. */
|
||||
InsertTailList(&FatGlobalData.VcbListHead, &Vcb->VcbLinks);
|
||||
return STATUS_SUCCESS;
|
||||
|
@ -660,8 +608,7 @@ FatInitializeVcbCleanup:
|
|||
}
|
||||
|
||||
VOID
|
||||
FatUninitializeVcb(
|
||||
IN PVCB Vcb)
|
||||
FatUninitializeVcb(IN PVCB Vcb)
|
||||
{
|
||||
LARGE_INTEGER ZeroSize;
|
||||
|
||||
|
@ -675,6 +622,7 @@ FatUninitializeVcb(
|
|||
ObDereferenceObject(Vcb->VolumeFileObject);
|
||||
Vcb->VolumeFileObject = NULL;
|
||||
}
|
||||
|
||||
/* Unlink from global Vcb list. */
|
||||
RemoveEntryList(&Vcb->VcbLinks);
|
||||
|
||||
|
|
Loading…
Reference in a new issue