From 3fc8b084e5599d44b41f76d35a4945c8a240d578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 2 Nov 2014 22:56:53 +0000 Subject: [PATCH] [NTFS] Implement IRP_MJ_QUERY_INFORMATION/FileNetworkOpenInformation: We are now able to execute some binaries on a NTFS partition. svn path=/trunk/; revision=65204 --- reactos/drivers/filesystems/ntfs/finfo.c | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/reactos/drivers/filesystems/ntfs/finfo.c b/reactos/drivers/filesystems/ntfs/finfo.c index 4afb71aeafa..eb91ae9d60f 100644 --- a/reactos/drivers/filesystems/ntfs/finfo.c +++ b/reactos/drivers/filesystems/ntfs/finfo.c @@ -204,6 +204,31 @@ NtfsGetInternalInformation(PNTFS_FCB Fcb, return STATUS_SUCCESS; } +static +NTSTATUS +NtfsGetNetworkOpenInformation(PNTFS_FCB Fcb, + PDEVICE_EXTENSION DeviceExt, + PFILE_NETWORK_OPEN_INFORMATION NetworkInfo, + PULONG BufferLength) +{ + PFILENAME_ATTRIBUTE FileName = &Fcb->Entry; + + if (*BufferLength < sizeof(FILE_NETWORK_OPEN_INFORMATION)) + return(STATUS_BUFFER_OVERFLOW); + + NetworkInfo->CreationTime.QuadPart = FileName->CreationTime; + NetworkInfo->LastAccessTime.QuadPart = FileName->LastAccessTime; + NetworkInfo->LastWriteTime.QuadPart = FileName->LastWriteTime; + NetworkInfo->ChangeTime.QuadPart = FileName->ChangeTime; + + NetworkInfo->EndOfFile.QuadPart = FileName->AllocatedSize; + NetworkInfo->AllocationSize.QuadPart = ROUND_UP(FileName->AllocatedSize, DeviceExt->NtfsInfo.BytesPerCluster); + + NtfsFileFlagsToAttributes(FileName->FileAttributes, &NetworkInfo->FileAttributes); + + *BufferLength -= sizeof(FILE_NETWORK_OPEN_INFORMATION); + return STATUS_SUCCESS; +} /* * FUNCTION: Retrieve the specified file information @@ -268,6 +293,13 @@ NtfsFsdQueryInformation(PDEVICE_OBJECT DeviceObject, &BufferLength); break; + case FileNetworkOpenInformation: + Status = NtfsGetNetworkOpenInformation(Fcb, + DeviceObject->DeviceExtension, + SystemBuffer, + &BufferLength); + break; + case FileAlternateNameInformation: case FileAllInformation: Status = STATUS_NOT_IMPLEMENTED;