Hacker News Digest

10 сентября 2026 г. в 09:04 • devblogs.microsoft.com • ⭐ 256 • 💬 120

OriginalHN

#filesystem#gettickcount#reservoir-sampling#rtlrandomex#windows-xp

What algorithm did Windows XP use to choose your initial user picture?

Windows XP выбирает начальное изображение пользователя случайным образом из папки %ALLUSERSPROFILE%\Application Data\Microsoft\User Account Pictures\Default Pictures, используя алгоритм одноходовой выборки (reservoir sampling с k=1). Для генерации случайных чисел применяется функция RtlRandomEx, инициализированная значением GetTickCount() — счётчиком миллисекунд с момента загрузки системы. Алгоритм проходит по файлам в директории последовательно, поддерживая счётчик обработанных файлов и заменяя текущий «победитель» с вероятностью 1/count на каждый новый файл. Это обеспечивает равномерное распределение вероятности выбора любого файла из всей коллекции, независимо от порядка обхода. Подход выбран из-за эффективности: он требует только одного прохода по файловой системе, минимизируя дорогостоящие операции ввода-вывода, и устойчив к изменениям содержимого директории во время выполнения. Для защиты от аномалий (например, миллиона файлов) алгоритм останавливается после обработки первых 100 изображений. Таким образом, выбор картинки зависит от точного момента времени создания аккаунта через GetTickCount() и порядка перечисления файлов в файловой системе, что делает его псевдослучайным, но предсказуемым при известных условиях.