Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.19;
Скачать: CL | DM;

Вниз

Как определить HDD программы из под гостя?   Найти похожие ветки 

 
AllDontFire   (2008-06-04 02:46) [0]

Привет Всем!

Как определить с какого жёсткого диска запущена программа из под   юзера с ограниченными правами (Гость, например) ?

Спасибо.


 
Renegat   (2008-06-04 10:52) [1]

1) вызов GetModuleFilename с парамом 0.
2) поиск в строке результата первого символа ":" и замена его нулевым байтом.


 
Renegat   (2008-06-04 10:53) [2]

Впрочем, вместо пункта 1 сойдёт и обычный ParamStr(0).


 
Renegat   (2008-06-04 10:54) [3]

блин. А вместо 2-го - Copy/Delete.


 
AllDontFire   (2008-06-04 11:32) [4]

Мне нужно определить модель жёсткого диска (HDD) или его физический номер в системе как PhysicalDrive%d. А под гостём CreateFile(Pchar("\\.\PhysicalDrive"+inttostr(id)),.. выдаёт Access denied. В этом и проблема.


 
Игорь Шевченко ©   (2008-06-04 12:12) [5]


> Мне нужно определить модель жёсткого диска (HDD) или его
> физический номер в системе как PhysicalDrive%d. А под гостём
> CreateFile(Pchar("\\.\PhysicalDrive"+inttostr(id)),.. выдаёт
> Access denied. В этом и проблема.


значит нельзя


 
AllDontFire   (2008-06-04 12:47) [6]

А через "Scsi%d:" или что нибудь типа "QueryDosDevice" или "NtQuerySystemInformation"? чтобы уйти от обращения к PhysicalDrive%d


 
LightRipple ©   (2008-06-04 13:20) [7]

> [4] AllDontFire   (04.06.08 11:32)
> Мне нужно определить модель жёсткого диска (HDD) или его физический номер в системе как PhysicalDrive%d.
> А под гостём CreateFile(Pchar("\\.\PhysicalDrive"+inttostr(id)),.. выдаёт Access denied.

Не могу проверить - нет Delphi под рукой,
но готова отказаться от утренней чашки кофе, если это так :)

IMHO либо не тот уровень доступа просишь, либо не так "расшариваешь".


 
guav ©   (2008-06-04 13:39) [8]

Под гостем даже \\.\C: не откроется.


 
Anatoly Podgoretsky ©   (2008-06-04 14:23) [9]

> 2) поиск в строке результата первого символа ":" и замена его нулевым байтом.

Высоко будет твое удивление когда данного символа не будет найдено.


 
AllDontFire   (2008-06-04 14:56) [10]

LightRipple, да можно открыть с уровнем доступа 0 Specifies device query access to the object (dwShareMode : FILE_SHARE_READ or FILE_SHARE_WRITE), но дальнейшие обращения к DeviceIOControl для получения партиций работать не будут. Нужен именно read access, как я понял.


 
LightRipple ©   (2008-06-04 15:29) [11]

> [10] AllDontFire   (04.06.08 14:56)
> LightRipple, да можно открыть с уровнем доступа 0

Слава богу ! А то уж я (после [8] guav © ) пости распрощалась с утренним кофе :)

По САБЖУ: Какие именно команды ты используешь в DeviceIOControl и что именно ты хочешь получить ?
Их (этих команд) много, возможно проскочит замена одной на другую.
И еще: read access - это слишком много (если я правильно поняла, что это за доступ),
поиграй с различными вариантами READ_CONTROL, FILE_READ_ATTRIBUTES и т.п.


 
AllDontFire   (2008-06-04 21:37) [12]

В 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.


 
Игорь Шевченко ©   (2008-06-04 22:25) [13]


> Мне нужно определить модель жёсткого диска (HDD) или его
> физический номер в системе как PhysicalDrive%d


Только стоит учитывать, что одной буквой логического диска могут обозначаться несколько физических. Например, под диском с буквой С: может быть два физических устройства


 
AllDontFire   (2008-06-04 22:49) [14]

