Час останнього входу до системи

У складі SysInternals Suite є така утиліта, як PsLoggedOn, що відображає, як нескладно здогадатися з назви, час входячи в систему користувача, - дуже корисна інформація для системного адміністратора. Але суть швидше тут у тому, як вищезазначена утиліта отримує ці відомості, а способів тим часом досить багато: від зчитування часу модифікації ключа реєструHKEY_CURRENT_USER\Volatile Environmentдо задіяння таких API-функцій як LsaEnumerateLogonSessions, LsaFree — але все про різні мови програмування. Як щодо штатних коштів, але без WMI? Зупинив свій вибір я на VBScript, і якщо хтось поморщить ніс при згадці останнього, мовляв, це щось із роду некрофілії, дозвольте нагадати, що ще досить багато користувачів Windows, які використовують ХР, причому далеко не у всіх встановлений PowerShell. З огляду на що вибір вважаю виправданим. Однією з умов, яка була поставлена, - не використовувати WMI. Нескладно здогадатися, що в такому разі колупатимемо реєстр. Не те, щоб у забій по-стахановськи, потрібні будуть лише такі гілки реєстру, якHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformationіHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Profile>. У першій нас цікавить параметрActiveTimeBias(зміщення щодо часового поясу), у другому -ProfileLoadTimeLowіProfileLoadTimeHighпоточного користувача, що є полями структури FILETIME. Все просто. Єдине, що може спричинити скруту — як знайти поточного користувача, якщо WSH надає досить мізерні можливості роботи з реєстром? Будемо використовувати утилітуreg.exeзі стандартного постачання Windows.