mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 17:03:12 -05:00
sys: FSP_FSCTL_TRANSACT[_BATCH]_BUFFER_SIZEMIN
This commit is contained in:
parent
d1fe27f996
commit
f61aa5a9bb
@ -41,9 +41,10 @@ extern const __declspec(selectany) GUID FspFsvrtDeviceClassGuid =
|
|||||||
|
|
||||||
#define FSP_FSCTL_VOLUME_NAME_SIZEMAX 128
|
#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_REQ_SIZEMAX (4096 - 64) /* 64: size for internal request header */
|
||||||
#define FSP_FSCTL_TRANSACT_RSP_SIZEMAX (4096 - 64) /* symmetry! */
|
#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 */
|
/* volume/file metadata */
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -70,13 +70,13 @@ FSP_API NTSTATUS FspFileSystemLoop(FSP_FILE_SYSTEM *FileSystem)
|
|||||||
SIZE_T RequestBufSize;
|
SIZE_T RequestBufSize;
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, *NextRequest;
|
FSP_FSCTL_TRANSACT_REQ *Request, *NextRequest;
|
||||||
|
|
||||||
RequestBuf = MemAlloc(FSP_FSCTL_TRANSACT_REQ_SIZEMAX);
|
RequestBuf = MemAlloc(FSP_FSCTL_TRANSACT_BUFFER_SIZEMIN);
|
||||||
if (0 == RequestBuf)
|
if (0 == RequestBuf)
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
RequestBufSize = FSP_FSCTL_TRANSACT_REQ_SIZEMAX;
|
RequestBufSize = FSP_FSCTL_TRANSACT_BUFFER_SIZEMIN;
|
||||||
Result = FspFsctlTransact(FileSystem->VolumeHandle, 0, 0, RequestBuf, &RequestBufSize, FALSE);
|
Result = FspFsctlTransact(FileSystem->VolumeHandle, 0, 0, RequestBuf, &RequestBufSize, FALSE);
|
||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@ -513,9 +513,9 @@ NTSTATUS FspVolumeTransact(
|
|||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
if (0 != OutputBufferLength &&
|
if (0 != OutputBufferLength &&
|
||||||
((FSP_FSCTL_TRANSACT == ControlCode &&
|
((FSP_FSCTL_TRANSACT == ControlCode &&
|
||||||
FSP_FSCTL_TRANSACT_REQ_SIZEMAX > OutputBufferLength) ||
|
FSP_FSCTL_TRANSACT_BUFFER_SIZEMIN > OutputBufferLength) ||
|
||||||
(FSP_FSCTL_TRANSACT_BATCH == ControlCode &&
|
(FSP_FSCTL_TRANSACT_BATCH == ControlCode &&
|
||||||
FSP_FSCTL_TRANSACT_REQ_BUFFER_SIZEMIN > OutputBufferLength)))
|
FSP_FSCTL_TRANSACT_BATCH_BUFFER_SIZEMIN > OutputBufferLength)))
|
||||||
return STATUS_BUFFER_TOO_SMALL;
|
return STATUS_BUFFER_TOO_SMALL;
|
||||||
|
|
||||||
if (!FspDeviceReference(FsvolDeviceObject))
|
if (!FspDeviceReference(FsvolDeviceObject))
|
||||||
|
@ -173,7 +173,7 @@ void mount_volume_transact_dotest(PWSTR DeviceName, PWSTR Prefix)
|
|||||||
|
|
||||||
Sleep(1000); /* give some time to the thread to execute */
|
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];
|
FSP_FSCTL_DECLSPEC_ALIGN UINT8 ResponseBuf[FSP_FSCTL_TRANSACT_RSP_SIZEMAX];
|
||||||
UINT8 *RequestBufEnd;
|
UINT8 *RequestBufEnd;
|
||||||
UINT8 *ResponseBufEnd = ResponseBuf + sizeof ResponseBuf;
|
UINT8 *ResponseBufEnd = ResponseBuf + sizeof ResponseBuf;
|
||||||
|
@ -168,7 +168,7 @@ void timeout_transact_dotest(PWSTR DeviceName, PWSTR Prefix)
|
|||||||
ASSERT(INVALID_HANDLE_VALUE != VolumeHandle);
|
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];
|
FSP_FSCTL_DECLSPEC_ALIGN UINT8 ResponseBuf[FSP_FSCTL_TRANSACT_RSP_SIZEMAX];
|
||||||
UINT8 *RequestBufEnd;
|
UINT8 *RequestBufEnd;
|
||||||
UINT8 *ResponseBufEnd = ResponseBuf + sizeof ResponseBuf;
|
UINT8 *ResponseBufEnd = ResponseBuf + sizeof ResponseBuf;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user