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