PiPnpRtlCacheObjectBaseKey

NTSTATUS __stdcall PiPnpRtlCacheObjectBaseKey(
        HPNPCTX *hPnpCtx,
        WCHAR *ObjectName,
        PNP_OBJECT_TYPE ObjectType,
        VOID **ObjectBaseKey){
  NTSTATUS CurrentOperation; 
  _ETHREAD *CurrentThread; 
  VOID **v11; 
  INT64 a3; 
  _PI_PNPRTL_OBJECT_EVENT *a4; 

  a3 = 0i64;
  a4 = 0i64;
  if( ObjectType >= 7 )
    return -1073741637;
  CurrentOperation = PiPnpRtlGetCurrentOperation((PI_PNPRTL_OPERATION **)&a3);
  if( CurrentOperation >= 0 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    ExAcquireResourceSharedLite((UINT64)&PnpReplaceEvent + 3456, 1);
    CurrentOperation = PiPnpRtlObjectEventCreate(ObjectName, ObjectType, (PI_PNPRTL_OPERATION *)a3, &a4);
    if( CurrentOperation >= 0 && a4 )
    {
      v11 = (VOID **)(a4 + 4);
      if( *((_QWORD *)a4 + 2)
        || (CurrentOperation = PnpOpenObjectRegKey(
                                 (__int64)hPnpCtx,
                                 (__int64)ObjectName,
                                 ObjectType,
                                 0x2000000,
                                 0,
                                 (__int64)v11),
            CurrentOperation >= 0) )
      {
        *ObjectBaseKey = *v11;
      }
      else
      {
        *v11 = 0i64;
      }
    }
    ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 3456));
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
  }
  return CurrentOperation;
}

Referenced by:

PiPnpRtlCmActionCallback
PiPnpRtlObjectActionCallback