PiDmListRemoveObject
VOID __stdcall PiDmListRemoveObject(
_PI_DM_LIST_ID ListId,
_PI_DM_OBJECT *ConstraintObject,
_PI_DM_OBJECT *EntryObject,
UINT8 *WasInList){
_PI_DM_OBJECT_MANAGER *ObjectManagerForObjectType;
_ETHREAD *CurrentThread;
_PI_DM_OBJECT_MANAGER *v10;
_ETHREAD *v11;
ObjectManagerForObjectType = PiDmGetObjectManagerForObjectType((_PNP_OBJECT_TYPE)ConstraintObject[7]);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v10 = ObjectManagerForObjectType;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)ConstraintObject, 0i64);
v11 = (_ETHREAD *)KeGetCurrentThread();
--v11->Tcb.KernelApcDisable;
ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)EntryObject, 0i64);
PiDmListRemoveObjectWorker((unsigned int)ListId, v10, ConstraintObject, EntryObject, WasInList);
ExReleasePushLockEx((ULONG_PTR)EntryObject, 0);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
ExReleasePushLockEx((ULONG_PTR)ConstraintObject, 0);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
}Referenced by:
PiPnpRtlCmActionCallback