Есть ли способ просмотра файлов на всех жестких дисках? - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть скрипт для обнаружения некоторых файлов, созданных на жестком диске с использованием win32file API с python

from win32file import CreateFile, ReadDirectoryChangesW
import win32con

def Watcher():
        ExtensionScan = ['exe', 'dll', 'vbs', 'com', 'jar']
        FILE_LIST_DIRECTORY = 0x0001
        path_to_watch = "c:\\"
        hDir = CreateFile(
            path_to_watch,
            FILE_LIST_DIRECTORY,
            win32con.FILE_SHARE_READ | 
            win32con.FILE_SHARE_WRITE | 
            win32con.FILE_SHARE_DELETE,
            None,
            win32con.OPEN_EXISTING,
            win32con.FILE_FLAG_BACKUP_SEMANTICS,
            None
        )
        while True:
            Results = ReadDirectoryChangesW (
                hDir,
                1024,
                True,
                win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
                win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
                win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
                win32con.FILE_NOTIFY_CHANGE_SIZE |
                win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
                win32con.FILE_NOTIFY_CHANGE_SECURITY,
                None,
                None
            )
            for Action, File in Results:
                FullPath = "{}\\{}".format(path_to_watch, File).lower()
                Extension = FullPath.split('.')[-1]
                if Action == 1 and Extension in ExtensionScan:
                    Name = FullPath.split('\\')[-1]
                    print({FullPath: {"Name": Name, "Extension": Extension}})

Этот код работает, но я хочу, чтобы наблюдатель был на всех жестких дискахне конкретный путь

path_to_watch = "c: \"

У меня есть идея, вызвать Watcher(drive="D:\\") с конкретным диском, поточив длявсе диски, как показано ниже, код:

Drives = ["C:\\", "D:\\", "E:\\"]

for i in Drives:
  Thread(target=Watcher, args=(i,).start()

, но это решение не подходит для производительности процессора

Наконец, есть ли способ встроить win32file для этого решенияили использовать мою идею?

Спасибо всем

1 Ответ

0 голосов
/ 28 сентября 2019
def Watcher(_disk):
        ExtensionScan = ['exe', 'dll', 'vbs', 'com', 'jar']
        FILE_LIST_DIRECTORY = 0x0001
        path_to_watch = _disk
...

for i in Drives:
     Thread(target=Watcher(i)
...