· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› ZwQuerySystemTime

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


Дата: Май 27, 2003 07:57:53

В книге Нэббета сказано что эта функция возвращает текущее время в стандартном формате

Что это за формат?
С функцией GetSystemTime все просто и понятно
А тут я не понимаю что с этими интервалами по 100 нс делать?

ZwQuerySystemTime(OUT PLARGE_INTEGER CurrentTime);

CurrentTime
Points to a variable that receives the current time of day in the standard time format
(that is, the number of 100-nanosecond intervals since January 1, 1601)


Дата: Май 27, 2003 09:24:43

Afaik в Win API результат работы ZwQuerySystemTime называется FILETIME.
Тогда для получения SYSTEMTIME можно использовать FileTimeToSystemTime.
А затем, если необходимо, SystemTimeToTzSpecificLocalTime


Дата: Май 27, 2003 13:30:49

NT::LARGE_INTEGER t;
FILETIME ftUTC, ftLocal;
SYSTEMTIME st;
TCHAR szBuf[256];

NT::ZwQuerySystemTime(&t);

// Put the time in a FILETIME structure.
ftUTC.dwLowDateTime = t.LowPart;
ftUTC.dwHighDateTime = t.HighPart;

// Convert the UTC time to the user's local time.
FileTimeToLocalFileTime(&ftUTC, &ftLocal);

// Convert the FILETIME to the SYSTEMTIME structure
// required by GetDateFormat and GetTimeFormat.
FileTimeToSystemTime(&ftLocal, &st);

// Construct a string with the date/time that the timer went off.
GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, szBuf,
sizeof(szBuf) / sizeof(TCHAR));
wcscat(szBuf, L" ");
GetTimeFormat(LOCALE_USER_DEFAULT, 0, &st, NULL, wcschr(szBuf, 0),
sizeof(szBuf) / sizeof(TCHAR) - wcslen(szBuf));

// Show the time to the user.
MessageBox(NULL, szBuf, L"Current Time", MB_OK);


Дата: Май 27, 2003 15:55:29

Спасибо за ответы
Я уже нашел как это сделать при помощи
функций

KeQuerySystemTime(&SysTime); //запросили системное время в интервалах по 100 нс
RtlTimeToTimeFields(&SysTime,&MyTime); //преобразовали в нормальный вид

Именно так пришлось делать,потому что надо было в драйвере определить время


Дата: Май 27, 2003 15:55:50

Спасибо за ответы
Я уже нашел как это сделать при помощи
функций

KeQuerySystemTime(&SysTime); //запросили системное время в интервалах по 100 нс
RtlTimeToTimeFields(&SysTime,&MyTime); //преобразовали в нормальный вид

Именно так пришлось делать,потому что надо было в драйвере определить время


Дата: Июн 3, 2003 01:57:57

To Four-F:
Спасибо за статьи о написании дров для 2000!
Вопрос:
Как проще всего сделать задержку в драйвере?


Дата: Июн 3, 2003 13:00:36 · Поправил: Four-F

KeDelayExecutionThread


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