#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
pub enum BootCodeId {
WindowsVista,
Windows7Plus,
GrubLegacy,
Grub2,
Syslinux,
AllZeros,
AllOnes,
Unknown,
}
#[must_use]
pub fn identify(code: &[u8; 446]) -> BootCodeId {
if code.iter().all(|&b| b == 0x00) {
return BootCodeId::AllZeros;
}
if code.iter().all(|&b| b == 0xFF) {
return BootCodeId::AllOnes;
}
match forensicnomicon::boot_signatures::identify_loader(code) {
Some("Windows 7+") => BootCodeId::Windows7Plus,
Some("Windows Vista") => BootCodeId::WindowsVista,
Some("Syslinux") => BootCodeId::Syslinux,
Some("GRUB Legacy") => BootCodeId::GrubLegacy,
Some("GRUB 2") => BootCodeId::Grub2,
_ => BootCodeId::Unknown,
}
}