PiPnpRtlGetCurrentOperation
NTSTATUS __stdcall PiPnpRtlGetCurrentOperation(PI_PNPRTL_OPERATION **CurrentOperation){
_ETHREAD *CurrentThread;
NTSTATUS v2;
PI_PNPRTL_OPERATION *v4;
PI_PNPRTL_OPERATION *v5;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = 0;
v4 = 0i64;
*CurrentOperation = 0i64;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceSharedLite((UINT64)&PnpReplaceEvent + 3584, 1);
v5 = (PI_PNPRTL_OPERATION *)*(&PnpReplaceEvent + 428);
while( v5 != (PI_PNPRTL_OPERATION *)((char *)&PnpReplaceEvent + 3424) )
{
v4 = v5;
if( *((_ETHREAD **)v5 + 2) == CurrentThread )
break;
v5 = *(PI_PNPRTL_OPERATION **)v5;
v4 = 0i64;
}
ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 3584));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
if( !v4 )
return -1073741275;
*CurrentOperation = v4;
return v2;
}Referenced by:
PiPnpRtlBeginOperation
PiPnpRtlCacheObjectBaseKey