|
Вопрос # 2 038/ вопрос решён / |
|
Здравствуйте, эксперты! Как определить физические дисководы в списке CD-ROM'ов?
 |
Вопрос задал: Vetalion (статус: Посетитель)
Вопрос отправлен: 3 ноября 2008, 01:10
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: ANBsoft
Здравствуйте, Vetalion!
Скорее всего никак, эмуляторы для того и созданы, чтобы обманывать программы и защиты.
С точки зрения программы физический и виртуальный диски выглядят одинаково.
Уже много лет идет противостояние между хакерами и защитой StarForce и поке не в пользу защиты.
 |
Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 3 ноября 2008, 08:18
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Feniks
Здравствуйте, Vetalion!
С помощью WMI можно определить производителя CD-ROMа. У привада есть много свойств/полей. Смотрите пример в приложении. Возможно он вас направит на путь истенный.
Есть еще примеры по работе с аудио CD...
P.S. Желаю удачи.
Приложение: Переключить в обычный режим- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, WbemScripting_TLB, OleServer, ActiveX, StdCtrls, ExtCtrls,
- ComCtrls;
- type
- TForm1 = class(TForm)
- ListBox1: TListBox;
- SWbemLocator1: TSWbemLocator;
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
-
- {$R *.dfm}
- procedure TForm1.Button1Click(Sender: TObject);
- var
- Service: ISWbemServices;
- ObjectSet: ISWbemObjectSet;
- SObject: ISWbemObject;
- PropSet: ISWbemPropertySet;
- SProp: ISWbemProperty;
- PropEnum, Enum: IEnumVariant;
- TempObj: OleVariant;
- Value: Cardinal;
- dr:string;
- begin
- ListBox1.Clear;
- Service:= SWbemLocator1.ConnectServer('.', 'rootCIMV2', '', '', '','', 0, nil);
- SObject:= Service.Get('Win32_CDROMDrive', wbemFlagUseAmendedQualifiers, nil);
- ObjectSet:= SObject.Instances_(0, nil);
- Enum:= (ObjectSet._NewEnum) as IEnumVariant;
- dr:='';
- while (Enum.Next(1, TempObj, Value) = S_OK) do
- begin
- SObject:= IUnknown(TempObj) as SWBemObject;
- PropSet:= SObject.Properties_;
- PropEnum:= (PropSet._NewEnum) as IEnumVariant;
- while PropEnum.Next(1, TempObj, Value) = S_OK do
- begin
- SProp:= IUnknown(TempObj) as SWBemProperty;
- if SProp.Name='Drive' then dr:=SProp.Get_Value;
- if SProp.Name='Name' then ListBox1.AddItem(dr+' '+SProp.Get_Value, nil);
- end;
- end;
- end;
- end.
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 3 ноября 2008, 16:06
Оценка за ответ: 5
Комментарий к оценке: Похоже это то, что надо
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 4 ноября 2008, 10:11; участников в обсуждении: 3.
|
Вадим К (статус: Академик), 3 ноября 2008, 01:18 [#1]:
Физические - в смысле действительно "физические", то есть, не эмулируемые с помощью Alchohol и подобных?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Vetalion (статус: Посетитель), 3 ноября 2008, 01:24 [#2]:
Да
|
|
Vetalion (статус: Посетитель), 3 ноября 2008, 08:42 [#3]:
В HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum по подключению (IDE или SCSI) можно определить, но как найти имя устройства?
|
|
Vetalion (статус: Посетитель), 3 ноября 2008, 09:24 [#4]:
Еще вариант: в диспетчере устройств, DVD и CD-ROM дисководы в свойствах диска есть пункт "Код экземпляра устройства", где видно подключение (IDE или SCSI). Как программно найти "Код экземпляра устройства"?
P.S. Очень нужно.
|
|
Вадим К (статус: Академик), 3 ноября 2008, 10:22 [#5]:
Есть такая функция GetDriveType, здесь на сайте в ответах я уже когда то писал о ней и приводил куски кода. Поищите, может это то, что надо.
Но надо помнить, что хороший качественный эмулятор не даст Вам определить, что он не настоящий.
P.S. - Мне тоже много чего очень нужно. Но иногда в порыве своих мыслей мы изобретаем ненужные решения. Или решения через очень тернистые пути....
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Vetalion (статус: Посетитель), 3 ноября 2008, 10:44 [#6]:
GetDriveType... С её помощью я определяю, что Drive такой-то является CD-ROM'ом, но каким - нет. Может все-таки реестр?
|
|
Vetalion (статус: Посетитель), 4 ноября 2008, 09:56 [#7]:
Уважаемые эксперты! Всем вам огромное спасибо. Тему можно считать закрытой.
|
|
Feniks (статус: Бакалавр), 4 ноября 2008, 10:11 [#8]:
Всегда пожалуйста Приходите еще.
|
31 января 2011, 19:32: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|