use crate::error::Result;
use crate::models::{Opciones, Particion, Programa, VMInfo};
use std::io::{Read, Seek};
#[derive(Debug, Clone, Default)]
pub struct ResultadoAnalisis {
pub vm_info: VMInfo,
pub programas: Vec<Programa>,
pub advertencias: Vec<String>,
}
pub trait VmDriver {
fn tamano_virtual(&self) -> u64;
fn leer_rango(&self, offset: u64, buf: &mut [u8]) -> Result<()>;
fn modo_acceso(&self) -> &str;
fn es_nativo(&self) -> bool;
fn tamano_chunk_recomendado(&self) -> u64 {
1024 * 1024
}
}
pub trait MemoryMapper: Read + Seek {
fn leer_en_offset(&mut self, offset: u64, buf: &mut [u8]) -> Result<usize>;
fn longitud(&self) -> u64;
}
pub trait InspectorOS {
fn analizar(
&self,
driver: &dyn VmDriver,
particiones: &[Particion],
tamano_chunk: u64,
opciones: &Opciones,
) -> Result<ResultadoAnalisis>;
}