uptime in Windows XP
время system idle process
по моему, это через жопу, и не уверен что верно, может как нибудь еще можно?
5 баллов.
А если у меня запущен например dnetc, то у меня uptime по жизни
равен 0, так что ли?
Спроси у leo, он узнавал uptime на NT 4.0
А если у меня запущен например dnetc, то у меня uptime по жизни
равен 0, так что ли?
Спроси у leo, он узнавал uptime на NT 4.0
там ещё где-то должно сохраняться время создания процесса - файрвол у меня по крайней мере берёт её откуда-то
плагином к мирке ебта 
Йоу, МСДН на запрос "uptime" выдает это первой ссылкой 
А ты думаешь я знаю наизусть этот URL? Просто видел у хардкорных маздайщиков эту прогу.
Little magic
#include <stdio.h>
#include <windows.h>
void main
{
char buffer[1024];
EVENTLOGRECORD* r = (EVENTLOGRECORD *) &buffer;
DWORD dwRead, dwNeeded, dwThisRecord;
HANDLE hLog = OpenEventLog(NULL, "System");
int days, hours, minutes, seconds, Uptime;
if(hLog == NULL) { printf("Cannot open log: %d\n", GetLastError; }
while (ReadEventLog(hLog,EVENTLOG_FORWARDS_READ|EVENTLOG_SEQUENTIAL_READ, 0, buffer, 1024, &dwRead, &dwNeeded
{
while (dwRead > 0)
{
if(r->EventID == 0x80001779) Uptime = time(NULL) - r->TimeGenerated;
dwRead -= r->Length;
r = (EVENTLOGRECORD *) LPBYTE) r + r->Length);
}
r = (EVENTLOGRECORD *) &buffer;
}
days = Uptime/(24*60*60);
Uptime %= 24*60*60;
hours = Uptime/(60*60);
Uptime %= 60*60;
minutes = Uptime/60;
Uptime %= 60;
seconds = Uptime;
printf("System uptime is %d days %2.2d:%2.2d:%2.2d\n", days, hours, minutes, seconds);
}
А если логи со времени последней загрузки чистились?
Тогда только один вариант (AFAIK) - включить сервис SNMP и делать так:
Компилировать с snmpapi.lib
#include <windows.h>
#include <snmp.h>
#include <stdio.h>
void main
{
long Uptime = SnmpSvcGetUptime;
int days, hours, minutes, seconds, centiseconds;
centiseconds = Uptime % 100;
Uptime /= 100;
days = Uptime/(24*60*60);
Uptime %= 24*60*60;
hours = Uptime/(60*60);
Uptime %= 60*60;
minutes = Uptime/60;
Uptime %= 60;
seconds = Uptime;
printf("System Uptime is %d days %2.2d:%2.2d:%2.2d.%2.2d\n",
days, hours, minutes, seconds, centiseconds);
}
Компилировать с snmpapi.lib
Маздай! Другого слова нет!
Наш ответ атцам
//--- uptime.c -----------------------------------------------------------
//------------------------------------------------------------------------
#define UNICODE
#define _UNICODE
#include<windows.h>
#include<winnt.h>
//------------------------------------------------------------------------
extern "C"
{
ULONG __stdcall NtQuerySystemInformation(IN ULONG, IN OUT PVOID, IN ULONG, OUT PULONG);
}
//------------------------------------------------------------------------
#define SystemTimeOfDayInformation 0x03
typedef struct SYSTEM_TIME_OF_DAY_INFORMATION
{
LARGE_INTEGER BootTime;
LARGE_INTEGER CurrentTime;
LARGE_INTEGER TimeZone;
ULONG CurrentTimeZoneId;
} *PSYSTEM_TIME_OF_DAY_INFORMATION;
//------------------------------------------------------------------------
int wmain(int, wchar_t**)
{
SYSTEM_TIME_OF_DAY_INFORMATION info;
NtQuerySystemInformation(SystemTimeOfDayInformation,
&info,
sizeof(SYSTEM_TIME_OF_DAY_INFORMATION
NULL);
// TO DO: compute difference between
// info.CurrentTime.QuadPart and info.BootTime.QuadPart,
// convert it to human-readable form and present it to the user
return 0;
}
Народ, вы чего? Проги тут какие-то страшные пишите
Поставьте ConfigNT (\\LORIEN\install\other\confignt.cpl) - он все показывает.
Поставьте ConfigNT (\\LORIEN\install\other\confignt.cpl) - он все показывает.
Компилировать с ntdll.lib
Мощный ответ.
Не забудь три тома документации только
Не забудь три тома документации только
Windows Commander
Ну, в DDK мы лезть вроде не договаривались, а без него работать не будет
Не оказалось его у меня под рукой... 
Маза никаких DDK
Чистый юзер-моде
Чистый юзер-моде
Эй эй эй, NtQuerySystemInformation относится уже к вызовам из DDK (хотя и работает в user mode - так их половина в user mode работает). ntdll.lib относится к DDKшным библиотекам. Сама функция задокументированна только в DDK. Кроме того, я не уверен что твой код будет работать не из под админского аккаунта (надо бы проверить - лень). 
Ты не прав
ntdll - это не DDKшная библиотека, она загружается всеми виндовыми процессами
большая часть ее функций - это тонкие оболочки к соответствующим сисколлам
другой вопрос, что .lib к ней поставляется в DDK, но можно и без него обойтись
Не из под админского эккаунта работать скорее всего будет, я бы проверил, но у меня, стыдно признаться, их нету
ntdll - это не DDKшная библиотека, она загружается всеми виндовыми процессами
большая часть ее функций - это тонкие оболочки к соответствующим сисколлам
другой вопрос, что .lib к ней поставляется в DDK, но можно и без него обойтись
Не из под админского эккаунта работать скорее всего будет, я бы проверил, но у меня, стыдно признаться, их нету
К ней поставляется только в DDK не только lib. К ней и документация и хэдеры поставляется только в DDK, поэтому относится она к DDK. А так - вообще говоря я могу к любой dll'ке написать свой import library, и свои заголовки (посмотреть на тот же MinGW32 но это же еще ничего не значит...
Так что все же DDK это...
Линковать 
это был ответ на
>Компилировать с snmpapi.lib
не надо придираться к словам
>Компилировать с snmpapi.lib
не надо придираться к словам
Обработать редактором связей, блин.
Заголовков и документации к функциям native api в ddk нет
Тама есть заголовки и документация к их кернел-моде аналогам, притом далеко не ко всем
Что, впрочем, не спасает от любителей отладчиков
Тама есть заголовки и документация к их кернел-моде аналогам, притом далеко не ко всем
Что, впрочем, не спасает от любителей отладчиков
Да, и еще 
Настоящие виндоуз-программисты никогда не используют грязные хаки типа
Надо использовать API функции для работы со временем
Тогда при изменении кол-ва секунд в минуте или часов в сутках программу не надо будет переделывать

Настоящие виндоуз-программисты никогда не используют грязные хаки типа
days = Uptime/(24*60*60);
Uptime %= 24*60*60;
hours = Uptime/(60*60);
Uptime %= 60*60;
minutes = Uptime/60;
Uptime %= 60;
seconds = Uptime;
Надо использовать API функции для работы со временем
Тогда при изменении кол-ва секунд в минуте или часов в сутках программу не надо будет переделывать
Не надо. Внимательно читаем help по SnmpGetSvcUptime: The function returns a DWORD value that is the number of centiseconds the SNMP service has been running. Сотые доли секудны есть, были и будут есть :-)
Маза я про перевод в нормальные единицы
Это типа шутка юмора была
Это типа шутка юмора была
На sysinternals.com есть прога uptime.exe, которая и показывает тебе то, что надо!
А что-то вроде GetTickCount не оно разве?
Это с 1970 года.
ржалъ...
да бля - в ХР есть systeminfo.exe консольная прога аптайм показывает в частности
Ну вот, пришел и все опошлил 
Круто ты атцов посрамил.
это кто же тут отец то ?
типа.
ГГЫ
Windows очень интересная система. Ответ на такой простой
вопрос как "как узнать uptime" выливается в интереснейшую дискуссию и спор, когда спорящие узнают много нового о
любимой операционной системе, а также друг о друге.
Если бы машина просто хранила ticks на момент старта, и была
бы простая команда, носящая название uptime (а ни что-то иное
которая бы умела выводить разницу между текущими ticks и сохраненными в момент старта в читаемом формате, то не было бы этой интереснейшей дискуссии, где люди закопались в DDK (Driver Development Kit, если я не ошибаюсь). По логике
не понятно зачем здесь DDK, драйвер аптайма писать что ли будем?
вопрос как "как узнать uptime" выливается в интереснейшую дискуссию и спор, когда спорящие узнают много нового о
любимой операционной системе, а также друг о друге.
Если бы машина просто хранила ticks на момент старта, и была
бы простая команда, носящая название uptime (а ни что-то иное
которая бы умела выводить разницу между текущими ticks и сохраненными в момент старта в читаемом формате, то не было бы этой интереснейшей дискуссии, где люди закопались в DDK (Driver Development Kit, если я не ошибаюсь). По логике
не понятно зачем здесь DDK, драйвер аптайма писать что ли будем?
По логике [UNIX] не понятно зачем здесь DDK.
Если UNIX API перегруппировать так как это сделано в windows (то есть на SDK и DDK то просто напросто <sys/sysctl.h> которым вы читаете uptime на unix окажется в DDK 
А у нас аптайм из /proc/uptime читают 
Это в какую группу попадёт?
Это в какую группу попадёт?
А ни хера. Смотри Solaris и другие коммерческие UNIX.
"Ще? Хто-то назвал пингвинукс unix'ом?
"
шучу.
На самомо деле почти весь /proc туда же попал бы
morannon ~ $ ls -l /proc/uptime
ls: /proc/uptime: No such file or directory
morannon ~ $ uname -a
FreeBSD morannon.v.ru 4.7-STABLE FreeBSD 4.7-STABLE Mon Dec 16 23:53:32 MSK 2002 morannon.v.ru:/usr/obj/usr/src/sys/MORANNON i386
шучу.
На самомо деле почти весь /proc туда же попал бы
Права на (tm) как известно нет ни там ни там
Как это - /proc в DDK? Типа не поставил библиотеки - нет procfs? Так вот же оно, без всякой библиотеки
Не, нам такого счастья не надо 
Как это - /proc в DDK? Типа не поставил библиотеки - нет procfs? Так вот же оно, без всякой библиотеки
Нет, не так. procfs есть всегда. Но не поставил библиотеки - не можешь сам писать программы которые будут с ним работать
Или можешь, но через жопу.
> можешь сам писать программы которые будут с ним работать
/bin/cat?
/bin/cat?
В смысле read и write без DDK не лапать?
Маза волне реально сделать аналог procfs под винду
Просто это никому не надо
2
интересно ведь не то, какая прикладная программа показывает аптайм (хотя ахтох бы этим удовольствовался)
а как такая программа работает
простейший споспоб - это юзать GetTickCount про который вспомнили далеко не сразу
но другие способы не менее интересны
Просто это никому не надо
2
интересно ведь не то, какая прикладная программа показывает аптайм (хотя ахтох бы этим удовольствовался)
а как такая программа работает
простейший споспоб - это юзать GetTickCount про который вспомнили далеко не сразу
но другие способы не менее интересны
Ты не понял. /bin/cat тут не при чем. Это просто концепция такая.
Попробую попроще объяснить.
Ну представь себе что у тебя все файлы в /proc называются скажем /proc/zhopa_s_ruchkoi_12_2323_a22f_12332 а не по-нормальному, а на самом деле в них полезная инфа. А вот в каком именно какая - есть в заголовках от DDK. Но можно конечно и самому поковыряться и выяснить в каком какая...
Попробую попроще объяснить.
Ну представь себе что у тебя все файлы в /proc называются скажем /proc/zhopa_s_ruchkoi_12_2323_a22f_12332 а не по-нормальному, а на самом деле в них полезная инфа. А вот в каком именно какая - есть в заголовках от DDK. Но можно конечно и самому поковыряться и выяснить в каком какая...
> Просто это никому не надо
Правильно, Windows нужна для работы, а не мерянья аптаймами
Правильно, Windows нужна для работы, а не мерянья аптаймами
Вообще говоря, GetTickCount тебе не выдаст нормальной информации. Если внимательно прочитать MSDN, то там даже об этом написано:

А правильное значение надо читать либо как в примерах выше, либо через HKEY_PERFORMANCE_DATA.
The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if the system is run continuously for 49.7 days.то есть на нормально работающем сервере GetTickCount вернет тебе лажу...
А правильное значение надо читать либо как в примерах выше, либо через HKEY_PERFORMANCE_DATA.
ln -s /proc/zhopa_s_ruchkoi_12_2323_a22f_12332 /proc/uptime?
а вот это как раз и есть то о чем я говорил - "можно и самому, но придется извращаться." Под Windows без DDK так тоже можно. 
Маза ты гонишь. DDK существуют только в системах с закрытыми исходниками.
Просто в системах с открытыми исходниками их так не называют :-)
Если животное ходит как собака, лает как собака, машет хвостом как собака, то это - собака?
Маза это пингвин :-
А у меня нигде на фре нет procfs. А uptime работает. Так что /proc/uptime - это лажа.
>а вот это как раз и есть то о чем я говорил - "можно и самому, но придется извращаться." Под Windows без DDK так тоже можно.
А почему сразу по человечески не сделать? При установке тот самый "ln -s /proc/huyo_moyo_ /proc/uptime" запустить - и всё! И что самое уебанское в мастдае - это то, что такой он весь - всё зделано через то самое место.
P.S. И даже не пытайся меня переубедить.
А почему сразу по человечески не сделать? При установке тот самый "ln -s /proc/huyo_moyo_ /proc/uptime" запустить - и всё! И что самое уебанское в мастдае - это то, что такой он весь - всё зделано через то самое место.
P.S. И даже не пытайся меня переубедить.
Хуево она что то показывает:
C:\Downloads\psuptime>psuptime.exe
PsUptime v1.1 - system uptime utility for Windows NT/2K
by Mark Russinovich
Sysinternals - www.sysinternals.com
Unable to query uptime for this system
C:\Downloads\psuptime>
C:\Downloads\psuptime>psuptime.exe
PsUptime v1.1 - system uptime utility for Windows NT/2K
by Mark Russinovich
Sysinternals - www.sysinternals.com
Unable to query uptime for this system
C:\Downloads\psuptime>
Дай мне ее посмотреть
Microsoft рулит 
где бы сорцы поглядеть
C:\Downloads\psuptime\by_Microsoft>uptime.exe
\\AHTOH has been up for: 2 day(s 22 hour(s 12 minute(s 25 second(s)
где бы сорцы поглядеть
C:\Downloads\psuptime\by_Microsoft>uptime.exe
\\AHTOH has been up for: 2 day(s 22 hour(s 12 minute(s 25 second(s)
Винда простояла почти трое суток? Дааа, это повод для гордости.
Распространённое заблуждение 
Да ладно... у меня на работе более 40 дней. И ничё, работала нормально. И дольше б работала, если б электричество не вырубили.
Это ты о чем? Я знаю, что если ее не трогать, то она простоит и дольше. Если, конечно, не 98-я.
у меня XP живет месяцами
вопрос прямых рук всегда стоит особенно остро 
Да. Науке известны еще и не такие случаи.
Вообще, винда на каждом компе ведет себя по-разному.
Иногда стоит как скала, а иногда - хоть в лепешку разбейся: глючит, падает, сегфолты какие-то...
Вообще, винда на каждом компе ведет себя по-разному.
Иногда стоит как скала, а иногда - хоть в лепешку разбейся: глючит, падает, сегфолты какие-то...
она бы и больше простояла, просто у нас на этаже проблемы с электричеством, да и проги иногда хотят перегруз после установки
Упрощенные сырцы я сюда уже постил. Просто читается System Log и все. :-)
откуда ты знаешь, что используется именно этот метод?
SnmpSvcGetUptime тоже возвращает время в DWORD-е, поэтому тоже может переполнится
DWORD SnmpSvcGetUptime;
Because the dwUptimeReference parameter stores the elapsed time as a DWORD value in milliseconds, the time can wrap to zero and reflect an inaccurate time interval.
DWORD SnmpSvcGetUptime;
Because the dwUptimeReference parameter stores the elapsed time as a DWORD value in milliseconds, the time can wrap to zero and reflect an inaccurate time interval.
Элементарно 
strings uptime.exe
И depends uptime.exe
Там может использоваться два метода - heartbeat и system log. Но heartbeat включен не на всех системах, и вообще включать его не лучшая идея.
strings uptime.exe
И depends uptime.exe
Там может использоваться два метода - heartbeat и system log. Но heartbeat включен не на всех системах, и вообще включать его не лучшая идея.
Согласен. Сразу не заметил. Похоже единственный "правильный" метод (который не использует вызовы из ntdll напрямую) - через system log.
я удалил System Event Log, но uptime.exe все равно работает
а использует она system log, когда статистику считает типа System Availability и прочее (uptime.exe /s)
а использует она system log, когда статистику считает типа System Availability и прочее (uptime.exe /s)
>Согласен. Сразу не заметил. Похоже единственный "правильный" метод (который не использует вызовы из ntdll напрямую) - через system log.
ИМХО это не так
По крайней мере, вот ента Руссиновическая прога юзает PDH для performance counters, которые вовсе не обязательно работают через логи (как раз в данном случае, похоже, это так)
22
Дай поглядеть
ИМХО это не так
По крайней мере, вот ента Руссиновическая прога юзает PDH для performance counters, которые вовсе не обязательно работают через логи (как раз в данном случае, похоже, это так)
22
Дай поглядеть
там же зашарено (\\\psuptime\by_Microsoft)
У меня она показывает чушь - отключены логи
tdump подтверждает слова
Итого - в ацтой
tdump подтверждает слова
Итого - в ацтой
и что делать?
В смысле?
Оставить комментарий
otvertka07
как узнать?