mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: create: oplocks: WIP
This commit is contained in:
parent
d33089331b
commit
6ba6e16851
@ -1335,15 +1335,19 @@ static BOOLEAN FspFsvolCreateCheckOplock(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP
|
|||||||
|
|
||||||
OpenRequiringOplock = BooleanFlagOn(IrpSp->Parameters.Create.Options,
|
OpenRequiringOplock = BooleanFlagOn(IrpSp->Parameters.Create.Options,
|
||||||
FILE_OPEN_REQUIRING_OPLOCK);
|
FILE_OPEN_REQUIRING_OPLOCK);
|
||||||
CheckOplock = FsRtlCurrentBatchOplock(FspFileNodeAddrOfOplock(FileNode));
|
CheckOplock = FALSE;
|
||||||
if (OpenRequiringOplock || !CheckOplock)
|
|
||||||
|
if (OpenRequiringOplock)
|
||||||
{
|
{
|
||||||
FspFsvolDeviceLockContextTable(FsvolDeviceObject);
|
FspFsvolDeviceLockContextTable(FsvolDeviceObject);
|
||||||
OplockCount = FileNode->HandleCount;
|
OplockCount = FileNode->HandleCount;
|
||||||
FspFsvolDeviceUnlockContextTable(FsvolDeviceObject);
|
FspFsvolDeviceUnlockContextTable(FsvolDeviceObject);
|
||||||
CheckOplock = CheckOplock || 1 < OplockCount;
|
|
||||||
|
CheckOplock = 1 < OplockCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CheckOplock = CheckOplock || FsRtlCurrentBatchOplock(FspFileNodeAddrOfOplock(FileNode));
|
||||||
|
|
||||||
if (CheckOplock)
|
if (CheckOplock)
|
||||||
{
|
{
|
||||||
Result = FspCheckOplock(FspFileNodeAddrOfOplock(FileNode), Irp,
|
Result = FspCheckOplock(FspFileNodeAddrOfOplock(FileNode), Irp,
|
||||||
@ -1389,7 +1393,7 @@ static VOID FspFsvolCreateCheckOplockComplete(
|
|||||||
if (FspFsctlTransactOverwriteKind == Request->Kind)
|
if (FspFsctlTransactOverwriteKind == Request->Kind)
|
||||||
FspIopRetryPrepareIrp(Irp, &Result);
|
FspIopRetryPrepareIrp(Irp, &Result);
|
||||||
else if (FspFsctlTransactReservedKind == Request->Kind)
|
else if (FspFsctlTransactReservedKind == Request->Kind)
|
||||||
FspIopRetryCompleteIrp(Irp, Context, &Result);
|
FspIopRetryCompleteIrp(Irp, FspIopIrpResponse(Irp), &Result);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS FspCreate(
|
NTSTATUS FspCreate(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user