nt-apiset 0.1.0

A parser for API Set Map files of Windows 10 and later
Documentation
use std::fs;

use anyhow::{bail, Result};
use nt_apiset::ApiSetMap;
use pelite::pe64::PeFile;

fn main() -> Result<()> {
    let args = std::env::args().collect::<Vec<_>>();

    if args.len() != 2 {
        println!("Usage: dump_apiset_map <FILENAME>");
        println!("Example: dump_apiset_map C:\\Windows\\system32\\apisetschema.dll");
        bail!("Aborted");
    }

    let filename = &args[1];

    let dll = fs::read(filename)?;
    let pe_file = PeFile::from_bytes(&dll)?;
    let map = ApiSetMap::try_from_pe64(pe_file)?;

    for namespace_entry in map.namespace_entries()? {
        println!("● Namespace Entry: \"{}\"", namespace_entry.name()?);

        for value_entry in namespace_entry.value_entries()? {
            println!(
                "  ○ Value Entry: \"{}\" -> \"{}\"",
                value_entry.name()?,
                value_entry.value()?
            );
        }
    }

    Ok(())
}