PipDeviceObjectListRemove

NTSTATUS __stdcall PipDeviceObjectListRemove(_DEVICE_OBJECT_LIST *List, UINT64 Index){
  unsigned int v3; 
  VOID **v4; 
  unsigned int Count; 

  v3 = Index;
  if( (unsigned int)Index >= List->Count )
    return -1073741684;
  v4 = (VOID **)((char *)List + 24 * (unsigned int)Index);
  ObfDereferenceObjectWithTag(v4[2], 0x4C706E50ui64);
  if( ((_DWORD)v4[4] & 1) != 0 )
    --List->TagCount;
  Count = List->Count;
  if( v3 < List->Count - 1 )
  {
    memmove(v4 + 2, (char *)&List[1] + 16 * v3 + 8 * v3, 24 * (Count - v3 - 1));
    Count = List->Count;
  }
  List->Count = Count - 1;
  return 0;
}

Referenced by:

IopRemoveCurrentRelationFromList
IopRemoveDeviceRelationsFromList
IopRemoveRelationFromList