Как стать автором
Обновить
-22
0

Пользователь

Отправить сообщение

Сдерживать рост само по себе ничем не поможет - мы с текущим населением выбрасываем 36 Гт в год и используем 40 млн. кв. км земель для производства мяса.

Но в целом, я согласен, - рост надо остановить, главным образом, в Африке и ЮВА.

К сожалению, в заметке не было приведено никаких технических деталей, поэтому пришлось немного поковыряться в репозитории mozilla-central.

Код, отвечающий за установку браузера по умолчанию, находится по пути ./toolkit/mozapps/defaultagent/ в файле SetDefaultBrowser.cpp.

Комментарий в файле SetDefaultBrowser.cpp:

The hash changes at the end of each minute, so check that the hash should be the same by the time we're done writing.

Хэш изменяется в конце каждой минуты, поэтому проверяем, чтобы хэш был тем же в момент, когда мы закончим запись значения.

Функция SetDefaultBrowserUserChoice в файле SetDefaultBrowser.cpp вызывает функцию SetUserChoice, в которой и происходит вся "магия".

А за магию отвечает функция GenerateUserChoiceHash, которая, в свою очередь, реализована в файле ./browser/components/shell/WindowsUserChoice.cpp.

Ключевые функции файла WindowsUserChoice.cpp:

  • CheckBrowserUserChoiceHashes

  • CheckUserChoiceHash

  • GenerateUserChoiceHash

Константа userExperience жёстко задана (содержит текст и GUID) и является неотъемлемой частью алгоритма UserChoice в Windows:

const wchar_t* userExperience =
    L"User Choice set via Windows User Experience "
    L"{D18B6DD5-6124-4341-9318-804003BAFA0B}";

С использованием этой константы (userExperience) в функции GenerateUserChoiceHash формируется строка (FormatUserChoiceString), которая затем хэшируется. В качестве хэша используется MD5, результат дополнительно модифицируется.

UniquePtr<wchar_t[]> GenerateUserChoiceHash(const wchar_t* aExt,
        const wchar_t* aUserSid,
        const wchar_t* aProgId,
        SYSTEMTIME aTimestamp) {
    auto userChoice = FormatUserChoiceString(aExt, aUserSid, aProgId, aTimestamp);
    if (!userChoice) {
        return nullptr;
    }
    return HashString(userChoice.get());
}

Параметрами функции являются:

  • Протокол или расширения файлов:

    • https, http, .html, .htm

  • UserSID — SID (security identifier) пользователя

  • Идентификатор программы:

    • FirefoxURL — для протоколов https и http

    • FirefoxHTML — для файлов .html и .htm

  • Отметка времени (см. комментарий выше о требованиях к отметке времени)

В комментариях к коду также сказано, что алгоритм подходит не для всех версий Windows, в частности, в версиях до Windows 1703 алгоритм не включал отметку времени, но включал путь к исполняемому файлу. Алгоритм должен работать в версиях, начиная со сборки Windows 1703.

Как я понял из комментариев, функционал базируется на исследовании, которое выполнил Christoph Kolbicz, автор утилиты SetUserFTA (Set User File Type Associations). Подробнее об этом можно почитать в блоге Кристофа: SetUserFTA: UserChoice Hash defeated – Set File Type Associations per User or Group on Windows.

Привет из 2016 года.
Свежескачанная Visual Studio Community Edition.
Абсолютно та же самая проблема и целый вечер битья головой об стену.
Нашел ответ на SO в виде ссылки на эту статью.
Что-то в это

// обычный цикл
for(var i=0; i<items.length; i++) {
  // код здесь...
}

// такой цикл работает быстрее
var size = items.length;
for(var i=0;i<size; i++){
  // код здесь...
}


слабо верится. И JSPerf — не аргумент.

Вся остальная статья предельно логична. Другого и не ожидалось. Rivertrail по идее ожидается в ES7 или ES8, т.е. году в 2016 примерно. И то, не понятно, что с ним будет теперь, когда Брендан — основной пропагандист SIMD в JS — ушел из Mozilla.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность