FsRtlOplockBreakToNoneEx
NTSTATUS __fastcall FsRtlOplockBreakToNoneEx(
INT64 *a1,
UINT64 a2,
INT64 a3,
INT64 a4,
INT64 CompletionRoutine,
INT64 PostIrpRoutine){
_NONOPAQUE_OPLOCK *v8;
NTSTATUS v9;
unsigned int v10;
__int64 v11;
__int64 v12;
int v14;
__int64 v15[2];
__int64 v16;
v8 = (_NONOPAQUE_OPLOCK *)*a1;
v15[1] = *a1;
LOBYTE(v16) = 0;
LOBYTE(v15[0]) = 0;
if( (a3 & 0x10) != 0 )
{
v9 = -1073741811;
}
else
{
v10 = a3 | 8;
v11 = PostIrpRoutine;
v12 = CompletionRoutine;
do
{
LOBYTE(v15[0]) = 0;
if( !(_BYTE)v16 )
{
ExAcquireFastMutexUnsafe(v8->FastMutex);
LOBYTE(v16) = 1;
}
v9 = FsRtlpOplockBreakToNone(
v8,
*(_QWORD *)(a2 + 184),
a2,
v10,
v14,
a4,
v12,
v11,
0i64,
0i64,
0i64,
(__int64)&v16,
(__int64)v15);
if( !v9 )
v9 = FsRtlpOplockBreakByCacheFlags(
v8,
*(_QWORD *)(a2 + 184),
(_IRP *)a2,
v10,
0,
28672,
a4,
v12,
v11,
0i64,
0i64,
0i64,
(__int64)&v16,
(__int64)v15);
}
while( LOBYTE(v15[0]) );
}
if( (_BYTE)v16 )
ExReleaseFastMutexUnsafe(v8->FastMutex);
return v9;
}Referenced by:
FsRtlOplockBreakToNone