Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows 2000/XP (http://forum.oszone.net/forumdisplay.php?f=6)
-   -   Windows XP. Назад в прошлое. (http://forum.oszone.net/showthread.php?t=350650)

echs 08-02-2022 10:35 2979519

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

Что это? Просто информация или нечто большее?
Надеюсь на помощь специалистов.

Kirill_S 08-02-2022 12:12 2979529

Цитата:

Цитата echs
она продержится до первой перезагрузки »

Вероятно дата из БИОСа?

dmitryst 08-02-2022 12:20 2979533

echs, если вам нужно запускать определенную программу с фейковой датой, можно применить бесплатную RunAsDate

echs 08-02-2022 13:17 2979543

Kirill_S,
Биос тут ни причём. Хотя пробовал и через Биос, а также через командную строку и другими методами. Тут видимо дело вот в чём. Эта дата при перезагрузке компьютера, проходит проверку. Если она находится на интервале (2001; 2099), то ОС её не трогает. В противном случае происходит "обнуление" даты и устанавливается 1 января 2001 года.

Уважаемый dmitryst,
хочу сразу отметить, что моя задача никак не связана с запуском какой-либо программы. Мне нужно фактически установить местонахождение даты "1 января 2001". Чудес не бывает. Где-то она прописана в Windows XP. Сложность задачи в том, что я не знаю где. Именно это заставило меня обратиться на форум, где, я полагаю, есть специалисты знающие Windows XP намного лучше меня.

dmitryst 08-02-2022 14:43 2979552

echs, попробуйте в ядре поискать магическое число 978307200 (десятичное) ;)

echs 08-02-2022 16:27 2979567

dmitryst,
такого числа в ядре нет. Точнее, именно в десятичном виде (с пробелами и без) нет. Вероятно оно закодировано и что искать непонятно.

dmitryst 08-02-2022 17:55 2979573

echs, попробуйте 0х 3A4F C880. Точнее, 80C84F3A, если я ничего не напутал.

echs 08-02-2022 19:57 2979579

dmitryst,
этого числа я тоже не обнаружил. Возможно мы ищем не в том файле. Мне тут пришла в голову ещё одна мысль. А что если отсчёт даты идёт с какого-то года? Например 1980 (или 1970) - начало отсчёта времени вообще. Тогда 2001 год может быть обозначен числом 21? В общем тут есть над чем подумать...

Grabber2006 08-02-2022 21:58 2979585

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

dmitryst 09-02-2022 09:24 2979608

Grabber2006, дык, я почему предложил 978307200 - это как раз *nix time - количество секунд, прошедших с 1 янв. 2001г.
Цитата:

Цитата echs
RtlTimeToSecondsSince1970
RtlTimeToSecondsSince1980 »

Для RtlTimeToSecondsSince1970 это как раз оно(может быть шестнадцатеричным).
Цитата:

Цитата Grabber2006
Возможно, что в Windows похожая ситуация. »

да, но если учесть, что в Excel в свое время дату хранили не как у всех, а в своем формате (сэкономив байт памяти, но создав забавный глюк , который были вынуждены повторять создатели аналогичных программ, дабы сохранить совместимость), то не исключено, что дата/время в ядре тоже "не как у всех".
Цитата:

Цитата echs
начало отсчёта времени вообще »

это *nix-time, - количество секунд, прошедших с 1 янв. 1970г. Вот конвертер, можете поиграться стартовой датой, напр., 1 янв. 1980г.
echs, чем ковыряете ядро? Дебаггером? Помнится, там надо в шестнадцатеричном виде менять старшие/младшие байты местами, т.е. число 0x0102 надо искать как 0x0201. Коллеги, поправьте, если я неправ ;)

echs 09-02-2022 10:35 2979615

Ребята,
тут надо прежде всего разобраться с форматом в котором записывается дата-время. В противном случае мы будем искать то, не зная что.
Вот что я ещё накопал интересного в интернете:

● Время и дата
Двухбайтовая отметка даты имеет следующий формат:

● биты 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

dmitryst 09-02-2022 11:04 2979616

Цитата:

Цитата echs
установила свой 7492 год »

ага, значит, 1950 год невалидный, а 7492 валидный? :laugh:
Накопаете что-нибудь - пишите сюда, даже любопытно стало, как они это обыграли (в отличие от *nix)


Время: 22:10.

Время: 22:10.
© OSzone.net 2001-