mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
sys: convert suitable ERESOURCE to FAST_MUTEX
This commit is contained in:
parent
2e441534a3
commit
26af6c9363
@ -412,7 +412,7 @@ static NTSTATUS FspFsvolDeviceInit(PDEVICE_OBJECT DeviceObject)
|
|||||||
/* initialize our context table */
|
/* initialize our context table */
|
||||||
ExInitializeResourceLite(&FsvolDeviceExtension->VolumeDeleteResource);
|
ExInitializeResourceLite(&FsvolDeviceExtension->VolumeDeleteResource);
|
||||||
ExInitializeResourceLite(&FsvolDeviceExtension->FileRenameResource);
|
ExInitializeResourceLite(&FsvolDeviceExtension->FileRenameResource);
|
||||||
ExInitializeResourceLite(&FsvolDeviceExtension->ContextTableResource);
|
ExInitializeFastMutex(&FsvolDeviceExtension->ContextTableMutex);
|
||||||
InitializeListHead(&FsvolDeviceExtension->ContextList);
|
InitializeListHead(&FsvolDeviceExtension->ContextList);
|
||||||
RtlInitializeGenericTableAvl(&FsvolDeviceExtension->ContextByNameTable,
|
RtlInitializeGenericTableAvl(&FsvolDeviceExtension->ContextByNameTable,
|
||||||
FspFsvolDeviceCompareContextByName,
|
FspFsvolDeviceCompareContextByName,
|
||||||
@ -494,7 +494,6 @@ static VOID FspFsvolDeviceFini(PDEVICE_OBJECT DeviceObject)
|
|||||||
* to enumerate and delete all entries in the ContextTable.
|
* to enumerate and delete all entries in the ContextTable.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ExDeleteResourceLite(&FsvolDeviceExtension->ContextTableResource);
|
|
||||||
ExDeleteResourceLite(&FsvolDeviceExtension->FileRenameResource);
|
ExDeleteResourceLite(&FsvolDeviceExtension->FileRenameResource);
|
||||||
ExDeleteResourceLite(&FsvolDeviceExtension->VolumeDeleteResource);
|
ExDeleteResourceLite(&FsvolDeviceExtension->VolumeDeleteResource);
|
||||||
}
|
}
|
||||||
@ -856,7 +855,7 @@ static NTSTATUS FspFsmupDeviceInit(PDEVICE_OBJECT DeviceObject)
|
|||||||
FSP_FSMUP_DEVICE_EXTENSION *FsmupDeviceExtension = FspFsmupDeviceExtension(DeviceObject);
|
FSP_FSMUP_DEVICE_EXTENSION *FsmupDeviceExtension = FspFsmupDeviceExtension(DeviceObject);
|
||||||
|
|
||||||
/* initialize our prefix table */
|
/* initialize our prefix table */
|
||||||
ExInitializeResourceLite(&FsmupDeviceExtension->PrefixTableResource);
|
ExInitializeFastMutex(&FsmupDeviceExtension->PrefixTableMutex);
|
||||||
RtlInitializeUnicodePrefix(&FsmupDeviceExtension->PrefixTable);
|
RtlInitializeUnicodePrefix(&FsmupDeviceExtension->PrefixTable);
|
||||||
RtlInitializeUnicodePrefix(&FsmupDeviceExtension->ClassTable);
|
RtlInitializeUnicodePrefix(&FsmupDeviceExtension->ClassTable);
|
||||||
FsmupDeviceExtension->InitDonePfxTab = 1;
|
FsmupDeviceExtension->InitDonePfxTab = 1;
|
||||||
@ -878,7 +877,6 @@ static VOID FspFsmupDeviceFini(PDEVICE_OBJECT DeviceObject)
|
|||||||
*/
|
*/
|
||||||
ASSERT(0 == RtlNextUnicodePrefix(&FsmupDeviceExtension->PrefixTable, TRUE));
|
ASSERT(0 == RtlNextUnicodePrefix(&FsmupDeviceExtension->PrefixTable, TRUE));
|
||||||
ASSERT(0 == RtlNextUnicodePrefix(&FsmupDeviceExtension->ClassTable, TRUE));
|
ASSERT(0 == RtlNextUnicodePrefix(&FsmupDeviceExtension->ClassTable, TRUE));
|
||||||
ExDeleteResourceLite(&FsmupDeviceExtension->PrefixTableResource);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -936,4 +934,4 @@ VOID FspDeviceDeleteAll(VOID)
|
|||||||
FspDeviceDeleteList(DeviceObjects, DeviceObjectCount);
|
FspDeviceDeleteList(DeviceObjects, DeviceObjectCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
ERESOURCE FspDeviceGlobalResource;
|
FAST_MUTEX FspDeviceGlobalMutex;
|
||||||
|
@ -122,14 +122,13 @@ NTSTATUS DriverEntry(
|
|||||||
#pragma prefast(suppress:28175, "We are a filesystem: ok to access FastIoDispatch")
|
#pragma prefast(suppress:28175, "We are a filesystem: ok to access FastIoDispatch")
|
||||||
DriverObject->FastIoDispatch = &FspFastIoDispatch;
|
DriverObject->FastIoDispatch = &FspFastIoDispatch;
|
||||||
|
|
||||||
BOOLEAN InitDoneGRes = FALSE, InitDoneSilo = FALSE, InitDonePsBuf = FALSE,
|
BOOLEAN InitDoneSilo = FALSE, InitDonePsBuf = FALSE,
|
||||||
InitDoneTimers = FALSE, InitDoneDevices = FALSE;
|
InitDoneTimers = FALSE, InitDoneDevices = FALSE;
|
||||||
|
|
||||||
FspDriverObject = DriverObject;
|
FspDriverObject = DriverObject;
|
||||||
FspDriverMultiVersionInitialize();
|
FspDriverMultiVersionInitialize();
|
||||||
|
|
||||||
ExInitializeResourceLite(&FspDeviceGlobalResource);
|
ExInitializeFastMutex(&FspDeviceGlobalMutex);
|
||||||
InitDoneGRes = TRUE;
|
|
||||||
|
|
||||||
Result = FspSiloInitialize(FspDriverInitializeDevices, FspDriverFinalizeDevices);
|
Result = FspSiloInitialize(FspDriverInitializeDevices, FspDriverFinalizeDevices);
|
||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
@ -164,8 +163,6 @@ exit:
|
|||||||
FspProcessBufferFinalize();
|
FspProcessBufferFinalize();
|
||||||
if (InitDoneSilo)
|
if (InitDoneSilo)
|
||||||
FspSiloFinalize();
|
FspSiloFinalize();
|
||||||
if (InitDoneGRes)
|
|
||||||
ExDeleteResourceLite(&FspDeviceGlobalResource);
|
|
||||||
|
|
||||||
FSP_TRACE_FINI();
|
FSP_TRACE_FINI();
|
||||||
}
|
}
|
||||||
|
@ -1214,7 +1214,7 @@ typedef struct
|
|||||||
ERESOURCE VolumeDeleteResource;
|
ERESOURCE VolumeDeleteResource;
|
||||||
BOOLEAN VolumeDeleted;
|
BOOLEAN VolumeDeleted;
|
||||||
ERESOURCE FileRenameResource;
|
ERESOURCE FileRenameResource;
|
||||||
ERESOURCE ContextTableResource;
|
FAST_MUTEX ContextTableMutex;
|
||||||
LIST_ENTRY ContextList;
|
LIST_ENTRY ContextList;
|
||||||
RTL_AVL_TABLE ContextByNameTable;
|
RTL_AVL_TABLE ContextByNameTable;
|
||||||
PVOID ContextByNameTableElementStorage;
|
PVOID ContextByNameTableElementStorage;
|
||||||
@ -1244,7 +1244,7 @@ typedef struct
|
|||||||
{
|
{
|
||||||
FSP_DEVICE_EXTENSION Base;
|
FSP_DEVICE_EXTENSION Base;
|
||||||
UINT32 InitDonePfxTab:1;
|
UINT32 InitDonePfxTab:1;
|
||||||
ERESOURCE PrefixTableResource;
|
FAST_MUTEX PrefixTableMutex;
|
||||||
UNICODE_PREFIX_TABLE PrefixTable;
|
UNICODE_PREFIX_TABLE PrefixTable;
|
||||||
UNICODE_PREFIX_TABLE ClassTable;
|
UNICODE_PREFIX_TABLE ClassTable;
|
||||||
} FSP_FSMUP_DEVICE_EXTENSION;
|
} FSP_FSMUP_DEVICE_EXTENSION;
|
||||||
@ -1374,13 +1374,13 @@ static inline
|
|||||||
VOID FspFsvolDeviceLockContextTable(PDEVICE_OBJECT DeviceObject)
|
VOID FspFsvolDeviceLockContextTable(PDEVICE_OBJECT DeviceObject)
|
||||||
{
|
{
|
||||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
|
||||||
ExAcquireResourceExclusiveLite(&FsvolDeviceExtension->ContextTableResource, TRUE);
|
ExAcquireFastMutexUnsafe(&FsvolDeviceExtension->ContextTableMutex);
|
||||||
}
|
}
|
||||||
static inline
|
static inline
|
||||||
VOID FspFsvolDeviceUnlockContextTable(PDEVICE_OBJECT DeviceObject)
|
VOID FspFsvolDeviceUnlockContextTable(PDEVICE_OBJECT DeviceObject)
|
||||||
{
|
{
|
||||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
|
||||||
ExReleaseResourceLite(&FsvolDeviceExtension->ContextTableResource);
|
ExReleaseFastMutexUnsafe(&FsvolDeviceExtension->ContextTableMutex);
|
||||||
}
|
}
|
||||||
NTSTATUS FspFsvolDeviceCopyContextList(PDEVICE_OBJECT DeviceObject,
|
NTSTATUS FspFsvolDeviceCopyContextList(PDEVICE_OBJECT DeviceObject,
|
||||||
PVOID **PContexts, PULONG PContextCount);
|
PVOID **PContexts, PULONG PContextCount);
|
||||||
@ -1434,6 +1434,18 @@ BOOLEAN FspFsvolDeviceVolumePrefixInString(PDEVICE_OBJECT DeviceObject, PUNICODE
|
|||||||
return RtlPrefixUnicodeString(&FspFsvolDeviceExtension(DeviceObject)->VolumePrefix, String,
|
return RtlPrefixUnicodeString(&FspFsvolDeviceExtension(DeviceObject)->VolumePrefix, String,
|
||||||
TRUE);
|
TRUE);
|
||||||
}
|
}
|
||||||
|
static inline
|
||||||
|
VOID FspFsmupDeviceLockPrefixTable(PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
FSP_FSMUP_DEVICE_EXTENSION *FsmupDeviceExtension = FspFsmupDeviceExtension(DeviceObject);
|
||||||
|
ExAcquireFastMutexUnsafe(&FsmupDeviceExtension->PrefixTableMutex);
|
||||||
|
}
|
||||||
|
static inline
|
||||||
|
VOID FspFsmupDeviceUnlockPrefixTable(PDEVICE_OBJECT DeviceObject)
|
||||||
|
{
|
||||||
|
FSP_FSMUP_DEVICE_EXTENSION *FsmupDeviceExtension = FspFsmupDeviceExtension(DeviceObject);
|
||||||
|
ExReleaseFastMutexUnsafe(&FsmupDeviceExtension->PrefixTableMutex);
|
||||||
|
}
|
||||||
NTSTATUS FspDeviceCopyList(
|
NTSTATUS FspDeviceCopyList(
|
||||||
PDEVICE_OBJECT **PDeviceObjects, PULONG PDeviceObjectCount);
|
PDEVICE_OBJECT **PDeviceObjects, PULONG PDeviceObjectCount);
|
||||||
VOID FspDeviceDeleteList(
|
VOID FspDeviceDeleteList(
|
||||||
@ -1448,14 +1460,14 @@ VOID FspDeviceStopTimer(PDEVICE_OBJECT DeviceObject);
|
|||||||
static inline
|
static inline
|
||||||
VOID FspDeviceGlobalLock(VOID)
|
VOID FspDeviceGlobalLock(VOID)
|
||||||
{
|
{
|
||||||
extern ERESOURCE FspDeviceGlobalResource;
|
extern FAST_MUTEX FspDeviceGlobalMutex;
|
||||||
ExAcquireResourceExclusiveLite(&FspDeviceGlobalResource, TRUE);
|
ExAcquireFastMutexUnsafe(&FspDeviceGlobalMutex);
|
||||||
}
|
}
|
||||||
static inline
|
static inline
|
||||||
VOID FspDeviceGlobalUnlock(VOID)
|
VOID FspDeviceGlobalUnlock(VOID)
|
||||||
{
|
{
|
||||||
extern ERESOURCE FspDeviceGlobalResource;
|
extern FAST_MUTEX FspDeviceGlobalMutex;
|
||||||
ExReleaseResourceLite(&FspDeviceGlobalResource);
|
ExReleaseFastMutexUnsafe(&FspDeviceGlobalMutex);
|
||||||
}
|
}
|
||||||
#define FspFsvolDeviceStatistics(DeviceObject)\
|
#define FspFsvolDeviceStatistics(DeviceObject)\
|
||||||
FspStatistics(FspFsvolDeviceExtension(DeviceObject)->Statistics)
|
FspStatistics(FspFsvolDeviceExtension(DeviceObject)->Statistics)
|
||||||
@ -1596,7 +1608,7 @@ typedef struct FSP_FILE_NODE
|
|||||||
/* interlocked access */
|
/* interlocked access */
|
||||||
LONG RefCount;
|
LONG RefCount;
|
||||||
UINT32 DeletePending;
|
UINT32 DeletePending;
|
||||||
/* locked under FSP_FSVOL_DEVICE_EXTENSION::ContextTableResource */
|
/* locked under FSP_FSVOL_DEVICE_EXTENSION::ContextTableMutex */
|
||||||
LONG ActiveCount; /* CREATE w/o CLOSE count */
|
LONG ActiveCount; /* CREATE w/o CLOSE count */
|
||||||
LONG OpenCount; /* ContextTable ref count */
|
LONG OpenCount; /* ContextTable ref count */
|
||||||
LONG HandleCount; /* HANDLE count (CREATE/CLEANUP) */
|
LONG HandleCount; /* HANDLE count (CREATE/CLEANUP) */
|
||||||
@ -1960,7 +1972,7 @@ extern FAST_IO_DISPATCH FspFastIoDispatch;
|
|||||||
extern CACHE_MANAGER_CALLBACKS FspCacheManagerCallbacks;
|
extern CACHE_MANAGER_CALLBACKS FspCacheManagerCallbacks;
|
||||||
extern FSP_IOPREP_DISPATCH *FspIopPrepareFunction[];
|
extern FSP_IOPREP_DISPATCH *FspIopPrepareFunction[];
|
||||||
extern FSP_IOCMPL_DISPATCH *FspIopCompleteFunction[];
|
extern FSP_IOCMPL_DISPATCH *FspIopCompleteFunction[];
|
||||||
extern ERESOURCE FspDeviceGlobalResource;
|
extern FAST_MUTEX FspDeviceGlobalMutex;
|
||||||
extern WCHAR FspFileDescDirectoryPatternMatchAll[];
|
extern WCHAR FspFileDescDirectoryPatternMatchAll[];
|
||||||
extern const GUID FspMainFileOpenEcpGuid;
|
extern const GUID FspMainFileOpenEcpGuid;
|
||||||
extern ULONG FspProcessorCount;
|
extern ULONG FspProcessorCount;
|
||||||
|
@ -121,7 +121,7 @@ NTSTATUS FspMupRegister(
|
|||||||
Class->Name.Buffer = Class->Buffer;
|
Class->Name.Buffer = Class->Buffer;
|
||||||
RtlCopyMemory(Class->Buffer, ClassName.Buffer, ClassName.Length);
|
RtlCopyMemory(Class->Buffer, ClassName.Buffer, ClassName.Length);
|
||||||
|
|
||||||
ExAcquireResourceExclusiveLite(&FsmupDeviceExtension->PrefixTableResource, TRUE);
|
FspFsmupDeviceLockPrefixTable(FsmupDeviceObject);
|
||||||
Success = RtlInsertUnicodePrefix(&FsmupDeviceExtension->PrefixTable,
|
Success = RtlInsertUnicodePrefix(&FsmupDeviceExtension->PrefixTable,
|
||||||
&FsvolDeviceExtension->VolumePrefix, &FsvolDeviceExtension->VolumePrefixEntry);
|
&FsvolDeviceExtension->VolumePrefix, &FsvolDeviceExtension->VolumePrefixEntry);
|
||||||
if (Success)
|
if (Success)
|
||||||
@ -144,7 +144,7 @@ NTSTATUS FspMupRegister(
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
Result = STATUS_OBJECT_NAME_COLLISION;
|
Result = STATUS_OBJECT_NAME_COLLISION;
|
||||||
ExReleaseResourceLite(&FsmupDeviceExtension->PrefixTableResource);
|
FspFsmupDeviceUnlockPrefixTable(FsmupDeviceObject);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
if (0 != Class)
|
if (0 != Class)
|
||||||
@ -169,7 +169,7 @@ VOID FspMupUnregister(
|
|||||||
Result = FspMupGetClassName(&FsvolDeviceExtension->VolumePrefix, &ClassName);
|
Result = FspMupGetClassName(&FsvolDeviceExtension->VolumePrefix, &ClassName);
|
||||||
ASSERT(NT_SUCCESS(Result));
|
ASSERT(NT_SUCCESS(Result));
|
||||||
|
|
||||||
ExAcquireResourceExclusiveLite(&FsmupDeviceExtension->PrefixTableResource, TRUE);
|
FspFsmupDeviceLockPrefixTable(FsmupDeviceObject);
|
||||||
PrefixEntry = RtlFindUnicodePrefix(&FsmupDeviceExtension->PrefixTable,
|
PrefixEntry = RtlFindUnicodePrefix(&FsmupDeviceExtension->PrefixTable,
|
||||||
&FsvolDeviceExtension->VolumePrefix, 0);
|
&FsvolDeviceExtension->VolumePrefix, 0);
|
||||||
if (0 != PrefixEntry)
|
if (0 != PrefixEntry)
|
||||||
@ -191,7 +191,7 @@ VOID FspMupUnregister(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ExReleaseResourceLite(&FsmupDeviceExtension->PrefixTableResource);
|
FspFsmupDeviceUnlockPrefixTable(FsmupDeviceObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
PDEVICE_OBJECT FspMupGetFsvolDeviceObject(
|
PDEVICE_OBJECT FspMupGetFsvolDeviceObject(
|
||||||
@ -253,7 +253,7 @@ NTSTATUS FspMupHandleIrp(
|
|||||||
if (0 != FileObject->RelatedFileObject)
|
if (0 != FileObject->RelatedFileObject)
|
||||||
FileObject = FileObject->RelatedFileObject;
|
FileObject = FileObject->RelatedFileObject;
|
||||||
|
|
||||||
ExAcquireResourceExclusiveLite(&FsmupDeviceExtension->PrefixTableResource, TRUE);
|
FspFsmupDeviceLockPrefixTable(FsmupDeviceObject);
|
||||||
PrefixEntry = RtlFindUnicodePrefix(&FsmupDeviceExtension->PrefixTable,
|
PrefixEntry = RtlFindUnicodePrefix(&FsmupDeviceExtension->PrefixTable,
|
||||||
&FileObject->FileName, 0);
|
&FileObject->FileName, 0);
|
||||||
if (0 != PrefixEntry)
|
if (0 != PrefixEntry)
|
||||||
@ -263,7 +263,7 @@ NTSTATUS FspMupHandleIrp(
|
|||||||
FspDeviceReference(FsvolDeviceObject);
|
FspDeviceReference(FsvolDeviceObject);
|
||||||
DeviceDeref = TRUE;
|
DeviceDeref = TRUE;
|
||||||
}
|
}
|
||||||
ExReleaseResourceLite(&FsmupDeviceExtension->PrefixTableResource);
|
FspFsmupDeviceUnlockPrefixTable(FsmupDeviceObject);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IRP_MJ_DEVICE_CONTROL:
|
case IRP_MJ_DEVICE_CONTROL:
|
||||||
@ -419,19 +419,19 @@ static NTSTATUS FspMupRedirQueryPathEx(
|
|||||||
return STATUS_BAD_NETWORK_PATH;
|
return STATUS_BAD_NETWORK_PATH;
|
||||||
|
|
||||||
Result = STATUS_BAD_NETWORK_PATH;
|
Result = STATUS_BAD_NETWORK_PATH;
|
||||||
ExAcquireResourceExclusiveLite(&FsmupDeviceExtension->PrefixTableResource, TRUE);
|
FspFsmupDeviceLockPrefixTable(FsmupDeviceObject);
|
||||||
Entry = RtlFindUnicodePrefix(&FsmupDeviceExtension->ClassTable, &ClassName, 0);
|
Entry = RtlFindUnicodePrefix(&FsmupDeviceExtension->ClassTable, &ClassName, 0);
|
||||||
if (0 != Entry)
|
if (0 != Entry)
|
||||||
{
|
{
|
||||||
QueryPathResponse->LengthAccepted = ClassName.Length;
|
QueryPathResponse->LengthAccepted = ClassName.Length;
|
||||||
Result = STATUS_SUCCESS;
|
Result = STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
ExReleaseResourceLite(&FsmupDeviceExtension->PrefixTableResource);
|
FspFsmupDeviceUnlockPrefixTable(FsmupDeviceObject);
|
||||||
#else
|
#else
|
||||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension;
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension;
|
||||||
|
|
||||||
Result = STATUS_BAD_NETWORK_PATH;
|
Result = STATUS_BAD_NETWORK_PATH;
|
||||||
ExAcquireResourceExclusiveLite(&FsmupDeviceExtension->PrefixTableResource, TRUE);
|
FspFsmupDeviceLockPrefixTable(FsmupDeviceObject);
|
||||||
Entry = RtlFindUnicodePrefix(&FsmupDeviceExtension->PrefixTable,
|
Entry = RtlFindUnicodePrefix(&FsmupDeviceExtension->PrefixTable,
|
||||||
&QueryPathRequest->PathName, 0);
|
&QueryPathRequest->PathName, 0);
|
||||||
if (0 != Entry)
|
if (0 != Entry)
|
||||||
@ -450,7 +450,7 @@ static NTSTATUS FspMupRedirQueryPathEx(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ExReleaseResourceLite(&FsmupDeviceExtension->PrefixTableResource);
|
FspFsmupDeviceUnlockPrefixTable(FsmupDeviceObject);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return Result;
|
return Result;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user