def CalculatePrefetchHash2008(path):
  """Calculates a Windows 2008 Prefetch hash.

  Args:
    path (str): path to calculate the Prefetch hash of.

  Returns:
    int: Prefetch hash.
  """
  hash_value = 314159

  path = path.upper().encode('utf-16-le')
  path_index = 0
  path_length = len(path)

  while path_index + 8 < path_length:
    block_value = path[path_index + 1]
    block_value *= 37
    block_value += path[path_index + 2]
    block_value *= 37
    block_value += path[path_index + 3]
    block_value *= 37
    block_value += path[path_index + 4]
    block_value *= 37
    block_value += path[path_index + 5]
    block_value *= 37
    block_value += path[path_index + 6]
    block_value *= 37
    block_value += path[path_index + 7]

    block_value += path[path_index] * 442596621

    hash_value = (block_value - (hash_value * 803794207)) % 0x100000000

    path_index += 8

  while path_index < path_length:
    hash_value = ((37 * hash_value) + path[path_index]) % 0x100000000

    path_index += 1

  return hash_value