use grob::{winapi_small_binary, RvIsError};
use windows::Win32::System::SystemInformation::{GetLogicalProcessorInformationEx, RelationGroup};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mpc = winapi_small_binary(
|argument| {
RvIsError::new(unsafe {
GetLogicalProcessorInformationEx(
RelationGroup,
Some(argument.pointer()),
argument.size(),
)
})
},
|frozen_buffer| {
if let Some(p) = frozen_buffer.pointer() {
let r = unsafe { (*p).Relationship };
let mpc = unsafe { (*p).Anonymous.Group.GroupInfo[0].MaximumProcessorCount };
println!("Relationship = {:?}", r); println!("Size = {:?}", unsafe { (*p).Size });
println!("MaximumGroupCount = {:?}", unsafe {
(*p).Anonymous.Group.MaximumGroupCount
});
println!("ActiveGroupCount = {:?}", unsafe {
(*p).Anonymous.Group.ActiveGroupCount
});
println!("ActiveProcessorCount = {:?}", unsafe {
(*p).Anonymous.Group.GroupInfo[0].ActiveProcessorCount
});
println!("MaximumProcessorCount = {:?}", mpc);
println!();
Ok(Some(mpc))
} else {
Ok(None)
}
},
)?;
if let Some(mpc) = mpc {
println!("Success! The maximum processor count is {}.", mpc);
}
Ok(())
}