FsRtlpAttachOplockKey

NTSTATUS __stdcall FsRtlpAttachOplockKey(_IRP *Irp){
  _IO_STACK_LOCATION *CurrentStackLocation; 
  NTSTATUS v3; 
  __int64 v4; 
  _ECP_LIST *v5; 
  _ECP_LIST *v6; 
  UINT16 v8; 
  NTSTATUS v9; 
  PVOID EcpContext; 
  struct _ECP_LIST *ExtraCreateParameter[2]; 

  CurrentStackLocation = Irp->Tail.CurrentStackLocation;
  v3 = 0;
  if( !CurrentStackLocation->MajorFunction )
  {
    LODWORD(v4) = IoGetOplockKeyContextEx((INT64)CurrentStackLocation->FileObject);
    if( !v4 )
    {
      EcpContext = 0i64;
      ExtraCreateParameter[0] = 0i64;
      IoGetIrpExtraCreateParameter(Irp, ExtraCreateParameter);
      v5 = ExtraCreateParameter[0];
      if( ExtraCreateParameter[0] )
      {
        v6 = ExtraCreateParameter[0];
        *(GUID *)ExtraCreateParameter = GUID_ECP_DUAL_OPLOCK_KEY;
        if( FsRtlFindExtraCreateParameter(v6, (_GUID *)ExtraCreateParameter, &EcpContext, 0i64) )
        {
          *(GUID *)ExtraCreateParameter = GUID_ECP_OPLOCK_KEY;
          if( FsRtlRemoveExtraCreateParameter(v5, (_GUID *)ExtraCreateParameter, &EcpContext, 0i64) )
            return v3;
          v8 = 1;
        }
        else
        {
          v8 = 2;
        }
        IoSetOplockKeyContext(CurrentStackLocation->FileObject, EcpContext, v8);
        v3 = v9;
        if( v8 == 1 )
          FsRtlFreeExtraCreateParameter(EcpContext);
        else
          FsRtlAcknowledgeEcp(EcpContext);
        if( v3 == -1073741823 )
          return 0;
      }
    }
  }
  return v3;
}

Referenced by:

FsRtlOplockBreakH
FsRtlpOplockFsctrlInternal