-
Привет Всем!
Как определить с какого жёсткого диска запущена программа из под юзера с ограниченными правами (Гость, например) ?
Спасибо.
-
1) вызов GetModuleFilename с парамом 0.
2) поиск в строке результата первого символа ":" и замена его нулевым байтом.
-
Впрочем, вместо пункта 1 сойдёт и обычный ParamStr(0).
-
блин. А вместо 2-го - Copy/Delete.
-
Мне нужно определить модель жёсткого диска (HDD) или его физический номер в системе как PhysicalDrive%d. А под гостём
CreateFile(Pchar('\\.\PhysicalDrive'+inttostr(id)),..
выдаёт Access denied. В этом и проблема.
-
> Мне нужно определить модель жёсткого диска (HDD) или его
> физический номер в системе как PhysicalDrive%d. А под гостём
> CreateFile(Pchar('\\.\PhysicalDrive'+inttostr(id)),.. выдаёт
> Access denied. В этом и проблема.
значит нельзя
-
А через "Scsi%d:" или что нибудь типа "QueryDosDevice" или "NtQuerySystemInformation"? чтобы уйти от обращения к PhysicalDrive%d
-
> [4] AllDontFire (04.06.08 11:32)
> Мне нужно определить модель жёсткого диска (HDD) или его физический номер в системе как PhysicalDrive%d.
> А под гостём CreateFile(Pchar('\\.\PhysicalDrive'+inttostr(id)),.. выдаёт Access denied.
Не могу проверить - нет Delphi под рукой,
но готова отказаться от утренней чашки кофе, если это так :)
IMHO либо не тот уровень доступа просишь, либо не так "расшариваешь".
-
Под гостем даже \\.\C: не откроется.
-
> 2) поиск в строке результата первого символа ":" и замена его нулевым байтом.
Высоко будет твое удивление когда данного символа не будет найдено.
-
LightRipple, да можно открыть с уровнем доступа
0 Specifies device query access to the object (dwShareMode : FILE_SHARE_READ or FILE_SHARE_WRITE)
, но дальнейшие обращения к DeviceIOControl для получения партиций работать не будут. Нужен именно read access, как я понял.
-
> [10] AllDontFire (04.06.08 14:56)
> LightRipple, да можно открыть с уровнем доступа 0
Слава богу ! А то уж я (после [8] guav © ) пости распрощалась с утренним кофе :)
По САБЖУ: Какие именно команды ты используешь в DeviceIOControl и что именно ты хочешь получить ?
Их (этих команд) много, возможно проскочит замена одной на другую.
И еще: read access - это слишком много (если я правильно поняла, что это за доступ),
поиграй с различными вариантами READ_CONTROL, FILE_READ_ATTRIBUTES и т.п.
-
В DeviceIOControl используется команда IOCTL_DISK_GET_DRIVE_LAYOUT для получения списка партиций(лог. разделов).
read access это GENERIC_READ.
Если открыть хендл CreateFile через READ_CONTROL и/или FILE_READ_ATTRIBUTES, последующий DeviceIOControl выдаст Access denied.
Для получения "Layout" нужен FILE_READ_EA [extended file attributes], но под гостём он уже запрещён в CreateFile.
-
> Мне нужно определить модель жёсткого диска (HDD) или его
> физический номер в системе как PhysicalDrive%d
Только стоит учитывать, что одной буквой логического диска могут обозначаться несколько физических. Например, под диском с буквой С: может быть два физических устройства
-
Не знал что такое бывает, но в любом случае, какой-то из двух HDD будет первым, его модель можно взять за результат. А вобще интересно, как такое реализовывается, это не RAID случайно?
-
> Игорь Шевченко (04.06.2008 22:25:13) [13]
У меня под буквой С восемь дисков. Но при запуске с них программы никакой буквы нет.
-
AllDontFire (04.06.08 22:49) [14]
> Не знал что такое бывает, но в любом случае, какой-то из
> двух HDD будет первым, его модель можно взять за результат.
> А вобще интересно, как такое реализовывается, это не RAID
> случайно?
Нет, это не RAID, разделы двух дисков смонтированы на один логический, но в разные каталоги.
Anatoly Podgoretsky © (04.06.08 23:31) [15]
> У меня под буквой С восемь дисков. Но при запуске с них
> программы никакой буквы нет.
У меня разделы двух дисков. Но буква есть :)
-
> Игорь Шевченко (04.06.2008 23:43:16) [16]
> Нет, это не RAID, разделы двух дисков смонтированы на один логический
SPAN?
-
Anatoly Podgoretsky © (04.06.08 23:46) [17]
Нет, в Disk manager примонтировал раздел одного диска в каталог диска С.
Reparse Point
-
Ветвь плавно перешла в другую область :-) , хотя сам виноват, мешать не буду.
И всё-таки сабж возможен или нет, может другие способы есть?