mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -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;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||||
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
||||||
return STATUS_CANCELLED;
|
return STATUS_CANCELLED;
|
||||||
|
#endif
|
||||||
|
|
||||||
PACCESS_STATE AccessState = IrpSp->Parameters.Create.SecurityContext->AccessState;
|
PACCESS_STATE AccessState = IrpSp->Parameters.Create.SecurityContext->AccessState;
|
||||||
ULONG CreateDisposition = (IrpSp->Parameters.Create.Options >> 24) & 0xff;
|
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))
|
#define FspStatisticsAdd(S,F,V) ((S)->F += (V))
|
||||||
|
|
||||||
/* device management */
|
/* device management */
|
||||||
|
#define FSP_DEVICE_REJECT_EARLY_IRP
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
FspFsvolDeviceSecurityCacheCapacity = 100,
|
FspFsvolDeviceSecurityCacheCapacity = 100,
|
||||||
@ -1082,7 +1083,9 @@ 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)
|
||||||
LONG ReadyToAcceptIrp;
|
LONG ReadyToAcceptIrp;
|
||||||
|
#endif
|
||||||
FSP_IOQ *Ioq;
|
FSP_IOQ *Ioq;
|
||||||
FSP_META_CACHE *SecurityCache;
|
FSP_META_CACHE *SecurityCache;
|
||||||
FSP_META_CACHE *DirInfoCache;
|
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);
|
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)
|
||||||
static inline
|
static inline
|
||||||
BOOLEAN FspFsvolDeviceReadyToAcceptIrp(PDEVICE_OBJECT DeviceObject)
|
BOOLEAN FspFsvolDeviceReadyToAcceptIrp(PDEVICE_OBJECT DeviceObject)
|
||||||
{
|
{
|
||||||
@ -1198,6 +1202,7 @@ VOID FspFsvolDeviceSetReadyToAcceptIrp(PDEVICE_OBJECT DeviceObject)
|
|||||||
return;
|
return;
|
||||||
InterlockedExchange(&FsvolDeviceExtension->ReadyToAcceptIrp, 1);
|
InterlockedExchange(&FsvolDeviceExtension->ReadyToAcceptIrp, 1);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
static inline
|
static inline
|
||||||
BOOLEAN FspFsvolDeviceVolumePrefixInString(PDEVICE_OBJECT DeviceObject, PUNICODE_STRING String)
|
BOOLEAN FspFsvolDeviceVolumePrefixInString(PDEVICE_OBJECT DeviceObject, PUNICODE_STRING String)
|
||||||
{
|
{
|
||||||
|
@ -286,8 +286,10 @@ static NTSTATUS FspFsvolQueryVolumeInformation(
|
|||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
|
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||||
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
||||||
return STATUS_CANCELLED;
|
return STATUS_CANCELLED;
|
||||||
|
#endif
|
||||||
|
|
||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
PUINT8 Buffer = Irp->AssociatedIrp.SystemBuffer;
|
PUINT8 Buffer = Irp->AssociatedIrp.SystemBuffer;
|
||||||
@ -417,8 +419,10 @@ static NTSTATUS FspFsvolSetVolumeInformation(
|
|||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
|
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||||
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
if (!FspFsvolDeviceReadyToAcceptIrp(FsvolDeviceObject))
|
||||||
return STATUS_CANCELLED;
|
return STATUS_CANCELLED;
|
||||||
|
#endif
|
||||||
|
|
||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
FS_INFORMATION_CLASS FsInformationClass = IrpSp->Parameters.SetVolume.FsInformationClass;
|
FS_INFORMATION_CLASS FsInformationClass = IrpSp->Parameters.SetVolume.FsInformationClass;
|
||||||
|
@ -277,8 +277,10 @@ 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 (!FsvolDeviceExtension->VolumeParams.RejectIrpPriorToTransact0)
|
if (!FsvolDeviceExtension->VolumeParams.RejectIrpPriorToTransact0)
|
||||||
FsvolDeviceExtension->ReadyToAcceptIrp = 1;
|
FsvolDeviceExtension->ReadyToAcceptIrp = 1;
|
||||||
|
#endif
|
||||||
Result = FspDeviceInitialize(FsvolDeviceObject);
|
Result = FspDeviceInitialize(FsvolDeviceObject);
|
||||||
if (NT_SUCCESS(Result))
|
if (NT_SUCCESS(Result))
|
||||||
{
|
{
|
||||||
@ -769,8 +771,10 @@ NTSTATUS FspVolumeTransact(
|
|||||||
if (!FspDeviceReference(FsvolDeviceObject))
|
if (!FspDeviceReference(FsvolDeviceObject))
|
||||||
return STATUS_CANCELLED;
|
return STATUS_CANCELLED;
|
||||||
|
|
||||||
|
#if defined(FSP_DEVICE_REJECT_EARLY_IRP)
|
||||||
if (0 == InputBufferLength && 0 == OutputBufferLength)
|
if (0 == InputBufferLength && 0 == OutputBufferLength)
|
||||||
FspFsvolDeviceSetReadyToAcceptIrp(FsvolDeviceObject);
|
FspFsvolDeviceSetReadyToAcceptIrp(FsvolDeviceObject);
|
||||||
|
#endif
|
||||||
|
|
||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user