SeAuditTransactionStateChange
VOID __stdcall SeAuditTransactionStateChange(
_GUID *TransactionId,
_GUID *ResourceManagerId,
UINT64 NewTransactionState){
unsigned __int64 v4;
_GUID *v6;
_QWORD *PrimaryToken;
void *ClientToken;
unsigned __int64 v9;
unsigned __int8 *v10;
_EPROCESS *CurrentThreadProcess;
_UNICODE_STRING **v12;
int v13;
_KPROCESS *v14;
unsigned __int64 UniqueProcessId;
_UNICODE_STRING *ImageName[3];
_SECURITY_SUBJECT_CONTEXT SubjectContext;
_SE_ADT_PARAMETER_ARRAY AuditParameters;
__int128 v19;
SubjectContext.ClientToken = 0i64;
v4 = (unsigned int)NewTransactionState;
SubjectContext.ImpersonationLevel = 0x80000000;
memset(&SubjectContext.ImpersonationLevel + 1, 0, 20);
memset(&AuditParameters, 0i64, sizeof(AuditParameters));
ImageName[0] = 0i64;
v6 = (_GUID *)&v19;
AuditParameters.CategoryId = 3;
AuditParameters.FlatSubCategoryId = 116;
AuditParameters.AuditId = 4985;
if( ResourceManagerId )
v6 = ResourceManagerId;
v19 = 0i64;
AuditParameters.Type = 8;
*(_OWORD *)&ImageName[1] = 0i64;
if( (_DWORD)v4 == 6 )
AuditParameters.Type = 16;
SeCaptureSubjectContext((INT64)&SubjectContext);
PrimaryToken = SubjectContext.PrimaryToken;
ClientToken = SubjectContext.PrimaryToken;
if( SubjectContext.ClientToken )
ClientToken = SubjectContext.ClientToken;
if( SubjectContext.ClientToken )
PrimaryToken = SubjectContext.ClientToken;
v9 = PrimaryToken[3];
v10 = (unsigned __int8 *)**((_QWORD **)ClientToken + 19);
CurrentThreadProcess = (_EPROCESS *)PsGetCurrentThreadProcess();
if( PsGetAllocatedFullProcessImageNameEx(CurrentThreadProcess, ImageName) < 0
|| (v12 = (_UNICODE_STRING **)ImageName[0]) == 0i64 )
{
RtlInitUnicodeString((PUNICODE_STRING)&ImageName[1], L"?");
v12 = &ImageName[1];
ImageName[0] = (_UNICODE_STRING *)&ImageName[1];
}
v13 = v10[1];
AuditParameters.Parameters[2].Data[0] = v9;
AuditParameters.Parameters[0].Type = SeAdtParmTypeSid;
AuditParameters.Parameters[0].Address = v10;
AuditParameters.Parameters[1].Type = SeAdtParmTypeString;
AuditParameters.Parameters[0].Length = 4 * v13 + 8;
AuditParameters.Parameters[1].Length = 32;
AuditParameters.Parameters[2].Type = SeAdtParmTypeLogonId;
AuditParameters.Parameters[1].Address = (void *)&SeSubsystemName;
AuditParameters.Parameters[2].Length = 8;
AuditParameters.Parameters[3].Type = SeAdtParmTypeGuid;
AuditParameters.Parameters[3].Length = 16;
AuditParameters.Parameters[3].Address = TransactionId;
AuditParameters.Parameters[4].Type = SeAdtParmTypeUlong;
AuditParameters.Parameters[4].Length = 4;
AuditParameters.Parameters[4].Data[0] = v4;
AuditParameters.Parameters[5].Type = SeAdtParmTypeGuid;
AuditParameters.Parameters[5].Length = 16;
AuditParameters.Parameters[5].Address = v6;
AuditParameters.Parameters[6].Type = SeAdtParmTypePtr;
AuditParameters.Parameters[6].Length = 8;
v14 = (_EPROCESS *)PsGetCurrentThreadProcess();
AuditParameters.Parameters[7].Type = SeAdtParmTypeFileSpec;
AuditParameters.Parameters[7].Address = v12;
AuditParameters.ParameterCount = 8;
UniqueProcessId = (unsigned __int64)v14->UniqueProcessId;
LODWORD(v14) = *(unsigned __int16 *)v12 + 16;
AuditParameters.Parameters[6].Data[0] = UniqueProcessId;
AuditParameters.Parameters[7].Length = (unsigned int)v14;
SepAdtLogAuditRecord(&AuditParameters);
SeReleaseSubjectContext(&SubjectContext);
if( ImageName[0] )
{
if( (_UNICODE_STRING **)ImageName[0] != &ImageName[1] )
ExFreePoolWithTag(ImageName[0], 0);
}
}Referenced by:
No references.