Windows XP. Назад в прошлое.
Здравствуйте. Есть задача, которую необходимо решить. Возможно, вы знаете как к ней подступиться.
Задача и информация к размышлению: ОС Windows XP (коротко XP) позволяет устанавливать дату в пределах 2001-2099 год. Однако, если установить дату меньшую, чем 1 января 2001 года, то она продержится до первой перезагрузки. Задача состоит в том, чтобы найти у XP файл(ы), в которых прописана исходная дата (1 января 2001) и изменить её к примеру на 1 января 1950. Я уверен, что операционная система XP этого просто не заметит. Предугадывая ваши вопросы, сразу на них отвечу 1. Нет. Компьютер не имеет подключения к интернету 2. У меня установлена Windows XP, SP2, FAT32 3. Зачем это нужно? - Вопрос не по теме Итак я предполагаю, что искомая дата находится в одном из загружаемых файлов. Вот заглянул в файл ntoskrnl.exe, который является ядром XP. [ntoskrnl.exe] ... RtlSecondsSince1970ToTime RtlSecondsSince1980ToTime RtlSetTimeZoneInformation RtlTimeFieldsToTime RtlTimeToElapsedTimeFields RtlTimeToSecondsSince1970 RtlTimeToSecondsSince1980 RtlTimeToTimeFields Что это? Просто информация или нечто большее? Надеюсь на помощь специалистов. |
Цитата:
|
echs, если вам нужно запускать определенную программу с фейковой датой, можно применить бесплатную RunAsDate
|
Kirill_S,
Биос тут ни причём. Хотя пробовал и через Биос, а также через командную строку и другими методами. Тут видимо дело вот в чём. Эта дата при перезагрузке компьютера, проходит проверку. Если она находится на интервале (2001; 2099), то ОС её не трогает. В противном случае происходит "обнуление" даты и устанавливается 1 января 2001 года. Уважаемый dmitryst, хочу сразу отметить, что моя задача никак не связана с запуском какой-либо программы. Мне нужно фактически установить местонахождение даты "1 января 2001". Чудес не бывает. Где-то она прописана в Windows XP. Сложность задачи в том, что я не знаю где. Именно это заставило меня обратиться на форум, где, я полагаю, есть специалисты знающие Windows XP намного лучше меня. |
echs, попробуйте в ядре поискать магическое число 978307200 (десятичное) ;)
|
dmitryst,
такого числа в ядре нет. Точнее, именно в десятичном виде (с пробелами и без) нет. Вероятно оно закодировано и что искать непонятно. |
echs, попробуйте 0х 3A4F C880. Точнее, 80C84F3A, если я ничего не напутал.
|
dmitryst,
этого числа я тоже не обнаружил. Возможно мы ищем не в том файле. Мне тут пришла в голову ещё одна мысль. А что если отсчёт даты идёт с какого-то года? Например 1980 (или 1970) - начало отсчёта времени вообще. Тогда 2001 год может быть обозначен числом 21? В общем тут есть над чем подумать... |
В Линуксе за ноль было раньше принято 1 января 1970 года, при этом время считалось в секундах от этой даты. Возможно, что в Windows похожая ситуация.
Подробнее здесь. |
Grabber2006, дык, я почему предложил 978307200 - это как раз *nix time - количество секунд, прошедших с 1 янв. 2001г.
Цитата:
Цитата:
Цитата:
echs, чем ковыряете ядро? Дебаггером? Помнится, там надо в шестнадцатеричном виде менять старшие/младшие байты местами, т.е. число 0x0102 надо искать как 0x0201. Коллеги, поправьте, если я неправ ;) |
Ребята,
тут надо прежде всего разобраться с форматом в котором записывается дата-время. В противном случае мы будем искать то, не зная что. Вот что я ещё накопал интересного в интернете: ● Время и дата Двухбайтовая отметка даты имеет следующий формат: ● биты 0–4 — день месяца, допускаются значения 1–31; ● биты 5–8 — месяц года, допускаются значения 1–12; ● биты 9–15 — год, считая от 1980 года («эпоха MS-DOS»), возможны значения от 0 до 127 включительно, то есть 1980–2107 годы. Двухбайтовая отметка времени имеет следующий формат: ● биты 0–4 — счётчик секунд (по две), допустимы значения 0–29, то есть 0–58 секунд; ● биты 5–10 — минуты, допустимы значения 0–59; ● биты 11–15 — часы, допустимы значения 0–23. После этого пришлось открыть файл реестра NTUSER.DAT, который находится в папке Documents and Settings. Правда Windows XP возражала против этого, но на такой случай у меня на диске D: стоит вторая Windows XP. Так что я просто скопировал этот файл и посмотрел, как там обстоит дело с записью дат и времени. Если кто запамятовал, то напомню, что в файле NTUSER.DAT хранятся записи о каждом файле в ОС (и пользовательских файлах тоже). То есть вы создаёте файл, а ОС спешит запись о нём внести в NTUSER.DAT. Когда создан, когда изменён, когда открыт и бог знает что ещё... В общем я был потрясён... Похоже там числа пишутся наоборот... и вообще это отдельная тема для диссертации по ОС. Что ещё? О файле boot.ini вы конечно знаете. Удалось узнать, что есть такой параметр /year , который приказывает ОС игнорировать установленный на компьютере год. Так ли это? В общем я написал после параметра /fastdetect ещё один /year=1980 , установив этот же год и на компьютере. Включил перезагрузку. ОС выдала предупреждение, что год неправильный и его надо исправить (сама ОС менять год не стала, ведь параметр /year ей это запрещает). Всё бы ничего, но при попытке установить 1950 год ОС зависла на 20 секунд ... и установила свой 7492 год от рождества Христова. В общем надо ещё думать... dmitryst, спасибо за конвертер Буду изучать время-дату и способы записи в ОС Windows XP |
Цитата:
Накопаете что-нибудь - пишите сюда, даже любопытно стало, как они это обыграли (в отличие от *nix) |
Время: 22:10. |
Время: 22:10.
© OSzone.net 2001-