FsRtlOplockBreakToNoneEx
NTSTATUS __stdcall FsRtlOplockBreakToNoneEx(
POPLOCK Oplock,
PIRP Irp,
UINT32 Flags,
PVOID Context,
POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
POPLOCK_FS_PREPOST_IRP PostIrpRoutine){
PFAST_MUTEX *v8;
NTSTATUS v9;
int v10;
void(__fastcall *v11)(__int64, __int64);
POPLOCK_WAIT_COMPLETE_ROUTINE v12;
__int64 v14;
char v15[8];
PVOID v16;
char v17;
v8 = (PFAST_MUTEX *)*Oplock;
v16 = *Oplock;
v17 = 0;
v15[0] = 0;
if( (Flags & 0x10) != 0 )
{
v9 = -1073741811;
}
else
{
v10 = Flags | 8;
v11 = (void(__fastcall *)(__int64, __int64))PostIrpRoutine;
v12 = CompletionRoutine;
do
{
v15[0] = 0;
if( !v17 )
{
ExAcquireFastMutexUnsafe(v8[19]);
v17 = 1;
}
v9 = FsRtlpOplockBreakToNone(
(__int64)v8,
*((_QWORD *)Irp + 23),
(__int64)Irp,
v10,
v14,
(__int64)Context,
(__int64)v12,
v11,
0i64,
0i64,
0i64,
&v17,
v15);
if( !v9 )
{
LODWORD(v14) = 0;
v9 = FsRtlpOplockBreakByCacheFlags(
(__int64)v8,
*((_QWORD *)Irp + 23),
(__int64)Irp,
v10,
v14,
28672,
(__int64)Context,
(__int64)v12,
v11,
0i64,
0i64,
0i64,
&v17,
v15);
}
}
while( v15[0] );
}
if( v17 )
ExReleaseFastMutexUnsafe(v8[19]);
return v9;
}Referenced by:
FsRtlOplockBreakToNone