FsRtlOplockBreakH
NTSTATUS __fastcall FsRtlOplockBreakH(
INT64 *a1,
UINT64 a2,
INT64 a3,
INT64 a4,
INT64 CompletionRoutine,
INT64 PostIrpRoutine){
unsigned int v6;
_NONOPAQUE_OPLOCK *v8;
__int64 v9;
NTSTATUS v10;
__int64 v12;
__int64 v13;
__int64 v14;
__int64 v15;
__int64 v16;
v16 = a4;
v6 = a3;
v8 = (_NONOPAQUE_OPLOCK *)*a1;
v9 = *(_QWORD *)(a2 + 184);
LOBYTE(v14) = 0;
v10 = 0;
LOBYTE(v15) = 0;
if( !v8 )
return v10;
v10 = FsRtlpAttachOplockKey((_IRP *)a2);
if( !v10 )
{
if( *(_BYTE *)v9 )
{
LABEL_8:
v12 = PostIrpRoutine;
v13 = CompletionRoutine;
do
{
LOBYTE(v15) = 0;
if( !(_BYTE)v14 )
{
ExAcquireFastMutexUnsafe(v8->FastMutex);
LOBYTE(v14) = 1;
}
v10 = FsRtlpOplockBreakByCacheFlags(
v8,
v9,
(_IRP *)a2,
v6,
0,
0x2000,
v16,
v13,
v12,
0i64,
0i64,
0i64,
(__int64)&v14,
(__int64)&v15);
}
while( (_BYTE)v15 );
goto LABEL_14;
}
if( (*(_DWORD *)(*(_QWORD *)(v9 + 8) + 16i64) & 0xFFEFFE7F) != 0 )
{
if( (*(_DWORD *)(v9 + 16) & 0x10000) != 0 )
v6 |= 0x10000000u;
goto LABEL_8;
}
v10 = 0;
}
LABEL_14:
if( (_BYTE)v14 )
ExReleaseFastMutexUnsafe(v8->FastMutex);
return v10;
}Referenced by:
No references.