HdlspAddLogEntry

VOID __stdcall HdlspAddLogEntry(WCHAR *String){
  __int64 v2; 
  void *v3; 
  __int64 v4; 
  int v5; 
  VOID **PoolWithTag; 
  VOID **v7; 
  unsigned __int8 v8; 
  __int64 v9; 
  __int16 v10; 
  __int64 v11; 
  unsigned __int16 v12; 
  wchar_t *v13; 
  NTSTATUS v14; 
  __int64 v15; 
  __int64 v16; 
  __int128 v17; 
  __int128 v18; 
  __int128 v19; 

  v2 = -1i64;
  v3 = 0i64;
  v17 = 0i64;
  v18 = 0i64;
  v19 = 0i64;
  do
    ++v2;
  while( String[v2] );
  v4 = 2 * v2 + 2;
  if( KeGetCurrentIrql() < 2u )
  {
    ZwQuerySystemInformation();
    if( v5 < 0 )
    {
      v17 = 0i64;
      v18 = 0i64;
      v19 = 0i64;
    }
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, v4, 1936483400i64);
    v7 = PoolWithTag;
    if( PoolWithTag )
      memmove(PoolWithTag, String, v4);
    if( (*(_DWORD *)(*(&stru_140CF2E80 + 920) + 48i64) & 2) != 0 )
      v8 = -1;
    else
      v8 = KeAcquireSpinLockRaiseToDpc(*(&stru_140CF2E80 + 920));
    v9 = *(&stru_140CF2E80 + 920);
    v10 = *(_WORD *)(*(&stru_140CF2E80 + 920) + 96i64);
    *(_DWORD *)(*(&stru_140CF2E80 + 920) + 48i64) |= 4u;
    v11 = *(unsigned __int16 *)(v9 + 98);
    v12 = (unsigned __int8)(v10 + 1);
    *(_WORD *)(v9 + 96) = v12;
    if( v12 == (_WORD)v11 )
    {
      v13 = *(wchar_t **)(56 * v11 + *(_QWORD *)(v9 + 16) + 48);
      v14 = wcscmp(v13, (PWCHAR)L"Entry could not be recorded due to lack of memory.\n");
      *(_WORD *)(v9 + 98) = (unsigned __int8)(v11 + 1);
      v3 = (void *)((unsigned __int64)v13 & -(__int64)(v14 != 0));
    }
    else if( (_WORD)v11 == 0xFFFF )
    {
      *(_WORD *)(v9 + 98) = 0;
    }
    v15 = 56i64 * v12;
    v16 = *(_QWORD *)(v9 + 16);
    *(_OWORD *)(v15 + v16) = v17;
    *(_OWORD *)(v15 + v16 + 16) = v18;
    *(_OWORD *)(v15 + v16 + 32) = v19;
    if( v7 )
      *(_QWORD *)(56i64 * *(unsigned __int16 *)(*(&stru_140CF2E80 + 920) + 96i64)
                + *(_QWORD *)(*(&stru_140CF2E80 + 920) + 16i64)
                + 48) = v7;
    else
      *(_QWORD *)(56i64 * *(unsigned __int16 *)(*(&stru_140CF2E80 + 920) + 96i64)
                + *(_QWORD *)(*(&stru_140CF2E80 + 920) + 16i64)
                + 48) = L"Entry could not be recorded due to lack of memory.\n";
    if( v8 != 0xFF )
    {
      KxReleaseSpinLock(*(&stru_140CF2E80 + 920));
      __writecr8(v8);
    }
    if( v3 )
      ExFreePoolWithTag(v3, 0);
  }
}

Referenced by:

HdlspDispatch