Нужно узнать имя тома с которого была загруженна опреционная система. Обращаю внимание не системный том, а именно загрузочный. Boot indicator не подходит т.к. и загрузочные дискеты и флешки имеют его. Наличие ntldr тоже не походит т.к. может быть подключен винт с утсановленной системой но загрузка с него не произошла. Других вариантов пока не придумал.
Здравствуйте, an-52, Вы писали:
A5>Нужно узнать имя тома с которого была загруженна опреционная система. Обращаю внимание не системный том, а именно загрузочный. Boot indicator не подходит т.к. и загрузочные дискеты и флешки имеют его. Наличие ntldr тоже не походит т.к. может быть подключен винт с утсановленной системой но загрузка с него не произошла. Других вариантов пока не придумал.
короче говоря если решать это с уровня драйверов (не уверен что по другому возможно), то Вам нужно добраться до устройства с флагом
deviceObject->Flags & DO_SYSTEM_BOOT_PARTITION
.
Будет работать начиная с НТ4 точно.
... << RSDN@Home 1.1.4 beta 4 rev. 302>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
procedure GetEnvironmentStrings(ss: TStrings);
var
ptr: PChar;
s: string;
Done: boolean;
begin
ss.Clear;
s := '';
Done := FALSE;
ptr := windows.GetEnvironmentStrings;
while Done = false do begin
if ptr^ = #0 then begin
inc(ptr);
if ptr^ = #0 then Done := TRUE
else ss.Add(s);
s := ptr^;
end else s := s + ptr^;
inc(ptr);
end;
end;
HOMEDRIVE — загрузочный том
(минус — только для 2000/ХР)
Здравствуйте, padla2k, Вы писали:
P>HOMEDRIVE — загрузочный том P>(минус — только для 2000/ХР)
Вы не поняли вопроса, мне кажется.
Спрашивают с какого тома ОС загружена (откуда NTLDR отработал).
А куда переменные окружения указывают — это %SYSTEMROOT% и соотв. где установлена ОС.
Соотв. уже совсем другой том (и даже диск) может быть.
Вообще у МС исторически путаница с понятиями system volume / boot volume.
system volume — том содержащий NTLDR & boot.ini
boot volume — они имеют ввиду том содержащий %systemroot%
Это реально сбивает с толку и мне вообще непонятно как допустили такие термины вообще, ну да теперь уже не изменить положения дел тут.
Короче флаг позволяющий понять с какого disk device была произведена загрузка ОС — это DO_SYSTEM_BOOT_PARTITION, а там уже можно и до буквы диска добраться постепенно.
Насколько я могу судить — из user mode эта информация нигде не торчит и флаг в MSDN и DDK не фигурирует нигде.
Все что торчит — опирается на symbolic link \SystemRoot — а он как я уже написал выше, не помогает.
... << RSDN@Home 1.1.4 beta 4 rev. 302>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, an-52, Вы писали:
A5>Помогите пожалуйста решить следуюшую задачу:
A5>Нужно узнать имя тома с которого была загруженна опреционная система. Обращаю внимание не системный том, а именно загрузочный. Boot indicator не подходит т.к. и загрузочные дискеты и флешки имеют его. Наличие ntldr тоже не походит т.к. может быть подключен винт с утсановленной системой но загрузка с него не произошла. Других вариантов пока не придумал.
Может поможет реестр? Может немного не то, но зато из user-mode.
Здравствуйте, Valerio, Вы писали:
V>Здравствуйте, padla2k, Вы писали:
P>>HOMEDRIVE — загрузочный том P>>(минус — только для 2000/ХР) V>Вы не поняли вопроса, мне кажется.
V>Спрашивают с какого тома ОС загружена (откуда NTLDR отработал). V>А куда переменные окружения указывают — это %SYSTEMROOT% и соотв. где установлена ОС.
V>Соотв. уже совсем другой том (и даже диск) может быть.
V>Вообще у МС исторически путаница с понятиями system volume / boot volume.
V>system volume — том содержащий NTLDR & boot.ini V>boot volume — они имеют ввиду том содержащий %systemroot%
V>Это реально сбивает с толку и мне вообще непонятно как допустили такие термины вообще, ну да теперь уже не изменить положения дел тут.
V>Короче флаг позволяющий понять с какого disk device была произведена загрузка ОС — это DO_SYSTEM_BOOT_PARTITION, а там уже можно и до буквы диска добраться постепенно.
V>Насколько я могу судить — из user mode эта информация нигде не торчит и флаг в MSDN и DDK не фигурирует нигде. V>Все что торчит — опирается на symbolic link \SystemRoot — а он как я уже написал выше, не помогает.
Здравствуйте, an-52, Вы писали:
A5>Помогите пожалуйста решить следуюшую задачу:
A5>Нужно узнать имя тома с которого была загруженна опреционная система. Обращаю внимание не системный том, а именно загрузочный. Boot indicator не подходит т.к. и загрузочные дискеты и флешки имеют его.
A5>>Нужно узнать имя тома с которого была загруженна опреционная система. Обращаю внимание не системный том, а именно загрузочный. Boot indicator не подходит т.к. и загрузочные дискеты и флешки имеют его.
Для removable media обычно partition table нет. Соответственно понятие Boot indicator бессмысленно.
PD>Да, но их тип не DRIVE_FIXED по GetDriveType.
Boot indicator не подходит и для DRIVE_FIXED, поскольку для дисков с partition table этот флаг можно поменять во время работы OS даже не используя сторонние утилиты.
Здравствуйте, MShura, Вы писали:
PD>>Да, но их тип не DRIVE_FIXED по GetDriveType. MS>Boot indicator не подходит и для DRIVE_FIXED, поскольку для дисков с partition table этот флаг можно поменять во время работы OS даже не используя сторонние утилиты.
Формально верно, а по существу настолько маловероятно, что это кто-то сделает, что ИМХО можно пренебречь.