EmonAddProfileSource

INT64 __fastcall EmonAddProfileSource(UINT8 *a1, _DWORD *a2){
  WCHAR *v2; 
  unsigned int v5; 
  unsigned int v6; 
  __int64 v7; 
  WCHAR *v8; 
  __int64 v9; 
  __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  unsigned int v15; 
  int v16; 
  int v17; 
  int v18; 
  unsigned __int64 v19; 
  _DWORD *v20; 
  __int64 v21; 
  __int64 v22; 
  __int64 a4; 
  a4 = 0i64;
  v2 = (WCHAR *)(a1 + 184);
  v5 = -1073741823;
  v6 = wcsnlen((const wchar_t *)a1 + 92, 0xFEui64) + 1;
  v8 = (WCHAR *)HalpMmAllocCtxAlloc(v7, 2 * v6);
  v9 = (__int64)v8;
  if( !v8 )
    return 3221225495i64;
  wcsncpy_s(v8, v6, v2, v6);
  v12 = HalpMmAllocCtxAlloc(v11, 224i64);
  v14 = v12;
  if( !v12 )
  {
    HalpMmAllocCtxFree(v13, v9);
    return 3221225495i64;
  }
  memset(v12, 0i64);
  *(_BYTE *)(v14 + 28) = 1;
  v15 = *((_DWORD *)a1 + 2);
  *(_DWORD *)(v14 + 24) = v15;
  if( v15 > 0x7FFFFFFF )
  {
    *(_DWORD *)(v14 + 24) = 0x7FFFFFFF;
    v15 = 0x7FFFFFFF;
  }
  v16 = *(_DWORD *)(v14 + 24);
  *(_BYTE *)(v14 + 29) = 0;
  if( v15 < 0x1000 )
    v16 = 4096;
  *(_DWORD *)(v14 + 24) = v16;
  v17 = *a1;
  v18 = a1[1] | ((a1[5] & 1 | (8 * (a1[4] & 1 | (4 * (a1[3] & 1 | (2 * (a1[2] & 0xF))))))) << 10) | 0x300;
  *(_DWORD *)(v14 + 216) = 37;
  *(_DWORD *)(v14 + 208) = v17 | (v18 << 8);
  KeCopyAffinityEx(v14 + 32, (unsigned __int16 *)a1 + 8);
  *(_QWORD *)(v14 + 200) = v9;
  v19 = (unsigned __int8)HalpAcquireHighLevelLock(&EmonProfileSourceDescriptorListLock);
  if( HalpInsertProfileSource(v14, &EmonProfileSourceDescriptorListHead, 37i64, &a4) )
  {
    ++EmonProfileSourceDescriptorCount;
    if( a2 )
      *a2 = *(_DWORD *)v14;
    KxReleaseSpinLock(&EmonProfileSourceDescriptorListLock);
    __writecr8(v19);
    return 0i64;
  }
  else
  {
    v20 = (_DWORD *)a4;
    if( a4 && *(_DWORD *)(a4 + 208) == *(_DWORD *)(v14 + 208) )
    {
      KeOrAffinityEx((_KAFFINITY_EX *)(a4 + 32), (_KAFFINITY_EX *)(v14 + 32), (_KAFFINITY_EX *)(a4 + 32));
      if( a2 )
        *a2 = *v20;
      v5 = 0;
    }
    KxReleaseSpinLock(&EmonProfileSourceDescriptorListLock);
    __writecr8(v19);
    HalpMmAllocCtxFree(v21, *(_QWORD *)(v14 + 200));
    HalpMmAllocCtxFree(v22, v14);
    return v5;
  }
}

Referenced by:

No references.