EtwTiLogReadWriteVm
CHAR __stdcall EtwTiLogReadWriteVm(INT64 a1, INT64 a2, INT64 a3, INT64 a4, CHAR a5, CHAR a6){
_ETHREAD *CurrentThread;
int v7;
REGHANDLE v10;
UINT64 v11;
__int64 *v12;
__int64 *v13;
int v14;
NTSTATUS v15;
int v16;
int v17;
int v18;
unsigned int v19;
__int64 v20;
__int64 v21;
REGHANDLE v22;
unsigned __int64 v24;
unsigned __int64 v25;
_EVENT_DATA_DESCRIPTOR UserData;
__int64 v27[32];
int v28;
v28 = a1;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v7 = a4;
if( CurrentThread->Tcb.PreviousMode == 1 )
{
v10 = *(&ExBootDevicesRemovedEvent + 179);
v11 = 196608i64;
if( (_DWORD)a4 != 16 )
v11 = 786432i64;
LOBYTE(CurrentThread) = EtwProviderEnabled(*(&ExBootDevicesRemovedEvent + 179), 0, v11);
if( (_BYTE)CurrentThread )
{
if( a2 == a3 )
{
v13 = THREATINT_READVM_LOCAL;
v12 = THREATINT_WRITEVM_LOCAL;
}
else
{
v12 = (__int64 *)&THREATINT_WRITEVM_REMOTE;
v13 = THREATINT_READVM_REMOTE;
}
if( v7 != 16 )
v13 = v12;
LOBYTE(CurrentThread) = EtwEventEnabled(v10, (PCEVENT_DESCRIPTOR)v13);
if( (_BYTE)CurrentThread )
{
UserData.Reserved = 0;
UserData.Ptr = (unsigned __int64)&v28;
UserData.Size = 4;
v14 = EtwpTiFillProcessIdentity(v27, a2, &v24);
v15 = EtwpTiFillThreadIdentity((INT64)(&UserData + (unsigned int)(v14 + 1)), (INT64)KeGetCurrentThread());
v17 = EtwpTiFillProcessIdentity(&UserData.Ptr + 2 * (unsigned int)(v15 + v16), a3, &v25);
v19 = v17 + v18;
v20 = 2i64 * v19++;
*(&UserData.Reserved + 2 * v20) = 0;
*(&UserData.Ptr + v20) = (unsigned __int64)&a5;
*(&UserData.Size + 2 * v20) = 8;
v21 = 2i64 * v19;
*(&UserData.Reserved + 2 * v21) = 0;
*(&UserData.Ptr + v21) = (unsigned __int64)&a6;
v22 = *(&ExBootDevicesRemovedEvent + 179);
*(&UserData.Size + 2 * v21) = 8;
LOBYTE(CurrentThread) = EtwWrite(v22, (PCEVENT_DESCRIPTOR)v13, 0, v19 + 1, &UserData);
}
}
}
return(char)CurrentThread;
}Referenced by:
MiReadWriteVirtualMemory