Функции для работы с системным представлением времени
Внутреннее время в Windows 2000/XP/Server 2003 хранится как число 100-наносекундных отсчетов с 1 января 1601 года. Это очень большое число, и для его хранения используется 64-разрядный тип данных в структуре, обозначенной как тип данных LARGE_INTEGER. В таблице 7.44 перечислены функции, предназначенные для работы с такими данными.
Таблица 7.44. Функции для работы с системным представлением времени
Функции | Описание | |
KeQuerySystemTime | Возвращает 64-разрядное значение абсолютного системного времени | |
KeQueryTickCount | Возвращает число прерываний системного таймера (часов) с момента последней загрузки системы | |
KeQueryTimelncrement | Возвращает число 100-нс интервалов, добавляемых к системному времени при каждом прерывании, поступающем от системного таймера (часов) | |
RtlTimeToTimeFields | Разбивает 64-разрядное системное время на поля даты и времени | |
RtlTimeFieldsToTime | Преобразует дату и время в 64-разрядное значение абсолютного системного времени | |
RtlConvertLongToLargeInteger | Создает знаковое LARGE_INTEGER | |
RtlConvertULongToLargelnteger | Создает положительное LARGE_INTEGER | |
RtlLargelntegerXxx | Различные арифметические и логические операции над типом данных LARGE_INTEGER (вместо этих функций в пакете DDK рекомендовано использовать встроенную поддержку компилятора для 64-разрядных операций) |
Все приведенные функции могут вызваться на любом уровне IRQL. Прототип одной из них, вызова KeQuerySystemTime, приводится ниже.
Таблица 7.45. Прототип вызова KeQuerySystemTime
VOID KeQuerySystemTime | IRQL == любой |
Параметры | Возвращает текущее время |
OUT PLARGE_INTEGER CurrentTime |
Время в 100 нc интервалах с 1 января 1601 года |
Возвращаемое значение | void |