Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.07.19;
Скачать: [xml.tar.bz2];

Вниз

Как определить 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.07.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.004 c
15-1242334996
Германн
2009-05-15 01:03
2009.07.19
Registered Jack


15-1242709740
brother
2009-05-19 09:09
2009.07.19
Оцените по цене видеокарту


15-1242388304
Palladin
2009-05-15 15:51
2009.07.19
Враппер к WinHTTP.dll


2-1243081532
@!!ex
2009-05-23 16:25
2009.07.19
Как сделать UDP Server работающий со всеми интерфейсами?


2-1243338367
dmitrot
2009-05-26 15:46
2009.07.19
Как убрать вертикальный и горизонтальный скролбары в DBGrid ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский