PpBootDDBHelper

NTSTATUS __stdcall PpBootDDBHelper(VOID *Src, size_t Size){
  VOID ***v2; 
  _QWORD *v3; 
  _QWORD *v4; 
  VOID ***v5; 
  VOID **PoolWithTag; 
  VOID **v9; 
  INT64 v10; 
  VOID *inited; 
  _UNICODE_STRING DestinationString[2]; 

  *v2 = 0i64;
  v4 = v3;
  *v3 = 0i64;
  v5 = v2;
  if( !Size || !Src )
  {
    if( (PiLoggedErrorEventsMask & 1) == 0 )
      PiLoggedErrorEventsMask |= 1u;
    return -1073741823;
  }
  PoolWithTag = ExAllocatePoolWithTag(1ui64, Size, 538996816i64);
  v9 = PoolWithTag;
  if( PoolWithTag )
  {
    memmove(PoolWithTag, Src, Size);
    inited = SdbInitDatabaseInMemory(v9, Size, v10);
    if( inited )
    {
      *v5 = v9;
      *v4 = inited;
      return 0;
    }
    ExFreePoolWithTag(v9, 0);
    if( (PiLoggedErrorEventsMask & 4) == 0 )
    {
      PiLoggedErrorEventsMask |= 4u;
      DestinationString[0] = 0i64;
      RtlInitUnicodeString(DestinationString, L"INIT DATABASE FAILED");
      PnpLogEvent((const VOID **)DestinationString, 0i64, -1073740947, 0i64, 0);
    }
    return -1073741823;
  }
  if( (PiLoggedErrorEventsMask & 2) == 0 )
  {
    PiLoggedErrorEventsMask |= 2u;
    DestinationString[0] = 0i64;
    RtlInitUnicodeString(DestinationString, L"OUT OF MEMORY");
    PnpLogEvent((const VOID **)DestinationString, 0i64, -1073740947, 0i64, 0);
  }
  return -1073741670;
}

Referenced by:

PpInitializeBootDDB