PiDrvDbUnloadNode
NTSTATUS __stdcall PiDrvDbUnloadNode(PI_DRVDB_NODE *DrvDbNode, VOID **BaseKeyHandle){
INT64 v2;
_ETHREAD *CurrentThread;
__int64 v6;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite((UINT64)(DrvDbNode + 22), 1, v2);
if( *((_QWORD *)DrvDbNode + 9) )
{
v6 = *((_QWORD *)DrvDbNode + 60);
if( v6 )
{
if( v6 < 0 )
KeSetCoalescableTimer(
(INT64)(DrvDbNode + 66),
*((_QWORD *)DrvDbNode + 60),
0i64,
0x3A98ui64,
(INT64)(DrvDbNode + 82));
}
else
{
KiSetTimerEx((_KTIMER *)(DrvDbNode + 66), 0i64, 0i64, 0, (_KDPC *)(DrvDbNode + 82));
}
*((_BYTE *)DrvDbNode + 488) = 1;
}
*BaseKeyHandle = 0i64;
ExReleaseResourceLite((PERESOURCE)(DrvDbNode + 22));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return 0;
}Referenced by:
PiDrvDbNodeActionCallback