dll: FspFsctlCreateVolume: change signature

This commit is contained in:
Bill Zissimopoulos 2015-11-30 14:01:59 -08:00
parent abdc76ea2e
commit dce40d03b2
2 changed files with 7 additions and 11 deletions

View File

@ -110,7 +110,7 @@ static inline const FSP_FSCTL_TRANSACT_RSP *FspFsctlTransactConsumeResponse(
#if !defined(WINFSP_SYS_INTERNAL) #if !defined(WINFSP_SYS_INTERNAL)
FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath, FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath,
const FSP_FSCTL_VOLUME_PARAMS *Params, PSECURITY_DESCRIPTOR SecurityDescriptor, const FSP_FSCTL_VOLUME_PARAMS *Params, PSECURITY_DESCRIPTOR SecurityDescriptor,
PHANDLE *PVolumeHandle); PWCHAR VolumePathBuf, SIZE_T VolumePathSize);
FSP_API NTSTATUS FspFsctlOpenVolume(PWSTR VolumePath, FSP_API NTSTATUS FspFsctlOpenVolume(PWSTR VolumePath,
PHANDLE *PVolumeHandle); PHANDLE *PVolumeHandle);
FSP_API NTSTATUS FspFsctlDeleteVolume(HANDLE VolumeHandle); FSP_API NTSTATUS FspFsctlDeleteVolume(HANDLE VolumeHandle);

View File

@ -18,19 +18,16 @@ static inline VOID GlobalDevicePath(PWCHAR DevicePathBuf, SIZE_T DevicePathSize,
FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath, FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath,
const FSP_FSCTL_VOLUME_PARAMS *Params, PSECURITY_DESCRIPTOR SecurityDescriptor, const FSP_FSCTL_VOLUME_PARAMS *Params, PSECURITY_DESCRIPTOR SecurityDescriptor,
PHANDLE *PVolumeHandle) PWCHAR VolumePathBuf, SIZE_T VolumePathSize)
{ {
NTSTATUS Result = STATUS_SUCCESS; NTSTATUS Result = STATUS_SUCCESS;
WCHAR DevicePathBuf[(sizeof GLOBALROOT + FSP_FSCTL_CREATE_BUFFER_SIZE) / sizeof(WCHAR)]; WCHAR DevicePathBuf[MAX_PATH];
WCHAR VolumePathBuf[FSP_FSCTL_CREATE_BUFFER_SIZE / sizeof(WCHAR)];
FSP_FSCTL_VOLUME_PARAMS *ParamsBuf; FSP_FSCTL_VOLUME_PARAMS *ParamsBuf;
PSECURITY_DESCRIPTOR SecurityDescriptorBuf = 0; PSECURITY_DESCRIPTOR SecurityDescriptorBuf = 0;
DWORD SecurityDescriptorSize, Bytes; DWORD SecurityDescriptorSize, Bytes;
HANDLE DeviceHandle = INVALID_HANDLE_VALUE; HANDLE DeviceHandle = INVALID_HANDLE_VALUE;
*PVolumeHandle = 0; VolumePathBuf[0] = L'\0';
GlobalDevicePath(DevicePathBuf, sizeof DevicePathBuf, DevicePath);
SecurityDescriptorSize = GetSecurityDescriptorLength(SecurityDescriptor); SecurityDescriptorSize = GetSecurityDescriptorLength(SecurityDescriptor);
ParamsBuf = malloc(sizeof *ParamsBuf + SecurityDescriptorSize); ParamsBuf = malloc(sizeof *ParamsBuf + SecurityDescriptorSize);
@ -47,6 +44,7 @@ FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath,
} }
*ParamsBuf = *Params; *ParamsBuf = *Params;
GlobalDevicePath(DevicePathBuf, sizeof DevicePathBuf, DevicePath);
DeviceHandle = CreateFileW(DevicePathBuf, DeviceHandle = CreateFileW(DevicePathBuf,
0, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0); 0, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
if (INVALID_HANDLE_VALUE == DeviceHandle) if (INVALID_HANDLE_VALUE == DeviceHandle)
@ -56,15 +54,13 @@ FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath,
} }
if (!DeviceIoControl(DeviceHandle, FSP_FSCTL_CREATE, if (!DeviceIoControl(DeviceHandle, FSP_FSCTL_CREATE,
ParamsBuf, sizeof *ParamsBuf + SecurityDescriptorSize, VolumePathBuf, sizeof VolumePathBuf, ParamsBuf, sizeof *ParamsBuf + SecurityDescriptorSize, VolumePathBuf, (DWORD)VolumePathSize,
&Bytes, 0)) &Bytes, 0))
{ {
Result = FspNtStatusFromWin32(GetLastError()); Result = FspNtStatusFromWin32(GetLastError());
goto exit; goto exit;
} }
Result = FspFsctlOpenVolume(VolumePathBuf, PVolumeHandle);
exit: exit:
if (INVALID_HANDLE_VALUE != DeviceHandle) if (INVALID_HANDLE_VALUE != DeviceHandle)
CloseHandle(DeviceHandle); CloseHandle(DeviceHandle);
@ -76,7 +72,7 @@ FSP_API NTSTATUS FspFsctlOpenVolume(PWSTR VolumePath,
PHANDLE *PVolumeHandle) PHANDLE *PVolumeHandle)
{ {
NTSTATUS Result = STATUS_SUCCESS; NTSTATUS Result = STATUS_SUCCESS;
WCHAR DevicePathBuf[(sizeof GLOBALROOT + FSP_FSCTL_CREATE_BUFFER_SIZE) / sizeof(WCHAR)]; WCHAR DevicePathBuf[MAX_PATH];
HANDLE VolumeHandle; HANDLE VolumeHandle;
*PVolumeHandle = 0; *PVolumeHandle = 0;