KseDriverLoadImage
NTSTATUS __stdcall KseDriverLoadImage(_KLDR_DATA_TABLE_ENTRY *DataTableEntry){
int v2;
int ShimsForDriver;
int v4;
int v5;
bool v6;
_UNICODE_STRING TargetString;
_UNICODE_STRING DriverPath;
UINT64 ShimCount;
VOID *Shims;
LODWORD(ShimCount) = 0;
Shims = 0i64;
*(_QWORD *)&TargetString.Length = 0i64;
TargetString.Buffer = 0i64;
*(_QWORD *)&DriverPath.Length = 0i64;
DriverPath.Buffer = 0i64;
if( !DataTableEntry || MmIsSessionAddress(DataTableEntry->DllBase) == 1 || dword_140C50324 != 2 || (Engine & 1) != 0 )
goto LABEL_20;
KsepStringDuplicateUnicode(&TargetString, &DataTableEntry->BaseDllName);
ShimsForDriver = v2;
if( v2 >= 0 )
{
KsepStringDuplicateUnicode(&DriverPath, &DataTableEntry->FullDllName);
ShimsForDriver = v4;
if( v4 >= 0 )
{
ShimsForDriver = KsepGetShimsForDriver(
&TargetString,
&DriverPath,
DataTableEntry->DllBase,
DataTableEntry->SizeOfImage,
&Shims,
&ShimCount);
if( ShimsForDriver >= 0 )
{
KsepApplyShimsToDriver(DataTableEntry, &TargetString, (_KSE_SHIM_INFO *)Shims, (unsigned int)ShimCount);
ShimsForDriver = v5;
if( v5 >= 0 )
KsepEvntLogShimsApplied(&TargetString, (_KSE_SHIM_INFO *)Shims, (unsigned int)ShimCount);
}
}
}
v6 = ShimsForDriver < 0;
if( !ShimsForDriver )
{
dword_140C50328 |= 0x800u;
v6 = 0;
qword_140C50378 = (__int64)DataTableEntry->DllBase;
}
if( v6 )
{
if( ShimsForDriver == -1073740948 )
{
KsepHistoryMessages[((unsigned __int8)_InterlockedExchangeAdd(&KsepHistoryMessagesIndex, 1u) + 1) & 0x3F] = 458943i64;
if( (KsepDebugFlag & 1) != 0 )
KsepDebugPrint(4i64, "KSE: driver blocked from loading [%ws].\n", TargetString.Buffer);
KsepLogInfo(4, "KSE: driver blocked from loading [%ws].\n", TargetString.Buffer);
goto LABEL_21;
}
LABEL_20:
ShimsForDriver = 0;
goto LABEL_21;
}
KsepHistoryMessages[((unsigned __int8)_InterlockedExchangeAdd(&KsepHistoryMessagesIndex, 1u) + 1) & 0x3F] = 458952i64;
if( (KsepDebugFlag & 1) != 0 )
KsepDebugPrint(4i64, "KSE: Applied %d shim(s) to [%ws].\n", (unsigned int)ShimCount, TargetString.Buffer);
KsepLogInfo(4, "KSE: Applied %d shim(s) to [%ws].\n", (unsigned int)ShimCount, TargetString.Buffer);
LABEL_21:
KsepStringFree(&TargetString);
KsepStringFree(&DriverPath);
return ShimsForDriver;
}Referenced by:
IopInitializeBuiltinDriver
MiFinalizeDriverImage