PoStoreDiagnosticContext

NTSTATUS __stdcall PoStoreDiagnosticContext(
        _DIAGNOSTIC_CONTEXT *Context,
        _DIAGNOSTIC_BUFFER *StoredBuffer,
        UINT64 *BufferSizePointer,
        UINT8 ShortName){
  UINT64 v4; 
  NTSTATUS result; 
  unsigned __int64 ReasonSize; 
  unsigned __int64 v10; 
  NTSTATUS v11; 
  bool v12; 
  _BYTE *v13; 
  UINT64 v14; 
  UINT64 v15; 

  v4 = *BufferSizePointer;
  v15 = *BufferSizePointer;
  result = PoStoreRequester(Context, StoredBuffer, &v15, 0);
  ReasonSize = Context->ReasonSize;
  v10 = v15;
  v11 = result;
  v12 = result >= 0;
  if( ReasonSize )
  {
    v13 = (_BYTE *)(((unsigned __int64)&StoredBuffer->Size + v15 + 7) & 0xFFFFFFFFFFFFFFF8ui64);
    v14 = v13 - (_BYTE *)StoredBuffer + ReasonSize;
    *BufferSizePointer = v14;
    if( v12 && v4 >= v14 )
    {
      StoredBuffer->ReasonOffset = v13 - (_BYTE *)StoredBuffer;
      StoredBuffer->Size = v14;
      memmove(
        v13,
        (const VOID *)(((unsigned __int64)&Context[1].CallerType + 7) & 0xFFFFFFFFFFFFFFF8ui64),
        Context->ReasonSize);
      return v11;
    }
    else
    {
      return -1073741789;
    }
  }
  else
  {
    if( result >= 0 )
    {
      StoredBuffer->ReasonOffset = 0i64;
      StoredBuffer->Size = v10;
    }
    *BufferSizePointer = v10;
  }
  return result;
}

Referenced by:

ExGetNextWakeTime
ExGetWakeTimerList
PopGetPowerRequestDiagnosticBuffer
PopGetPowerRequestListInfo
PopTraceThermalRequestActiveActivity
PopTraceThermalRequestPassiveHistogram