SeAuditFipsCryptoSelftests
VOID __stdcall SeAuditFipsCryptoSelftests(UINT8 bSuccess, UINT64 SelftestCode){
ULONG_PTR v3;
void *PrimaryToken;
__int64 CurrentThreadProcess;
ULONG_PTR v6;
int AllocatedFullProcessImageName;
ULONG v8;
PVOID P;
struct _SECURITY_SUBJECT_CONTEXT SubjectContext;
_SE_ADT_PARAMETER_ARRAY Src;
SubjectContext.ClientToken = 0i64;
v3 = (unsigned int)SelftestCode;
SubjectContext.ImpersonationLevel = 0x80000000;
memset(&SubjectContext.ImpersonationLevel + 1, 0, 20);
memset((INT64)&Src, 0i64);
P = 0i64;
Src.CategoryId = 1;
Src.FlatSubCategoryId = 102;
SeCaptureSubjectContext(&SubjectContext);
PrimaryToken = SubjectContext.PrimaryToken;
Src.Parameters[0].Type = SeAdtParmTypeSid;
if( SubjectContext.ClientToken )
PrimaryToken = SubjectContext.ClientToken;
Src.Parameters[1].Type = SeAdtParmTypeString;
Src.Parameters[1].Length = 32;
Src.Parameters[0].Address = (PVOID)**((_QWORD **)PrimaryToken + 19);
Src.Parameters[0].Length = 4 * *((unsigned __int8 *)Src.Parameters[0].Address + 1) + 8;
Src.Parameters[1].Address = &SeSubsystemName;
CurrentThreadProcess = PsGetCurrentThreadProcess();
v6 = *(_QWORD *)(CurrentThreadProcess + 1088);
AllocatedFullProcessImageName = PsGetAllocatedFullProcessImageNameEx(CurrentThreadProcess, &P);
if( AllocatedFullProcessImageName >= 0 )
{
Src.Parameters[2].Type = SeAdtParmTypePtr;
Src.Parameters[2].Length = 8;
Src.Parameters[2].Data[0] = v6;
v8 = *(unsigned __int16 *)P + 16;
Src.Parameters[3].Type = SeAdtParmTypeFileSpec;
Src.Parameters[3].Length = v8;
Src.Parameters[3].Address = P;
Src.ParameterCount = 4;
if( bSuccess )
{
Src.AuditId = 6417;
Src.Type = 8;
}
else
{
Src.AuditId = 6418;
Src.Type = 16;
Src.Parameters[4].Type = SeAdtParmTypeHexUlong;
Src.Parameters[4].Length = 4;
Src.Parameters[4].Data[0] = v3;
Src.ParameterCount = 5;
}
SepAdtLogAuditRecord(&Src);
}
SeReleaseSubjectContext(&SubjectContext);
if( P )
ExFreePoolWithTag(P, 0);
if( AllocatedFullProcessImageName < 0 )
SepAuditFailed((unsigned int)AllocatedFullProcessImageName);
}Referenced by:
No references.