mirror of
https://github.com/reactos/reactos.git
synced 2024-08-07 19:58:21 +00:00
[NPFS]
- Add support for FileFullDirectoryInformation and FileBothDirectoryInformation. - Fix an off-by-one bug in the buffer size calculation. - Zero-initialize the return buffer. svn path=/trunk/; revision=50264
This commit is contained in:
parent
e3c5d45770
commit
b1b36bfcc3
|
@ -35,6 +35,8 @@ NpfsQueryDirectory(PNPFS_CCB Ccb,
|
|||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
PFILE_NAMES_INFORMATION NamesBuffer;
|
||||
PFILE_DIRECTORY_INFORMATION DirectoryBuffer;
|
||||
PFILE_FULL_DIR_INFORMATION FullDirBuffer;
|
||||
PFILE_BOTH_DIR_INFORMATION BothDirBuffer;
|
||||
|
||||
Stack = IoGetCurrentIrpStackLocation(Irp);
|
||||
|
||||
|
@ -132,6 +134,8 @@ NpfsQueryDirectory(PNPFS_CCB Ccb,
|
|||
|
||||
if (PipeIndex >= FileIndex)
|
||||
{
|
||||
RtlZeroMemory(Buffer, BufferLength);
|
||||
|
||||
switch (FileInformationClass)
|
||||
{
|
||||
case FileDirectoryInformation:
|
||||
|
@ -145,7 +149,37 @@ NpfsQueryDirectory(PNPFS_CCB Ccb,
|
|||
RtlCopyMemory(DirectoryBuffer->FileName,
|
||||
PipeFcb->PipeName.Buffer,
|
||||
PipeFcb->PipeName.Length);
|
||||
*Size = sizeof(FILE_DIRECTORY_INFORMATION) + PipeFcb->PipeName.Length - 1;
|
||||
*Size = sizeof(FILE_DIRECTORY_INFORMATION) + PipeFcb->PipeName.Length - sizeof(WCHAR);
|
||||
Status = STATUS_SUCCESS;
|
||||
break;
|
||||
|
||||
case FileFullDirectoryInformation:
|
||||
FullDirBuffer = (PFILE_FULL_DIR_INFORMATION)Buffer;
|
||||
FullDirBuffer->NextEntryOffset = 0;
|
||||
FullDirBuffer->FileIndex = PipeIndex;
|
||||
FullDirBuffer->FileAttributes = FILE_ATTRIBUTE_NORMAL;
|
||||
FullDirBuffer->EndOfFile.QuadPart = PipeFcb->CurrentInstances;
|
||||
FullDirBuffer->AllocationSize.LowPart = PipeFcb->MaximumInstances;
|
||||
FullDirBuffer->FileNameLength = PipeFcb->PipeName.Length;
|
||||
RtlCopyMemory(FullDirBuffer->FileName,
|
||||
PipeFcb->PipeName.Buffer,
|
||||
PipeFcb->PipeName.Length);
|
||||
*Size = sizeof(FILE_FULL_DIR_INFORMATION) + PipeFcb->PipeName.Length - sizeof(WCHAR);
|
||||
Status = STATUS_SUCCESS;
|
||||
break;
|
||||
|
||||
case FileBothDirectoryInformation:
|
||||
BothDirBuffer = (PFILE_BOTH_DIR_INFORMATION)Buffer;
|
||||
BothDirBuffer->NextEntryOffset = 0;
|
||||
BothDirBuffer->FileIndex = PipeIndex;
|
||||
BothDirBuffer->FileAttributes = FILE_ATTRIBUTE_NORMAL;
|
||||
BothDirBuffer->EndOfFile.QuadPart = PipeFcb->CurrentInstances;
|
||||
BothDirBuffer->AllocationSize.LowPart = PipeFcb->MaximumInstances;
|
||||
BothDirBuffer->FileNameLength = PipeFcb->PipeName.Length;
|
||||
RtlCopyMemory(BothDirBuffer->FileName,
|
||||
PipeFcb->PipeName.Buffer,
|
||||
PipeFcb->PipeName.Length);
|
||||
*Size = sizeof(FILE_BOTH_DIR_INFORMATION) + PipeFcb->PipeName.Length - sizeof(WCHAR);
|
||||
Status = STATUS_SUCCESS;
|
||||
break;
|
||||
|
||||
|
@ -157,7 +191,7 @@ NpfsQueryDirectory(PNPFS_CCB Ccb,
|
|||
RtlCopyMemory(NamesBuffer->FileName,
|
||||
PipeFcb->PipeName.Buffer,
|
||||
PipeFcb->PipeName.Length);
|
||||
*Size = sizeof(FILE_NAMES_INFORMATION) + PipeFcb->PipeName.Length - 1;
|
||||
*Size = sizeof(FILE_NAMES_INFORMATION) + PipeFcb->PipeName.Length - sizeof(WCHAR);
|
||||
Status = STATUS_SUCCESS;
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in a new issue