Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];

Вниз

Часы реального времени (RTC Alarm)   Найти похожие ветки 

 
shamanski ©   (2007-07-06 15:24) [0]

Помогите, пожалуйста, найти код для работы с часами реального времени CMOS. В частности, мне нужно использовать будильник, который включает компьютер в определенное время.
Вот, нашел исходник на сях, работающий с IRQ8, но в сях я не понимаю совсем:http://www.frolov-lib.ru/books/bsp/v33/ch4.htm


 
Jeer ©   (2007-07-06 15:29) [1]

asm-команда: rdtsc
api-обращение QueryPerfomanceCounter к таймеру высокого разрешения


> будильник, который включает компьютер в определенное время.

Покупаешь механический будильник со стрелками, навешиваешь контакты и на Power switch


 
Dib@zol ©   (2007-07-06 15:36) [2]


> Покупаешь механический будильник со стрелками, навешиваешь
> контакты и на Power switch


Кхм. ОМФГ. На хакер.ру некогда была статейка "проснись и пой компьютер мой!". Но тот код работает тока на Win9x :(


 
Инс ©   (2007-07-06 15:40) [3]

Думаю, даже если это возможно, то не из User Mode точно. Пишите драйвер.


 
SHAMANSKI ©   (2007-07-06 15:52) [4]

вот описание работы с нужным прерыванием на асме. Будет ли это работать под виндой, вставленное в код delphi?

Функции прерывания INT 1Ah
Для работы с часами реального времени вы можете обращаться непосредственно к перечисленным выше ячейкам памяти CMOS, используя порты 70h и 71h. Однако лучше всего воспользоваться функциями 2 - 7 прерывания INT 1Ah, описанными ниже.



Прочитать дату из часов реального времени
Регистры на входе:
AH = 04h

Регистры на выходе:
CH = столетие в BCD-формате;

CL = год в BCD-формате (например, CX=1997h означает 1997 год);

DH = месяц в BCD-формате;

DL = число в BCD-формате;

CF = CY = 1, если часы реального времени не установлены


Установить дату в часах реального времени
Регистры на входе:
AH = 05h

CH = столетие в BCD-формате;

CL = год в BCD-формате (например, CX=1997h означает 1997 год);

DH = месяц в BCD-формате;

DL = число в BCD-формате;

Регистры на выходе:
Регистры не используются


Установить будильник
Регистры на входе:
AH = 06h

CH = часы в BCD-формате;

CL = минуты в BCD-формате;

DH = секунды в BCD-формате

Регистры на выходе:
CF = CY = 1, если часы реального времени не установлены


 
Инс ©   (2007-07-06 15:59) [5]


> вот описание работы с нужным прерыванием на асме. Будет
> ли это работать под виндой, вставленное в код delphi?


Разумеется нет. То, что вы привели, справедливо для MS_DOS. Почитайте про 32-разрядные системы, про защищенный режим микропроцессора, про кольца защиты. Много нового узнаете.


 
SHAMANSKI ©   (2007-07-06 16:04) [6]


> Кхм. ОМФГ. На хакер.ру некогда была статейка "проснись и
> пой компьютер мой!". Но тот код работает тока на Win9x :
> (

интересная статейка, но там нужную инфу извлекают и пишут прямо в CMOS, что предполагает различия на разных материнках, а в коде, который я привел выше используют прерывание 1AH; по идее это должно запахать на всех матерях. Но поскольку я слабо шарю во всем этом, то хотелось бы найти готовый код.


 
SHAMANSKI ©   (2007-07-06 16:06) [7]

В общем, как я понял, в BIOS меня так просто не пустят. Извините за полное ламерство )))


 
Инс ©   (2007-07-06 16:06) [8]

Вы про эти штучки с прерываниями DOS и BIOS, прямым доступом к аппаратуре и прочими, на системах линейки NT забудьте.


 
SHAMANSKI ©   (2007-07-06 16:12) [9]

В таком случае, может существует готовый драйвер, работающий с нужным мне прерыванием?


 
Сергей М. ©   (2007-07-06 16:12) [10]


