CmpDumpOneKeyBody

VOID __stdcall CmpDumpOneKeyBody(_CM_KEY_BODY *KeyBody, _UNICODE_STRING *Name, PVOID Context){
  __int64 v3; 
  __int64 v4; 
  wchar_t *Buffer; 
  NTSTATUS v7; 
  PEPROCESS v8; 
  _DWORD *v9; 
  int v10; 
  _CM_KEY_BODY *v11; 

  v11 = KeyBody;
  v4 = v3;
  if( v3 )
  {
    v9 = *(_DWORD **)(v3 + 8);
    if( *(_UNICODE_STRING **)(v3 + 32) != Name )
    {
      v10 = *(unsigned __int16 *)Context + 24;
      *(_DWORD *)(v3 + 16) += v10;
      if( *(int *)(v3 + 20) >= 0 )
      {
        if( (unsigned int)(v10 + *(_DWORD *)(v3 + 24)) <= *(_DWORD *)v3 )
        {
          *(_QWORD *)&v9[6 * *v9 + 2] = Name[1].Buffer;
          LOWORD(v9[6 * *v9 + 4]) = *(_WORD *)Context;
          HIWORD(v9[6 * *v9 + 4]) = *(_WORD *)Context;
          *(_QWORD *)&v9[6 * *v9 + 6] = *(_QWORD *)(v3 + 40) - *(unsigned __int16 *)Context;
          memmove(*(VOID **)&v9[6 * *v9 + 6], *((const VOID **)Context + 1), *(unsigned __int16 *)Context);
          *(_QWORD *)(v4 + 40) -= *(unsigned __int16 *)Context;
          *(_DWORD *)(v4 + 24) += v10;
        }
        else
        {
          *(_DWORD *)(v3 + 20) = -2147483643;
        }
      }
      ++*v9;
    }
  }
  else
  {
    Buffer = Name[1].Buffer;
    v11 = 0i64;
    v7 = PsLookupProcessByProcessId(Buffer, (PEPROCESS *)&v11);
    v8 = (PEPROCESS)v11;
    if( v7 < 0 )
      v8 = 0i64;
    if( v8 )
      ObfDereferenceObjectWithTag(v8, 0x746C6644ui64);
  }
}

Referenced by:

CmpDumpKeyBodyList