MiLogFailedDriverLoad
VOID __stdcall MiLogFailedDriverLoad(
UNICODE_STRING *ImageFileName,
UNICODE_STRING *MissingDriverName,
INT8 *MissingProcedureName,
INT64 Status,
INT64 Statusa){
int v5;
__int64 v6;
unsigned int v7;
int v8;
unsigned int v9;
__int64 v10;
__int64 v11;
int v12;
UNICODE_STRING v13;
int v14;
int v15;
unsigned int v16;
__int64 v17;
_WORD *v18;
UINT8 *v19;
UINT8 **p_Buffer;
UINT64 v21;
UINT8 *v22;
struct _UNICODE_STRING UnicodeString;
struct _STRING DestinationString;
UNICODE_STRING v25;
__int16 v26;
const wchar_t *v27;
UNICODE_STRING v28;
struct _UNICODE_STRING v29;
v5 = ImageFileName->Length + 2;
DestinationString = 0i64;
v6 = -1i64;
v7 = Status;
v8 = 0;
v9 = 0;
LODWORD(v10) = 1;
v25 = *ImageFileName;
UnicodeString = 0i64;
if( !MissingDriverName
|| (_DWORD)Status != -1073741702 && (_DWORD)Status != -1073741772 && (unsigned int)(Status + 1073741214) > 1 )
{
goto LABEL_14;
}
v11 = -1i64;
v27 = L"cannot find";
do
++v11;
while( aCannotFind[v11] );
v12 = 2 * v11;
v13 = *MissingDriverName;
v14 = v12 + MissingDriverName->Length;
v26 = v12;
v10 = 3i64;
v5 += v14 + 4;
v28 = v13;
if( MissingProcedureName )
{
if( ((unsigned __int64)MissingProcedureName & 0xFFFFFFFFFFFF0000ui64) != 0 )
{
RtlInitAnsiString(&DestinationString, MissingProcedureName, (INT8)MissingProcedureName);
v10 = 4i64;
if( RtlAnsiStringToUnicodeString(&UnicodeString, &DestinationString, 1u) < 0 )
v8 = 1;
v5 += UnicodeString.Length + 2;
v29 = UnicodeString;
}
else
{
v9 = (unsigned int)MissingProcedureName;
}
if( v8 == 1 )
{
LABEL_14:
v9 = v7;
v27 = L"failed to load";
do
++v6;
while( aFailedToLoad[v6] );
v15 = 2 * v6;
v10 = (unsigned int)(v10 + 1);
v26 = v15;
v5 += v15 + 2;
v7 = (unsigned int)MiIsRetryIoStatus(v7, 0x1000ui64) != 0 ? -1073741670 : -1073741204;
}
}
v16 = v5 + 48;
if( v16 < 0xFF )
{
IoAllocateGenericErrorLogEntry(v16);
v18 = (_WORD *)v17;
if( v17 )
{
*(_DWORD *)(v17 + 12) = 1073741850;
v19 = (UINT8 *)(v17 + 48);
*(_DWORD *)(v17 + 20) = v7;
*(_DWORD *)(v17 + 16) = v9;
*(_WORD *)(v17 + 6) = 48;
if( (_DWORD)v10 )
{
p_Buffer = (UINT8 **)&v25.Buffer;
do
{
v21 = *((unsigned __int16 *)p_Buffer - 4);
memmove(v19, *p_Buffer, v21);
p_Buffer += 2;
v22 = &v19[2 * (v21 >> 1)];
*(_WORD *)v22 = 32;
v19 = v22 + 2;
--v10;
}
while( v10 );
}
*((_WORD *)v19 - 1) = 0;
v18[2] = 1;
IoWriteErrorLogEntry(v18);
}
}
RtlFreeAnsiString(&UnicodeString);
}Referenced by:
MiCreateSectionForDriver
MiResolveImageReferences
MmLoadSystemImageEx