mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 19:48:38 -05:00 
			
		
		
		
	sys: ProcessBuffer: conditional usage
This commit is contained in:
		| @@ -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]; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user