[NTFS] Implement IRP_MJ_QUERY_INFORMATION/FileNetworkOpenInformation:

We are now able to execute some binaries on a NTFS partition.

svn path=/trunk/; revision=65204
This commit is contained in:
Hervé Poussineau 2014-11-02 22:56:53 +00:00
parent 68487164df
commit 3fc8b084e5

View file

@ -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;