mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 08:53:01 -05:00
sys: rename retain/release to reference/dereference
This commit is contained in:
parent
b17d70e462
commit
c488949022
@ -59,7 +59,7 @@ static NTSTATUS FspFsvolClose(
|
|||||||
FSP_FSCTL_TRANSACT_REQ *Request;
|
FSP_FSCTL_TRANSACT_REQ *Request;
|
||||||
|
|
||||||
/* dereference the FileNode (and delete if no more references) */
|
/* dereference the FileNode (and delete if no more references) */
|
||||||
FspFileNodeRelease(FileNode);
|
FspFileNodeDereference(FileNode);
|
||||||
|
|
||||||
/* create the user-mode file system request; MustSucceed because IRP_MJ_CLOSE cannot fail */
|
/* create the user-mode file system request; MustSucceed because IRP_MJ_CLOSE cannot fail */
|
||||||
FspIopCreateRequestMustSucceed(0, FileNameRequired ? &FileNode->FileName : 0, 0, &Request);
|
FspIopCreateRequestMustSucceed(0, FileNameRequired ? &FileNode->FileName : 0, 0, &Request);
|
||||||
|
@ -267,7 +267,7 @@ static NTSTATUS FspFsvolCreate(
|
|||||||
FspFsvolCreateRequestFini, &Request);
|
FspFsvolCreateRequestFini, &Request);
|
||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
{
|
{
|
||||||
FspFileNodeRelease(FileNode);
|
FspFileNodeDereference(FileNode);
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -680,7 +680,7 @@ static VOID FspFsvolCreateRequestFini(PVOID Context[3])
|
|||||||
|
|
||||||
if (0 != Context[RequestFileNode])
|
if (0 != Context[RequestFileNode])
|
||||||
{
|
{
|
||||||
FspFileNodeRelease(Context[RequestFileNode]);
|
FspFileNodeDereference(Context[RequestFileNode]);
|
||||||
Context[RequestFileNode] = 0;
|
Context[RequestFileNode] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -728,7 +728,7 @@ static VOID FspFsvolCreateOverwriteRequestFini(PVOID Context[3])
|
|||||||
FspFileNodeClose(FileNode, FileObject, 0);
|
FspFileNodeClose(FileNode, FileObject, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
FspFileNodeRelease(FileNode);
|
FspFileNodeDereference(FileNode);
|
||||||
|
|
||||||
Context[RequestFileObject] = 0;
|
Context[RequestFileObject] = 0;
|
||||||
Context[RequestFileNode] = 0;
|
Context[RequestFileNode] = 0;
|
||||||
|
@ -15,12 +15,12 @@ NTSTATUS FspDeviceCreate(UINT32 Kind, ULONG ExtraSize,
|
|||||||
PDEVICE_OBJECT *PDeviceObject);
|
PDEVICE_OBJECT *PDeviceObject);
|
||||||
NTSTATUS FspDeviceInitialize(PDEVICE_OBJECT DeviceObject);
|
NTSTATUS FspDeviceInitialize(PDEVICE_OBJECT DeviceObject);
|
||||||
VOID FspDeviceDelete(PDEVICE_OBJECT DeviceObject);
|
VOID FspDeviceDelete(PDEVICE_OBJECT DeviceObject);
|
||||||
BOOLEAN FspDeviceRetain(PDEVICE_OBJECT DeviceObject);
|
BOOLEAN FspDeviceReference(PDEVICE_OBJECT DeviceObject);
|
||||||
VOID FspDeviceRelease(PDEVICE_OBJECT DeviceObject);
|
VOID FspDeviceDereference(PDEVICE_OBJECT DeviceObject);
|
||||||
_IRQL_requires_(DISPATCH_LEVEL)
|
_IRQL_requires_(DISPATCH_LEVEL)
|
||||||
static BOOLEAN FspDeviceRetainAtDpcLevel(PDEVICE_OBJECT DeviceObject);
|
static BOOLEAN FspDeviceReferenceAtDpcLevel(PDEVICE_OBJECT DeviceObject);
|
||||||
_IRQL_requires_(DISPATCH_LEVEL)
|
_IRQL_requires_(DISPATCH_LEVEL)
|
||||||
static VOID FspDeviceReleaseFromDpcLevel(PDEVICE_OBJECT DeviceObject);
|
static VOID FspDeviceDereferenceFromDpcLevel(PDEVICE_OBJECT DeviceObject);
|
||||||
static NTSTATUS FspFsvolDeviceInit(PDEVICE_OBJECT DeviceObject);
|
static NTSTATUS FspFsvolDeviceInit(PDEVICE_OBJECT DeviceObject);
|
||||||
static VOID FspFsvolDeviceFini(PDEVICE_OBJECT DeviceObject);
|
static VOID FspFsvolDeviceFini(PDEVICE_OBJECT DeviceObject);
|
||||||
static IO_TIMER_ROUTINE FspFsvolDeviceTimerRoutine;
|
static IO_TIMER_ROUTINE FspFsvolDeviceTimerRoutine;
|
||||||
@ -171,7 +171,7 @@ VOID FspDeviceDelete(PDEVICE_OBJECT DeviceObject)
|
|||||||
IoDeleteDevice(DeviceObject);
|
IoDeleteDevice(DeviceObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN FspDeviceRetain(PDEVICE_OBJECT DeviceObject)
|
BOOLEAN FspDeviceReference(PDEVICE_OBJECT DeviceObject)
|
||||||
{
|
{
|
||||||
// !PAGED_CODE();
|
// !PAGED_CODE();
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ BOOLEAN FspDeviceRetain(PDEVICE_OBJECT DeviceObject)
|
|||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID FspDeviceRelease(PDEVICE_OBJECT DeviceObject)
|
VOID FspDeviceDereference(PDEVICE_OBJECT DeviceObject)
|
||||||
{
|
{
|
||||||
// !PAGED_CODE();
|
// !PAGED_CODE();
|
||||||
|
|
||||||
@ -211,7 +211,7 @@ VOID FspDeviceRelease(PDEVICE_OBJECT DeviceObject)
|
|||||||
}
|
}
|
||||||
|
|
||||||
_IRQL_requires_(DISPATCH_LEVEL)
|
_IRQL_requires_(DISPATCH_LEVEL)
|
||||||
static BOOLEAN FspDeviceRetainAtDpcLevel(PDEVICE_OBJECT DeviceObject)
|
static BOOLEAN FspDeviceReferenceAtDpcLevel(PDEVICE_OBJECT DeviceObject)
|
||||||
{
|
{
|
||||||
// !PAGED_CODE();
|
// !PAGED_CODE();
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ static BOOLEAN FspDeviceRetainAtDpcLevel(PDEVICE_OBJECT DeviceObject)
|
|||||||
}
|
}
|
||||||
|
|
||||||
_IRQL_requires_(DISPATCH_LEVEL)
|
_IRQL_requires_(DISPATCH_LEVEL)
|
||||||
static VOID FspDeviceReleaseFromDpcLevel(PDEVICE_OBJECT DeviceObject)
|
static VOID FspDeviceDereferenceFromDpcLevel(PDEVICE_OBJECT DeviceObject)
|
||||||
{
|
{
|
||||||
// !PAGED_CODE();
|
// !PAGED_CODE();
|
||||||
|
|
||||||
@ -321,7 +321,7 @@ static VOID FspFsvolDeviceFini(PDEVICE_OBJECT DeviceObject)
|
|||||||
*
|
*
|
||||||
* Our IoTimer routine will NOT be called again after IoStopTimer() returns.
|
* Our IoTimer routine will NOT be called again after IoStopTimer() returns.
|
||||||
* However a work item may be in flight. For this reason our IoTimer routine
|
* However a work item may be in flight. For this reason our IoTimer routine
|
||||||
* retains our DeviceObject before queueing work items.
|
* references our DeviceObject before queueing work items.
|
||||||
*/
|
*/
|
||||||
if (FsvolDeviceExtension->InitDoneTimer)
|
if (FsvolDeviceExtension->InitDoneTimer)
|
||||||
IoStopTimer(DeviceObject);
|
IoStopTimer(DeviceObject);
|
||||||
@ -366,14 +366,14 @@ static VOID FspFsvolDeviceTimerRoutine(PDEVICE_OBJECT DeviceObject, PVOID Contex
|
|||||||
// !PAGED_CODE();
|
// !PAGED_CODE();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This routine runs at DPC level. Retain our DeviceObject and queue a work item
|
* This routine runs at DPC level. Reference our DeviceObject and queue a work item
|
||||||
* so that we can do our processing at Passive level. Only do so if the work item
|
* so that we can do our processing at Passive level. Only do so if the work item
|
||||||
* is not already in flight (otherwise we could requeue the same work item).
|
* is not already in flight (otherwise we could requeue the same work item).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
|
ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
|
||||||
|
|
||||||
if (!FspDeviceRetainAtDpcLevel(DeviceObject))
|
if (!FspDeviceReferenceAtDpcLevel(DeviceObject))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
BOOLEAN ExpirationInProgress;
|
BOOLEAN ExpirationInProgress;
|
||||||
@ -389,7 +389,7 @@ static VOID FspFsvolDeviceTimerRoutine(PDEVICE_OBJECT DeviceObject, PVOID Contex
|
|||||||
KeReleaseSpinLockFromDpcLevel(&FsvolDeviceExtension->ExpirationLock);
|
KeReleaseSpinLockFromDpcLevel(&FsvolDeviceExtension->ExpirationLock);
|
||||||
|
|
||||||
if (ExpirationInProgress)
|
if (ExpirationInProgress)
|
||||||
FspDeviceReleaseFromDpcLevel(DeviceObject);
|
FspDeviceDereferenceFromDpcLevel(DeviceObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID FspFsvolDeviceExpirationRoutine(PVOID Context)
|
static VOID FspFsvolDeviceExpirationRoutine(PVOID Context)
|
||||||
@ -406,7 +406,7 @@ static VOID FspFsvolDeviceExpirationRoutine(PVOID Context)
|
|||||||
FsvolDeviceExtension->ExpirationInProgress = FALSE;
|
FsvolDeviceExtension->ExpirationInProgress = FALSE;
|
||||||
KeReleaseSpinLock(&FsvolDeviceExtension->ExpirationLock, Irql);
|
KeReleaseSpinLock(&FsvolDeviceExtension->ExpirationLock, Irql);
|
||||||
|
|
||||||
FspDeviceRelease(DeviceObject);
|
FspDeviceDereference(DeviceObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID FspFsvolDeviceLockContextTable(PDEVICE_OBJECT DeviceObject)
|
VOID FspFsvolDeviceLockContextTable(PDEVICE_OBJECT DeviceObject)
|
||||||
|
@ -103,16 +103,16 @@ extern __declspec(selectany) int fsp_bp = 1;
|
|||||||
#define FSP_ENTER_MJ(...) \
|
#define FSP_ENTER_MJ(...) \
|
||||||
NTSTATUS Result = STATUS_SUCCESS; \
|
NTSTATUS Result = STATUS_SUCCESS; \
|
||||||
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);\
|
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);\
|
||||||
BOOLEAN fsp_device_release = FALSE; \
|
BOOLEAN fsp_device_deref = FALSE; \
|
||||||
FSP_ENTER_(__VA_ARGS__); \
|
FSP_ENTER_(__VA_ARGS__); \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
if (!FspDeviceRetain(IrpSp->DeviceObject))\
|
if (!FspDeviceReference(IrpSp->DeviceObject))\
|
||||||
{ \
|
{ \
|
||||||
Result = STATUS_CANCELLED; \
|
Result = STATUS_CANCELLED; \
|
||||||
goto fsp_leave_label; \
|
goto fsp_leave_label; \
|
||||||
} \
|
} \
|
||||||
fsp_device_release = TRUE; \
|
fsp_device_deref = TRUE; \
|
||||||
} while (0,0)
|
} while (0,0)
|
||||||
#define FSP_LEAVE_MJ(fmt, ...) \
|
#define FSP_LEAVE_MJ(fmt, ...) \
|
||||||
FSP_LEAVE_( \
|
FSP_LEAVE_( \
|
||||||
@ -141,7 +141,7 @@ extern __declspec(selectany) int fsp_bp = 1;
|
|||||||
}\
|
}\
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
FspIopCompleteIrpEx(Irp, Result, fsp_device_release);\
|
FspIopCompleteIrpEx(Irp, Result, fsp_device_deref);\
|
||||||
} \
|
} \
|
||||||
); \
|
); \
|
||||||
return Result
|
return Result
|
||||||
@ -403,7 +403,7 @@ VOID FspIopDeleteRequest(FSP_FSCTL_TRANSACT_REQ *Request);
|
|||||||
PVOID *FspIopRequestContextAddress(FSP_FSCTL_TRANSACT_REQ *Request, ULONG I);
|
PVOID *FspIopRequestContextAddress(FSP_FSCTL_TRANSACT_REQ *Request, ULONG I);
|
||||||
NTSTATUS FspIopPostWorkRequestFunnel(PDEVICE_OBJECT DeviceObject,
|
NTSTATUS FspIopPostWorkRequestFunnel(PDEVICE_OBJECT DeviceObject,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN BestEffort);
|
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN BestEffort);
|
||||||
VOID FspIopCompleteIrpEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceRelease);
|
VOID FspIopCompleteIrpEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceDereference);
|
||||||
VOID FspIopCompleteCanceledIrp(PIRP Irp);
|
VOID FspIopCompleteCanceledIrp(PIRP Irp);
|
||||||
NTSTATUS FspIopDispatchPrepare(PIRP Irp, FSP_FSCTL_TRANSACT_REQ *Request);
|
NTSTATUS FspIopDispatchPrepare(PIRP Irp, FSP_FSCTL_TRANSACT_REQ *Request);
|
||||||
VOID FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response);
|
VOID FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response);
|
||||||
@ -473,8 +473,8 @@ NTSTATUS FspDeviceCreate(UINT32 Kind, ULONG ExtraSize,
|
|||||||
PDEVICE_OBJECT *PDeviceObject);
|
PDEVICE_OBJECT *PDeviceObject);
|
||||||
NTSTATUS FspDeviceInitialize(PDEVICE_OBJECT DeviceObject);
|
NTSTATUS FspDeviceInitialize(PDEVICE_OBJECT DeviceObject);
|
||||||
VOID FspDeviceDelete(PDEVICE_OBJECT DeviceObject);
|
VOID FspDeviceDelete(PDEVICE_OBJECT DeviceObject);
|
||||||
BOOLEAN FspDeviceRetain(PDEVICE_OBJECT DeviceObject);
|
BOOLEAN FspDeviceReference(PDEVICE_OBJECT DeviceObject);
|
||||||
VOID FspDeviceRelease(PDEVICE_OBJECT DeviceObject);
|
VOID FspDeviceDereference(PDEVICE_OBJECT DeviceObject);
|
||||||
VOID FspFsvolDeviceLockContextTable(PDEVICE_OBJECT DeviceObject);
|
VOID FspFsvolDeviceLockContextTable(PDEVICE_OBJECT DeviceObject);
|
||||||
VOID FspFsvolDeviceUnlockContextTable(PDEVICE_OBJECT DeviceObject);
|
VOID FspFsvolDeviceUnlockContextTable(PDEVICE_OBJECT DeviceObject);
|
||||||
PVOID FspFsvolDeviceLookupContext(PDEVICE_OBJECT DeviceObject, UINT64 Identifier);
|
PVOID FspFsvolDeviceLookupContext(PDEVICE_OBJECT DeviceObject, UINT64 Identifier);
|
||||||
@ -549,12 +549,12 @@ FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
|||||||
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||||
PBOOLEAN PDeletePending);
|
PBOOLEAN PDeletePending);
|
||||||
static inline
|
static inline
|
||||||
VOID FspFileNodeRetain(FSP_FILE_NODE *FileNode)
|
VOID FspFileNodeReference(FSP_FILE_NODE *FileNode)
|
||||||
{
|
{
|
||||||
InterlockedIncrement(&FileNode->RefCount);
|
InterlockedIncrement(&FileNode->RefCount);
|
||||||
}
|
}
|
||||||
static inline
|
static inline
|
||||||
VOID FspFileNodeRelease(FSP_FILE_NODE *FileNode)
|
VOID FspFileNodeDereference(FSP_FILE_NODE *FileNode)
|
||||||
{
|
{
|
||||||
LONG RefCount = InterlockedDecrement(&FileNode->RefCount);
|
LONG RefCount = InterlockedDecrement(&FileNode->RefCount);
|
||||||
if (0 == RefCount)
|
if (0 == RefCount)
|
||||||
|
@ -15,7 +15,7 @@ PVOID *FspIopRequestContextAddress(FSP_FSCTL_TRANSACT_REQ *Request, ULONG I);
|
|||||||
NTSTATUS FspIopPostWorkRequestFunnel(PDEVICE_OBJECT DeviceObject,
|
NTSTATUS FspIopPostWorkRequestFunnel(PDEVICE_OBJECT DeviceObject,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN AllocateIrpMustSucceed);
|
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN AllocateIrpMustSucceed);
|
||||||
static IO_COMPLETION_ROUTINE FspIopPostWorkRequestCompletion;
|
static IO_COMPLETION_ROUTINE FspIopPostWorkRequestCompletion;
|
||||||
VOID FspIopCompleteIrpEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceRelease);
|
VOID FspIopCompleteIrpEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceDereference);
|
||||||
VOID FspIopCompleteCanceledIrp(PIRP Irp);
|
VOID FspIopCompleteCanceledIrp(PIRP Irp);
|
||||||
NTSTATUS FspIopDispatchPrepare(PIRP Irp, FSP_FSCTL_TRANSACT_REQ *Request);
|
NTSTATUS FspIopDispatchPrepare(PIRP Irp, FSP_FSCTL_TRANSACT_REQ *Request);
|
||||||
VOID FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response);
|
VOID FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response);
|
||||||
@ -209,7 +209,7 @@ static NTSTATUS FspIopPostWorkRequestCompletion(
|
|||||||
return STATUS_MORE_PROCESSING_REQUIRED;
|
return STATUS_MORE_PROCESSING_REQUIRED;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID FspIopCompleteIrpEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceRelease)
|
VOID FspIopCompleteIrpEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceDereference)
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
@ -230,8 +230,8 @@ VOID FspIopCompleteIrpEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceRelease)
|
|||||||
Irp->IoStatus.Status = Result;
|
Irp->IoStatus.Status = Result;
|
||||||
IoCompleteRequest(Irp, FSP_IO_INCREMENT);
|
IoCompleteRequest(Irp, FSP_IO_INCREMENT);
|
||||||
|
|
||||||
if (DeviceRelease)
|
if (DeviceDereference)
|
||||||
FspDeviceRelease(DeviceObject);
|
FspDeviceDereference(DeviceObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID FspIopCompleteCanceledIrp(PIRP Irp)
|
VOID FspIopCompleteCanceledIrp(PIRP Irp)
|
||||||
|
@ -56,7 +56,7 @@ NTSTATUS FspFileNodeCreate(PDEVICE_OBJECT DeviceObject,
|
|||||||
FileNode->NonPaged = NonPaged;
|
FileNode->NonPaged = NonPaged;
|
||||||
FileNode->RefCount = 1;
|
FileNode->RefCount = 1;
|
||||||
FileNode->FsvolDeviceObject = DeviceObject;
|
FileNode->FsvolDeviceObject = DeviceObject;
|
||||||
FspDeviceRetain(FileNode->FsvolDeviceObject);
|
FspDeviceReference(FileNode->FsvolDeviceObject);
|
||||||
RtlInitEmptyUnicodeString(&FileNode->FileName, FileNode->FileNameBuf, (USHORT)ExtraSize);
|
RtlInitEmptyUnicodeString(&FileNode->FileName, FileNode->FileNameBuf, (USHORT)ExtraSize);
|
||||||
|
|
||||||
*PFileNode = FileNode;
|
*PFileNode = FileNode;
|
||||||
@ -70,7 +70,7 @@ VOID FspFileNodeDelete(FSP_FILE_NODE *FileNode)
|
|||||||
|
|
||||||
FsRtlTeardownPerStreamContexts(&FileNode->Header);
|
FsRtlTeardownPerStreamContexts(&FileNode->Header);
|
||||||
|
|
||||||
FspDeviceRelease(FileNode->FsvolDeviceObject);
|
FspDeviceDereference(FileNode->FsvolDeviceObject);
|
||||||
|
|
||||||
ExDeleteResourceLite(&FileNode->NonPaged->PagingIoResource);
|
ExDeleteResourceLite(&FileNode->NonPaged->PagingIoResource);
|
||||||
ExDeleteResourceLite(&FileNode->NonPaged->Resource);
|
ExDeleteResourceLite(&FileNode->NonPaged->Resource);
|
||||||
@ -105,7 +105,7 @@ FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* The new FileNode was inserted into the Context table. Set its share access
|
* The new FileNode was inserted into the Context table. Set its share access
|
||||||
* and retain and open it. There should be (at least) two references to this
|
* and reference and open it. There should be (at least) two references to this
|
||||||
* FileNode, one from our caller and one from the Context table.
|
* FileNode, one from our caller and one from the Context table.
|
||||||
*/
|
*/
|
||||||
ASSERT(OpenedFileNode == FileNode);
|
ASSERT(OpenedFileNode == FileNode);
|
||||||
@ -160,7 +160,7 @@ FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
|||||||
|
|
||||||
if (0 != OpenedFileNode)
|
if (0 != OpenedFileNode)
|
||||||
{
|
{
|
||||||
FspFileNodeRetain(OpenedFileNode);
|
FspFileNodeReference(OpenedFileNode);
|
||||||
OpenedFileNode->OpenCount++;
|
OpenedFileNode->OpenCount++;
|
||||||
|
|
||||||
if (DeleteOnClose)
|
if (DeleteOnClose)
|
||||||
@ -198,7 +198,7 @@ VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
|||||||
FspFsvolDeviceUnlockContextTable(FsvolDeviceObject);
|
FspFsvolDeviceUnlockContextTable(FsvolDeviceObject);
|
||||||
|
|
||||||
if (Deleted)
|
if (Deleted)
|
||||||
FspFileNodeRelease(FileNode);
|
FspFileNodeDereference(FileNode);
|
||||||
|
|
||||||
if (0 != PDeletePending)
|
if (0 != PDeletePending)
|
||||||
*PDeletePending = Deleted && DeletePending;
|
*PDeletePending = Deleted && DeletePending;
|
||||||
|
@ -141,7 +141,7 @@ NTSTATUS FspVolumeCreate(
|
|||||||
&FsvrtDeviceObject);
|
&FsvrtDeviceObject);
|
||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
{
|
{
|
||||||
FspDeviceRelease(FsvolDeviceObject);
|
FspDeviceDereference(FsvolDeviceObject);
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
#pragma prefast(suppress:28175, "We are a filesystem: ok to access SectorSize")
|
#pragma prefast(suppress:28175, "We are a filesystem: ok to access SectorSize")
|
||||||
@ -167,8 +167,8 @@ NTSTATUS FspVolumeCreate(
|
|||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
{
|
{
|
||||||
if (0 != FsvrtDeviceObject)
|
if (0 != FsvrtDeviceObject)
|
||||||
FspDeviceRelease(FsvrtDeviceObject);
|
FspDeviceDereference(FsvrtDeviceObject);
|
||||||
FspDeviceRelease(FsvolDeviceObject);
|
FspDeviceDereference(FsvolDeviceObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* do we need to register with MUP? */
|
/* do we need to register with MUP? */
|
||||||
@ -189,7 +189,7 @@ NTSTATUS FspVolumeCreate(
|
|||||||
Result = RegisterMupWorkItem.Result;
|
Result = RegisterMupWorkItem.Result;
|
||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
{
|
{
|
||||||
FspDeviceRelease(FsvolDeviceObject);
|
FspDeviceDereference(FsvolDeviceObject);
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -264,7 +264,7 @@ VOID FspVolumeDelete(
|
|||||||
* Release the virtual disk object. This is safe to do here because the volume device
|
* Release the virtual disk object. This is safe to do here because the volume device
|
||||||
* keeps an extra reference to the virtual disk object using ObReferenceObject.
|
* keeps an extra reference to the virtual disk object using ObReferenceObject.
|
||||||
*/
|
*/
|
||||||
FspDeviceRelease(FsvrtDeviceObject);
|
FspDeviceDereference(FsvrtDeviceObject);
|
||||||
|
|
||||||
if (DeleteVpb)
|
if (DeleteVpb)
|
||||||
{
|
{
|
||||||
@ -277,7 +277,7 @@ VOID FspVolumeDelete(
|
|||||||
/* there is only the reference from FspVolumeMount; release it! */
|
/* there is only the reference from FspVolumeMount; release it! */
|
||||||
FspFreeExternal(OldVpb);
|
FspFreeExternal(OldVpb);
|
||||||
FsvolDeviceExtension->SwapVpb = 0;
|
FsvolDeviceExtension->SwapVpb = 0;
|
||||||
FspDeviceRelease(FsvolDeviceObject);
|
FspDeviceDereference(FsvolDeviceObject);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -299,7 +299,7 @@ VOID FspVolumeDelete(
|
|||||||
ExReleaseResourceLite(&FsvolDeviceExtension->DeleteResource);
|
ExReleaseResourceLite(&FsvolDeviceExtension->DeleteResource);
|
||||||
|
|
||||||
/* release the volume device object */
|
/* release the volume device object */
|
||||||
FspDeviceRelease(FsvolDeviceObject);
|
FspDeviceDereference(FsvolDeviceObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID FspVolumeDeleteDelayed(PVOID Context)
|
static VOID FspVolumeDeleteDelayed(PVOID Context)
|
||||||
@ -322,7 +322,7 @@ static VOID FspVolumeDeleteDelayed(PVOID Context)
|
|||||||
{
|
{
|
||||||
FspFreeExternal(FsvolDeviceExtension->SwapVpb);
|
FspFreeExternal(FsvolDeviceExtension->SwapVpb);
|
||||||
FsvolDeviceExtension->SwapVpb = 0;
|
FsvolDeviceExtension->SwapVpb = 0;
|
||||||
FspDeviceRelease(FsvolDeviceObject);
|
FspDeviceDereference(FsvolDeviceObject);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -354,7 +354,7 @@ NTSTATUS FspVolumeMount(
|
|||||||
{
|
{
|
||||||
Result = STATUS_UNRECOGNIZED_VOLUME;
|
Result = STATUS_UNRECOGNIZED_VOLUME;
|
||||||
for (ULONG i = 0; DeviceObjectCount > i; i++)
|
for (ULONG i = 0; DeviceObjectCount > i; i++)
|
||||||
if (FspDeviceRetain(DeviceObjects[i]))
|
if (FspDeviceReference(DeviceObjects[i]))
|
||||||
{
|
{
|
||||||
if (FspFsvolDeviceExtensionKind == FspDeviceExtension(DeviceObjects[i])->Kind)
|
if (FspFsvolDeviceExtensionKind == FspDeviceExtension(DeviceObjects[i])->Kind)
|
||||||
{
|
{
|
||||||
@ -366,13 +366,13 @@ NTSTATUS FspVolumeMount(
|
|||||||
if (!FspIoqStopped(FsvolDeviceExtension->Ioq))
|
if (!FspIoqStopped(FsvolDeviceExtension->Ioq))
|
||||||
{
|
{
|
||||||
Result = STATUS_SUCCESS;
|
Result = STATUS_SUCCESS;
|
||||||
/* break out of the loop without FspDeviceRelease or DeleteResource release! */
|
/* break out of the loop without FspDeviceDereference or DeleteResource release! */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ExReleaseResourceLite(&FsvolDeviceExtension->DeleteResource);
|
ExReleaseResourceLite(&FsvolDeviceExtension->DeleteResource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FspDeviceRelease(DeviceObjects[i]);
|
FspDeviceDereference(DeviceObjects[i]);
|
||||||
}
|
}
|
||||||
FspDeviceDeleteList(DeviceObjects, DeviceObjectCount);
|
FspDeviceDeleteList(DeviceObjects, DeviceObjectCount);
|
||||||
}
|
}
|
||||||
@ -381,10 +381,10 @@ NTSTATUS FspVolumeMount(
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* At this point the volume device object we are going to use in the VPB
|
* At this point the volume device object we are going to use in the VPB
|
||||||
* has been FspDeviceRetain'ed and the volume DeleteResource has been acquired.
|
* has been FspDeviceReference'ed and the volume DeleteResource has been acquired.
|
||||||
* We will increment the VPB's ReferenceCount so that we can do a delayed delete
|
* We will increment the VPB's ReferenceCount so that we can do a delayed delete
|
||||||
* of the volume device later on. Once done with the VPB we can release the
|
* of the volume device later on. Once done with the VPB we can release the
|
||||||
* DeleteResource. [The volume device remains FspDeviceRetain'ed!]
|
* DeleteResource. [The volume device remains FspDeviceReference'ed!]
|
||||||
*/
|
*/
|
||||||
ASSERT(0 != FsvolDeviceObject && 0 != FsvolDeviceExtension);
|
ASSERT(0 != FsvolDeviceObject && 0 != FsvolDeviceExtension);
|
||||||
IoAcquireVpbSpinLock(&Irql);
|
IoAcquireVpbSpinLock(&Irql);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user