mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
sys: FSP_FSVOL_DEVICE_EXTENSION::VolumeDeleteResource
This commit is contained in:
parent
805742f306
commit
66f3620808
@ -1283,6 +1283,41 @@ VOID FspDeviceDelete(PDEVICE_OBJECT DeviceObject);
|
|||||||
BOOLEAN FspDeviceReference(PDEVICE_OBJECT DeviceObject);
|
BOOLEAN FspDeviceReference(PDEVICE_OBJECT DeviceObject);
|
||||||
VOID FspDeviceDereference(PDEVICE_OBJECT DeviceObject);
|
VOID FspDeviceDereference(PDEVICE_OBJECT DeviceObject);
|
||||||
static inline
|
static inline
|
||||||
|
VOID FspFsvolDeviceVolumeDeleteAcquireShared(PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
|
||||||
|
ExAcquireResourceSharedLite(&FsvolDeviceExtension->VolumeDeleteResource, TRUE);
|
||||||
|
}
|
||||||
|
static inline
|
||||||
|
VOID FspFsvolDeviceVolumeDeleteAcquireExclusive(PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
|
||||||
|
ExAcquireResourceExclusiveLite(&FsvolDeviceExtension->VolumeDeleteResource, TRUE);
|
||||||
|
}
|
||||||
|
static inline
|
||||||
|
VOID FspFsvolDeviceVolumeDeleteSetOwner(PDEVICE_OBJECT DeviceObject, PVOID Owner)
|
||||||
|
{
|
||||||
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
|
||||||
|
Owner = (PVOID)((UINT_PTR)Owner | 3);
|
||||||
|
ExSetResourceOwnerPointer(&FsvolDeviceExtension->VolumeDeleteResource, Owner);
|
||||||
|
}
|
||||||
|
static inline
|
||||||
|
VOID FspFsvolDeviceVolumeDeleteRelease(PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
|
||||||
|
ExReleaseResourceLite(&FsvolDeviceExtension->VolumeDeleteResource);
|
||||||
|
}
|
||||||
|
static inline
|
||||||
|
VOID FspFsvolDeviceVolumeDeleteReleaseOwner(PDEVICE_OBJECT DeviceObject, PVOID Owner)
|
||||||
|
{
|
||||||
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
|
||||||
|
Owner = (PVOID)((UINT_PTR)Owner | 3);
|
||||||
|
if (ExIsResourceAcquiredLite(&FsvolDeviceExtension->VolumeDeleteResource))
|
||||||
|
ExReleaseResourceLite(&FsvolDeviceExtension->VolumeDeleteResource);
|
||||||
|
else
|
||||||
|
ExReleaseResourceForThreadLite(&FsvolDeviceExtension->VolumeDeleteResource, (ERESOURCE_THREAD)Owner);
|
||||||
|
}
|
||||||
|
static inline
|
||||||
VOID FspFsvolDeviceFileRenameAcquireShared(PDEVICE_OBJECT DeviceObject)
|
VOID FspFsvolDeviceFileRenameAcquireShared(PDEVICE_OBJECT DeviceObject)
|
||||||
{
|
{
|
||||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
|
||||||
|
@ -369,7 +369,7 @@ VOID FspVolumeDelete(
|
|||||||
ULONG FileNodeCount, Index;
|
ULONG FileNodeCount, Index;
|
||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
|
|
||||||
ExAcquireResourceExclusiveLite(&FsvolDeviceExtension->VolumeDeleteResource, TRUE);
|
FspFsvolDeviceVolumeDeleteAcquireExclusive(FsvolDeviceObject);
|
||||||
FsvolDeviceExtension->VolumeDeleted = TRUE;
|
FsvolDeviceExtension->VolumeDeleted = TRUE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -406,7 +406,7 @@ VOID FspVolumeDelete(
|
|||||||
FspFileNodeDeleteList(FileNodes, FileNodeCount);
|
FspFileNodeDeleteList(FileNodes, FileNodeCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
ExReleaseResourceLite(&FsvolDeviceExtension->VolumeDeleteResource);
|
FspFsvolDeviceVolumeDeleteRelease(FsvolDeviceObject);
|
||||||
|
|
||||||
FspDeviceDereference(FsvolDeviceObject);
|
FspDeviceDereference(FsvolDeviceObject);
|
||||||
}
|
}
|
||||||
@ -1189,9 +1189,8 @@ NTSTATUS FspVolumeNotify(
|
|||||||
if (!FspDeviceReference(FsvolDeviceObject))
|
if (!FspDeviceReference(FsvolDeviceObject))
|
||||||
return STATUS_CANCELLED;
|
return STATUS_CANCELLED;
|
||||||
|
|
||||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
|
FspFsvolDeviceVolumeDeleteAcquireShared(FsvolDeviceObject);
|
||||||
ExAcquireResourceSharedLite(&FsvolDeviceExtension->VolumeDeleteResource, TRUE);
|
if (FspFsvolDeviceExtension(FsvolDeviceObject)->VolumeDeleted)
|
||||||
if (FsvolDeviceExtension->VolumeDeleted)
|
|
||||||
{
|
{
|
||||||
Result = STATUS_CANCELLED;
|
Result = STATUS_CANCELLED;
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -1218,8 +1217,7 @@ NTSTATUS FspVolumeNotify(
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExSetResourceOwnerPointer(&FsvolDeviceExtension->VolumeDeleteResource,
|
FspFsvolDeviceVolumeDeleteSetOwner(FsvolDeviceObject, NotifyWorkItem);
|
||||||
(PVOID)((UINT_PTR)NotifyWorkItem | 3));
|
|
||||||
|
|
||||||
ExInitializeWorkItem(&NotifyWorkItem->WorkItem, FspVolumeNotifyWork, NotifyWorkItem);
|
ExInitializeWorkItem(&NotifyWorkItem->WorkItem, FspVolumeNotifyWork, NotifyWorkItem);
|
||||||
NotifyWorkItem->FsvolDeviceObject = FsvolDeviceObject;
|
NotifyWorkItem->FsvolDeviceObject = FsvolDeviceObject;
|
||||||
@ -1232,7 +1230,7 @@ fail:
|
|||||||
if (0 != NotifyWorkItem)
|
if (0 != NotifyWorkItem)
|
||||||
FspFree(NotifyWorkItem);
|
FspFree(NotifyWorkItem);
|
||||||
|
|
||||||
ExReleaseResourceLite(&FsvolDeviceExtension->VolumeDeleteResource);
|
FspFsvolDeviceVolumeDeleteRelease(FsvolDeviceObject);
|
||||||
|
|
||||||
FspDeviceDereference(FsvolDeviceObject);
|
FspDeviceDereference(FsvolDeviceObject);
|
||||||
|
|
||||||
@ -1383,8 +1381,7 @@ static VOID FspVolumeNotifyWork(PVOID NotifyWorkItem0)
|
|||||||
ExReleaseFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex);
|
ExReleaseFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
ExReleaseResourceForThreadLite(&FsvolDeviceExtension->VolumeDeleteResource,
|
FspFsvolDeviceVolumeDeleteReleaseOwner(FsvolDeviceObject, NotifyWorkItem);
|
||||||
(ERESOURCE_THREAD)((UINT_PTR)NotifyWorkItem | 3));
|
|
||||||
|
|
||||||
FspDeviceDereference(FsvolDeviceObject);
|
FspDeviceDereference(FsvolDeviceObject);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user