SID Migrator (sidm) переносит локальный machine SID клонированной Windows и связанные локальные SID-ссылки. Основной pipeline обрабатывает SAM, системные и пользовательские hive, ProfileList, NTFS/registry ACL, AppX/AppRepository, TaskCache, UserChoice и известные структурированные данные приложений.
Цель миграции - сохранить локальные учетные записи, их RID, профили и доступ к данным после смены machine SID. Это низкоуровневая операция: write-run допустим только при наличии проверенного checkpoint или полного образа системы.
- Миграция всегда выполняется для всей локальной SAM-domain, а не для одного выбранного пользователя.
- Все локальные пользователи и группы сохраняют RID;
ProfileList, профильные hive и ACL обрабатываются для каждого найденного локального профиля. - User-scoped DPAPI postprocessing завершается отдельно для каждого пользователя при его первом интерактивном входе. До проверки каждого профиля миграцию нельзя считать полностью принятой.
- Произвольная бинарная замена SID не входит в основной pipeline. WIP-анализатор кандидатов по умолчанию выключен и не нужен для штатного запуска.
sidm не содержит сетевого клиента, сервера, телеметрии или загрузчика и не требует внешней инфраструктуры. Пути UNC, device-backed paths и сетевые диски для рабочих артефактов отклоняются. Диагностика читает локальное состояние Windows и сохраняет его на локальный диск. Сетевое поведение самой Windows и мигрируемых приложений находится вне контроля sidm.
Требования: Windows 10/11 или Windows Server, Visual Studio 2022 с C/C++ tools и CMake 3.20+.
cmake -S . -B build
cmake --build build --config ReleaseСначала read-only preview:
.\build\Release\sidm.exe migrate --preview --diagnosticsLive write-run через временный LocalSystem service:
.\build\Release\sidm.exe migrate --apply --service-handoff --wait-for-logoff --diagnosticsВосстановление из backup:
.\build\Release\sidm.exe restore C:\SIDM\backups\<backup-folder> --diagnosticsПо умолчанию данные пишутся в %SystemDrive%\SIDM, обычно C:\SIDM; fallback - %ProgramData%\SIDM. Другой локальный каталог задается через --backup-root=<dir>.
Подробности: операторский гайд и описание pipeline.