У меня есть скрипт для обнаружения некоторых файлов, созданных на жестком диске с использованием 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
для этого решенияили использовать мою идею?
Спасибо всем