/usr/lib/os-probes/mounted/20microsoft is in os-prober 1.70ubuntu3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 | #!/bin/sh
# Detects all Microsoft OSes on a collection of partitions.
. /usr/share/os-prober/common.sh
partition="$1"
mpoint="$2"
type="$3"
# This script looks for legacy BIOS bootloaders only. Skip if running UEFI
if [ -d /sys/firmware/efi ] && [ ! -f /var/lib/partman/ignore_uefi ] && [ -z "$WINOSDATA" ]; then
debug "Skipping legacy bootloaders on UEFI system"
exit 1
fi
# Weed out stuff that doesn't apply to us
case "$type" in
ntfs|ntfs-3g) debug "$1 is a NTFS partition" ;;
vfat) debug "$1 is a FAT32 partition" ;;
msdos) debug "$1 is a FAT16 partition" ;;
fat) debug "$1 is a FAT partition (mounted by GRUB)" ;;
fuse|fuseblk) debug "$1 is a FUSE partition" ;; # might be ntfs-3g
*) debug "$1 is not a MS partition: exiting"; exit 1 ;;
esac
found=
# Vista (previously Longhorn)
if item_in_dir -q bootmgr "$2"; then
# there might be different boot directories in different case as:
# boot Boot BOOT
for boot in $(item_in_dir boot "$2"); do
bcd=$(item_in_dir bcd "$2/$boot")
if [ -n "$bcd" ]; then
if grep -aqs "W.i.n.d.o.w.s. .1.0" "$2/$boot/$bcd"; then
long="Windows 10 (loader)"
elif grep -aqs "W.i.n.d.o.w.s. .8" "$2/$boot/$bcd"; then
long="Windows 8 (loader)"
elif grep -aqs "W.i.n.d.o.w.s. .7" "$2/$boot/$bcd"; then
long="Windows 7 (loader)"
elif grep -aqs "W.i.n.d.o.w.s. .V.i.s.t.a" "$2/$boot/$bcd"; then
long="Windows Vista (loader)"
elif grep -aqs "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 -aqs "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 -aqs "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 -aqs "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
found=true
break
fi
done
fi
# 2000/XP/NT4.0
if [ -z "$found" ] && item_in_dir -q ntldr "$2" && item_in_dir -q ntdetect.com "$2"; then
long="Windows NT/2000/XP"
short=Windows
ini=$(item_in_dir boot.ini "$2")
if [ -n "$ini" ]; then
multicount="$(grep -e "^multi" "$2/$ini" | wc -l)"
scsicount="$(grep -e "^scsi" "$2/$ini" | wc -l)"
msoscount="$(expr "${multicount}" + "${scsicount}")"
if [ "$msoscount" -eq 1 ]; then
# We need to remove a Carriage Return at the end of
# the line...
defaultmspart="$(grep -e "^default=" "$2/$ini" | cut -d '=' -f2 | tr -d '\r')"
# Escape any backslashes in defaultmspart
grepexp="^$(echo "$defaultmspart" | sed -e 's/\\/\\\\/')="
# Colons not allowed; replace by spaces
# Accented characters (non UTF-8) cause debconf to
# hang, so we fall back to the default if the name
# contains any weird characters.
long="$(grep -e "$grepexp" "$2/$ini" | cut -d '"' -f2 | \
tr ':' ' ' | LC_ALL=C grep -v '[^a-zA-Z0-9 &()/_-]')"
if [ -z "$long" ]; then
long="Windows NT/2000/XP"
fi
else
long="Windows NT/2000/XP (loader)"
fi
found=true
fi
fi
# MS-DOS
if [ -z "$found" ] && item_in_dir -q dos "$2"; then
long="MS-DOS 5.x/6.x/Win3.1"
short=MS-DOS
found=true
fi
# 95/98/Me
if [ -z "$found" ] && item_in_dir -q windows "$2" &&
item_in_dir -q win.com "$2"/"$(item_in_dir windows "$2")"; then
long="Windows 95/98/Me"
short=Windows9xMe
found=true
fi
# Restrict to partitions containing the OS
if [ -n "$WINOSDATA" ]; then
found=
if [ -d "$2/ProgramData/Microsoft/Windows/Start Menu/Programs/StartUp" ]; then
long=${long:-"Windows 8 (data)"}
short=${short:-"Windows"}
found=true
elif [ -d "$2/ProgramData/Microsoft/Windows/Start Menu/Programs/Startup" ]; then
long=${long:-"Windows 7 (data)"}
short=${short:-"Windows"}
found=true
elif [ -d "$2/Documents and Settings/All Users/Start Menu/Programs/Startup" ]; then
long=${long:-"Windows XP/Vista (data)"}
short=${short:-"Windows"}
found=true
elif [ -d "$2/Winnt/Profiles/All Users/Start Menu/Programs/Startup" ]; then
long=${long:-"Windows NT (data)"}
short=${short:-"Windows"}
found=true
fi
fi
if [ -z "$found" ]; then
exit 1
fi
label="$(count_next_label "$short")"
result "${partition}:${long}:${label}:chain"
exit 0
|