> в BIOS меня так просто не пустят


Да и при "так сложно" тебе там тоже нехрена делать.

Есть ОС, ее средствами и возможностями и пользуйся.


 
SHAMANSKI ©   (2007-07-06 16:15) [11]

Вот воспользоваться возможностями ОС было бы для меня просто идеально. Но сколько я ни копался в нете, про функцию, которая этим делом управляет, ничего не нашел


 
Сергей М. ©   (2007-07-06 16:17) [12]


> сколько я ни копался в нете


Покажи как "копался" ..


 
SHAMANSKI ©   (2007-07-06 16:21) [13]

вот такую вот штуку нашел:
int timer(char fn, SYSTIMER *tm)
{
 reg.h.ah = fn;

 switch (fn)
 {
   case RTC_SET_TIME:
   {
     reg.h.ch = tm->hour;
  reg.h.cl = tm->min;
  reg.h.dh = tm->sec;
  reg.h.dl = tm->daylight_savings;
     break;
   }

case RTC_SET_DATE:
{
     reg.x.cx = tm->year;
  reg.h.dh = tm->month;
  reg.h.dl = tm->day;
     break;
   }

case RTC_SET_ALARM:
{
     reg.h.ch = tm->hour;
  reg.h.cl = tm->min;
  reg.h.dh = tm->sec;
     break;
   }
 }

 int86(0x1a,&reg,&reg);

 if(reg.x.cflag == 1)
   return(-1);

 switch (fn)
 {
   case RTC_GET_TIME:
   {
     tm->hour = reg.h.ch;
  tm->min = reg.h.cl;
  tm->sec = reg.h.dh;
     break;
   }

case RTC_GET_DATE:
{
     tm->year = reg.x.cx;
  tm->month = reg.h.dh;
  tm->day = reg.h.dl;
     break;
   }
 }
 return 0;
}

Но будет ли она виндах работать?


 
Сергей М. ©   (2007-07-06 16:24) [14]

Не будет.


 
SHAMANSKI ©   (2007-07-06 16:43) [15]

Хорошо. Можно подойти к вопросу с другой стороны. У меня есть проограммка auto power-on, она запускает свой сервис (poweronservice). Я могу прикрутить этот сервис к своей программе. Но как проще узнать, какие этому сервису необходимо передавать сообщения и  с какими параметрами?


 
Сергей М. ©   (2007-07-06 16:47) [16]


> как проще узнать, какие этому сервису необходимо передавать
> сообщения и  с какими параметрами?


Это проще узнать при помощи дизассемблера и отладчика.


 
SHAMANSKI ©   (2007-07-06 16:49) [17]

А если пробовать перехватить сообщения, посылаемые той прогой сервису?
Такое можно организовать?


 
Сергей М. ©   (2007-07-06 16:52) [18]

Ну перехватил ты десяток байт с непонятным тебе содержимым - что дальше ?


 
SHAMANSKI ©   (2007-07-06 16:55) [19]

Плохи мои дела...
Видать из этого ничего не получится. Придется юзать wake-on-lan, с этим-то все понятно и исходников полно


 
Инс ©   (2007-07-07 12:20) [20]


> Придется юзать wake-on-lan, с этим-то все понятно и исходников
> полно


Только в БИОСе по умолчанию Wake-on-lan отключен.


 
REA   (2007-07-09 10:50) [21]

На Win98 работает через прерывание, под XP через драйвер. Видел хакерский трюк установки и запуска такого драйвера из программы с его удалением. Под Vista неизвестно через что...



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.228 c
3-1191933250
Still Swamp
2007-10-09 16:34
2008.02.24
Проблема с блоб полем.


8-1174828087
KOSik
2007-03-25 17:08
2008.02.24
Скругление угла


2-1201877184
Kolan
2008-02-01 17:46
2008.02.24
Есть ли в Delphi библиотека для работы с комплексными числами?


2-1201628983
iwik
2008-01-29 20:49
2008.02.24
Передать данные в dll


2-1201756905
Kolan
2008-01-31 08:21
2008.02.24
Как можно связать ячейки StringGrid с объектами.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский