Получение «даты изменения» для реестра - PullRequest
0 голосов
/ 16 октября 2019

Привет, ребята, я могу знать, как извлечь метку времени для реестра? Причина. Я создаю программу для отслеживания изменений в реестре.

Пока мне удалось прочитать реестр, но в редакторе реестра есть только имя, тип и данные. Могу ли я узнать, как еще я могу получить дату изменения?

size = winreg.QueryInfoKey(key)[1]
for i in range(size):
    data = winreg.EnumValue(key, i)
    dict[data[0]] = data[1]

для вышеприведенного кода я получил вывод:

{'CVListTTL': 0, 'UnattendLoaded': 1, 'IECompatVersionHigh': 268435456, ...

Другой вопрос, могу ли я просто просканировать всю систему вместоопределенного подраздела, например

result = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\\Internet Explorer\\CodeIntegrity")

1 Ответ

0 голосов
/ 16 октября 2019

В соответствии с онлайновой документацией , значение третьего в кортеже winreg.QueryInfoKey() возвращает:

Целое число, указывающее, когда ключ был последнимизменено (если доступно) как 100 наносекунд с 1 января 1601 г. Временные модули в Python, вот пример, показывающий, как это можно сделать:

import datetime
import time
import winreg


# /6787785/konvertirovat-vremya-faila-windows-v-sekundu-v-unix-linux
def windows_ticks_to_unix_seconds(windows_ticks):
    return windows_ticks/10000000 - 11644473600

key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
                     r"SOFTWARE\Microsoft\Internet Explorer\Image Caching")

reg_win_ts = winreg.QueryInfoKey(key)[2]  # 100’s of nanoseconds since 1601/01/01.
print(f'reg_win_ts: {reg_win_ts}')

reg_key_ts = windows_ticks_to_unix_seconds(reg_win_ts)
print(f'reg_key_ts: {reg_key_ts}')

dt = datetime.datetime.fromtimestamp(reg_key_ts)  # Convert to datatime.
print(f'dt: {dt}')
print(f'dt.strftime("%Y-%b-%d"): {dt.strftime("%Y-%b-%d")}')
print(f'dt.isoformat(): {dt.isoformat()}')

Я не знаю ответа на часть 2 вашего вопроса, касающегося сканирования всей системы вместо конкретного подключа.

...