PiDmListAddObject

VOID __stdcall PiDmListAddObject(
        _PI_DM_LIST_ID ListId,
        _PI_DM_OBJECT *PushLock,
        _PI_DM_OBJECT *a3,
        UINT8 *AlreadyInList){
  _PI_DM_OBJECT_MANAGER *ObjectManagerForObjectType; 
  _ETHREAD *CurrentThread; 
  _PI_DM_OBJECT_MANAGER *v10; 
  _ETHREAD *v11; 

  ObjectManagerForObjectType = PiDmGetObjectManagerForObjectType((_PNP_OBJECT_TYPE)PushLock[7]);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v10 = ObjectManagerForObjectType;
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)PushLock, 0i64);
  v11 = (_ETHREAD *)KeGetCurrentThread();
  --v11->Tcb.KernelApcDisable;
  ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)a3, 0i64);
  PiDmListAddObjectWorker((unsigned int)ListId, v10, PushLock, a3, AlreadyInList);
  ExReleasePushLockEx((ULONG_PTR)a3, 0);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  ExReleasePushLockEx((ULONG_PTR)PushLock, 0);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
}

Referenced by:

IopRegisterDeviceInterface
PiDmListInitEnumCallback
PiPnpRtlCmActionCallback