FsRtlpOplockStoreKeyForDeleteOperation
VOID __stdcall FsRtlpOplockStoreKeyForDeleteOperation(VOID **Oplock, _IRP *Irp, UINT64 Flags){
int v3;
_IO_STACK_LOCATION *CurrentStackLocation;
void *v6;
char v7;
unsigned int Options;
__int64 v9;
__int64 v10;
VOID **PoolWithTag;
v3 = Flags;
CurrentStackLocation = Irp->Tail.CurrentStackLocation;
v6 = *Oplock;
v7 = 0;
if( !CurrentStackLocation->MajorFunction && (CurrentStackLocation->Parameters.Options & 0x1000) != 0
|| CurrentStackLocation->MajorFunction == 6
&& ((Options = CurrentStackLocation->Parameters.Options, Options == 13) && Irp->AssociatedIrp.MasterIrp->Type
|| Options == 64 && (*(_DWORD *)Irp->AssociatedIrp.MasterIrp & 1) != 0) )
{
LODWORD(v9) = IoGetOplockKeyContextEx((INT64)CurrentStackLocation->FileObject);
v10 = v9;
if( v9 )
{
if( (*(_BYTE *)(v9 + 2) & 1) != 0 )
{
if( !v6 )
{
v6 = FsRtlpAllocateOplock();
*Oplock = v6;
}
if( (v3 & 0x20000000) == 0 )
ExAcquireFastMutexUnsafe(*((PFAST_MUTEX *)v6 + 19));
v7 = 1;
PoolWithTag = (VOID **)*((_QWORD *)v6 + 17);
if( !PoolWithTag )
{
PoolWithTag = ExAllocatePoolWithTag(0x11ui64, 0x10ui64, 1869763398i64);
*((_QWORD *)v6 + 17) = PoolWithTag;
}
*(_OWORD *)PoolWithTag = *(_OWORD *)(v10 + 4);
}
}
}
if( v7 )
{
if( (v3 & 0x20000000) == 0 )
ExReleaseFastMutexUnsafe(*((PFAST_MUTEX *)v6 + 19));
}
}Referenced by:
FsRtlCheckOplock
FsRtlCheckOplockEx2