mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
dll: fsctl: testing
This commit is contained in:
parent
6f3f87e21e
commit
f910f0bacc
@ -35,6 +35,9 @@ extern const __declspec(selectany) GUID FspFsvrtDeviceClassGuid =
|
|||||||
|
|
||||||
#define FSP_FSCTL_CREATE_BUFFER_SIZE 128
|
#define FSP_FSCTL_CREATE_BUFFER_SIZE 128
|
||||||
#define FSP_FSCTL_TRANSACT_BUFFER_SIZE (16 * 1024)
|
#define FSP_FSCTL_TRANSACT_BUFFER_SIZE (16 * 1024)
|
||||||
|
|
||||||
|
#define FSP_FSCTL_VOLUME_PARAMS_SIZE \
|
||||||
|
FSP_FSCTL_ALIGN_UP(sizeof(FSP_FSCTL_VOLUME_PARAMS), FSP_FSCTL_DEFAULT_ALIGNMENT)
|
||||||
#define FSP_FSCTL_TRANSACT_REQ_SIZEMAX \
|
#define FSP_FSCTL_TRANSACT_REQ_SIZEMAX \
|
||||||
FSP_FSCTL_ALIGN_UP(sizeof(FSP_FSCTL_TRANSACT_REQ) + 1024 * sizeof(WCHAR), FSP_FSCTL_DEFAULT_ALIGNMENT)
|
FSP_FSCTL_ALIGN_UP(sizeof(FSP_FSCTL_TRANSACT_REQ) + 1024 * sizeof(WCHAR), FSP_FSCTL_DEFAULT_ALIGNMENT)
|
||||||
#define FSP_FSCTL_TRANSACT_RSP_SIZEMAX \
|
#define FSP_FSCTL_TRANSACT_RSP_SIZEMAX \
|
||||||
|
@ -86,13 +86,14 @@ FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath,
|
|||||||
Result = FspNtStatusFromWin32(GetLastError());
|
Result = FspNtStatusFromWin32(GetLastError());
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
ParamsBuf = malloc(sizeof *ParamsBuf + SecurityDescriptorSize);
|
ParamsBuf = malloc(FSP_FSCTL_VOLUME_PARAMS_SIZE + SecurityDescriptorSize);
|
||||||
if (0 == ParamsBuf)
|
if (0 == ParamsBuf)
|
||||||
{
|
{
|
||||||
Result = STATUS_INSUFFICIENT_RESOURCES;
|
Result = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
SecurityDescriptorBuf = (PVOID)(ParamsBuf + 1);
|
memset(ParamsBuf, 0, FSP_FSCTL_VOLUME_PARAMS_SIZE);
|
||||||
|
SecurityDescriptorBuf = (PVOID)((PUINT8)ParamsBuf + FSP_FSCTL_VOLUME_PARAMS_SIZE);
|
||||||
if (!MakeSelfRelativeSD(SecurityDescriptor, SecurityDescriptorBuf, &SecurityDescriptorSize))
|
if (!MakeSelfRelativeSD(SecurityDescriptor, SecurityDescriptorBuf, &SecurityDescriptorSize))
|
||||||
{
|
{
|
||||||
Result = FspNtStatusFromWin32(GetLastError());
|
Result = FspNtStatusFromWin32(GetLastError());
|
||||||
|
@ -107,7 +107,7 @@ static NTSTATUS FspFsctlCreateVolume(
|
|||||||
ULONG OutputBufferLength = IrpSp->Parameters.FileSystemControl.OutputBufferLength;
|
ULONG OutputBufferLength = IrpSp->Parameters.FileSystemControl.OutputBufferLength;
|
||||||
PVOID SystemBuffer = Irp->AssociatedIrp.SystemBuffer;
|
PVOID SystemBuffer = Irp->AssociatedIrp.SystemBuffer;
|
||||||
const FSP_FSCTL_VOLUME_PARAMS *Params = SystemBuffer;
|
const FSP_FSCTL_VOLUME_PARAMS *Params = SystemBuffer;
|
||||||
PSECURITY_DESCRIPTOR SecurityDescriptor = (PVOID)(Params + 1);
|
PSECURITY_DESCRIPTOR SecurityDescriptor = (PVOID)((PUINT8)Params + FSP_FSCTL_VOLUME_PARAMS_SIZE);
|
||||||
DWORD SecurityDescriptorSize = InputBufferLength - sizeof *Params;
|
DWORD SecurityDescriptorSize = InputBufferLength - sizeof *Params;
|
||||||
if (sizeof *Params >= InputBufferLength || 0 == SystemBuffer ||
|
if (sizeof *Params >= InputBufferLength || 0 == SystemBuffer ||
|
||||||
!FspValidRelativeSecurityDescriptor(SecurityDescriptor, SecurityDescriptorSize,
|
!FspValidRelativeSecurityDescriptor(SecurityDescriptor, SecurityDescriptorSize,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user