Не знал что такое бывает, но в любом случае, какой-то из двух HDD будет первым, его модель можно взять за результат. А вобще интересно, как такое реализовывается, это не RAID случайно?


 
Anatoly Podgoretsky ©   (2008-06-04 23:31) [15]

> Игорь Шевченко  (04.06.2008 22:25:13)  [13]

У меня под буквой С восемь дисков. Но при запуске с них программы никакой буквы нет.


 
Игорь Шевченко ©   (2008-06-04 23:43) [16]

AllDontFire   (04.06.08 22:49) [14]


> Не знал что такое бывает, но в любом случае, какой-то из
> двух HDD будет первым, его модель можно взять за результат.
>  А вобще интересно, как такое реализовывается, это не RAID
> случайно?


Нет, это не RAID, разделы двух дисков смонтированы на один логический, но в разные каталоги.

Anatoly Podgoretsky ©   (04.06.08 23:31) [15]


> У меня под буквой С восемь дисков. Но при запуске с них
> программы никакой буквы нет.


У меня разделы двух дисков. Но буква есть :)


 
Anatoly Podgoretsky ©   (2008-06-04 23:46) [17]

> Игорь Шевченко  (04.06.2008 23:43:16)  [16]

> Нет, это не RAID, разделы двух дисков смонтированы на один логический

SPAN?


 
Игорь Шевченко ©   (2008-06-04 23:51) [18]

Anatoly Podgoretsky ©   (04.06.08 23:46) [17]

Нет, в Disk manager примонтировал раздел одного диска в каталог диска С.

Reparse Point


 
AllDontFire   (2008-06-04 23:57) [19]

Ветвь плавно перешла в другую область :-) , хотя сам виноват, мешать не буду.

И всё-таки сабж возможен или нет, может другие способы есть?


 
Anatoly Podgoretsky ©   (2008-06-05 00:30) [20]

> Игорь Шевченко  (04.06.2008 23:51:18)  [18]

Понял.


 
Anatoly Podgoretsky ©   (2008-06-05 00:31) [21]

> AllDontFire  (04.06.2008 23:57:19)  [19]

Тебе несколько раз намекнули, что буквы может не быть.


 
AllDontFire   (2008-06-05 00:40) [22]

Хорошо, тогда сабж для случаев когда буква есть - возможен?


 
Anatoly Podgoretsky ©   (2008-06-05 01:00) [23]

> AllDontFire  (05.06.2008 0:40:22)  [22]

Не знаю, есть ли АПИ, но вариант с поиском : тебе подсказали, только на всякий случай надо расширить проверку, что был строго один символ, а то могут быть варианты.


 
LightRipple ©   (2008-06-05 01:14) [24]

> [22] AllDontFire   (05.06.08 00:40)
> Хорошо, тогда сабж для случаев когда буква есть - возможен?

Возможен. Добавлю ка я IMHO, а то ведь до сих пор не могу привести пример изменения кластеров при записи :)
До Delphi я еще не добралась, так что все нижесказанное - это по памяти. Могу ошибаться.
Для начала: IOCTL_DISK_GET_DRIVE_LAYOUT - устарела.
Надо использовать IOCTL_DISK_GET_DRIVE_LAYOUT_EX.
Второе: если нужен только список "партишенов", то на ней свет клином не сошелся.
Насчет доступа: я бы пошла "методом научного тыка". (Именно так я поступила, когда у меня была похожая проблемма).
Надо пробовать различные варианты открытия диска (а их как собак нерезанных :),
комбинируя их с разными способами получения информации.
Возможно API не хватит для этого, тогда смотри в сторону Nt - они более "гибкие".


 
AllDontFire   (2008-06-05 01:46) [25]

> Anatoly Podgoretsky
Мне нужно определить, что программа запущена, к примеру, c физического HDD "SAMSUNG SP1614N 12345abc", а лог. диск/раздел типа C,D и т.д. легко определить по application.ExeName, например.

> LightRipple
Спасибо, буду пробовать.


 
Игорь Шевченко ©   (2008-06-05 17:12) [26]

AllDontFire   (05.06.08 01:46) [25]

