FsRtlOplockBreakH
NTSTATUS __stdcall FsRtlOplockBreakH(
POPLOCK Oplock,
PIRP Irp,
ULONG Flags,
PVOID Context,
POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
POPLOCK_FS_PREPOST_IRP PostIrpRoutine){
PFAST_MUTEX *v8;
__int64 v9;
NTSTATUS v10;
void(__fastcall *v12)(__int64, __int64);
POPLOCK_WAIT_COMPLETE_ROUTINE v13;
__int64 v14;
char v15;
char v16;
PVOID v17;
v17 = Context;
v8 = (PFAST_MUTEX *)*Oplock;
v9 = *((_QWORD *)Irp + 23);
v15 = 0;
v10 = 0;
v16 = 0;
if( !v8 )
return v10;
v10 = FsRtlpAttachOplockKey(Irp);
if( !v10 )
{
if( *(_BYTE *)v9 )
{
LABEL_8:
v12 = (void(__fastcall *)(__int64, __int64))PostIrpRoutine;
v13 = CompletionRoutine;
do
{
v16 = 0;
if( !v15 )
{
ExAcquireFastMutexUnsafe(v8[19]);
v15 = 1;
}
LODWORD(v14) = 0;
v10 = FsRtlpOplockBreakByCacheFlags(
(__int64)v8,
v9,
(__int64)Irp,
Flags,
v14,
0x2000,
(__int64)v17,
(__int64)v13,
v12,
0i64,
0i64,
0i64,
&v15,
&v16);
}
while( v16 );
goto LABEL_14;
}
if( (*(_DWORD *)(*(_QWORD *)(v9 + 8) + 16i64) & 0xFFEFFE7F) != 0 )
{
if( (*(_DWORD *)(v9 + 16) & 0x10000) != 0 )
Flags |= 0x10000000u;
goto LABEL_8;
}
v10 = 0;
}
LABEL_14:
if( v15 )
ExReleaseFastMutexUnsafe(v8[19]);
return v10;
}Referenced by:
No references.