PiPnpRtlEnsureObjectCached

NTSTATUS __stdcall PiPnpRtlEnsureObjectCached(WCHAR *ObjectName){
  WCHAR *v1; 
  WCHAR *v2; 
  NTSTATUS v3; 
  int v4; 
  _ETHREAD *CurrentThread; 
  _PI_DM_OBJECT *v6; 
  _ETHREAD *v7; 
  NTSTATUS v8; 
  _PI_PNPRTL_OBJECT_EVENT *a4; 
  _PI_DM_OBJECT *Object; 
  HPNPOPCTX *hPnpOpCtx; 

  Object = 0i64;
  hPnpOpCtx = 0i64;
  a4 = 0i64;
  v2 = v1;
  v3 = PiDmGetObject(1, v1, &Object);
  v4 = v3;
  if( v3 < 0 )
  {
    if( v3 == -1073741772 )
    {
      v4 = PiDmAddCacheReferenceForObject(1, v2, &Object);
      if( v4 >= 0 )
      {
        CurrentThread = (_ETHREAD *)KeGetCurrentThread();
        --CurrentThread->Tcb.KernelApcDisable;
        v6 = Object;
        ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)Object, 0i64);
        v6[8] |= 1u;
        ExReleasePushLockEx((ULONG_PTR)v6, 0);
        KeLeaveCriticalRegionThread(KeGetCurrentThread());
        if( PiPnpRtlBeginOperation(&hPnpOpCtx) >= 0 )
        {
          v7 = (_ETHREAD *)KeGetCurrentThread();
          --v7->Tcb.KernelApcDisable;
          ExAcquireResourceSharedLite((UINT64)&PnpReplaceEvent + 3456, 1);
          v8 = PiPnpRtlObjectEventCreate(v2, 1, hPnpOpCtx, &a4);
          ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 3456));
          KeLeaveCriticalRegionThread(KeGetCurrentThread());
          if( v8 >= 0 && a4 )
            a4[1] |= 1u;
          PiPnpRtlEndOperation(hPnpOpCtx);
        }
      }
    }
  }
  else
  {
    v4 = 0;
  }
  if( Object )
    PiDmObjectRelease(Object);
  return v4;
}

Referenced by:

PiCMCreateDevice