mirror of
https://github.com/reactos/reactos.git
synced 2024-07-01 02:10:07 +00:00
Added file and directory delete functionality (dummy).
svn path=/trunk/; revision=571
This commit is contained in:
parent
10f222cd92
commit
1bfb0f94d9
|
@ -777,7 +777,8 @@ NTSTATUS FindFile(PDEVICE_EXTENSION DeviceExt, PVfatFCB Fcb,
|
||||||
|
|
||||||
if (wcslen(FileToFind)==0)
|
if (wcslen(FileToFind)==0)
|
||||||
{
|
{
|
||||||
TempStr[0] = (WCHAR)'.';
|
CHECKPOINT;
|
||||||
|
TempStr[0] = (WCHAR)'.';
|
||||||
TempStr[1] = 0;
|
TempStr[1] = 0;
|
||||||
FileToFind=&TempStr;
|
FileToFind=&TempStr;
|
||||||
}
|
}
|
||||||
|
@ -785,24 +786,30 @@ NTSTATUS FindFile(PDEVICE_EXTENSION DeviceExt, PVfatFCB Fcb,
|
||||||
{
|
{
|
||||||
DPRINT("Parent->entry.FirstCluster %d\n",Parent->entry.FirstCluster);
|
DPRINT("Parent->entry.FirstCluster %d\n",Parent->entry.FirstCluster);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DPRINT("FindFile '%w'\n", FileToFind);
|
||||||
if (Parent == NULL||Parent->entry.FirstCluster==1)
|
if (Parent == NULL||Parent->entry.FirstCluster==1)
|
||||||
{
|
{
|
||||||
|
CHECKPOINT;
|
||||||
Size = DeviceExt->rootDirectorySectors;//FIXME : in fat32, no limit
|
Size = DeviceExt->rootDirectorySectors;//FIXME : in fat32, no limit
|
||||||
StartingSector = DeviceExt->rootStart;
|
StartingSector = DeviceExt->rootStart;
|
||||||
NextCluster=0;
|
NextCluster=0;
|
||||||
if(FileToFind[0]==0 ||(FileToFind[0]=='\\' && FileToFind[1]==0) ||
|
if(FileToFind[0]==0 ||(FileToFind[0]=='\\' && FileToFind[1]==0) ||
|
||||||
(FileToFind[0]=='.' && FileToFind[1]==0))
|
(FileToFind[0]=='.' && FileToFind[1]==0))
|
||||||
{// it's root : complete essentials fields then return ok
|
{// it's root : complete essentials fields then return ok
|
||||||
|
CHECKPOINT;
|
||||||
memset(Fcb,0,sizeof(VfatFCB));
|
memset(Fcb,0,sizeof(VfatFCB));
|
||||||
memset(Fcb->entry.Filename,' ',11);
|
memset(Fcb->entry.Filename,' ',11);
|
||||||
Fcb->entry.FileSize=DeviceExt->rootDirectorySectors*BLOCKSIZE;
|
Fcb->entry.FileSize=DeviceExt->rootDirectorySectors*BLOCKSIZE;
|
||||||
Fcb->entry.Attrib=FILE_ATTRIBUTE_DIRECTORY;
|
Fcb->entry.Attrib=FILE_ATTRIBUTE_DIRECTORY;
|
||||||
if (DeviceExt->FatType == FAT32)
|
if (DeviceExt->FatType == FAT32)
|
||||||
Fcb->entry.FirstCluster=2;
|
Fcb->entry.FirstCluster=2;
|
||||||
else Fcb->entry.FirstCluster=1;//FIXME : is 1 the good value for mark root?
|
else
|
||||||
if(StartSector) *StartSector=StartingSector;
|
Fcb->entry.FirstCluster=1;//FIXME : is 1 the good value for mark root?
|
||||||
if(Entry) *Entry=0;
|
if(StartSector)
|
||||||
|
*StartSector=StartingSector;
|
||||||
|
if(Entry)
|
||||||
|
*Entry=0;
|
||||||
return(STATUS_SUCCESS);
|
return(STATUS_SUCCESS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -822,7 +829,9 @@ NTSTATUS FindFile(PDEVICE_EXTENSION DeviceExt, PVfatFCB Fcb,
|
||||||
StartingSector=DeviceExt->rootStart;
|
StartingSector=DeviceExt->rootStart;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
CHECKPOINT;
|
||||||
block = ExAllocatePool(NonPagedPool,BLOCKSIZE);
|
block = ExAllocatePool(NonPagedPool,BLOCKSIZE);
|
||||||
|
CHECKPOINT;
|
||||||
if (StartSector && (*StartSector)) StartingSector=*StartSector;
|
if (StartSector && (*StartSector)) StartingSector=*StartSector;
|
||||||
i=(Entry)?(*Entry):0;
|
i=(Entry)?(*Entry):0;
|
||||||
DPRINT("FindFile : start at sector %lx, entry %ld\n",StartingSector,i);
|
DPRINT("FindFile : start at sector %lx, entry %ld\n",StartingSector,i);
|
||||||
|
@ -1024,19 +1033,24 @@ DbgPrint("try related for %w\n",FileName);
|
||||||
ExFreePool(Fcb);
|
ExFreePool(Fcb);
|
||||||
if (ParentFcb != NULL)
|
if (ParentFcb != NULL)
|
||||||
ExFreePool(ParentFcb);
|
ExFreePool(ParentFcb);
|
||||||
if(AbsFileName)ExFreePool(AbsFileName);
|
if(AbsFileName)
|
||||||
return(Status);
|
ExFreePool(AbsFileName);
|
||||||
|
return(Status);
|
||||||
}
|
}
|
||||||
Temp = Fcb;
|
Temp = Fcb;
|
||||||
|
CHECKPOINT;
|
||||||
if (ParentFcb == NULL)
|
if (ParentFcb == NULL)
|
||||||
{
|
{
|
||||||
Fcb = ExAllocatePool(NonPagedPool,sizeof(VfatFCB));
|
Fcb = ExAllocatePool(NonPagedPool,sizeof(VfatFCB));
|
||||||
memset(Fcb,0,sizeof(VfatFCB));
|
memset(Fcb,0,sizeof(VfatFCB));
|
||||||
Fcb->ObjectName=Fcb->PathName;
|
Fcb->ObjectName=Fcb->PathName;
|
||||||
}
|
}
|
||||||
else Fcb = ParentFcb;
|
else
|
||||||
|
Fcb = ParentFcb;
|
||||||
|
CHECKPOINT;
|
||||||
ParentFcb = Temp;
|
ParentFcb = Temp;
|
||||||
}
|
}
|
||||||
|
CHECKPOINT;
|
||||||
FileObject->FsContext =(PVOID) &ParentFcb->NTRequiredFCB;
|
FileObject->FsContext =(PVOID) &ParentFcb->NTRequiredFCB;
|
||||||
newCCB = ExAllocatePool(NonPagedPool,sizeof(VfatCCB));
|
newCCB = ExAllocatePool(NonPagedPool,sizeof(VfatCCB));
|
||||||
memset(newCCB,0,sizeof(VfatCCB));
|
memset(newCCB,0,sizeof(VfatCCB));
|
||||||
|
@ -1478,6 +1492,7 @@ NTSTATUS FsdClose(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
return(Status);
|
return(Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS FsdCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
NTSTATUS FsdCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Create or open a file
|
* FUNCTION: Create or open a file
|
||||||
|
@ -1510,6 +1525,7 @@ NTSTATUS FsdCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
assert(DeviceExt);
|
assert(DeviceExt);
|
||||||
ExAcquireResourceExclusiveLite(&(DeviceExt->Resource),TRUE);
|
ExAcquireResourceExclusiveLite(&(DeviceExt->Resource),TRUE);
|
||||||
Status = FsdOpenFile(DeviceExt,FileObject,FileObject->FileName.Buffer);
|
Status = FsdOpenFile(DeviceExt,FileObject,FileObject->FileName.Buffer);
|
||||||
|
CHECKPOINT;
|
||||||
Irp->IoStatus.Information = 0;
|
Irp->IoStatus.Information = 0;
|
||||||
if(!NT_SUCCESS(Status))
|
if(!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -1517,6 +1533,7 @@ NTSTATUS FsdCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
||RequestedDisposition==FILE_OPEN_IF
|
||RequestedDisposition==FILE_OPEN_IF
|
||||||
||RequestedDisposition==FILE_OVERWRITE_IF)
|
||RequestedDisposition==FILE_OVERWRITE_IF)
|
||||||
{
|
{
|
||||||
|
CHECKPOINT;
|
||||||
Status=addEntry(DeviceExt,FileObject,RequestedOptions
|
Status=addEntry(DeviceExt,FileObject,RequestedOptions
|
||||||
,(Stack->Parameters.Create.FileAttributes & FILE_ATTRIBUTE_VALID_FLAGS));
|
,(Stack->Parameters.Create.FileAttributes & FILE_ATTRIBUTE_VALID_FLAGS));
|
||||||
if(NT_SUCCESS(Status))
|
if(NT_SUCCESS(Status))
|
||||||
|
@ -1554,7 +1571,7 @@ NTSTATUS FsdCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
else Irp->IoStatus.Information = FILE_OPENED;
|
else Irp->IoStatus.Information = FILE_OPENED;
|
||||||
// FIXME : make supersed or overwrite if requested
|
// FIXME : make supersed or overwrite if requested
|
||||||
}
|
}
|
||||||
|
CHECKPOINT;
|
||||||
Irp->IoStatus.Status = Status;
|
Irp->IoStatus.Status = Status;
|
||||||
|
|
||||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
@ -1746,7 +1763,7 @@ NTSTATUS FsdSetPositionInformation(PFILE_OBJECT FileObject,
|
||||||
DPRINT("FsdSetPositionInformation()\n");
|
DPRINT("FsdSetPositionInformation()\n");
|
||||||
|
|
||||||
DPRINT("PositionInfo %x\n", PositionInfo);
|
DPRINT("PositionInfo %x\n", PositionInfo);
|
||||||
DPRINT("Setting position %d\n", PositionInfo->CurrentByteOffset.LowPart);
|
DPRINT("Setting position %d\n", PositionInfo->CurrentByteOffset.u.LowPart);
|
||||||
memcpy(&FileObject->CurrentByteOffset,&PositionInfo->CurrentByteOffset,
|
memcpy(&FileObject->CurrentByteOffset,&PositionInfo->CurrentByteOffset,
|
||||||
sizeof(LARGE_INTEGER));
|
sizeof(LARGE_INTEGER));
|
||||||
|
|
||||||
|
@ -1762,7 +1779,7 @@ NTSTATUS FsdGetPositionInformation(PFILE_OBJECT FileObject,
|
||||||
|
|
||||||
memcpy(&PositionInfo->CurrentByteOffset, &FileObject->CurrentByteOffset,
|
memcpy(&PositionInfo->CurrentByteOffset, &FileObject->CurrentByteOffset,
|
||||||
sizeof(LARGE_INTEGER));
|
sizeof(LARGE_INTEGER));
|
||||||
DPRINT("Getting position %x\n", PositionInfo->CurrentByteOffset.LowPart);
|
DPRINT("Getting position %x\n", PositionInfo->CurrentByteOffset.u.LowPart);
|
||||||
return(STATUS_SUCCESS);
|
return(STATUS_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1790,6 +1807,19 @@ NTSTATUS FsdGetBasicInformation(PFILE_OBJECT FileObject,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS FsdSetDispositionInformation(PFILE_OBJECT FileObject,
|
||||||
|
PVfatFCB FCB,
|
||||||
|
PDEVICE_OBJECT DeviceObject,
|
||||||
|
PFILE_DISPOSITION_INFORMATION DispositionInfo)
|
||||||
|
{
|
||||||
|
DPRINT("FsdSetDispositionInformation()\n");
|
||||||
|
|
||||||
|
FileObject->DeletePending = DispositionInfo->DeleteFile;
|
||||||
|
|
||||||
|
return(STATUS_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS FsdQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
NTSTATUS FsdQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Retrieve the specified file information
|
* FUNCTION: Retrieve the specified file information
|
||||||
|
@ -1895,6 +1925,12 @@ NTSTATUS FsdSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
DeviceObject,
|
DeviceObject,
|
||||||
SystemBuffer);
|
SystemBuffer);
|
||||||
break;
|
break;
|
||||||
|
case FileDispositionInformation:
|
||||||
|
RC = FsdSetDispositionInformation(FileObject,
|
||||||
|
FCB,
|
||||||
|
DeviceObject,
|
||||||
|
SystemBuffer);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
RC = STATUS_NOT_IMPLEMENTED;
|
RC = STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue