mirror of
https://github.com/reactos/reactos.git
synced 2024-12-26 17:14:41 +00:00
fix uninitialized variable
svn path=/trunk/; revision=18981
This commit is contained in:
parent
7783f0f747
commit
13415bb36a
1 changed files with 67 additions and 67 deletions
|
@ -37,22 +37,22 @@ vfat8Dot3ToString (PFAT_DIR_ENTRY pEntry, PUNICODE_STRING NameU)
|
||||||
OEM_STRING StringA;
|
OEM_STRING StringA;
|
||||||
USHORT Length;
|
USHORT Length;
|
||||||
CHAR cString[12];
|
CHAR cString[12];
|
||||||
|
|
||||||
RtlCopyMemory(cString, pEntry->ShortName, 11);
|
RtlCopyMemory(cString, pEntry->ShortName, 11);
|
||||||
cString[11] = 0;
|
cString[11] = 0;
|
||||||
if (cString[0] == 0x05)
|
if (cString[0] == 0x05)
|
||||||
{
|
{
|
||||||
cString[0] = 0xe5;
|
cString[0] = 0xe5;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringA.Buffer = cString;
|
StringA.Buffer = cString;
|
||||||
for (StringA.Length = 0;
|
for (StringA.Length = 0;
|
||||||
StringA.Length < 8 && StringA.Buffer[StringA.Length] != ' ';
|
StringA.Length < 8 && StringA.Buffer[StringA.Length] != ' ';
|
||||||
StringA.Length++);
|
StringA.Length++);
|
||||||
StringA.MaximumLength = StringA.Length;
|
StringA.MaximumLength = StringA.Length;
|
||||||
|
|
||||||
RtlOemStringToUnicodeString(NameU, &StringA, FALSE);
|
RtlOemStringToUnicodeString(NameU, &StringA, FALSE);
|
||||||
|
|
||||||
if (pEntry->lCase & VFAT_CASE_LOWER_BASE)
|
if (pEntry->lCase & VFAT_CASE_LOWER_BASE)
|
||||||
{
|
{
|
||||||
RtlDowncaseUnicodeString(NameU, NameU, FALSE);
|
RtlDowncaseUnicodeString(NameU, NameU, FALSE);
|
||||||
|
@ -69,7 +69,7 @@ vfat8Dot3ToString (PFAT_DIR_ENTRY pEntry, PUNICODE_STRING NameU)
|
||||||
}
|
}
|
||||||
NameU->Length = 0;
|
NameU->Length = 0;
|
||||||
NameU->MaximumLength -= Length;
|
NameU->MaximumLength -= Length;
|
||||||
|
|
||||||
StringA.Buffer = &cString[8];
|
StringA.Buffer = &cString[8];
|
||||||
for (StringA.Length = 0;
|
for (StringA.Length = 0;
|
||||||
StringA.Length < 3 && StringA.Buffer[StringA.Length] != ' ';
|
StringA.Length < 3 && StringA.Buffer[StringA.Length] != ' ';
|
||||||
|
@ -103,13 +103,13 @@ ReadVolumeLabel (PDEVICE_EXTENSION DeviceExt, PVPB Vpb)
|
||||||
ULONG SizeDirEntry;
|
ULONG SizeDirEntry;
|
||||||
ULONG EntriesPerPage;
|
ULONG EntriesPerPage;
|
||||||
OEM_STRING StringO;
|
OEM_STRING StringO;
|
||||||
|
|
||||||
NameU.Buffer = Vpb->VolumeLabel;
|
NameU.Buffer = Vpb->VolumeLabel;
|
||||||
NameU.Length = 0;
|
NameU.Length = 0;
|
||||||
NameU.MaximumLength = sizeof(Vpb->VolumeLabel);
|
NameU.MaximumLength = sizeof(Vpb->VolumeLabel);
|
||||||
*(Vpb->VolumeLabel) = 0;
|
*(Vpb->VolumeLabel) = 0;
|
||||||
Vpb->VolumeLabelLength = 0;
|
Vpb->VolumeLabelLength = 0;
|
||||||
|
|
||||||
if (DeviceExt->Flags & VCB_IS_FATX)
|
if (DeviceExt->Flags & VCB_IS_FATX)
|
||||||
{
|
{
|
||||||
SizeDirEntry = sizeof(FATX_DIR_ENTRY);
|
SizeDirEntry = sizeof(FATX_DIR_ENTRY);
|
||||||
|
@ -120,11 +120,11 @@ ReadVolumeLabel (PDEVICE_EXTENSION DeviceExt, PVPB Vpb)
|
||||||
SizeDirEntry = sizeof(FAT_DIR_ENTRY);
|
SizeDirEntry = sizeof(FAT_DIR_ENTRY);
|
||||||
EntriesPerPage = FAT_ENTRIES_PER_PAGE;
|
EntriesPerPage = FAT_ENTRIES_PER_PAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExAcquireResourceExclusiveLite (&DeviceExt->DirResource, TRUE);
|
ExAcquireResourceExclusiveLite (&DeviceExt->DirResource, TRUE);
|
||||||
pFcb = vfatOpenRootFCB (DeviceExt);
|
pFcb = vfatOpenRootFCB (DeviceExt);
|
||||||
ExReleaseResourceLite (&DeviceExt->DirResource);
|
ExReleaseResourceLite (&DeviceExt->DirResource);
|
||||||
|
|
||||||
FileOffset.QuadPart = 0;
|
FileOffset.QuadPart = 0;
|
||||||
if (CcMapData(pFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, &Context, (PVOID*)&Entry))
|
if (CcMapData(pFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, &Context, (PVOID*)&Entry))
|
||||||
{
|
{
|
||||||
|
@ -171,7 +171,7 @@ ReadVolumeLabel (PDEVICE_EXTENSION DeviceExt, PVPB Vpb)
|
||||||
ExAcquireResourceExclusiveLite (&DeviceExt->DirResource, TRUE);
|
ExAcquireResourceExclusiveLite (&DeviceExt->DirResource, TRUE);
|
||||||
vfatReleaseFCB (DeviceExt, pFcb);
|
vfatReleaseFCB (DeviceExt, pFcb);
|
||||||
ExReleaseResourceLite (&DeviceExt->DirResource);
|
ExReleaseResourceLite (&DeviceExt->DirResource);
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,11 +196,11 @@ FindFile (
|
||||||
UNICODE_STRING PathNameU;
|
UNICODE_STRING PathNameU;
|
||||||
UNICODE_STRING FileToFindUpcase;
|
UNICODE_STRING FileToFindUpcase;
|
||||||
BOOLEAN WildCard;
|
BOOLEAN WildCard;
|
||||||
|
|
||||||
DPRINT ("FindFile(Parent %x, FileToFind '%wZ', DirIndex: %d)\n",
|
DPRINT ("FindFile(Parent %x, FileToFind '%wZ', DirIndex: %d)\n",
|
||||||
Parent, FileToFindU, DirContext->DirIndex);
|
Parent, FileToFindU, DirContext->DirIndex);
|
||||||
DPRINT ("FindFile: Path %wZ)\n",&Parent->PathNameU);
|
DPRINT ("FindFile: Path %wZ)\n",&Parent->PathNameU);
|
||||||
|
|
||||||
PathNameBufferLength = LONGNAME_MAX_LENGTH * sizeof(WCHAR);
|
PathNameBufferLength = LONGNAME_MAX_LENGTH * sizeof(WCHAR);
|
||||||
PathNameBuffer = ExAllocatePool(NonPagedPool, PathNameBufferLength + sizeof(WCHAR));
|
PathNameBuffer = ExAllocatePool(NonPagedPool, PathNameBufferLength + sizeof(WCHAR));
|
||||||
if (!PathNameBuffer)
|
if (!PathNameBuffer)
|
||||||
|
@ -208,16 +208,16 @@ FindFile (
|
||||||
CHECKPOINT1;
|
CHECKPOINT1;
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
PathNameU.Buffer = PathNameBuffer;
|
PathNameU.Buffer = PathNameBuffer;
|
||||||
PathNameU.Length = 0;
|
PathNameU.Length = 0;
|
||||||
PathNameU.MaximumLength = PathNameBufferLength;
|
PathNameU.MaximumLength = PathNameBufferLength;
|
||||||
|
|
||||||
DirContext->LongNameU.Length = 0;
|
DirContext->LongNameU.Length = 0;
|
||||||
DirContext->ShortNameU.Length = 0;
|
DirContext->ShortNameU.Length = 0;
|
||||||
|
|
||||||
WildCard = FsRtlDoesNameContainWildCards(FileToFindU);
|
WildCard = FsRtlDoesNameContainWildCards(FileToFindU);
|
||||||
|
|
||||||
if (WildCard == FALSE)
|
if (WildCard == FALSE)
|
||||||
{
|
{
|
||||||
/* if there is no '*?' in the search name, than look first for an existing fcb */
|
/* if there is no '*?' in the search name, than look first for an existing fcb */
|
||||||
|
@ -258,7 +258,7 @@ FindFile (
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FsRtlIsNameInExpression need the searched string to be upcase,
|
/* FsRtlIsNameInExpression need the searched string to be upcase,
|
||||||
* even if IgnoreCase is specified */
|
* even if IgnoreCase is specified */
|
||||||
Status = RtlUpcaseUnicodeString(&FileToFindUpcase, FileToFindU, TRUE);
|
Status = RtlUpcaseUnicodeString(&FileToFindUpcase, FileToFindU, TRUE);
|
||||||
|
@ -268,7 +268,7 @@ FindFile (
|
||||||
ExFreePool(PathNameBuffer);
|
ExFreePool(PathNameBuffer);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(TRUE)
|
while(TRUE)
|
||||||
{
|
{
|
||||||
Status = DeviceExt->GetNextDirEntry(&Context, &Page, Parent, DirContext, First);
|
Status = DeviceExt->GetNextDirEntry(&Context, &Page, Parent, DirContext, First);
|
||||||
|
@ -292,7 +292,7 @@ FindFile (
|
||||||
Found = FsRtlAreNamesEqual(&DirContext->LongNameU, FileToFindU, TRUE, NULL) ||
|
Found = FsRtlAreNamesEqual(&DirContext->LongNameU, FileToFindU, TRUE, NULL) ||
|
||||||
FsRtlAreNamesEqual(&DirContext->ShortNameU, FileToFindU, TRUE, NULL);
|
FsRtlAreNamesEqual(&DirContext->ShortNameU, FileToFindU, TRUE, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Found)
|
if (Found)
|
||||||
{
|
{
|
||||||
if (WildCard)
|
if (WildCard)
|
||||||
|
@ -315,7 +315,7 @@ FindFile (
|
||||||
DPRINT("%d\n", DirContext->LongNameU.Length);
|
DPRINT("%d\n", DirContext->LongNameU.Length);
|
||||||
DPRINT("FindFile: new Name %wZ, DirIndex %d\n",
|
DPRINT("FindFile: new Name %wZ, DirIndex %d\n",
|
||||||
&DirContext->LongNameU, DirContext->DirIndex);
|
&DirContext->LongNameU, DirContext->DirIndex);
|
||||||
|
|
||||||
if (Context)
|
if (Context)
|
||||||
{
|
{
|
||||||
CcUnpinData(Context);
|
CcUnpinData(Context);
|
||||||
|
@ -326,12 +326,12 @@ FindFile (
|
||||||
}
|
}
|
||||||
DirContext->DirIndex++;
|
DirContext->DirIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Context)
|
if (Context)
|
||||||
{
|
{
|
||||||
CcUnpinData(Context);
|
CcUnpinData(Context);
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlFreeUnicodeString(&FileToFindUpcase);
|
RtlFreeUnicodeString(&FileToFindUpcase);
|
||||||
ExFreePool(PathNameBuffer);
|
ExFreePool(PathNameBuffer);
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -350,13 +350,13 @@ VfatOpenFile (
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
UNICODE_STRING PathNameU;
|
UNICODE_STRING PathNameU;
|
||||||
WCHAR Buffer[260];
|
WCHAR Buffer[260];
|
||||||
|
|
||||||
DPRINT ("VfatOpenFile(%08lx, %08lx, '%wZ')\n", DeviceExt, FileObject, &FileObject->FileName);
|
DPRINT ("VfatOpenFile(%08lx, %08lx, '%wZ')\n", DeviceExt, FileObject, &FileObject->FileName);
|
||||||
|
|
||||||
if (FileObject->RelatedFileObject)
|
if (FileObject->RelatedFileObject)
|
||||||
{
|
{
|
||||||
DPRINT ("'%wZ'\n", &FileObject->RelatedFileObject->FileName);
|
DPRINT ("'%wZ'\n", &FileObject->RelatedFileObject->FileName);
|
||||||
|
|
||||||
*ParentFcb = FileObject->RelatedFileObject->FsContext;
|
*ParentFcb = FileObject->RelatedFileObject->FsContext;
|
||||||
(*ParentFcb)->RefCount++;
|
(*ParentFcb)->RefCount++;
|
||||||
}
|
}
|
||||||
|
@ -364,7 +364,7 @@ VfatOpenFile (
|
||||||
{
|
{
|
||||||
*ParentFcb = NULL;
|
*ParentFcb = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!DeviceExt->FatInfo.FixedMedia)
|
if (!DeviceExt->FatInfo.FixedMedia)
|
||||||
{
|
{
|
||||||
Status = VfatBlockDeviceIoControl (DeviceExt->StorageDevice,
|
Status = VfatBlockDeviceIoControl (DeviceExt->StorageDevice,
|
||||||
|
@ -374,17 +374,17 @@ VfatOpenFile (
|
||||||
NULL,
|
NULL,
|
||||||
0,
|
0,
|
||||||
FALSE);
|
FALSE);
|
||||||
|
|
||||||
if (Status == STATUS_VERIFY_REQUIRED)
|
if (Status == STATUS_VERIFY_REQUIRED)
|
||||||
|
|
||||||
{
|
{
|
||||||
PDEVICE_OBJECT DeviceToVerify;
|
PDEVICE_OBJECT DeviceToVerify;
|
||||||
|
|
||||||
DPRINT ("Media change detected!\n");
|
DPRINT ("Media change detected!\n");
|
||||||
DPRINT ("Device %p\n", DeviceExt->StorageDevice);
|
DPRINT ("Device %p\n", DeviceExt->StorageDevice);
|
||||||
|
|
||||||
DeviceToVerify = IoGetDeviceToVerify (PsGetCurrentThread ());
|
DeviceToVerify = IoGetDeviceToVerify (PsGetCurrentThread ());
|
||||||
|
|
||||||
IoSetDeviceToVerify (PsGetCurrentThread (),
|
IoSetDeviceToVerify (PsGetCurrentThread (),
|
||||||
NULL);
|
NULL);
|
||||||
Status = IoVerifyVolume (DeviceExt->StorageDevice,
|
Status = IoVerifyVolume (DeviceExt->StorageDevice,
|
||||||
|
@ -397,12 +397,12 @@ VfatOpenFile (
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*ParentFcb)
|
if (*ParentFcb)
|
||||||
{
|
{
|
||||||
(*ParentFcb)->RefCount++;
|
(*ParentFcb)->RefCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
PathNameU.Buffer = Buffer;
|
PathNameU.Buffer = Buffer;
|
||||||
PathNameU.Length = 0;
|
PathNameU.Length = 0;
|
||||||
PathNameU.MaximumLength = sizeof(Buffer);
|
PathNameU.MaximumLength = sizeof(Buffer);
|
||||||
|
@ -413,10 +413,10 @@ VfatOpenFile (
|
||||||
PathNameU.Length -= sizeof(WCHAR);
|
PathNameU.Length -= sizeof(WCHAR);
|
||||||
}
|
}
|
||||||
PathNameU.Buffer[PathNameU.Length / sizeof(WCHAR)] = 0;
|
PathNameU.Buffer[PathNameU.Length / sizeof(WCHAR)] = 0;
|
||||||
|
|
||||||
/* try first to find an existing FCB in memory */
|
/* try first to find an existing FCB in memory */
|
||||||
DPRINT ("Checking for existing FCB in memory\n");
|
DPRINT ("Checking for existing FCB in memory\n");
|
||||||
|
|
||||||
Status = vfatGetFCBForFile (DeviceExt, ParentFcb, &Fcb, &PathNameU);
|
Status = vfatGetFCBForFile (DeviceExt, ParentFcb, &Fcb, &PathNameU);
|
||||||
if (!NT_SUCCESS (Status))
|
if (!NT_SUCCESS (Status))
|
||||||
{
|
{
|
||||||
|
@ -449,14 +449,14 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
PDEVICE_EXTENSION DeviceExt;
|
PDEVICE_EXTENSION DeviceExt;
|
||||||
ULONG RequestedDisposition, RequestedOptions;
|
ULONG RequestedDisposition, RequestedOptions;
|
||||||
PVFATCCB pCcb;
|
PVFATCCB pCcb;
|
||||||
PVFATFCB pFcb;
|
PVFATFCB pFcb = NULL;
|
||||||
PVFATFCB ParentFcb;
|
PVFATFCB ParentFcb;
|
||||||
PWCHAR c, last;
|
PWCHAR c, last;
|
||||||
BOOLEAN PagingFileCreate = FALSE;
|
BOOLEAN PagingFileCreate = FALSE;
|
||||||
LARGE_INTEGER AllocationSize;
|
LARGE_INTEGER AllocationSize;
|
||||||
BOOLEAN Dots;
|
BOOLEAN Dots;
|
||||||
UNICODE_STRING FileNameU;
|
UNICODE_STRING FileNameU;
|
||||||
|
|
||||||
/* Unpack the various parameters. */
|
/* Unpack the various parameters. */
|
||||||
Stack = IoGetCurrentIrpStackLocation (Irp);
|
Stack = IoGetCurrentIrpStackLocation (Irp);
|
||||||
RequestedDisposition = ((Stack->Parameters.Create.Options >> 24) & 0xff);
|
RequestedDisposition = ((Stack->Parameters.Create.Options >> 24) & 0xff);
|
||||||
|
@ -465,14 +465,14 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
PagingFileCreate = (Stack->Flags & SL_OPEN_PAGING_FILE) ? TRUE : FALSE;
|
PagingFileCreate = (Stack->Flags & SL_OPEN_PAGING_FILE) ? TRUE : FALSE;
|
||||||
FileObject = Stack->FileObject;
|
FileObject = Stack->FileObject;
|
||||||
DeviceExt = DeviceObject->DeviceExtension;
|
DeviceExt = DeviceObject->DeviceExtension;
|
||||||
|
|
||||||
/* Check their validity. */
|
/* Check their validity. */
|
||||||
if (RequestedOptions & FILE_DIRECTORY_FILE &&
|
if (RequestedOptions & FILE_DIRECTORY_FILE &&
|
||||||
RequestedDisposition == FILE_SUPERSEDE)
|
RequestedDisposition == FILE_SUPERSEDE)
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return(STATUS_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This a open operation for the volume itself */
|
/* This a open operation for the volume itself */
|
||||||
if (FileObject->FileName.Length == 0 &&
|
if (FileObject->FileName.Length == 0 &&
|
||||||
FileObject->RelatedFileObject == NULL)
|
FileObject->RelatedFileObject == NULL)
|
||||||
|
@ -498,11 +498,11 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
FileObject->FsContext = pFcb;
|
FileObject->FsContext = pFcb;
|
||||||
FileObject->FsContext2 = pCcb;
|
FileObject->FsContext2 = pCcb;
|
||||||
pFcb->RefCount++;
|
pFcb->RefCount++;
|
||||||
|
|
||||||
Irp->IoStatus.Information = FILE_OPENED;
|
Irp->IoStatus.Information = FILE_OPENED;
|
||||||
return(STATUS_SUCCESS);
|
return(STATUS_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for illegal characters and illegale dot sequences in the file name
|
* Check for illegal characters and illegale dot sequences in the file name
|
||||||
*/
|
*/
|
||||||
|
@ -524,16 +524,16 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
{
|
{
|
||||||
Dots = FALSE;
|
Dots = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*c != '\\' && vfatIsLongIllegal(*c))
|
if (*c != '\\' && vfatIsLongIllegal(*c))
|
||||||
{
|
{
|
||||||
return(STATUS_OBJECT_NAME_INVALID);
|
return(STATUS_OBJECT_NAME_INVALID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Try opening the file. */
|
/* Try opening the file. */
|
||||||
Status = VfatOpenFile (DeviceExt, FileObject, &ParentFcb);
|
Status = VfatOpenFile (DeviceExt, FileObject, &ParentFcb);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the directory containing the file to open doesn't exist then
|
* If the directory containing the file to open doesn't exist then
|
||||||
* fail immediately
|
* fail immediately
|
||||||
|
@ -548,7 +548,7 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
}
|
}
|
||||||
return(Status);
|
return(Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the file open failed then create the required file
|
* If the file open failed then create the required file
|
||||||
*/
|
*/
|
||||||
|
@ -561,7 +561,7 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
{
|
{
|
||||||
ULONG Attributes;
|
ULONG Attributes;
|
||||||
Attributes = Stack->Parameters.Create.FileAttributes;
|
Attributes = Stack->Parameters.Create.FileAttributes;
|
||||||
|
|
||||||
vfatSplitPathName(&FileObject->FileName, NULL, &FileNameU);
|
vfatSplitPathName(&FileObject->FileName, NULL, &FileNameU);
|
||||||
Status = VfatAddEntry (DeviceExt, &FileNameU, &pFcb, ParentFcb, RequestedOptions,
|
Status = VfatAddEntry (DeviceExt, &FileNameU, &pFcb, ParentFcb, RequestedOptions,
|
||||||
(UCHAR)(Attributes & FILE_ATTRIBUTE_VALID_FLAGS));
|
(UCHAR)(Attributes & FILE_ATTRIBUTE_VALID_FLAGS));
|
||||||
|
@ -574,9 +574,9 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
vfatReleaseFCB (DeviceExt, pFcb);
|
vfatReleaseFCB (DeviceExt, pFcb);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Irp->IoStatus.Information = FILE_CREATED;
|
Irp->IoStatus.Information = FILE_CREATED;
|
||||||
|
|
||||||
VfatSetAllocationSizeInformation(FileObject,
|
VfatSetAllocationSizeInformation(FileObject,
|
||||||
pFcb,
|
pFcb,
|
||||||
DeviceExt,
|
DeviceExt,
|
||||||
|
@ -584,7 +584,7 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
VfatSetExtendedAttributes(FileObject,
|
VfatSetExtendedAttributes(FileObject,
|
||||||
Irp->AssociatedIrp.SystemBuffer,
|
Irp->AssociatedIrp.SystemBuffer,
|
||||||
Stack->Parameters.Create.EaLength);
|
Stack->Parameters.Create.EaLength);
|
||||||
|
|
||||||
if (PagingFileCreate)
|
if (PagingFileCreate)
|
||||||
{
|
{
|
||||||
pFcb->Flags |= FCB_IS_PAGE_FILE;
|
pFcb->Flags |= FCB_IS_PAGE_FILE;
|
||||||
|
@ -614,9 +614,9 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
VfatCloseFile (DeviceExt, FileObject);
|
VfatCloseFile (DeviceExt, FileObject);
|
||||||
return(STATUS_OBJECT_NAME_COLLISION);
|
return(STATUS_OBJECT_NAME_COLLISION);
|
||||||
}
|
}
|
||||||
|
|
||||||
pFcb = FileObject->FsContext;
|
pFcb = FileObject->FsContext;
|
||||||
|
|
||||||
if (pFcb->OpenHandleCount != 0)
|
if (pFcb->OpenHandleCount != 0)
|
||||||
{
|
{
|
||||||
Status = IoCheckShareAccess(Stack->Parameters.Create.SecurityContext->DesiredAccess,
|
Status = IoCheckShareAccess(Stack->Parameters.Create.SecurityContext->DesiredAccess,
|
||||||
|
@ -630,7 +630,7 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
return(Status);
|
return(Status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check the file has the requested attributes
|
* Check the file has the requested attributes
|
||||||
*/
|
*/
|
||||||
|
@ -646,7 +646,7 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
VfatCloseFile (DeviceExt, FileObject);
|
VfatCloseFile (DeviceExt, FileObject);
|
||||||
return(STATUS_NOT_A_DIRECTORY);
|
return(STATUS_NOT_A_DIRECTORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PagingFileCreate)
|
if (PagingFileCreate)
|
||||||
{
|
{
|
||||||
/* FIXME:
|
/* FIXME:
|
||||||
|
@ -678,8 +678,8 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return(STATUS_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (RequestedDisposition == FILE_OVERWRITE ||
|
if (RequestedDisposition == FILE_OVERWRITE ||
|
||||||
RequestedDisposition == FILE_OVERWRITE_IF)
|
RequestedDisposition == FILE_OVERWRITE_IF)
|
||||||
{
|
{
|
||||||
|
@ -694,8 +694,8 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
return(Status);
|
return(Status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Supersede the file */
|
/* Supersede the file */
|
||||||
if (RequestedDisposition == FILE_SUPERSEDE)
|
if (RequestedDisposition == FILE_SUPERSEDE)
|
||||||
{
|
{
|
||||||
|
@ -712,7 +712,7 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
Irp->IoStatus.Information = FILE_OPENED;
|
Irp->IoStatus.Information = FILE_OPENED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pFcb->OpenHandleCount == 0)
|
if (pFcb->OpenHandleCount == 0)
|
||||||
{
|
{
|
||||||
IoSetShareAccess(Stack->Parameters.Create.SecurityContext->DesiredAccess,
|
IoSetShareAccess(Stack->Parameters.Create.SecurityContext->DesiredAccess,
|
||||||
|
@ -726,13 +726,13 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
|
||||||
FileObject,
|
FileObject,
|
||||||
&pFcb->FCBShareAccess
|
&pFcb->FCBShareAccess
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pFcb->OpenHandleCount++;
|
pFcb->OpenHandleCount++;
|
||||||
|
|
||||||
/* FIXME : test write access if requested */
|
/* FIXME : test write access if requested */
|
||||||
|
|
||||||
return(Status);
|
return(Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -744,9 +744,9 @@ VfatCreate (PVFAT_IRP_CONTEXT IrpContext)
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
ASSERT(IrpContext);
|
ASSERT(IrpContext);
|
||||||
|
|
||||||
if (IrpContext->DeviceObject == VfatGlobalData->DeviceObject)
|
if (IrpContext->DeviceObject == VfatGlobalData->DeviceObject)
|
||||||
{
|
{
|
||||||
/* DeviceObject represents FileSystem instead of logical volume */
|
/* DeviceObject represents FileSystem instead of logical volume */
|
||||||
|
@ -757,17 +757,17 @@ VfatCreate (PVFAT_IRP_CONTEXT IrpContext)
|
||||||
VfatFreeIrpContext(IrpContext);
|
VfatFreeIrpContext(IrpContext);
|
||||||
return(STATUS_SUCCESS);
|
return(STATUS_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(IrpContext->Flags & IRPCONTEXT_CANWAIT))
|
if (!(IrpContext->Flags & IRPCONTEXT_CANWAIT))
|
||||||
{
|
{
|
||||||
return(VfatQueueRequest (IrpContext));
|
return(VfatQueueRequest (IrpContext));
|
||||||
}
|
}
|
||||||
|
|
||||||
IrpContext->Irp->IoStatus.Information = 0;
|
IrpContext->Irp->IoStatus.Information = 0;
|
||||||
ExAcquireResourceExclusiveLite (&IrpContext->DeviceExt->DirResource, TRUE);
|
ExAcquireResourceExclusiveLite (&IrpContext->DeviceExt->DirResource, TRUE);
|
||||||
Status = VfatCreateFile (IrpContext->DeviceObject, IrpContext->Irp);
|
Status = VfatCreateFile (IrpContext->DeviceObject, IrpContext->Irp);
|
||||||
ExReleaseResourceLite (&IrpContext->DeviceExt->DirResource);
|
ExReleaseResourceLite (&IrpContext->DeviceExt->DirResource);
|
||||||
|
|
||||||
IrpContext->Irp->IoStatus.Status = Status;
|
IrpContext->Irp->IoStatus.Status = Status;
|
||||||
IoCompleteRequest (IrpContext->Irp,
|
IoCompleteRequest (IrpContext->Irp,
|
||||||
(CCHAR)(NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT));
|
(CCHAR)(NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT));
|
||||||
|
|
Loading…
Reference in a new issue