PiDrvDbUnloadNodeWorkerCallback
VOID __stdcall PiDrvDbUnloadNodeWorkerCallback(PVOID Parameter){
_ETHREAD *CurrentThread;
void *v3;
PiDrvDbUnloadNodeReset((INT64)Parameter);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquireResourceExclusiveLite((ERESOURCE *)((char *)Parameter + 88), 1u);
if( *((_BYTE *)Parameter + 488) )
{
PnpDiagnosticTraceObject(&KMPnPEvt_DriverDatabaseUnload_Start, (_UNICODE_STRING *)Parameter + 1);
v3 = (void *)*((_QWORD *)Parameter + 9);
if( v3 )
{
ZwClose(v3);
*((_QWORD *)Parameter + 9) = 0i64;
}
*((_WORD *)Parameter + 244) = 0;
PnpDiagnosticTraceObject(&KMPnPEvt_DriverDatabaseUnload_Pend, (_UNICODE_STRING *)Parameter + 1);
*((_QWORD *)Parameter + 55) = 0i64;
*((_QWORD *)Parameter + 57) = PiDrvDbUnloadNodeWaitWorkerCallback;
*((_QWORD *)Parameter + 58) = Parameter;
ExQueueWorkItem((WORK_QUEUE_ITEM *)((char *)Parameter + 440), DelayedWorkQueue);
}
ExReleaseResourceLite((PERESOURCE)((char *)Parameter + 88));
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}Referenced by:
No references.