From dce40d03b2bb5c560eafdd99938e3ef607f65e96 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Mon, 30 Nov 2015 14:01:59 -0800 Subject: [PATCH] dll: FspFsctlCreateVolume: change signature --- inc/winfsp/fsctl.h | 2 +- src/dll/fsctl.c | 16 ++++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/inc/winfsp/fsctl.h b/inc/winfsp/fsctl.h index 957051e8..3050a652 100644 --- a/inc/winfsp/fsctl.h +++ b/inc/winfsp/fsctl.h @@ -110,7 +110,7 @@ static inline const FSP_FSCTL_TRANSACT_RSP *FspFsctlTransactConsumeResponse( #if !defined(WINFSP_SYS_INTERNAL) FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath, const FSP_FSCTL_VOLUME_PARAMS *Params, PSECURITY_DESCRIPTOR SecurityDescriptor, - PHANDLE *PVolumeHandle); + PWCHAR VolumePathBuf, SIZE_T VolumePathSize); FSP_API NTSTATUS FspFsctlOpenVolume(PWSTR VolumePath, PHANDLE *PVolumeHandle); FSP_API NTSTATUS FspFsctlDeleteVolume(HANDLE VolumeHandle); diff --git a/src/dll/fsctl.c b/src/dll/fsctl.c index 48584218..3a5466cc 100644 --- a/src/dll/fsctl.c +++ b/src/dll/fsctl.c @@ -18,19 +18,16 @@ static inline VOID GlobalDevicePath(PWCHAR DevicePathBuf, SIZE_T DevicePathSize, FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath, const FSP_FSCTL_VOLUME_PARAMS *Params, PSECURITY_DESCRIPTOR SecurityDescriptor, - PHANDLE *PVolumeHandle) + PWCHAR VolumePathBuf, SIZE_T VolumePathSize) { NTSTATUS Result = STATUS_SUCCESS; - WCHAR DevicePathBuf[(sizeof GLOBALROOT + FSP_FSCTL_CREATE_BUFFER_SIZE) / sizeof(WCHAR)]; - WCHAR VolumePathBuf[FSP_FSCTL_CREATE_BUFFER_SIZE / sizeof(WCHAR)]; + WCHAR DevicePathBuf[MAX_PATH]; FSP_FSCTL_VOLUME_PARAMS *ParamsBuf; PSECURITY_DESCRIPTOR SecurityDescriptorBuf = 0; DWORD SecurityDescriptorSize, Bytes; HANDLE DeviceHandle = INVALID_HANDLE_VALUE; - *PVolumeHandle = 0; - - GlobalDevicePath(DevicePathBuf, sizeof DevicePathBuf, DevicePath); + VolumePathBuf[0] = L'\0'; SecurityDescriptorSize = GetSecurityDescriptorLength(SecurityDescriptor); ParamsBuf = malloc(sizeof *ParamsBuf + SecurityDescriptorSize); @@ -47,6 +44,7 @@ FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath, } *ParamsBuf = *Params; + GlobalDevicePath(DevicePathBuf, sizeof DevicePathBuf, DevicePath); DeviceHandle = CreateFileW(DevicePathBuf, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0); if (INVALID_HANDLE_VALUE == DeviceHandle) @@ -56,15 +54,13 @@ FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath, } if (!DeviceIoControl(DeviceHandle, FSP_FSCTL_CREATE, - ParamsBuf, sizeof *ParamsBuf + SecurityDescriptorSize, VolumePathBuf, sizeof VolumePathBuf, + ParamsBuf, sizeof *ParamsBuf + SecurityDescriptorSize, VolumePathBuf, (DWORD)VolumePathSize, &Bytes, 0)) { Result = FspNtStatusFromWin32(GetLastError()); goto exit; } - Result = FspFsctlOpenVolume(VolumePathBuf, PVolumeHandle); - exit: if (INVALID_HANDLE_VALUE != DeviceHandle) CloseHandle(DeviceHandle); @@ -76,7 +72,7 @@ FSP_API NTSTATUS FspFsctlOpenVolume(PWSTR VolumePath, PHANDLE *PVolumeHandle) { NTSTATUS Result = STATUS_SUCCESS; - WCHAR DevicePathBuf[(sizeof GLOBALROOT + FSP_FSCTL_CREATE_BUFFER_SIZE) / sizeof(WCHAR)]; + WCHAR DevicePathBuf[MAX_PATH]; HANDLE VolumeHandle; *PVolumeHandle = 0;