PipDeviceObjectListRemove

INT64 __stdcall PipDeviceObjectListRemove(_DEVICE_OBJECT_LIST *List, UINT64 Index){
  unsigned int v3; 
  PVOID *v4; 
  unsigned int Count; 
  v3 = Index;
  if( (unsigned int)Index >= List->Count )
    return 3221225612i64;
  v4 = (PVOID *)((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((UINT8 *)v4 + 16, (UINT8 *)&List[1] + 16 * v3 + 8 * v3, 24i64 * (Count - v3 - 1));
    Count = List->Count;
  }
  List->Count = Count - 1;
  return 0i64;
}

Referenced by:

IopRemoveCurrentRelationFromList
IopRemoveDeviceRelationsFromList