def is_valid(dev_name): util.notify('Validating device name...') drv_handle = util.create_drv_handle(dev_name) if drv_handle != -1: ctypes.windll.kernel32.CloseHandle(drv_handle) return True else: return False
def get_drv_handle(dev_name): global drv_handle_cache if dev_name in drv_handle_cache.keys(): return drv_handle_cache[dev_name] else: drv_handle = util.create_drv_handle(dev_name) if drv_handle != -1: drv_handle_cache[dev_name] = drv_handle return drv_handle
def monitor_dos(pid): global drv_handle_cache while True: dev_name = random.choice(drv_handle_cache.keys()) drv_handle = util.create_drv_handle(dev_name) if drv_handle == win32file.INVALID_HANDLE_VALUE: util.notify('Got DoS') os.kill(pid, signal.SIGTERM) else: ctypes.windll.kernel32.CloseHandle(drv_handle)
def reproduce(crash_name): crash_info = load_crash_info(crash_name) drv_handle = util.create_drv_handle(crash_info['dev_name']) ret_val = util.do_fuzz(drv_handle, crash_info) success = ret_val == 0 if success: util.handle_err(None) else: print('Error: Failed to reproduce crash.') ctypes.windll.kernel32.CloseHandle(drv_handle) return success