After searching a lot I found the source code of os-prober-1.44 and in it found an easy way to read /Boot/BCD binary file to determine Windows OSes booting from it.
In file os-probes/mounted/x86/20microsoft:
Code: Select all
# Vista (previously Longhorn)
if item_in_dir -q bootmgr "$2" && boot="$(item_in_dir boot "$2")" &&
bcd="$(item_in_dir bcd "$2/$boot")"; then
if grep -qs "W.i.n.d.o.w.s. .7" "$2/$boot/$bcd"; then
long="Windows 7 (loader)"
elif grep -qs "W.i.n.d.o.w.s. .V.i.s.t.a" "$2/$boot/$bcd"; then
long="Windows Vista (loader)"
elif grep -qs "W.i.n.d.o.w.s. .S.e.r.v.e.r. .2.0.0.8. .R.2." "$2/$boot/$bcd"; then
long="Windows Server 2008 R2 (loader)"
elif grep -qs "W.i.n.d.o.w.s. .S.e.r.v.e.r. .2.0.0.8." "$2/$boot/$bcd"; then
long="Windows Server 2008 (loader)"
elif grep -qs "W.i.n.d.o.w.s. .R.e.c.o.v.e.r.y. .E.n.v.i.r.o.n.m.e.n.t" "$2/$boot/$bcd"; then
long="Windows Recovery Environment (loader)"
elif grep -qs "W.i.n.d.o.w.s. .S.e.t.u.p" "$2/$boot/$bcd"; then
long="Windows Recovery Environment (loader)"
else
long="Windows Vista (loader)"
fi
short=Windows
# 2000/XP/NT4.0
elif ...
Now just wait for a week or two, my program will be out.