Защита ?


 
AllDontFire   (2008-06-05 23:05) [27]

> Игорь Шевченко
Да


 
Игорь Шевченко ©   (2008-06-05 23:48) [28]

AllDontFire   (05.06.08 23:05) [27]

Сделай сервис, который работает не из-под гостя, и нехай он с винтами разруливает. Его из-под гостя и прибить сложнее. А программа нехай к сервису общается под гостем это вполне допустимо


 
AllDontFire   (2008-06-06 14:24) [29]

Проект, в принципе, на это не рассчитан, например, кто-то в компьютерном клубе будет сидеть.


 
Игорь Шевченко ©   (2008-06-06 15:14) [30]


> Проект, в принципе, на это не рассчитан, например, кто-то
> в компьютерном клубе будет сидеть.


принес с собой и запустил ? :)


 
AllDontFire   (2008-06-06 15:34) [31]

В инете скачал и запустил :-)


 
Игорь Шевченко ©   (2008-06-06 16:40) [32]


> В инете скачал и запустил :-)


Мне крайне интересно, как будет выглядеть защита в этом случае. То есть, запускать он сможет только в этом компьютерном клубе, только на этом компьютере и т.д. ?
Тебе не кажется это слегка странным ?


 
AllDontFire   (2008-06-06 20:29) [33]

Согласен, с комп. клубом надо что-то другое придумать, но ограниченные юзера есть и на постоянных компах.


 
Игорь Шевченко ©   (2008-06-06 20:38) [34]


> но ограниченные юзера есть и на постоянных компах.


вот и делай для них сервис. У сервиса прав много, ему гораздо проще получить уникальные данные оборудования.

В противном случае твой вопрос может выглядеть так: Как под ограниченными правами получить доступ к тому, в чем ограничили ?
В системе вообще-то разграничение уровня прав существует не просто так, а именно для того, чтобы ограничивать.
Я не знаю, возможно ли получить доступ к диску так, чтобы прочитать его серийник именно из под гостя, пробовать лень, но если система чего-то не дает, значит это не просто так и обходить это ограничение чревато тем, что в будущих версиях системы эти дырки попросту прикроют.


 
AllDontFire   (2008-06-06 22:19) [35]

Ок, сервис тоже идея хорошая.

А под гостём модели HDD можно прочесть через CreateFile(Pchar("\\.\Scsi"+inttostr(id)+":"),...), и вряд ли это "дырка", т.к. в диспетчере устройств они тоже под гостём видны. А вот уже найти   соотвествие лог-им разделам через "scsi" я не знаю как.


 
Игорь Шевченко ©   (2008-06-06 23:50) [36]

Вот написано же:

"You can use the CreateFile function to open a physical disk drive or a volume. The function returns a handle that can be used with the DeviceIoControl function. This enables you to access the disk"s partition table. It is potentially dangerous to do so, since an incorrect write to a disk could make its contents inaccessible. The following requirements must be met for such a call to succeed:

The caller must have administrative privileges"


 
AllDontFire   (2008-06-07 23:53) [37]

Так до бесконечности можно спорить :-)
Ничего страшного не вижу в чтении Exteneded Attributes устройств из под гостя. К примеру, гость видит в закладке "Безопасность" файла у кого какие права есть на этот файл, по аналогии можно расценить как "ЕА" файла.
А вообще, соглашусь, для CreateFile/DeviceIoControl лучше иметь законные права.



Страницы: 1 вся ветка

Текущий архив: 2009.07.19;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.011 c
15-1242678602
Юрий
2009-05-19 00:30
2009.07.19
С днем рождения ! 19 мая 2009 вторник


2-1243356829
Pauk
2009-05-26 20:53
2009.07.19
типы данных и переменные


2-1243354204
ondesly
2009-05-26 20:10
2009.07.19
Canvas.CopyRect


3-1223987061
salexn
2008-10-14 16:24
2009.07.19
Interbase(Firebird, Yaffil) и параметризированные запросы


15-1242645688
Василий Жогарев
2009-05-18 15:21
2009.07.19
ZEOSDBO-6.6.1-beta