Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как найти ADIP DVD-диска 
V
    Опции темы
beginner2
Дата 22.2.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.2.2007

Репутация: нет
Всего: нет



Здравствуйте!

Уважаемые программисты, подскажите, пожалуйста, каким образом можно найти ADIP (или physical format information 00h, как пишет неро) DVD-диска. 

Изучил страницу http://forum.vingrad.ru/topic-42563/hl/ioc...c_ex/index.html, но так и не понял, почему IOCTL_CDROM_READ_TOC_EX равно $24054, и каким образом можно переделать код для работы с DVD.
PM MAIL   Вверх
beginner2
Дата 23.2.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.2.2007

Репутация: нет
Всего: нет



Нашел здесь структуру dvd http://msdn2.microsoft.com/en-us/library/ms804554.aspx, подскажите, пожалуйста, только чему надо приравнять IOCTL_DVD_READ_STRUCTURE 
PM MAIL   Вверх
beginner2
Дата 27.2.2007, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.2.2007

Репутация: нет
Всего: нет



Разобрался
PM MAIL   Вверх
MetalFan
Дата 28.2.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



beginner2, расскажи ;)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
beginner2
Дата 28.2.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.2.2007

Репутация: нет
Всего: нет



Ой, в двух словах-то и не объяснишь smile 

В общем,  структура dvd описана здесь http://msdn2.microsoft.com/en-us/library/ms809044.aspx, а что касается константы IOCTL_DVD_READ_STRUCTURE, то из ddk xp получил, что она равна $335140.

Это сообщение отредактировал(а) beginner2 - 28.2.2007, 23:15
PM MAIL   Вверх
MetalFan
Дата 1.3.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



beginner2, а пример кода для получения привести? для потомков)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
DaDe
Дата 29.6.2007, 09:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 17.6.2007

Репутация: нет
Всего: нет



Ну собствено кусок кода, как и говорил

Код

 const
    IOCTL_DVD_READ_STRUCTURE = $335140;
 type
    DVD_STRUCTURE_FORMAT=(DvdPhysicalDescriptor,
                          DvdCopyrightDescriptor,
                          DvdDiskKeyDescriptor,
                          DvdBCADescriptor,
                          DvdManufacturerDescriptor,
                          DvdMaxDescriptor);
    DVD_SESSION_ID=integer;
    DVD_READ_STRUCTURE = record
      BlockByteOffset:LARGE_INTEGER;
      Format:DVD_STRUCTURE_FORMAT;
      SessionId:DVD_SESSION_ID;
      LayerNumber:Byte;
    end;

    _DVD_MANUFACTURER_DESCRIPTOR = record
      ManufacturingInformation: array [0..2047] of Byte;
    end;
    DVD_MANUFACTURER_DESCRIPTOR  = _DVD_MANUFACTURER_DESCRIPTOR;
    PDVD_MANUFACTURER_DESCRIPTOR = ^DVD_MANUFACTURER_DESCRIPTOR;

function GetADIP(CD: Char; var dout_data: DVD_MANUFACTURER_DESCRIPTOR): Boolean;
  var
    hCDDevice : THandle;
    din_data: DVD_READ_STRUCTURE;
    dout_size: DWORD;
begin
  Result := False;
  FillChar(din_data,SizeOf(din_data),0);
  FillChar(dout_data,SizeOf(dout_data),0);

  hCDDevice := CreateFile( PChar( '\\.\'+CD+':'),
                                  GENERIC_READ,
                                  FILE_SHARE_READ or FILE_SHARE_WRITE,
                                  nil,
                                  OPEN_EXISTING,
                                  FILE_ATTRIBUTE_NORMAL, 0 );
  if hCDDevice <> INVALID_HANDLE_VALUE then
    begin
      din_data.BlockByteOffset.QuadPart := 0;
      din_data.SessionId := 1;
      din_data.Format:=DvdPhysicalDescriptor;
      din_data.LayerNumber := 0;
      if DeviceIoControl(hCDDevice,
                         IOCTL_DVD_READ_STRUCTURE,
                         @din_data,
                         sizeof(din_data),
                         @dout_data,
                         sizeof(dout_data),//2048
                         dout_size,
                         nil ) then
        result:=true;
    end;
  CloseHandle( hCDDevice );
end;


Это сообщение отредактировал(а) DaDe - 29.6.2007, 09:33
PM MAIL ICQ   Вверх
MetalFan
Дата 29.6.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



непонятка в коде.
буфер под DvdManufacturerDescriptor, а запрашивается DvdPhysicalDescriptor
переделал под структуру DVD_LAYER_DESCRIPTOR:

Код

 const
    IOCTL_DVD_READ_STRUCTURE = $335140;
 type
    DVD_STRUCTURE_FORMAT=(DvdPhysicalDescriptor,
                          DvdCopyrightDescriptor,
                          DvdDiskKeyDescriptor,
                          DvdBCADescriptor,
                          DvdManufacturerDescriptor,
                          DvdMaxDescriptor);
    DVD_SESSION_ID=integer;
    DVD_READ_STRUCTURE = record
      BlockByteOffset:LARGE_INTEGER;
      Format:DVD_STRUCTURE_FORMAT;
      SessionId:DVD_SESSION_ID;
      LayerNumber:Byte;
    end;

    PDVD_LAYER_DESCRIPTOR = ^_DVD_LAYER_DESCRIPTOR;
    _DVD_LAYER_DESCRIPTOR = record
      BookVersionBookType      : UCHAR; //UCHAR  BookVersion : 4; UCHAR  BookType : 4;
      MinimumRateDiskSize  : UCHAR; //UCHAR  MinimumRate : 4; UCHAR  DiskSize : 4;
      LayerTypeTrackPathNumberOfLayersReserved1: UCHAR;
      //UCHAR  LayerType : 4; UCHAR  TrackPath : 1; UCHAR  NumberOfLayers : 2; UCHAR  Reserved1 : 1;
      TrackDensityLinearDensity : UCHAR; //UCHAR  TrackDensity : 4; UCHAR  LinearDensity : 4;
      StartingDataSector: ULONG;
      EndDataSector: ULONG;
      EndLayerZeroSector: ULONG;
      Reserved5BCAFlag: UCHAR; //UCHAR  Reserved5 : 7; UCHAR  BCAFlag : 1;
      Reserved6: UCHAR;
    end;



function GetLayerDescr(CD: Char; var dout_data: _DVD_LAYER_DESCRIPTOR): Boolean;
  var
    hCDDevice : THandle;
    din_data: DVD_READ_STRUCTURE;
    dout_size: DWORD;
begin
  Result := False;
  FillChar(din_data,SizeOf(din_data),0);
  FillChar(dout_data,SizeOf(dout_data),0);
  hCDDevice := CreateFile( PChar( '\\.\'+CD+':'),
                                  GENERIC_READ,
                                  FILE_SHARE_READ or FILE_SHARE_WRITE,
                                  nil,
                                  OPEN_EXISTING,
                                  FILE_ATTRIBUTE_NORMAL, 0 );
  if hCDDevice <> INVALID_HANDLE_VALUE then
    begin
      din_data.BlockByteOffset.QuadPart := 0;
      din_data.SessionId := 1;
      din_data.Format := DvdPhysicalDescriptor;
      din_data.LayerNumber := 0;
      if DeviceIoControl(hCDDevice,
                         IOCTL_DVD_READ_STRUCTURE,
                         @din_data,
                         sizeof(din_data),
                         @dout_data,
                         sizeof(dout_data),
                         dout_size,
                         nil ) then
        result:=true;
    end;
  CloseHandle( hCDDevice );
end;


Это сообщение отредактировал(а) MetalFan - 29.6.2007, 12:15


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
DaDe
Дата 29.6.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 17.6.2007

Репутация: нет
Всего: нет



Цитата(MetalFan @  29.6.2007,  11:30 Найти цитируемый пост)
непонятка в коде.

Ну тогда и UCHAR->Byte , ULONG->Cardinal так будет как-то ближе Delphi
PM MAIL ICQ   Вверх
MetalFan
Дата 29.6.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(DaDe @  29.6.2007,  14:46 Найти цитируемый пост)
так будет как-то ближе Delphi

тогда как-то так:
Код

 const
    IOCTL_DVD_READ_STRUCTURE = $335140;
 type
    DVD_STRUCTURE_FORMAT=(DvdPhysicalDescriptor,
                          DvdCopyrightDescriptor,
                          DvdDiskKeyDescriptor,
                          DvdBCADescriptor,
                          DvdManufacturerDescriptor,
                          DvdMaxDescriptor);
    DVD_SESSION_ID=integer;
    DVD_READ_STRUCTURE = record
      BlockByteOffset:LARGE_INTEGER;
      Format:DVD_STRUCTURE_FORMAT;
      SessionId:DVD_SESSION_ID;
      LayerNumber:Byte;
    end;

    PDVD_LAYER_DESCRIPTOR = ^_DVD_LAYER_DESCRIPTOR;
    _DVD_LAYER_DESCRIPTOR = record
      BookVersionBookType      : UCHAR; //UCHAR  BookVersion : 4; UCHAR  BookType : 4;
      MinimumRateDiskSize  : UCHAR; //UCHAR  MinimumRate : 4; UCHAR  DiskSize : 4;
      LayerTypeTrackPathNumberOfLayersReserved1: UCHAR;
      //UCHAR  LayerType : 4; UCHAR  TrackPath : 1; UCHAR  NumberOfLayers : 2; UCHAR  Reserved1 : 1;
      TrackDensityLinearDensity : UCHAR; //UCHAR  TrackDensity : 4; UCHAR  LinearDensity : 4;
      StartingDataSector: ULONG;
      EndDataSector: ULONG;
      EndLayerZeroSector: ULONG;
      Reserved5BCAFlag: UCHAR; //UCHAR  Reserved5 : 7; UCHAR  BCAFlag : 1;
      Reserved6: UCHAR;
    end;

    TDVDLayerDescriptor = record
      BookVersion : Byte; {4}
      BookType    : Byte; {4}
      {}
      MinimumRate : Byte; {4}
      DiskSize    : Byte; {4}
      {}
      LayerType   : Byte; {4}
      TrackPath   : Byte; {1}
      NumberOfLayers : Byte; {2}
      Reserved1: UCHAR; {1}
      {}
      TrackDensity  : Byte; {4}
      LinearDensity : Byte; {4}
      {}
      StartingDataSector: Cardinal;
      EndDataSector : Cardinal;
      EndLayerZeroSector: Cardinal;
      {}
      Reserved5     : Byte; {7}
      BCAFlag       : Byte; {1}
      {}
      Reserved6     : Byte;
    end;

    procedure ToDVDLayerDescriptor( ADVDLayerDescr: _DVD_LAYER_DESCRIPTOR; var ADVDLayerDescrOut: TDVDLayerDescriptor );
    begin
      ADVDLayerDescrOut.BookVersion := ADVDLayerDescr.BookVersionBookType and $F;
      ADVDLayerDescrOut.BookType    := ADVDLayerDescr.BookVersionBookType shr $4;
      ADVDLayerDescrOut.MinimumRate := ADVDLayerDescr.MinimumRateDiskSize and $F;
      ADVDLayerDescrOut.DiskSize    := ADVDLayerDescr.MinimumRateDiskSize shr $4;
      ADVDLayerDescrOut.LayerType   := ADVDLayerDescr.LayerTypeTrackPathNumberOfLayersReserved1 and $F;
      ADVDLayerDescrOut.TrackPath   := ADVDLayerDescr.LayerTypeTrackPathNumberOfLayersReserved1 shr $4 and $1;
      ADVDLayerDescrOut.NumberOfLayers := ADVDLayerDescr.LayerTypeTrackPathNumberOfLayersReserved1  shr $5 and $3;
      ADVDLayerDescrOut.Reserved1      := ADVDLayerDescr.LayerTypeTrackPathNumberOfLayersReserved1  shr $7;
      ADVDLayerDescrOut.TrackDensity   := ADVDLayerDescr.TrackDensityLinearDensity and $F;
      ADVDLayerDescrOut.LinearDensity  := ADVDLayerDescr.TrackDensityLinearDensity shr $4;
      ADVDLayerDescrOut.StartingDataSector := ADVDLayerDescr.StartingDataSector;
      ADVDLayerDescrOut.EndDataSector      := ADVDLayerDescr.EndDataSector;
      ADVDLayerDescrOut.EndLayerZeroSector := ADVDLayerDescr.EndLayerZeroSector;

      ADVDLayerDescrOut.Reserved5      := ADVDLayerDescr.Reserved5BCAFlag and $7F; 
      ADVDLayerDescrOut.BCAFlag        := ADVDLayerDescr.Reserved5BCAFlag shr $7;
      ADVDLayerDescrOut.Reserved6      := ADVDLayerDescr.Reserved6;

    end;


function GetADIP(CD: Char; var ADVDLayerDescr: TDVDLayerDescriptor ): Boolean;
  var
    hCDDevice : THandle;
    din_data: DVD_READ_STRUCTURE;
    dout_size: DWORD;
    dout_data: _DVD_LAYER_DESCRIPTOR;
begin
  Result := False;
  FillChar(din_data,SizeOf(din_data),0);
  FillChar(dout_data,SizeOf(dout_data),0);
  FillChar(ADVDLayerDescr,SizeOf(ADVDLayerDescr),0);  
  hCDDevice := CreateFile( PChar( '\\.\'+CD+':'),
                                  GENERIC_READ,
                                  FILE_SHARE_READ or FILE_SHARE_WRITE,
                                  nil,
                                  OPEN_EXISTING,
                                  FILE_ATTRIBUTE_NORMAL, 0 );
  if hCDDevice <> INVALID_HANDLE_VALUE then
    begin
      din_data.BlockByteOffset.QuadPart := 0;
      din_data.SessionId := 1;
      din_data.Format := DvdPhysicalDescriptor;
      din_data.LayerNumber := 0;
      if DeviceIoControl(hCDDevice,
                         IOCTL_DVD_READ_STRUCTURE,
                         @din_data,
                         sizeof(din_data),
                         @dout_data,
                         sizeof(dout_data),
                         dout_size,
                         nil ) then
      begin
        Result := True;
        ToDVDLayerDescriptor( dout_data, ADVDLayerDescr );
      end;
    end;
  CloseHandle( hCDDevice );
end;



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0653 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.