· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› time

Посл.отвђт Сообщенiе


Дата: Янв 13, 2003 17:34:58

люди подскажите плз
как в win32
есть ли такой способ чтобы узнать тек. время не используя стандартных функций
например :
по такому то адресу х:х секунды
а по такому то адресу у:у минуты


Дата: Янв 14, 2003 04:12:04

Например, прочитать из CMOS'а.


Дата: Янв 14, 2003 05:31:26

GetTickCount() на Windows 2000 Pro:
mov edx, 7FFE0000h
mov eax, [edx]
mul [edx+04h]
shrd eax, edx, 18
; eax = number of milliseconds that have elapsed since Windows was started


Дата: Янв 14, 2003 05:40:08

Порыскался по kernel32!GetSystemTime (Windows 2000 Pro), нашёл что всё время в памяте 7FFE0000-7FFE0020. Меняются эти ячейки очень часто:
7FFE0000 - ticks (low dword?)
7FFE0008 - ???
7FFE000C - ???
7FFE0014 - systemtime low dword???

Из кода видно что 7FFE0014 и 7FFE0018 как раз и являются qword'ом с временем. Советую самому пройтись через эти API (GetTickCount, GetSystemTime, GetLocalTime) в отладчике.


Дата: Янв 14, 2003 05:41:40

Эта память в ds:7FFE00xx конечно. Регион kernel32'а.


Дата: Янв 14, 2003 09:29:57

P2M
[/i]
[i]

а подробней? плз.


Дата: Янв 14, 2003 09:31:30

[i][/i]
P2M
а подробней плз..


Дата: Янв 14, 2003 10:25:06

Если вопрос о времени, как на часах, то из CMOS'а:
[code]
mov al,0h ; 0h - current second
out 70h,al
jmp $+2
in al,71h ; AL := second in BCD

mov al,2h ; 2h - current minute
out 70h,al
jmp $+2
in al,71h ; AL := minute in BCD

mov al,4h ; 4h - current hour
out 70h,al
jmp $+2
in al,71h ; AL := hour in BCD
[/code]
BCD означает 31h = 0011'0001b = 31 минута
одним словом RTFM


Дата: Янв 14, 2003 11:33:15

В системах NT по адресу 7FFE0000h находится разделяемая между ядром и юзером область - структура KUSER_SHARED_DATA.
В ядро проецируется по 0FFDF0000h. Документирована в ддк:

#define KI_USER_SHARED_DATA 0xffdf0000
#define SharedUserData ((KUSER_SHARED_DATA * const) KI_USER_SHARED_DATA)



typedef struct _KUSER_SHARED_DATA {

// Current low 32-bit of tick count and tick count multiplier.
// N.B. The tick count is updated each time the clock ticks.

volatile ULONG TickCountLow;
ULONG TickCountMultiplier;

// Current 64-bit interrupt time in 100ns units.
volatile KSYSTEM_TIME InterruptTime;

// Current 64-bit system time in 100ns units.
volatile KSYSTEM_TIME SystemTime;

// . . . поскипано мной . . .

} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;



// Define system time structure.
typedef struct _KSYSTEM_TIME {
ULONG LowPart;
LONG High1Time;
LONG High2Time;
} KSYSTEM_TIME, *PKSYSTEM_TIME;


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.072