SeValidateImageHeader
NTSTATUS __stdcall SeValidateImageHeader(
_FILE_OBJECT *File,
VOID *Base,
UINT64 SizeOfHeaders,
_EPROCESS *CallingProcess,
VOID *ProcessToken,
UINT64 SecureType,
VOID **SePool,
UINT8 SeRequestedSigningLevel,
UINT8 *SeValidatedSigningLevel,
_SE_IMAGE_SIGNATURE_TYPE *SeSignatureType){
_BDCB_IMAGE_INFORMATION **p_SigningInfo;
NTSTATUS v11;
NTSTATUS v13;
char v14;
char v15;
UINT64 SigningInfoSize;
_BDCB_IMAGE_INFORMATION *SigningInfo;
char v18;
char v19;
__int64 v20;
__int64 v21;
SigningInfo = 0i64;
p_SigningInfo = 0i64;
LODWORD(SigningInfoSize) = 0;
if( !qword_140C1D8E0 )
return -1073740760;
if( ((unsigned __int8)SeValidatedSigningLevel & 1) != 0 )
{
p_SigningInfo = &SigningInfo;
if( !_InterlockedCompareExchange(&dword_140CEC524, 0, 0) )
p_SigningInfo = 0i64;
}
v15 = v19;
v14 = v18;
v11 = ((__int64(__fastcall *)(_FILE_OBJECT *, VOID *, UINT64, _EPROCESS *, _DWORD, UINT64, VOID **, _QWORD, _DWORD, _SE_IMAGE_SIGNATURE_TYPE *, char, char, __int64, __int64, _BDCB_IMAGE_INFORMATION **, UINT64 *))qword_140C1D8E0)(
File,
Base,
SizeOfHeaders,
CallingProcess,
(_DWORD)ProcessToken,
SecureType,
SePool,
SeRequestedSigningLevel,
(_DWORD)SeValidatedSigningLevel,
SeSignatureType,
v14,
v15,
v20,
v21,
p_SigningInfo,
&SigningInfoSize);
if( v11 >= 0 )
{
if( SigningInfo )
{
v13 = SepScheduleImageVerificationCallbacks(SigningInfo, (unsigned int)SigningInfoSize);
if( v13 < 0 )
{
v11 = v13;
ExFreePoolWithTag(SigningInfo, 0x63734943u);
}
}
}
return v11;
}Referenced by:
MiValidateSectionCreate