FsRtlRemoveExtraCreateParameter

NTSTATUS __stdcall FsRtlRemoveExtraCreateParameter(
        _ECP_LIST *EcpList,
        _GUID *EcpType,
        VOID **EcpContext,
        UINT64 *EcpContextSize){
  _LIST_ENTRY *Flink; 
  NTSTATUS v6; 
  char *v7; 
  NTSTATUS result; 
  _LIST_ENTRY *v9; 
  _LIST_ENTRY *Blink; 
  int Blink_high; 

  *EcpContext = 0i64;
  Flink = EcpList->EcpList.Flink;
  v6 = -1073741275;
  if( Flink == &EcpList->EcpList )
    return v6;
  while( 1 )
  {
    v7 = (char *)Flink[1].Flink - *(_QWORD *)&EcpType->Data1;
    if( !v7 )
      v7 = (char *)Flink[1].Blink - *(_QWORD *)EcpType->Data4;
    if( !v7 )
      break;
    Flink = Flink->Flink;
    if( Flink == &EcpList->EcpList )
      return v6;
  }
  LODWORD(Flink[2].Blink) |= 4u;
  v6 = 0;
  v9 = Flink->Flink;
  if( Flink->Flink->Blink != Flink || (Blink = Flink->Blink, Blink->Flink != Flink) )
    __fastfail(3u);
  Blink->Flink = v9;
  v9->Blink = Blink;
  Flink->Blink = 0i64;
  Flink->Flink = 0i64;
  *EcpContext = &Flink[4];
  if( !EcpContextSize )
    return v6;
  Blink_high = HIDWORD(Flink[2].Blink);
  result = 0;
  *(_DWORD *)EcpContextSize = Blink_high - 72;
  return result;
}

Referenced by:

FsRtlCheckOplockEx2
FsRtlpAttachOplockKey
IopSymlinkRemoveECP