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;
|
||||
TlsSetValue(FspFileSystemTlsKey, &OperationContext);
|
||||
|
||||
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||
Result = FspFsctlTransact(FileSystem->VolumeHandle, 0, 0, 0, 0, FALSE);
|
||||
/* send a Transact0 to inform the FSD that the dispatcher is ready */
|
||||
if (!NT_SUCCESS(Result))
|
||||
goto exit;
|
||||
#endif
|
||||
|
||||
memset(Response, 0, sizeof *Response);
|
||||
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.PassQueryDirectoryFileName = TRUE;
|
||||
opt_data.VolumeParams.DeviceControl = TRUE;
|
||||
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||
opt_data.VolumeParams.RejectIrpPriorToTransact0 = TRUE;
|
||||
#endif
|
||||
opt_data.VolumeParams.UmFileContextIsUserContext2 = TRUE;
|
||||
if (L'\0' == opt_data.VolumeParams.FileSystemName[0])
|
||||
memcpy(opt_data.VolumeParams.FileSystemName, L"FUSE", 5 * sizeof(WCHAR));
|
||||
|
@ -28,6 +28,8 @@
|
||||
#include <shared/minimal.h>
|
||||
#include <strsafe.h>
|
||||
|
||||
#define FSP_CFG_REJECT_EARLY_IRP
|
||||
|
||||
#define LIBRARY_NAME "WinFsp"
|
||||
|
||||
/* DEBUGLOG */
|
||||
|
@ -284,7 +284,7 @@ static NTSTATUS FspFsvolCreateNoLock(
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
||||
return STATUS_CANCELLED;
|
||||
#endif
|
||||
|
@ -33,6 +33,8 @@
|
||||
#include <winfsp/fsctl.h>
|
||||
#include <winfsp/fsext.h>
|
||||
|
||||
#define FSP_CFG_REJECT_EARLY_IRP
|
||||
|
||||
/* disable warnings */
|
||||
#pragma warning(disable:4100) /* unreferenced formal parameter */
|
||||
#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))
|
||||
|
||||
/* device management */
|
||||
#define FSP_DEVICE_REJECT_EARLY_IRP
|
||||
enum
|
||||
{
|
||||
FspFsvolDeviceSecurityCacheCapacity = 100,
|
||||
@ -1083,7 +1084,7 @@ typedef struct
|
||||
FSP_FSEXT_PROVIDER *Provider;
|
||||
UNICODE_STRING VolumePrefix;
|
||||
UNICODE_PREFIX_TABLE_ENTRY VolumePrefixEntry;
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||
LONG ReadyToAcceptIrp;
|
||||
#endif
|
||||
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);
|
||||
VOID FspFsvolDeviceSetVolumeInfo(PDEVICE_OBJECT DeviceObject, const FSP_FSCTL_VOLUME_INFO *VolumeInfo);
|
||||
VOID FspFsvolDeviceInvalidateVolumeInfo(PDEVICE_OBJECT DeviceObject);
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||
static inline
|
||||
BOOLEAN FspFsvolDeviceReadyToAcceptIrp(PDEVICE_OBJECT DeviceObject)
|
||||
{
|
||||
|
@ -286,7 +286,7 @@ static NTSTATUS FspFsvolQueryVolumeInformation(
|
||||
{
|
||||
PAGED_CODE();
|
||||
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
||||
return STATUS_CANCELLED;
|
||||
#endif
|
||||
@ -419,7 +419,7 @@ static NTSTATUS FspFsvolSetVolumeInformation(
|
||||
{
|
||||
PAGED_CODE();
|
||||
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
||||
return STATUS_CANCELLED;
|
||||
#endif
|
||||
|
@ -277,7 +277,7 @@ static NTSTATUS FspVolumeCreateNoLock(
|
||||
RtlInitEmptyUnicodeString(&FsvolDeviceExtension->VolumeName,
|
||||
FsvolDeviceExtension->VolumeNameBuf, sizeof FsvolDeviceExtension->VolumeNameBuf);
|
||||
RtlCopyUnicodeString(&FsvolDeviceExtension->VolumeName, &VolumeName);
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||
if (!FsvolDeviceExtension->VolumeParams.RejectIrpPriorToTransact0)
|
||||
FsvolDeviceExtension->ReadyToAcceptIrp = 1;
|
||||
#endif
|
||||
@ -771,7 +771,7 @@ NTSTATUS FspVolumeTransact(
|
||||
if (!FspDeviceReference(FsvolDeviceObject))
|
||||
return STATUS_CANCELLED;
|
||||
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
#if defined(FSP_CFG_REJECT_EARLY_IRP)
|
||||
if (0 == InputBufferLength && 0 == OutputBufferLength)
|
||||
FspFsvolDeviceSetReadyToAcceptIrp(FsvolDeviceObject);
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user