NtPrivilegeObjectAuditAlarm
NTSTATUS __stdcall NtPrivilegeObjectAuditAlarm(
UNICODE_STRING *SubsystemName,
PVOID HandleId,
PVOID ClientToken,
UINT64 DesiredAccess,
PRIVILEGE_SET *Privileges,
UINT8 AccessGranted){
int v6;
CHAR v10;
NTSTATUS v11;
struct _DMA_ADAPTER *v12;
unsigned int PrivilegeCount;
UINT64 v14;
char *v15;
UINT8 *PoolWithTag;
_PRIVILEGE_SET *CapturedPrivileges;
PVOID v18;
INT64 v20;
UINT64 DesiredAccessa;
PVOID Object;
_PRIVILEGE_SET *v23;
PVOID P;
struct _SECURITY_SUBJECT_CONTEXT SubjectContext;
v6 = DesiredAccess;
P = 0i64;
v23 = 0i64;
memset(&SubjectContext, 0, sizeof(SubjectContext));
v10 = *((_BYTE *)KeGetCurrentThread() + 562);
SeCaptureSubjectContext(&SubjectContext);
if( !SeCheckAuditPrivilege(&SubjectContext, v10) )
{
v11 = -1073741727;
LABEL_30:
SeReleaseSubjectContext(&SubjectContext);
return v11;
}
Object = 0i64;
v11 = ObReferenceObjectByHandle(ClientToken, 8u, (POBJECT_TYPE)SeTokenObjectType, v10, &Object, 0i64);
if( v11 < 0 )
{
SeReleaseSubjectContext(&SubjectContext);
if( v11 == -1073741816 )
return v11;
v20 = (unsigned int)v11;
LABEL_28:
SepAuditFailed(v20);
return v11;
}
v12 = (struct _DMA_ADAPTER *)Object;
if( *((_DWORD *)Object + 48) == 2 && *((int *)Object + 49) < 1 )
{
HalPutDmaAdapter((PADAPTER_OBJECT)Object);
v11 = -1073741659;
goto LABEL_30;
}
v11 = SepProbeAndCaptureString_U(SubsystemName, (_UNICODE_STRING **)&P);
if( v11 < 0 )
{
LABEL_16:
CapturedPrivileges = v23;
goto LABEL_19;
}
if( ((unsigned __int8)Privileges & 3) != 0 )
ExRaiseDatatypeMisalignment();
PrivilegeCount = Privileges->PrivilegeCount;
if( Privileges->PrivilegeCount >= 0x43 )
{
v11 = -1073741811;
v12 = (struct _DMA_ADAPTER *)Object;
goto LABEL_16;
}
v14 = 12 * PrivilegeCount + 8;
if( 12 * PrivilegeCount != -8 )
{
v15 = (char *)Privileges + (unsigned int)v14;
if( (unsigned __int64)v15 > 0x7FFFFFFF0000i64 || v15 < (char *)Privileges )
MEMORY[0x7FFFFFFF0000] = 0;
}
PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, v14, 0x72506553ui64);
CapturedPrivileges = (_PRIVILEGE_SET *)PoolWithTag;
v23 = (_PRIVILEGE_SET *)PoolWithTag;
if( PoolWithTag )
{
memmove(PoolWithTag, (UINT8 *)Privileges, 12 * PrivilegeCount + 8);
CapturedPrivileges->PrivilegeCount = PrivilegeCount;
}
else
{
v11 = -1073741670;
}
v12 = (struct _DMA_ADAPTER *)Object;
LABEL_19:
if( v11 < 0 )
{
if( CapturedPrivileges )
ExFreePoolWithTag(CapturedPrivileges, 0);
if( P )
ExFreePoolWithTag(P, 0);
SeReleaseSubjectContext(&SubjectContext);
HalPutDmaAdapter(v12);
if( v11 != -1073741670 )
return v11;
v20 = 3221225626i64;
goto LABEL_28;
}
LODWORD(DesiredAccessa) = v6;
v18 = P;
SepAdtPrivilegeObjectAuditAlarm(
(_UNICODE_STRING *)P,
0i64,
0i64,
HandleId,
(_TOKEN *)v12,
(_TOKEN *)SubjectContext.PrimaryToken,
SubjectContext.ProcessAuditId,
DesiredAccessa,
CapturedPrivileges,
AccessGranted);
if( CapturedPrivileges )
ExFreePoolWithTag(CapturedPrivileges, 0);
if( v18 )
ExFreePoolWithTag(v18, 0);
SeReleaseSubjectContext(&SubjectContext);
HalPutDmaAdapter(v12);
return 0;
}Referenced by:
No references.