PopBcdReadElement

NTSTATUS __stdcall PopBcdReadElement(VOID *ObjectHandle, UINT64 ElementType, VOID **BufferOut, UINT64 *BufferSizeOut){
  unsigned int v6; 
  VOID **PoolWithTag; 
  VOID *v9; 
  int ElementDataWithFlags; 
  UINT64 NumberOfBytes[3]; 

  LODWORD(NumberOfBytes[0]) = 0;
  v6 = ElementType;
  if( BcdGetElementDataWithFlags(ObjectHandle, ElementType, BufferOut, 0i64, NumberOfBytes) != -1073741789 )
    return -1073741275;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, LODWORD(NumberOfBytes[0]), 1684226640i64);
  if( !PoolWithTag )
    return -1073741670;
  ElementDataWithFlags = BcdGetElementDataWithFlags(ObjectHandle, v6, v9, PoolWithTag, NumberOfBytes);
  if( ElementDataWithFlags < 0 )
  {
    ExFreePoolWithTag(PoolWithTag, 0);
  }
  else
  {
    ElementDataWithFlags = 0;
    *(_DWORD *)BufferSizeOut = NumberOfBytes[0];
    *BufferOut = PoolWithTag;
  }
  return ElementDataWithFlags;
}

Referenced by:

PopBcdRegenerateResumeObject
PopBcdSetDefaultResumeObjectElements