1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
//! # vmspect
//!
//! `vmspect` es una biblioteca en Rust diseñada para la inspección estática,
//! análisis y extracción de información en imágenes de disco de máquinas virtuales (VMDK, RAW, QCOW2, VHD, etc.).
//!
//! Permite examinar la estructura de particiones (MBR/GPT), identificar el Sistema Operativo hospedado (Windows/Linux)
//! y extraer listas completas de software instalado de forma no invasiva (sin arrancar la VM ni montar el disco en el host).
//!
//! ## Características Principales
//!
//! - **Acceso Híbrido:** Parser nativo en Rust para formatos comunes (VMDK/RAW) con streaming dinámico ultra-liviano mediante `qemu-nbd` (TCP local) para formatos complejos (`QCOW2`, `VHDX`, `VDI`, etc.).
//! - **Soporte Multi-OS:** Extracción completa de software desde el Registro de Windows (`NTFS`) e índices DPKG en Linux (`EXT4`).
//! - **Extracción Agnóstica:** Recolección íntegra y sin filtros de software y metadatos de sistema.
//! - **Reporte de Progreso Lock-Free:** Métricas atómicas e integrables con interfaces gráficas (Tauri/Egui/CLI) mediante [`InspectionProgress`].
//! - **Graceful Shutdown y Preservación de Resultados:** Cancelación cooperativa limpia mediante [`CancellationToken`] que preserva todos los informes completados hasta la interrupción.
//! - **Arquitectura Abierta:** Traits ([`VmDriver`], [`MemoryMapper`], [`InspectorOS`]) y motor extensible ([`MotorInspeccion`], [`ProcesadorConcurrente`]).
//!
//! ## Ejemplo de Uso Rápido
//!
//! ```rust,no_run
//! use std::path::Path;
//! use vmspect::prelude::*;
//!
//! fn main() -> Result<()> {
//! let ruta = Path::new("disco_virtual.vmdk");
//! let opciones = Opciones::default();
//!
//! let informe = inspeccionar_con_progreso(ruta, &opciones, |progreso: ProgresoInspeccion| {
//! println!("[{:>3}%] {} - {}", progreso.porcentaje, progreso.etapa, progreso.detalle.unwrap_or_default());
//! })?;
//!
//! println!("Sistema detectado: {:?}", informe.sistema_operativo);
//! println!("Programas hallados: {}", informe.programas.len());
//!
//! Ok(())
//! }
//! ```
//!
//! ## Ejemplo de Procesamiento Concurrente con Cancelación y Resultados Parciales
//!
//! ```rust,no_run
//! use std::path::PathBuf;
//! use std::sync::atomic::Ordering;
//! use vmspect::prelude::*;
//!
//! fn main() -> Result<()> {
//! let rutas = vec![
//! PathBuf::from("vm1.vmdk"),
//! PathBuf::from("vm2.raw"),
//! PathBuf::from("vm3.qcow2"),
//! ];
//!
//! let cancel = CancellationToken::new();
//! let opciones = Opciones::default().with_cancellation_token(&cancel);
//! let motor = MotorInspeccion::new(opciones);
//!
//! // Se puede solicitar la cancelación en cualquier momento desde otro hilo:
//! // cancel.cancel();
//!
//! // Devuelve los informes completados exitosamente antes y durante el shutdown:
//! let informes_completados = motor.inspeccionar_lote(rutas, 4)?;
//! println!("Informes preservados: {}", informes_completados.len());
//!
//! Ok(())
//! }
//! ```
pub
// Re-exportaciones públicas de la API para aplanar el consumo desde la raíz del crate.
pub use crate;
pub use crateDiscoVirtual;
pub use ;
pub use ;
pub use ;
use Path;
/// Realiza una inspección estática completa de una imagen de disco utilizando un callback de texto plano.
///
/// Esta función está diseñada principalmente para aplicaciones CLI o scripts de consola donde
/// la salida de estado se imprime línea a línea mediante mensajes de texto (`&str`).
///
/// # Parámetros
///
/// - `ruta_imagen`: Referencia al [`Path`] del archivo de disco virtual (`.vmdk`, `.raw`, etc.).
/// - `opciones`: Configuración de la inspección ([`Opciones`]), que incluye control de análisis de apps/sistema y rutas.
/// - `progreso`: Callback mutable que recibe referencias a cadenas de texto (`&str`) con la descripción del paso actual.
///
/// # Errores
///
/// Devuelve un [`VmSpectError`] si:
/// - El archivo en `ruta_imagen` no existe ([`VmSpectError::ImageNotFound`]).
/// - La inspección fue cancelada por el usuario ([`VmSpectError::Cancelled`]).
/// - Ocurre un error de lectura de I/O en la imagen ([`VmSpectError::Io`]).
/// - La imagen requiere el servidor `qemu-nbd` y el ejecutable no está disponible ([`VmSpectError::QemuNotFound`]).
/// - No se puede reconocer la tabla de particiones o el sistema de archivos subyacente ([`VmSpectError::FileSystem`]).
///
/// # Ejemplo
///
/// ```rust,no_run
/// use std::path::Path;
/// use vmspect::{inspeccionar, Opciones};
///
/// let ruta = Path::new("C:\\VMs\\Windows10.vmdk");
/// let opciones = Opciones::default();
///
/// let resultado = inspeccionar(ruta, &opciones, &mut |mensaje| {
/// println!("LOG: {}", mensaje);
/// });
/// ```
/// Realiza una inspección estática reportando eventos de progreso estructurados (`0` al `100%`).
///
/// Esta función es la opción recomendada para integraciones con entornos de interfaz gráfica (como **Tauri**, **Electron** o **Egui**),
/// ya que emite una estructura [`ProgresoInspeccion`] serializable con porcentajes acotados y descripciones de la etapa actual.
///
/// # Parámetros
///
/// - `ruta_imagen`: Referencia al [`Path`] de la imagen de disco virtual.
/// - `opciones`: Configuración del motor ([`Opciones`]).
/// - `callback_progreso`: Un closure que implementa `FnMut(ProgresoInspeccion)`, invocado secuencialmente durante el análisis.
///
/// # Flujo de Porcentajes Emitidos
///
/// - **`5% - 15%`**: Identificación del formato de la imagen y apertura del backend de lectura.
/// - **`25% - 45%`**: Detección del esquema de particionado (MBR/GPT) y firmas de File System.
/// - **`55%`**: Análisis profundo del SO (extracción de Registro NTFS / paquetes DPKG).
/// - **`90%`**: Generación y consolidación del informe.
/// - **`100%`**: Finalización del reporte y cálculo de métricas de rendimiento.
/// Alias en inglés para [`inspeccionar`].
pub use inspeccionar as inspect;
/// Alias en inglés para [`inspeccionar_con_progreso`].
pub use inspeccionar_con_progreso as inspect_with_progress;