diff --git a/inc/winfsp/fsctl.h b/inc/winfsp/fsctl.h index 8ba9b2d8..4bd774b5 100644 --- a/inc/winfsp/fsctl.h +++ b/inc/winfsp/fsctl.h @@ -41,9 +41,10 @@ extern const __declspec(selectany) GUID FspFsvrtDeviceClassGuid = #define FSP_FSCTL_VOLUME_NAME_SIZEMAX 128 -#define FSP_FSCTL_TRANSACT_REQ_BUFFER_SIZEMIN 16384 /* checked by driver! */ #define FSP_FSCTL_TRANSACT_REQ_SIZEMAX (4096 - 64) /* 64: size for internal request header */ #define FSP_FSCTL_TRANSACT_RSP_SIZEMAX (4096 - 64) /* symmetry! */ +#define FSP_FSCTL_TRANSACT_BATCH_BUFFER_SIZEMIN 16384 +#define FSP_FSCTL_TRANSACT_BUFFER_SIZEMIN FSP_FSCTL_TRANSACT_REQ_SIZEMAX /* volume/file metadata */ typedef struct diff --git a/src/dll/loop.c b/src/dll/loop.c index 0ba42508..e7b21923 100644 --- a/src/dll/loop.c +++ b/src/dll/loop.c @@ -70,13 +70,13 @@ FSP_API NTSTATUS FspFileSystemLoop(FSP_FILE_SYSTEM *FileSystem) SIZE_T RequestBufSize; FSP_FSCTL_TRANSACT_REQ *Request, *NextRequest; - RequestBuf = MemAlloc(FSP_FSCTL_TRANSACT_REQ_SIZEMAX); + RequestBuf = MemAlloc(FSP_FSCTL_TRANSACT_BUFFER_SIZEMIN); if (0 == RequestBuf) return STATUS_INSUFFICIENT_RESOURCES; for (;;) { - RequestBufSize = FSP_FSCTL_TRANSACT_REQ_SIZEMAX; + RequestBufSize = FSP_FSCTL_TRANSACT_BUFFER_SIZEMIN; Result = FspFsctlTransact(FileSystem->VolumeHandle, 0, 0, RequestBuf, &RequestBufSize, FALSE); if (!NT_SUCCESS(Result)) goto exit; diff --git a/src/sys/volume.c b/src/sys/volume.c index 29a5e324..a3ab2416 100644 --- a/src/sys/volume.c +++ b/src/sys/volume.c @@ -513,9 +513,9 @@ NTSTATUS FspVolumeTransact( return STATUS_INVALID_PARAMETER; if (0 != OutputBufferLength && ((FSP_FSCTL_TRANSACT == ControlCode && - FSP_FSCTL_TRANSACT_REQ_SIZEMAX > OutputBufferLength) || + FSP_FSCTL_TRANSACT_BUFFER_SIZEMIN > OutputBufferLength) || (FSP_FSCTL_TRANSACT_BATCH == ControlCode && - FSP_FSCTL_TRANSACT_REQ_BUFFER_SIZEMIN > OutputBufferLength))) + FSP_FSCTL_TRANSACT_BATCH_BUFFER_SIZEMIN > OutputBufferLength))) return STATUS_BUFFER_TOO_SMALL; if (!FspDeviceReference(FsvolDeviceObject)) diff --git a/tst/winfsp-tests/mount-test.c b/tst/winfsp-tests/mount-test.c index 6637e62c..2457e05e 100644 --- a/tst/winfsp-tests/mount-test.c +++ b/tst/winfsp-tests/mount-test.c @@ -173,7 +173,7 @@ void mount_volume_transact_dotest(PWSTR DeviceName, PWSTR Prefix) Sleep(1000); /* give some time to the thread to execute */ - FSP_FSCTL_DECLSPEC_ALIGN UINT8 RequestBuf[FSP_FSCTL_TRANSACT_REQ_BUFFER_SIZEMIN]; + FSP_FSCTL_DECLSPEC_ALIGN UINT8 RequestBuf[FSP_FSCTL_TRANSACT_BATCH_BUFFER_SIZEMIN]; FSP_FSCTL_DECLSPEC_ALIGN UINT8 ResponseBuf[FSP_FSCTL_TRANSACT_RSP_SIZEMAX]; UINT8 *RequestBufEnd; UINT8 *ResponseBufEnd = ResponseBuf + sizeof ResponseBuf; diff --git a/tst/winfsp-tests/timeout-test.c b/tst/winfsp-tests/timeout-test.c index cf998e30..cb4c12ba 100644 --- a/tst/winfsp-tests/timeout-test.c +++ b/tst/winfsp-tests/timeout-test.c @@ -168,7 +168,7 @@ void timeout_transact_dotest(PWSTR DeviceName, PWSTR Prefix) ASSERT(INVALID_HANDLE_VALUE != VolumeHandle); - FSP_FSCTL_DECLSPEC_ALIGN UINT8 RequestBuf[FSP_FSCTL_TRANSACT_REQ_BUFFER_SIZEMIN]; + FSP_FSCTL_DECLSPEC_ALIGN UINT8 RequestBuf[FSP_FSCTL_TRANSACT_BATCH_BUFFER_SIZEMIN]; FSP_FSCTL_DECLSPEC_ALIGN UINT8 ResponseBuf[FSP_FSCTL_TRANSACT_RSP_SIZEMAX]; UINT8 *RequestBufEnd; UINT8 *ResponseBufEnd = ResponseBuf + sizeof ResponseBuf;