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