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