mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-08 13:02:10 -05:00
sys: ProcessBuffer: conditional usage
This commit is contained in:
parent
4b43cc590f
commit
28f97c2619
@ -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];
|
||||||
|
@ -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(
|
||||||
|
@ -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];
|
||||||
|
@ -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];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user