PiDmListRemoveList

VOID __stdcall PiDmListRemoveList(
        _PI_DM_OBJECT *ConstraintObjectToRemoveFrom,
        _PI_DM_OBJECT *ConstraintObjectToEnumFrom){
  _EX_PUSH_LOCK *v2; 
  _EX_PUSH_LOCK *v3; 
  _PI_DM_OBJECT_MANAGER *ObjectManagerForObjectType; 
  unsigned __int64 v6; 
  _ETHREAD *CurrentThread; 
  _PI_DM_OBJECT_MANAGER *v8; 
  _EX_PUSH_LOCK **v9; 
  _ETHREAD *v10; 
  _EX_PUSH_LOCK *i; 
  ULONG_PTR v12; 
  _ETHREAD *v13; 
  _ETHREAD *v14; 

  v3 = v2;
  ObjectManagerForObjectType = PiDmGetObjectManagerForObjectType((_PNP_OBJECT_TYPE)ConstraintObjectToEnumFrom[7]);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v8 = ObjectManagerForObjectType;
  v9 = (_EX_PUSH_LOCK **)(v6 + 88);
  if( (unsigned __int64)ConstraintObjectToEnumFrom >= v6 )
  {
    --CurrentThread->Tcb.KernelApcDisable;
    if( (unsigned __int64)ConstraintObjectToEnumFrom > v6 )
    {
      ExAcquirePushLockSharedEx(v3, 0i64);
      v14 = (_ETHREAD *)KeGetCurrentThread();
      --v14->Tcb.KernelApcDisable;
    }
    ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)ConstraintObjectToEnumFrom, 0i64);
  }
  else
  {
    --CurrentThread->Tcb.KernelApcDisable;
    ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)ConstraintObjectToEnumFrom, 0i64);
    v10 = (_ETHREAD *)KeGetCurrentThread();
    --v10->Tcb.KernelApcDisable;
    ExAcquirePushLockSharedEx(v3, 0i64);
  }
  for( i = *v9; i != (_EX_PUSH_LOCK *)v9; i = (_EX_PUSH_LOCK *)i->_bf_0 )
  {
    v13 = (_ETHREAD *)KeGetCurrentThread();
    --v13->Tcb.KernelApcDisable;
    ExAcquirePushLockSharedEx(i - 8, 0i64);
    PiDmListRemoveObjectWorker(2i64, v8, ConstraintObjectToEnumFrom, &i[-8], 0i64);
    ExReleasePushLockEx((_DWORD)i - 64, 0);
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
  }
  if( ConstraintObjectToEnumFrom >= (_PI_DM_OBJECT *)v3 )
  {
    if( ConstraintObjectToEnumFrom > (_PI_DM_OBJECT *)v3 )
    {
      ExReleasePushLockEx((ULONG_PTR)ConstraintObjectToEnumFrom, 0);
      KeLeaveCriticalRegionThread(KeGetCurrentThread());
      v12 = (unsigned int)v3;
      goto LABEL_8;
    }
  }
  else
  {
    ExReleasePushLockEx((ULONG_PTR)v3, 0);
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
  }
  v12 = (unsigned int)ConstraintObjectToEnumFrom;
LABEL_8:
  ExReleasePushLockEx(v12, 0);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
}

Referenced by:

PiPnpRtlCmActionCallback