Эффективно отслеживать процессы Windows (загрузка и выгрузка) - PullRequest
0 голосов
/ 23 мая 2018

Я изо всех сил пытаюсь найти способ динамически отслеживать процессы Windows, когда они порождают (загружают) и умирают (выгружают), используя как можно меньше ЦП.

Мое текущее решение использует K32EnumProcesses чтобы получить все запущенные pids (идентификаторы процессов) и операции базового набора для определения мертвых и порожденных pids.

class Procs:

    def __init__(self):
        pass

    def get_all_processes(self):
        pProcessIds = (c_ulong * 4096)()
        pBytesReturned = c_ulong()
        hModule = c_ulong()
        count = c_ulong()
        kernel32.K32EnumProcesses(byref(pProcessIds), sizeof(pProcessIds), byref(pBytesReturned))
        nReturned = pBytesReturned.value/sizeof(c_ulong())
        for pid in [i for i in pProcessIds][:int(nReturned)]:
            yield int(pid)

    def find_dead(self, prev_pids, curr_pids):
        return prev_pids - curr_pids

    def find_live(self, prev_pids, curr_pids):
        return curr_pids - prev_pids

if __name__ == '__main__':
    proc_obj = Procs()
    prev_procs = set()
    while True:
        curr_procs = set(proc_obj.get_all_processes())
        dead = proc_obj.find_dead(prev_procs, curr_procs)
        live = proc_obj.find_live(prev_procs, curr_procs)
        [print(f'died: {d}') for d in dead]
        [print(f'live: {l}') for l in live]
        dead = None
        live = None
        prev_procs = curr_procs

Проблема этого решения заключается в том, что оно использует около 50% ЦП.

Использование ЦП и памяти (изображение)

Я попытался передать в список задач cmd и проанализировать вывод, но это не лучше.

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

Чтобы дать немного контекста, это решение будет частьюпрограмма, которая будет сканировать процессы при загрузке на наличие вредоносных программ и работать на старых системах, в которых недостаточно вычислительной мощности или доступной памяти.

...