sys: FspFsvolDeviceLockVolumeNotify

This commit is contained in:
Bill Zissimopoulos 2022-06-10 15:15:49 +01:00
parent 66f3620808
commit 2e441534a3
2 changed files with 18 additions and 6 deletions

View File

@ -1398,6 +1398,18 @@ 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);
static inline
VOID FspFsvolDeviceLockVolumeNotify(PDEVICE_OBJECT DeviceObject)
{
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
ExAcquireFastMutexUnsafe(&FsvolDeviceExtension->VolumeNotifyMutex);
}
static inline
VOID FspFsvolDeviceUnlockVolumeNotify(PDEVICE_OBJECT DeviceObject)
{
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
ExReleaseFastMutexUnsafe(&FsvolDeviceExtension->VolumeNotifyMutex);
}
#if defined(FSP_CFG_REJECT_EARLY_IRP) #if defined(FSP_CFG_REJECT_EARLY_IRP)
static inline static inline
BOOLEAN FspFsvolDeviceReadyToAcceptIrp(PDEVICE_OBJECT DeviceObject) BOOLEAN FspFsvolDeviceReadyToAcceptIrp(PDEVICE_OBJECT DeviceObject)

View File

@ -490,12 +490,12 @@ static VOID FspVolumeDeleteNoLock(
FspMupUnregister(Globals->FsmupDeviceObject, FsvolDeviceObject); FspMupUnregister(Globals->FsmupDeviceObject, FsvolDeviceObject);
} }
ExAcquireFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex); FspFsvolDeviceLockVolumeNotify(FsvolDeviceObject);
if (1 <= FsvolDeviceExtension->VolumeNotifyCount) if (1 <= FsvolDeviceExtension->VolumeNotifyCount)
FspFsvolDeviceFileRenameReleaseOwner(FsvolDeviceObject, FspFsvolDeviceFileRenameReleaseOwner(FsvolDeviceObject,
&FsvolDeviceExtension->VolumeNotifyCount); &FsvolDeviceExtension->VolumeNotifyCount);
FsvolDeviceExtension->VolumeNotifyCount = -1; FsvolDeviceExtension->VolumeNotifyCount = -1;
ExReleaseFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex); FspFsvolDeviceUnlockVolumeNotify(FsvolDeviceObject);
/* release the volume device object */ /* release the volume device object */
FspDeviceDereference(FsvolDeviceObject); FspDeviceDereference(FsvolDeviceObject);
@ -1257,7 +1257,7 @@ static NTSTATUS FspVolumeNotifyLock(
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject); FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
NTSTATUS Result = STATUS_SUCCESS; NTSTATUS Result = STATUS_SUCCESS;
ExAcquireFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex); FspFsvolDeviceLockVolumeNotify(FsvolDeviceObject);
if (0 == FsvolDeviceExtension->VolumeNotifyCount) if (0 == FsvolDeviceExtension->VolumeNotifyCount)
{ {
if (FspFsvolDeviceFileRenameTryAcquireShared(FsvolDeviceObject)) if (FspFsvolDeviceFileRenameTryAcquireShared(FsvolDeviceObject))
@ -1271,7 +1271,7 @@ static NTSTATUS FspVolumeNotifyLock(
} }
else if (0 < FsvolDeviceExtension->VolumeNotifyCount) else if (0 < FsvolDeviceExtension->VolumeNotifyCount)
FsvolDeviceExtension->VolumeNotifyCount++; FsvolDeviceExtension->VolumeNotifyCount++;
ExReleaseFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex); FspFsvolDeviceUnlockVolumeNotify(FsvolDeviceObject);
FspDeviceDereference(FsvolDeviceObject); FspDeviceDereference(FsvolDeviceObject);
@ -1369,7 +1369,7 @@ static VOID FspVolumeNotifyWork(PVOID NotifyWorkItem0)
if (Unlock) if (Unlock)
{ {
ExAcquireFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex); FspFsvolDeviceLockVolumeNotify(FsvolDeviceObject);
if (1 == FsvolDeviceExtension->VolumeNotifyCount) if (1 == FsvolDeviceExtension->VolumeNotifyCount)
{ {
FspFsvolDeviceFileRenameReleaseOwner(FsvolDeviceObject, FspFsvolDeviceFileRenameReleaseOwner(FsvolDeviceObject,
@ -1378,7 +1378,7 @@ static VOID FspVolumeNotifyWork(PVOID NotifyWorkItem0)
} }
else if (1 < FsvolDeviceExtension->VolumeNotifyCount) else if (1 < FsvolDeviceExtension->VolumeNotifyCount)
FsvolDeviceExtension->VolumeNotifyCount--; FsvolDeviceExtension->VolumeNotifyCount--;
ExReleaseFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex); FspFsvolDeviceUnlockVolumeNotify(FsvolDeviceObject);
} }
FspFsvolDeviceVolumeDeleteReleaseOwner(FsvolDeviceObject, NotifyWorkItem); FspFsvolDeviceVolumeDeleteReleaseOwner(FsvolDeviceObject, NotifyWorkItem);