IopBootLog
VOID __stdcall IopBootLog(_UNICODE_STRING *LogEntry, UINT8 Loaded){
INT64 v2;
PUNICODE_STRING v5;
const _UNICODE_STRING *v6;
unsigned __int16 Length;
wchar_t *Buffer;
UINT64 DataSize;
_UNICODE_STRING DestinationString;
_UNICODE_STRING Source;
_UNICODE_STRING v12;
_UNICODE_STRING KeyName;
_UNICODE_STRING ValueName;
WCHAR pszDest[256];
char v16;
*(_QWORD *)&DestinationString.Length = 0x1000000i64;
DestinationString.Buffer = (wchar_t *)&v16;
KeyName = 0i64;
ValueName = 0i64;
v12 = 0i64;
Source = 0i64;
if( qword_140D2C030 )
{
ExAcquireResourceExclusiveLite((UINT64)&qword_140D2C030[4], 1, v2);
v5 = qword_140D2C030;
v6 = qword_140D2C030;
if( !Loaded )
v6 = qword_140D2C030 + 1;
RtlCopyUnicodeString(&DestinationString, v6);
RtlInitUnicodeString(&Source, L" ");
RtlAppendUnicodeStringToString(&DestinationString, &Source);
RtlAppendUnicodeStringToString(&DestinationString, LogEntry);
RtlInitUnicodeString(&v12, L"\r\n");
RtlAppendUnicodeStringToString(&DestinationString, &v12);
Length = DestinationString.Length;
Buffer = DestinationString.Buffer;
if( DestinationString.Length == DestinationString.MaximumLength )
{
Length = DestinationString.Length - 2;
DestinationString.Length = Length;
DestinationString.Buffer[(unsigned __int64)Length >> 1] = 0;
}
++LODWORD(v5[10].Buffer);
RtlStringCchPrintfW(pszDest, 0x100ui64, (WCHAR *)L"%d");
RtlInitUnicodeString(&KeyName, pszDest);
RtlInitUnicodeString(&ValueName, (PCWSTR)&dword_1407CF120);
if( BYTE4(qword_140D2C030[10].Buffer) )
{
IopBootLogToFile(&DestinationString);
}
else
{
*(_QWORD *)&Source.Length = 0i64;
*(_QWORD *)&DestinationString.Length = 0i64;
if( IopOpenRegistryKey(
(PVOID *)&DestinationString,
0i64,
&CmRegistryMachineSystemCurrentControlSetControlBootLog,
0xF003Fui64,
1u) >= 0 )
{
if( IopOpenRegistryKey((PVOID *)&Source, *(PVOID *)&DestinationString.Length, &KeyName, 0xF003Fui64, 1u) >= 0 )
{
LODWORD(DataSize) = Length + 2;
ZwSetValueKey(*(VOID **)&Source.Length, &ValueName, 0i64, 1ui64, Buffer, DataSize);
ZwClose(*(_HANDLE *)&Source.Length);
}
ZwClose(*(_HANDLE *)&DestinationString.Length);
}
}
ExReleaseResourceLite((PERESOURCE)&qword_140D2C030[4]);
}
}Referenced by:
IopInitializeBootLogging
IopLoadDriver
PipCallDriverAddDevice