Implemented VfatGetInternalInformation().
svn path=/trunk/; revision=2335
-/* $Id: finfo.c,v 1.9 2001/08/14 20:47:30 hbirr Exp $
+/* $Id: finfo.c,v 1.10 2001/11/01 10:44:11 hbirr Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
*/
{
PDEVICE_EXTENSION DeviceExtension;
*/
{
PDEVICE_EXTENSION DeviceExtension;
- unsigned long AllocSize;
if (*BufferLength < sizeof(FILE_STANDARD_INFORMATION))
return STATUS_BUFFER_OVERFLOW;
if (*BufferLength < sizeof(FILE_STANDARD_INFORMATION))
return STATUS_BUFFER_OVERFLOW;
RtlZeroMemory(StandardInfo,
sizeof(FILE_STANDARD_INFORMATION));
RtlZeroMemory(StandardInfo,
sizeof(FILE_STANDARD_INFORMATION));
- /* Make allocsize a rounded up multiple of BytesPerCluster */
- AllocSize = ((FCB->entry.FileSize + DeviceExtension->BytesPerCluster - 1) /
- DeviceExtension->BytesPerCluster) *
- DeviceExtension->BytesPerCluster;
-
- StandardInfo->AllocationSize = RtlConvertUlongToLargeInteger (AllocSize);
- StandardInfo->EndOfFile =
- RtlConvertUlongToLargeInteger (FCB->entry.FileSize);
+ StandardInfo->AllocationSize = FCB->RFCB.AllocationSize;
+ StandardInfo->EndOfFile = FCB->RFCB.FileSize;
StandardInfo->NumberOfLinks = 0;
StandardInfo->NumberOfLinks = 0;
- StandardInfo->DeletePending = FALSE;
- if ((FCB->entry.Attrib & 0x10) > 0)
- {
- StandardInfo->Directory = TRUE;
- }
- else
- {
- StandardInfo->Directory = FALSE;
- }
-
+ StandardInfo->DeletePending = FCB->Flags & FCB_DELETE_PENDING ? TRUE : FALSE;
+ StandardInfo->Directory = FCB->entry.Attrib & 0x10 ? TRUE : FALSE;
+
*BufferLength -= sizeof(FILE_STANDARD_INFORMATION);
return(STATUS_SUCCESS);
}
*BufferLength -= sizeof(FILE_STANDARD_INFORMATION);
return(STATUS_SUCCESS);
}
+static NTSTATUS
+VfatGetInternalInformation(PVFATFCB Fcb,
+ PFILE_INTERNAL_INFORMATION InternalInfo,
+ PULONG BufferLength)
+{
+ assert (InternalInfo);
+ assert (Fcb);
+ if (*BufferLength < sizeof(FILE_INTERNAL_INFORMATION))
+ return STATUS_BUFFER_OVERFLOW;
+ // FIXME: get a real index, that can be used in a create operation
+ InternalInfo->IndexNumber.QuadPart = 0;
+ *BufferLength -= sizeof(FILE_INTERNAL_INFORMATION);
+ return STATUS_SUCCESS;
+}
NTSTATUS STDCALL
VfatQueryInformation(PDEVICE_OBJECT DeviceObject,
NTSTATUS STDCALL
VfatQueryInformation(PDEVICE_OBJECT DeviceObject,
SystemBuffer = Irp->AssociatedIrp.SystemBuffer;
BufferLength = Stack->Parameters.QueryFile.Length;
SystemBuffer = Irp->AssociatedIrp.SystemBuffer;
BufferLength = Stack->Parameters.QueryFile.Length;
switch (FileInformationClass)
{
case FileStandardInformation:
switch (FileInformationClass)
{
case FileStandardInformation:
&BufferLength);
break;
case FileInternalInformation:
&BufferLength);
break;
case FileInternalInformation:
+ RC = VfatGetInternalInformation(FCB,
+ SystemBuffer,
+ &BufferLength);
+ break;
case FileAlternateNameInformation:
case FileAllInformation:
RC = STATUS_NOT_IMPLEMENTED;
case FileAlternateNameInformation:
case FileAllInformation:
RC = STATUS_NOT_IMPLEMENTED;