sys: IRP_MJ_QUERY_INFORMATION: testing

This commit is contained in:
Bill Zissimopoulos 2016-01-24 13:23:39 -08:00
parent c2c1177b20
commit 19ff086c9a
2 changed files with 19 additions and 18 deletions

View File

@ -295,19 +295,19 @@ static NTSTATUS FspFsvolQueryInformation(
NTSTATUS Result; NTSTATUS Result;
PFILE_OBJECT FileObject = IrpSp->FileObject; PFILE_OBJECT FileObject = IrpSp->FileObject;
PUINT8 SystemBuffer = Irp->AssociatedIrp.SystemBuffer; PUINT8 Buffer = Irp->AssociatedIrp.SystemBuffer;
PUINT8 SystemBufferEnd = (PUINT8)SystemBuffer + IrpSp->Parameters.QueryFile.Length; PUINT8 BufferEnd = Buffer + IrpSp->Parameters.QueryFile.Length;
switch (IrpSp->Parameters.QueryFile.FileInformationClass) switch (IrpSp->Parameters.QueryFile.FileInformationClass)
{ {
case FileAllInformation: case FileAllInformation:
Result = FspFsvolQueryAllInformation(FileObject, &SystemBuffer, SystemBufferEnd, 0); Result = FspFsvolQueryAllInformation(FileObject, &Buffer, BufferEnd, 0);
break; break;
case FileAttributeTagInformation: case FileAttributeTagInformation:
Result = FspFsvolQueryAttributeTagInformation(FileObject, &SystemBuffer, SystemBufferEnd, 0); Result = FspFsvolQueryAttributeTagInformation(FileObject, &Buffer, BufferEnd, 0);
break; break;
case FileBasicInformation: case FileBasicInformation:
Result = FspFsvolQueryBasicInformation(FileObject, &SystemBuffer, SystemBufferEnd, 0); Result = FspFsvolQueryBasicInformation(FileObject, &Buffer, BufferEnd, 0);
break; break;
case FileCompressionInformation: case FileCompressionInformation:
Result = STATUS_INVALID_PARAMETER; /* no compression support */ Result = STATUS_INVALID_PARAMETER; /* no compression support */
@ -319,19 +319,19 @@ static NTSTATUS FspFsvolQueryInformation(
Result = STATUS_INVALID_PARAMETER; /* no hard link support */ Result = STATUS_INVALID_PARAMETER; /* no hard link support */
break; break;
case FileInternalInformation: case FileInternalInformation:
Result = FspFsvolQueryInternalInformation(FileObject, &SystemBuffer, SystemBufferEnd); Result = FspFsvolQueryInternalInformation(FileObject, &Buffer, BufferEnd);
break; break;
case FileNameInformation: case FileNameInformation:
Result = FspFsvolQueryNameInformation(FileObject, &SystemBuffer, SystemBufferEnd); Result = FspFsvolQueryNameInformation(FileObject, &Buffer, BufferEnd);
break; break;
case FileNetworkOpenInformation: case FileNetworkOpenInformation:
Result = FspFsvolQueryNetworkOpenInformation(FileObject, &SystemBuffer, SystemBufferEnd, 0); Result = FspFsvolQueryNetworkOpenInformation(FileObject, &Buffer, BufferEnd, 0);
break; break;
case FilePositionInformation: case FilePositionInformation:
Result = FspFsvolQueryPositionInformation(FileObject, &SystemBuffer, SystemBufferEnd); Result = FspFsvolQueryPositionInformation(FileObject, &Buffer, BufferEnd);
break; break;
case FileStandardInformation: case FileStandardInformation:
Result = FspFsvolQueryStandardInformation(FileObject, &SystemBuffer, SystemBufferEnd); Result = FspFsvolQueryStandardInformation(FileObject, &Buffer, BufferEnd);
break; break;
case FileStreamInformation: case FileStreamInformation:
Result = STATUS_INVALID_PARAMETER; /* !!!: no stream support yet! */ Result = STATUS_INVALID_PARAMETER; /* !!!: no stream support yet! */
@ -343,7 +343,7 @@ static NTSTATUS FspFsvolQueryInformation(
if (FSP_STATUS_IOQ_POST != Result) if (FSP_STATUS_IOQ_POST != Result)
{ {
Irp->IoStatus.Information = (UINT_PTR)((PUINT8)SystemBufferEnd - (PUINT8)SystemBuffer); Irp->IoStatus.Information = (UINT_PTR)(Buffer - (PUINT8)Irp->AssociatedIrp.SystemBuffer);
return Result; return Result;
} }
@ -380,27 +380,27 @@ VOID FspFsvolQueryInformationComplete(
PFILE_OBJECT FileObject = IrpSp->FileObject; PFILE_OBJECT FileObject = IrpSp->FileObject;
FSP_FILE_NODE *FileNode = FileObject->FsContext; FSP_FILE_NODE *FileNode = FileObject->FsContext;
PUINT8 SystemBuffer = Irp->AssociatedIrp.SystemBuffer; PUINT8 Buffer = Irp->AssociatedIrp.SystemBuffer;
PUINT8 SystemBufferEnd = (PUINT8)SystemBuffer + IrpSp->Parameters.QueryFile.Length; PUINT8 BufferEnd = Buffer + IrpSp->Parameters.QueryFile.Length;
FspFileNodeSetFileInfo(FileNode, &Response->Rsp.QueryInformation.FileInfo); FspFileNodeSetFileInfo(FileNode, &Response->Rsp.QueryInformation.FileInfo);
switch (IrpSp->Parameters.QueryFile.FileInformationClass) switch (IrpSp->Parameters.QueryFile.FileInformationClass)
{ {
case FileAllInformation: case FileAllInformation:
Result = FspFsvolQueryAllInformation(FileObject, &SystemBuffer, SystemBufferEnd, Result = FspFsvolQueryAllInformation(FileObject, &Buffer, BufferEnd,
&Response->Rsp.QueryInformation.FileInfo); &Response->Rsp.QueryInformation.FileInfo);
break; break;
case FileAttributeTagInformation: case FileAttributeTagInformation:
Result = FspFsvolQueryAttributeTagInformation(FileObject, &SystemBuffer, SystemBufferEnd, Result = FspFsvolQueryAttributeTagInformation(FileObject, &Buffer, BufferEnd,
&Response->Rsp.QueryInformation.FileInfo); &Response->Rsp.QueryInformation.FileInfo);
break; break;
case FileBasicInformation: case FileBasicInformation:
Result = FspFsvolQueryBasicInformation(FileObject, &SystemBuffer, SystemBufferEnd, Result = FspFsvolQueryBasicInformation(FileObject, &Buffer, BufferEnd,
&Response->Rsp.QueryInformation.FileInfo); &Response->Rsp.QueryInformation.FileInfo);
break; break;
case FileNetworkOpenInformation: case FileNetworkOpenInformation:
Result = FspFsvolQueryNetworkOpenInformation(FileObject, &SystemBuffer, SystemBufferEnd, Result = FspFsvolQueryNetworkOpenInformation(FileObject, &Buffer, BufferEnd,
&Response->Rsp.QueryInformation.FileInfo); &Response->Rsp.QueryInformation.FileInfo);
break; break;
default: default:
@ -411,7 +411,7 @@ VOID FspFsvolQueryInformationComplete(
ASSERT(FSP_STATUS_IOQ_POST != Result); ASSERT(FSP_STATUS_IOQ_POST != Result);
Irp->IoStatus.Information = (UINT_PTR)((PUINT8)SystemBufferEnd - (PUINT8)SystemBuffer); Irp->IoStatus.Information = (UINT_PTR)(Buffer - (PUINT8)Irp->AssociatedIrp.SystemBuffer);
FSP_LEAVE_IOC("%s, FileObject=%p", FSP_LEAVE_IOC("%s, FileObject=%p",
FileInformationClassSym(IrpSp->Parameters.QueryFile.FileInformationClass), FileInformationClassSym(IrpSp->Parameters.QueryFile.FileInformationClass),

View File

@ -384,6 +384,7 @@ static FSP_FILE_SYSTEM_INTERFACE MemfsInterface =
Overwrite, Overwrite,
Cleanup, Cleanup,
Close, Close,
GetInformation,
}; };
static VOID MemfsEnterOperation(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_REQ *Request) static VOID MemfsEnterOperation(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_REQ *Request)