Назад | Перейти на главную страницу

Определение даты / времени входа в систему для профилей пользователей в Windows

Я ищу надежный метод для извлечения даты / времени последнего входа в систему для каждого профиля пользователя на данном компьютере.

Любые идеи? Прочтите ниже, чтобы увидеть мои текущие методы.

В Windows XP я уже смотрю в реестр и извлекаю значения ProfileLoadTimeHigh и ProfileLoadTimeLow из ключа HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \.

Эти имена значений существуют в Vista, Windows 7 и 2008, но их значение всегда равно 0.

В этих системах у меня есть неуклюжий способ извлечения данных, но я знаю, что он не на 100% точен. В этих операционных системах я перехожу к каждому зарегистрированному каталогу профиля и беру значение lastwritetime из файла ntuser.pol. Это довольно точно, но в XP (где я могу использовать метод, упомянутый выше) я вижу разницу в 3-4 минуты между временем последней записи файла ntuser.pol и временем входа в систему, указанным в реестре.

Класс Win32_NetworkLoginProfile в WMI имеет такое же ограничение. Системы XP сохраняют последний вход в систему в свойстве LastLogon, но для более поздних ОС это свойство пусто.

Вот и все. Где данные, поставляемые для XP, находятся в Vista / 7/2008?

Свойство LastLogon Win32_NetworkLoginProfile должен иметь это. На машине Win7, на которую я сейчас смотрю, я открыл wbemtest и запустил:

SELECT Name,LastLogon FROM Win32_NetworkLoginProfile

Единственными записями, которые возвращались со значениями <null> для LastLogon, были встроенные учетные записи, например NT AUTHORITY \ SYSTEM. Все остальные учетные записи в списке (включая доменные и локальные учетные записи) имели допустимые значения для LastLogon.

Я не уверен, что могло бы заставить ваши системы вести себя иначе.