mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
dll,sys: FSP_CFG_REJECT_EARLY_IRP
Includes Avast fix for FUSE.
This commit is contained in:
parent
91c36b8f09
commit
71995a1fcd
@ -273,10 +273,12 @@ static DWORD WINAPI FspFileSystemDispatcherThread(PVOID FileSystem0)
|
|||||||
OperationContext.Response = Response;
|
OperationContext.Response = Response;
|
||||||
TlsSetValue(FspFileSystemTlsKey, &OperationContext);
|
TlsSetValue(FspFileSystemTlsKey, &OperationContext);
|
||||||
|
|
||||||
|
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||||
Result = FspFsctlTransact(FileSystem->VolumeHandle, 0, 0, 0, 0, FALSE);
|
Result = FspFsctlTransact(FileSystem->VolumeHandle, 0, 0, 0, 0, FALSE);
|
||||||
/* send a Transact0 to inform the FSD that the dispatcher is ready */
|
/* send a Transact0 to inform the FSD that the dispatcher is ready */
|
||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
goto exit;
|
goto exit;
|
||||||
|
#endif
|
||||||
|
|
||||||
memset(Response, 0, sizeof *Response);
|
memset(Response, 0, sizeof *Response);
|
||||||
for (;;)
|
for (;;)
|
||||||
|
@ -510,6 +510,9 @@ FSP_FUSE_API struct fuse *fsp_fuse_new(struct fsp_fuse_env *env,
|
|||||||
opt_data.VolumeParams.PostCleanupWhenModifiedOnly = TRUE;
|
opt_data.VolumeParams.PostCleanupWhenModifiedOnly = TRUE;
|
||||||
opt_data.VolumeParams.PassQueryDirectoryFileName = TRUE;
|
opt_data.VolumeParams.PassQueryDirectoryFileName = TRUE;
|
||||||
opt_data.VolumeParams.DeviceControl = TRUE;
|
opt_data.VolumeParams.DeviceControl = TRUE;
|
||||||
|
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||||
|
opt_data.VolumeParams.RejectIrpPriorToTransact0 = TRUE;
|
||||||
|
#endif
|
||||||
opt_data.VolumeParams.UmFileContextIsUserContext2 = TRUE;
|
opt_data.VolumeParams.UmFileContextIsUserContext2 = TRUE;
|
||||||
if (L'\0' == opt_data.VolumeParams.FileSystemName[0])
|
if (L'\0' == opt_data.VolumeParams.FileSystemName[0])
|
||||||
memcpy(opt_data.VolumeParams.FileSystemName, L"FUSE", 5 * sizeof(WCHAR));
|
memcpy(opt_data.VolumeParams.FileSystemName, L"FUSE", 5 * sizeof(WCHAR));
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
#include <shared/minimal.h>
|
#include <shared/minimal.h>
|
||||||
#include <strsafe.h>
|
#include <strsafe.h>
|
||||||
|
|
||||||
|
#define FSP_CFG_REJECT_EARLY_IRP
|
||||||
|
|
||||||
#define LIBRARY_NAME "WinFsp"
|
#define LIBRARY_NAME "WinFsp"
|
||||||
|
|
||||||
/* DEBUGLOG */
|
/* DEBUGLOG */
|
||||||
|
@ -284,7 +284,7 @@ static NTSTATUS FspFsvolCreateNoLock(
|
|||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||||
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
||||||
return STATUS_CANCELLED;
|
return STATUS_CANCELLED;
|
||||||
#endif
|
#endif
|
||||||
|
@ -33,7 +33,9 @@
|
|||||||
#include <winfsp/fsctl.h>
|
#include <winfsp/fsctl.h>
|
||||||
#include <winfsp/fsext.h>
|
#include <winfsp/fsext.h>
|
||||||
|
|
||||||
/* disable warnings */
|
#define FSP_CFG_REJECT_EARLY_IRP
|
||||||
|
|
||||||
|
/* disable warnings */
|
||||||
#pragma warning(disable:4100) /* unreferenced formal parameter */
|
#pragma warning(disable:4100) /* unreferenced formal parameter */
|
||||||
#pragma warning(disable:4200) /* zero-sized array in struct/union */
|
#pragma warning(disable:4200) /* zero-sized array in struct/union */
|
||||||
|
|
||||||
@ -1028,7 +1030,6 @@ NTSTATUS FspStatisticsCopy(FSP_STATISTICS *Statistics, PVOID Buffer, PULONG PLen
|
|||||||
#define FspStatisticsAdd(S,F,V) ((S)->F += (V))
|
#define FspStatisticsAdd(S,F,V) ((S)->F += (V))
|
||||||
|
|
||||||
/* device management */
|
/* device management */
|
||||||
#define FSP_DEVICE_REJECT_EARLY_IRP
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
FspFsvolDeviceSecurityCacheCapacity = 100,
|
FspFsvolDeviceSecurityCacheCapacity = 100,
|
||||||
@ -1083,7 +1084,7 @@ typedef struct
|
|||||||
FSP_FSEXT_PROVIDER *Provider;
|
FSP_FSEXT_PROVIDER *Provider;
|
||||||
UNICODE_STRING VolumePrefix;
|
UNICODE_STRING VolumePrefix;
|
||||||
UNICODE_PREFIX_TABLE_ENTRY VolumePrefixEntry;
|
UNICODE_PREFIX_TABLE_ENTRY VolumePrefixEntry;
|
||||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||||
LONG ReadyToAcceptIrp;
|
LONG ReadyToAcceptIrp;
|
||||||
#endif
|
#endif
|
||||||
FSP_IOQ *Ioq;
|
FSP_IOQ *Ioq;
|
||||||
@ -1185,7 +1186,7 @@ VOID FspFsvolDeviceGetVolumeInfo(PDEVICE_OBJECT DeviceObject, FSP_FSCTL_VOLUME_I
|
|||||||
BOOLEAN FspFsvolDeviceTryGetVolumeInfo(PDEVICE_OBJECT DeviceObject, FSP_FSCTL_VOLUME_INFO *VolumeInfo);
|
BOOLEAN FspFsvolDeviceTryGetVolumeInfo(PDEVICE_OBJECT DeviceObject, FSP_FSCTL_VOLUME_INFO *VolumeInfo);
|
||||||
VOID FspFsvolDeviceSetVolumeInfo(PDEVICE_OBJECT DeviceObject, const FSP_FSCTL_VOLUME_INFO *VolumeInfo);
|
VOID FspFsvolDeviceSetVolumeInfo(PDEVICE_OBJECT DeviceObject, const FSP_FSCTL_VOLUME_INFO *VolumeInfo);
|
||||||
VOID FspFsvolDeviceInvalidateVolumeInfo(PDEVICE_OBJECT DeviceObject);
|
VOID FspFsvolDeviceInvalidateVolumeInfo(PDEVICE_OBJECT DeviceObject);
|
||||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||||
static inline
|
static inline
|
||||||
BOOLEAN FspFsvolDeviceReadyToAcceptIrp(PDEVICE_OBJECT DeviceObject)
|
BOOLEAN FspFsvolDeviceReadyToAcceptIrp(PDEVICE_OBJECT DeviceObject)
|
||||||
{
|
{
|
||||||
|
@ -286,7 +286,7 @@ static NTSTATUS FspFsvolQueryVolumeInformation(
|
|||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||||
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
||||||
return STATUS_CANCELLED;
|
return STATUS_CANCELLED;
|
||||||
#endif
|
#endif
|
||||||
@ -419,7 +419,7 @@ static NTSTATUS FspFsvolSetVolumeInformation(
|
|||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||||
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
||||||
return STATUS_CANCELLED;
|
return STATUS_CANCELLED;
|
||||||
#endif
|
#endif
|
||||||
|
@ -277,7 +277,7 @@ static NTSTATUS FspVolumeCreateNoLock(
|
|||||||
RtlInitEmptyUnicodeString(&FsvolDeviceExtension->VolumeName,
|
RtlInitEmptyUnicodeString(&FsvolDeviceExtension->VolumeName,
|
||||||
FsvolDeviceExtension->VolumeNameBuf, sizeof FsvolDeviceExtension->VolumeNameBuf);
|
FsvolDeviceExtension->VolumeNameBuf, sizeof FsvolDeviceExtension->VolumeNameBuf);
|
||||||
RtlCopyUnicodeString(&FsvolDeviceExtension->VolumeName, &VolumeName);
|
RtlCopyUnicodeString(&FsvolDeviceExtension->VolumeName, &VolumeName);
|
||||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||||
if (!FsvolDeviceExtension->VolumeParams.RejectIrpPriorToTransact0)
|
if (!FsvolDeviceExtension->VolumeParams.RejectIrpPriorToTransact0)
|
||||||
FsvolDeviceExtension->ReadyToAcceptIrp = 1;
|
FsvolDeviceExtension->ReadyToAcceptIrp = 1;
|
||||||
#endif
|
#endif
|
||||||
@ -771,7 +771,7 @@ NTSTATUS FspVolumeTransact(
|
|||||||
if (!FspDeviceReference(FsvolDeviceObject))
|
if (!FspDeviceReference(FsvolDeviceObject))
|
||||||
return STATUS_CANCELLED;
|
return STATUS_CANCELLED;
|
||||||
|
|
||||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||||
if (0 == InputBufferLength && 0 == OutputBufferLength)
|
if (0 == InputBufferLength && 0 == OutputBufferLength)
|
||||||
FspFsvolDeviceSetReadyToAcceptIrp(FsvolDeviceObject);
|
FspFsvolDeviceSetReadyToAcceptIrp(FsvolDeviceObject);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user