From 14210065817dd193aeb91d15ecb6284649411f57 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Thu, 26 Nov 2015 00:39:10 -0800 Subject: [PATCH] FSP_API --- build/VStudio/winfsp_dll.vcxproj | 8 ++++---- build/VStudio/winfsp_sys.vcxproj | 4 ++++ inc/winfsp/fsctl.h | 10 +++++----- inc/winfsp/winfsp.h | 6 ++++++ src/dll/fsctl.c | 12 ++++++------ src/sys/driver.h | 2 -- src/sys/fsctl.c | 2 +- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/build/VStudio/winfsp_dll.vcxproj b/build/VStudio/winfsp_dll.vcxproj index 66962919..85852f6e 100644 --- a/build/VStudio/winfsp_dll.vcxproj +++ b/build/VStudio/winfsp_dll.vcxproj @@ -100,7 +100,7 @@ Level3 Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;WINFSPDLL_EXPORTS;%(PreprocessorDefinitions) + WINFSP_DLL_INTERNAL;WIN32;_DEBUG;_WINDOWS;_USRDLL;WINFSPDLL_EXPORTS;%(PreprocessorDefinitions) true ..\..\inc;..\..\src @@ -115,7 +115,7 @@ Level3 Disabled - _DEBUG;_WINDOWS;_USRDLL;WINFSPDLL_EXPORTS;%(PreprocessorDefinitions) + WINFSP_DLL_INTERNAL;_DEBUG;_WINDOWS;_USRDLL;WINFSPDLL_EXPORTS;%(PreprocessorDefinitions) true ..\..\inc;..\..\src @@ -132,7 +132,7 @@ MaxSpeed true true - WIN32;NDEBUG;_WINDOWS;_USRDLL;WINFSPDLL_EXPORTS;%(PreprocessorDefinitions) + WINFSP_DLL_INTERNAL;WIN32;NDEBUG;_WINDOWS;_USRDLL;WINFSPDLL_EXPORTS;%(PreprocessorDefinitions) true ..\..\inc;..\..\src @@ -151,7 +151,7 @@ MaxSpeed true true - NDEBUG;_WINDOWS;_USRDLL;WINFSPDLL_EXPORTS;%(PreprocessorDefinitions) + WINFSP_DLL_INTERNAL;NDEBUG;_WINDOWS;_USRDLL;WINFSPDLL_EXPORTS;%(PreprocessorDefinitions) true ..\..\inc;..\..\src diff --git a/build/VStudio/winfsp_sys.vcxproj b/build/VStudio/winfsp_sys.vcxproj index a1c9f1bf..a5c3ae88 100644 --- a/build/VStudio/winfsp_sys.vcxproj +++ b/build/VStudio/winfsp_sys.vcxproj @@ -97,6 +97,7 @@ ..\..\inc;..\..\src;%(AdditionalIncludeDirectories) + WINFSP_SYS_INTERNAL; _X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions) wdmsec.lib;%(AdditionalDependencies) @@ -105,6 +106,7 @@ ..\..\inc;..\..\src;%(AdditionalIncludeDirectories) + WINFSP_SYS_INTERNAL; _X86_=1;i386=1;STD_CALL;%(PreprocessorDefinitions) wdmsec.lib;%(AdditionalDependencies) @@ -113,6 +115,7 @@ ..\..\inc;..\..\src;%(AdditionalIncludeDirectories) + WINFSP_SYS_INTERNAL; _WIN64;_AMD64_;AMD64;%(PreprocessorDefinitions) wdmsec.lib;%(AdditionalDependencies) @@ -121,6 +124,7 @@ ..\..\inc;..\..\src;%(AdditionalIncludeDirectories) + WINFSP_SYS_INTERNAL; _WIN64;_AMD64_;AMD64;%(PreprocessorDefinitions) wdmsec.lib;%(AdditionalDependencies) diff --git a/inc/winfsp/fsctl.h b/inc/winfsp/fsctl.h index 0fbdb986..facd8b46 100644 --- a/inc/winfsp/fsctl.h +++ b/inc/winfsp/fsctl.h @@ -92,13 +92,13 @@ static inline const FSP_TRANSACT_RSP *FspFsctlTransactConsumeResponse( return NextResponse <= ResponseBufEnd ? NextResponse : 0; } -#if !defined(WINFSP_SYS_DRIVER_H_INTERNAL) -NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath, PSECURITY_DESCRIPTOR SecurityDescriptor, +#if !defined(WINFSP_SYS_INTERNAL) +FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath, PSECURITY_DESCRIPTOR SecurityDescriptor, PHANDLE *PVolumeHandle); -NTSTATUS FspFsctlOpenVolume(PWSTR VolumePath, +FSP_API NTSTATUS FspFsctlOpenVolume(PWSTR VolumePath, PHANDLE *PVolumeHandle); -NTSTATUS FspFsctlDeleteVolume(HANDLE VolumeHandle); -NTSTATUS FspFsctlTransact(HANDLE VolumeHandle, +FSP_API NTSTATUS FspFsctlDeleteVolume(HANDLE VolumeHandle); +FSP_API NTSTATUS FspFsctlTransact(HANDLE VolumeHandle, FSP_TRANSACT_RSP *ResponseBuf, SIZE_T ResponseBufSize, FSP_TRANSACT_REQ *RequestBuf, SIZE_T *PRequestBufSize); #endif diff --git a/inc/winfsp/winfsp.h b/inc/winfsp/winfsp.h index dff14250..e37a3bba 100644 --- a/inc/winfsp/winfsp.h +++ b/inc/winfsp/winfsp.h @@ -13,6 +13,12 @@ #include #include +#if defined(WINFSP_DLL_INTERNAL) +#define FSP_API __declspec(dllexport) +#else +#define FSP_API __declspec(dllimport) +#endif + NTSTATUS FspNtStatusFromWin32(DWORD Error); #endif diff --git a/src/dll/fsctl.c b/src/dll/fsctl.c index 0509155d..38297231 100644 --- a/src/dll/fsctl.c +++ b/src/dll/fsctl.c @@ -16,7 +16,7 @@ static inline VOID GlobalDevicePath(PWCHAR DevicePathBuf, SIZE_T DevicePathSize, L'\\' == DevicePath[0] ? GLOBALROOT "%S" : GLOBALROOT "\\Device\\%S", DevicePath); } -NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath, PSECURITY_DESCRIPTOR SecurityDescriptor, +FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath, PSECURITY_DESCRIPTOR SecurityDescriptor, PHANDLE *PVolumeHandle) { NTSTATUS Result = STATUS_SUCCESS; @@ -46,7 +46,7 @@ NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath, PSECURITY_DESCRIPTOR SecurityDes } DeviceHandle = CreateFileW(DevicePathBuf, - 0, FILE_SHARE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, OPEN_EXISTING, 0, 0); + 0, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, OPEN_EXISTING, 0, 0); if (INVALID_HANDLE_VALUE == DeviceHandle) { Result = FspNtStatusFromWin32(GetLastError()); @@ -70,7 +70,7 @@ exit: return Result; } -NTSTATUS FspFsctlOpenVolume(PWSTR VolumePath, +FSP_API NTSTATUS FspFsctlOpenVolume(PWSTR VolumePath, PHANDLE *PVolumeHandle) { NTSTATUS Result = STATUS_SUCCESS; @@ -82,7 +82,7 @@ NTSTATUS FspFsctlOpenVolume(PWSTR VolumePath, GlobalDevicePath(DevicePathBuf, sizeof DevicePathBuf, VolumePath); VolumeHandle = CreateFileW(DevicePathBuf, - 0, FILE_SHARE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, OPEN_EXISTING, 0, 0); + 0, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, OPEN_EXISTING, 0, 0); if (INVALID_HANDLE_VALUE == VolumeHandle) { Result = FspNtStatusFromWin32(GetLastError()); @@ -95,7 +95,7 @@ exit: return Result; } -NTSTATUS FspFsctlDeleteVolume(HANDLE VolumeHandle) +FSP_API NTSTATUS FspFsctlDeleteVolume(HANDLE VolumeHandle) { NTSTATUS Result = STATUS_SUCCESS; DWORD Bytes; @@ -112,7 +112,7 @@ exit: return Result; } -NTSTATUS FspFsctlTransact(HANDLE VolumeHandle, +FSP_API NTSTATUS FspFsctlTransact(HANDLE VolumeHandle, FSP_TRANSACT_RSP *ResponseBuf, SIZE_T ResponseBufSize, FSP_TRANSACT_REQ *RequestBuf, SIZE_T *PRequestBufSize) { diff --git a/src/sys/driver.h b/src/sys/driver.h index afe3c669..91d50c66 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -10,8 +10,6 @@ #include #include #include - -#define WINFSP_SYS_DRIVER_H_INTERNAL #include #define DRIVER_NAME "WinFsp" diff --git a/src/sys/fsctl.c b/src/sys/fsctl.c index ca42ce68..6f67d892 100644 --- a/src/sys/fsctl.c +++ b/src/sys/fsctl.c @@ -140,7 +140,7 @@ static NTSTATUS FspFsvrtTransact( if (0 == NextResponse) break; - ProcessIrp = FspIoqEndProcessingIrp(&FsvrtDeviceExtension->Ioq, Response->Hint); + ProcessIrp = FspIoqEndProcessingIrp(&FsvrtDeviceExtension->Ioq, (UINT_PTR)Response->Hint); if (0 == ProcessIrp) /* either IRP was canceled or a bogus Hint was provided */ continue;