sys: ProcessBuffer: conditional usage

This commit is contained in:
Bill Zissimopoulos 2017-02-23 16:36:21 -08:00
parent 4b43cc590f
commit 28f97c2619
4 changed files with 31 additions and 33 deletions

View File

@ -834,8 +834,7 @@ NTSTATUS FspFsvolDirectoryControlPrepare(
{ {
PAGED_CODE(); PAGED_CODE();
if (FspFsvolDeviceQueryDirectoryShouldUseProcessBuffer( if (FspQueryDirectoryIrpShouldUseProcessBuffer(Irp, Request->Req.QueryDirectory.Length))
IoGetCurrentIrpStackLocation(Irp)->DeviceObject, Request->Req.QueryDirectory.Length))
{ {
NTSTATUS Result; NTSTATUS Result;
PVOID Cookie; PVOID Cookie;
@ -938,8 +937,7 @@ NTSTATUS FspFsvolDirectoryControlComplete(
if (FspFsctlTransactQueryDirectoryKind == Request->Kind) if (FspFsctlTransactQueryDirectoryKind == Request->Kind)
{ {
if (FspFsvolDeviceQueryDirectoryShouldUseProcessBuffer( if (FspQueryDirectoryIrpShouldUseProcessBuffer(Irp, Request->Req.QueryDirectory.Length))
IrpSp->DeviceObject, Request->Req.QueryDirectory.Length))
{ {
PVOID Address = FspIopRequestContext(Request, RequestAddress); PVOID Address = FspIopRequestContext(Request, RequestAddress);
@ -1057,8 +1055,7 @@ static VOID FspFsvolQueryDirectoryRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, P
PIRP Irp = Context[RequestIrp]; PIRP Irp = Context[RequestIrp];
if (0 != Irp && FspFsvolDeviceQueryDirectoryShouldUseProcessBuffer( if (0 != Irp && FspQueryDirectoryIrpShouldUseProcessBuffer(Irp, Request->Req.QueryDirectory.Length))
IoGetCurrentIrpStackLocation(Irp)->DeviceObject, Request->Req.QueryDirectory.Length))
{ {
PVOID Cookie = Context[RequestCookie]; PVOID Cookie = Context[RequestCookie];
PVOID Address = Context[RequestAddress]; PVOID Address = Context[RequestAddress];

View File

@ -1056,23 +1056,6 @@ FSP_FSVOL_DEVICE_EXTENSION *FspFsvolDeviceExtension(PDEVICE_OBJECT DeviceObject)
ASSERT(FspFsvolDeviceExtensionKind == ((FSP_DEVICE_EXTENSION *)DeviceObject->DeviceExtension)->Kind); ASSERT(FspFsvolDeviceExtensionKind == ((FSP_DEVICE_EXTENSION *)DeviceObject->DeviceExtension)->Kind);
return DeviceObject->DeviceExtension; return DeviceObject->DeviceExtension;
} }
static inline
BOOLEAN FspFsvolDeviceReadShouldUseProcessBuffer(PDEVICE_OBJECT FsvolDeviceObject, SIZE_T BufferSize)
{
return FspProcessBufferSizeMax >= BufferSize ||
FspFsvolDeviceExtension(FsvolDeviceObject)->VolumeParams.AlwaysUseDoubleBuffering;
}
static inline
BOOLEAN FspFsvolDeviceWriteShouldUseProcessBuffer(PDEVICE_OBJECT FsvolDeviceObject, SIZE_T BufferSize)
{
return FspProcessBufferSizeMax >= BufferSize ||
FspFsvolDeviceExtension(FsvolDeviceObject)->VolumeParams.AlwaysUseDoubleBuffering;
}
static inline
BOOLEAN FspFsvolDeviceQueryDirectoryShouldUseProcessBuffer(PDEVICE_OBJECT FsvolDeviceObject, SIZE_T BufferSize)
{
return FspFsvolDeviceReadShouldUseProcessBuffer(FsvolDeviceObject, BufferSize);
}
NTSTATUS FspDeviceCreateSecure(UINT32 Kind, ULONG ExtraSize, NTSTATUS FspDeviceCreateSecure(UINT32 Kind, ULONG ExtraSize,
PUNICODE_STRING DeviceName, DEVICE_TYPE DeviceType, ULONG DeviceCharacteristics, PUNICODE_STRING DeviceName, DEVICE_TYPE DeviceType, ULONG DeviceCharacteristics,
PUNICODE_STRING DeviceSddl, LPCGUID DeviceClassGuid, PUNICODE_STRING DeviceSddl, LPCGUID DeviceClassGuid,
@ -1138,6 +1121,29 @@ VOID FspDeviceGlobalUnlock(VOID)
//(FILE_DEVICE_DISK_FILE_SYSTEM == (DeviceObject)->DeviceType ?\ //(FILE_DEVICE_DISK_FILE_SYSTEM == (DeviceObject)->DeviceType ?\
// STATUS_VOLUME_DISMOUNTED : STATUS_DEVICE_NOT_CONNECTED) // STATUS_VOLUME_DISMOUNTED : STATUS_DEVICE_NOT_CONNECTED)
/* process buffers conditional usage */
static inline
BOOLEAN FspReadIrpShouldUseProcessBuffer(PIRP Irp, SIZE_T BufferSize)
{
ASSERT(0 != Irp);
return FspProcessBufferSizeMax >= BufferSize ||
FspFsvolDeviceExtension(IoGetCurrentIrpStackLocation(Irp)->DeviceObject)->
VolumeParams.AlwaysUseDoubleBuffering;
}
static inline
BOOLEAN FspWriteIrpShouldUseProcessBuffer(PIRP Irp, SIZE_T BufferSize)
{
ASSERT(0 != Irp);
return FspProcessBufferSizeMax >= BufferSize ||
FspFsvolDeviceExtension(IoGetCurrentIrpStackLocation(Irp)->DeviceObject)->
VolumeParams.AlwaysUseDoubleBuffering;
}
static inline
BOOLEAN FspQueryDirectoryIrpShouldUseProcessBuffer(PIRP Irp, SIZE_T BufferSize)
{
return FspReadIrpShouldUseProcessBuffer(Irp, BufferSize);
}
/* volume management */ /* volume management */
#define FspVolumeTransactEarlyTimeout (1 * 10000ULL) #define FspVolumeTransactEarlyTimeout (1 * 10000ULL)
NTSTATUS FspVolumeCreate( NTSTATUS FspVolumeCreate(

View File

@ -347,8 +347,7 @@ NTSTATUS FspFsvolReadPrepare(
{ {
PAGED_CODE(); PAGED_CODE();
if (FspFsvolDeviceReadShouldUseProcessBuffer( if (FspReadIrpShouldUseProcessBuffer(Irp, Request->Req.Read.Length))
IoGetCurrentIrpStackLocation(Irp)->DeviceObject, Request->Req.Read.Length))
{ {
NTSTATUS Result; NTSTATUS Result;
PVOID Cookie; PVOID Cookie;
@ -431,8 +430,7 @@ NTSTATUS FspFsvolReadComplete(
if (Response->IoStatus.Information > Request->Req.Read.Length) if (Response->IoStatus.Information > Request->Req.Read.Length)
FSP_RETURN(Result = STATUS_INTERNAL_ERROR); FSP_RETURN(Result = STATUS_INTERNAL_ERROR);
if (FspFsvolDeviceReadShouldUseProcessBuffer( if (FspReadIrpShouldUseProcessBuffer(Irp, Request->Req.Read.Length))
IrpSp->DeviceObject, Request->Req.Read.Length))
{ {
PVOID Address = FspIopRequestContext(Request, RequestAddress); PVOID Address = FspIopRequestContext(Request, RequestAddress);
PVOID SystemAddress = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority); PVOID SystemAddress = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);
@ -496,8 +494,7 @@ static VOID FspFsvolReadNonCachedRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PV
PIRP Irp = Context[RequestIrp]; PIRP Irp = Context[RequestIrp];
if (0 != Irp && FspFsvolDeviceReadShouldUseProcessBuffer( if (0 != Irp && FspReadIrpShouldUseProcessBuffer(Irp, Request->Req.Read.Length))
IoGetCurrentIrpStackLocation(Irp)->DeviceObject, Request->Req.Read.Length))
{ {
PVOID Cookie = Context[RequestCookie]; PVOID Cookie = Context[RequestCookie];
PVOID Address = Context[RequestAddress]; PVOID Address = Context[RequestAddress];

View File

@ -417,8 +417,7 @@ NTSTATUS FspFsvolWritePrepare(
{ {
PAGED_CODE(); PAGED_CODE();
if (FspFsvolDeviceWriteShouldUseProcessBuffer( if (FspWriteIrpShouldUseProcessBuffer(Irp, Request->Req.Write.Length))
IoGetCurrentIrpStackLocation(Irp)->DeviceObject, Request->Req.Write.Length))
{ {
NTSTATUS Result; NTSTATUS Result;
PVOID Cookie; PVOID Cookie;
@ -572,8 +571,7 @@ static VOID FspFsvolWriteNonCachedRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, P
PIRP Irp = Context[RequestIrp]; PIRP Irp = Context[RequestIrp];
if (0 != Irp && FspFsvolDeviceWriteShouldUseProcessBuffer( if (0 != Irp && FspWriteIrpShouldUseProcessBuffer(Irp, Request->Req.Write.Length))
IoGetCurrentIrpStackLocation(Irp)->DeviceObject, Request->Req.Write.Length))
{ {
PVOID Cookie = Context[RequestCookie]; PVOID Cookie = Context[RequestCookie];
PVOID Address = Context[RequestAddress]; PVOID Address = Context[RequestAddress];