HalpCreateNMIErrorRecord
NTSTATUS __stdcall HalpCreateNMIErrorRecord(
_WHEA_ERROR_SOURCE_DESCRIPTOR *ErrorSource,
_WHEA_ERROR_PACKET_V2 *ErrorPacket,
_WHEA_ERROR_RECORD *ErrorRecord,
UINT64 BufferSize,
VOID *Context){
unsigned int v6;
NTSTATUS v9;
unsigned int v10;
__int64 v11;
unsigned int v12;
__int64 v13;
unsigned int v14;
unsigned int Length;
v6 = BufferSize;
v9 = 0;
memset(ErrorRecord, 0i64, BufferSize);
v10 = 72 * ErrorSource->MaxSectionsPerRecord + 128;
if( v10 > v6 )
return -1073741789;
WheaInitializeRecordHeader(&ErrorRecord->Header);
v11 = v10;
v12 = v10 + 192;
ErrorRecord->Header.SectionCount = 3;
ErrorRecord->Header.Severity = ErrorPacket->ErrorSeverity;
ErrorRecord->Header.Length = v6;
ErrorRecord->Header.NotifyType = NMI_NOTIFY_TYPE_GUID;
if( v12 > v6 )
return -1073741789;
((void(__fastcall *)(_WHEA_ERROR_RECORD_SECTION_DESCRIPTOR *, char *))off_140C006B8[0])(
ErrorRecord->SectionDescriptor,
(char *)ErrorRecord + v11);
ErrorRecord[1].Header.Severity |= 1u;
ErrorRecord->SectionDescriptor[0].SectionOffset = v11;
ErrorRecord[1].Header.Signature = v12;
HIWORD(ErrorRecord[1].Header.SignatureEnd) = 768;
*(_DWORD *)&ErrorRecord[1].Header.Revision.MinorRevision = 12;
v13 = v12;
v14 = v12 + 12;
*(GUID *)&ErrorRecord[1].Header.ValidBits.0 = NMI_SECTION_GUID;
ErrorRecord[1].Header.PartitionId.Data1 = ErrorPacket->ErrorSeverity;
if( v14 > v6 )
return -1073741789;
*(_QWORD *)((char *)&ErrorRecord->Header.Signature + v13) = *(_QWORD *)&ErrorPacket[1].Signature;
*(unsigned int *)((char *)&ErrorRecord->Header.SignatureEnd + v13 + 2) = ErrorPacket[1].Length;
*(_DWORD *)ErrorRecord[1].Header.CreatorId.Data4 = v14;
Length = ErrorPacket->Length;
*(_DWORD *)&ErrorRecord[1].Header.CreatorId.Data4[4] = Length;
LOWORD(ErrorRecord[1].Header.NotifyType.Data1) = 768;
*(GUID *)ErrorRecord[1].Header.NotifyType.Data4 = WHEA_ERROR_PACKET_SECTION_GUID;
*(_DWORD *)&ErrorRecord[1].Header.Reserved[4] = ErrorPacket->ErrorSeverity;
if( Length + v14 > v6 )
return -1073741789;
memmove((char *)ErrorRecord + v14, ErrorPacket, ErrorPacket->Length);
return v9;
}Referenced by:
HalpCreateErrorRecord