mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
sys: FSP_DEVICE_REJECT_EARLY_IRP macro
This commit is contained in:
parent
0901fb6477
commit
8497855d80
@ -284,8 +284,10 @@ static NTSTATUS FspFsvolCreateNoLock(
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
||||
return STATUS_CANCELLED;
|
||||
#endif
|
||||
|
||||
PACCESS_STATE AccessState = IrpSp->Parameters.Create.SecurityContext->AccessState;
|
||||
ULONG CreateDisposition = (IrpSp->Parameters.Create.Options >> 24) & 0xff;
|
||||
|
@ -1028,6 +1028,7 @@ 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,
|
||||
@ -1082,7 +1083,9 @@ typedef struct
|
||||
FSP_FSEXT_PROVIDER *Provider;
|
||||
UNICODE_STRING VolumePrefix;
|
||||
UNICODE_PREFIX_TABLE_ENTRY VolumePrefixEntry;
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
LONG ReadyToAcceptIrp;
|
||||
#endif
|
||||
FSP_IOQ *Ioq;
|
||||
FSP_META_CACHE *SecurityCache;
|
||||
FSP_META_CACHE *DirInfoCache;
|
||||
@ -1182,6 +1185,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)
|
||||
static inline
|
||||
BOOLEAN FspFsvolDeviceReadyToAcceptIrp(PDEVICE_OBJECT DeviceObject)
|
||||
{
|
||||
@ -1198,6 +1202,7 @@ VOID FspFsvolDeviceSetReadyToAcceptIrp(PDEVICE_OBJECT DeviceObject)
|
||||
return;
|
||||
InterlockedExchange(&FsvolDeviceExtension->ReadyToAcceptIrp, 1);
|
||||
}
|
||||
#endif
|
||||
static inline
|
||||
BOOLEAN FspFsvolDeviceVolumePrefixInString(PDEVICE_OBJECT DeviceObject, PUNICODE_STRING String)
|
||||
{
|
||||
|
@ -286,8 +286,10 @@ static NTSTATUS FspFsvolQueryVolumeInformation(
|
||||
{
|
||||
PAGED_CODE();
|
||||
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
||||
return STATUS_CANCELLED;
|
||||
#endif
|
||||
|
||||
NTSTATUS Result;
|
||||
PUINT8 Buffer = Irp->AssociatedIrp.SystemBuffer;
|
||||
@ -417,8 +419,10 @@ static NTSTATUS FspFsvolSetVolumeInformation(
|
||||
{
|
||||
PAGED_CODE();
|
||||
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
||||
return STATUS_CANCELLED;
|
||||
#endif
|
||||
|
||||
NTSTATUS Result;
|
||||
FS_INFORMATION_CLASS FsInformationClass = IrpSp->Parameters.SetVolume.FsInformationClass;
|
||||
|
@ -277,8 +277,10 @@ static NTSTATUS FspVolumeCreateNoLock(
|
||||
RtlInitEmptyUnicodeString(&FsvolDeviceExtension->VolumeName,
|
||||
FsvolDeviceExtension->VolumeNameBuf, sizeof FsvolDeviceExtension->VolumeNameBuf);
|
||||
RtlCopyUnicodeString(&FsvolDeviceExtension->VolumeName, &VolumeName);
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
if (!FsvolDeviceExtension->VolumeParams.RejectIrpPriorToTransact0)
|
||||
FsvolDeviceExtension->ReadyToAcceptIrp = 1;
|
||||
#endif
|
||||
Result = FspDeviceInitialize(FsvolDeviceObject);
|
||||
if (NT_SUCCESS(Result))
|
||||
{
|
||||
@ -769,8 +771,10 @@ NTSTATUS FspVolumeTransact(
|
||||
if (!FspDeviceReference(FsvolDeviceObject))
|
||||
return STATUS_CANCELLED;
|
||||
|
||||
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||
if (0 == InputBufferLength && 0 == OutputBufferLength)
|
||||
FspFsvolDeviceSetReadyToAcceptIrp(FsvolDeviceObject);
|
||||
#endif
|
||||
|
||||
NTSTATUS Result;
|
||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
|
||||
|
Loading…
x
Reference in New Issue
Block a user