Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Как читать ATIP


Автор: СССР 6.6.2005, 17:25
Подскажите, возможно ли в Delphi прочитать информацию ATIP (Absolute Time In Pregroove), если да, то как?

Заранее спасибо

Автор: Quadr0 6.6.2005, 17:44
...

Автор: СССР 6.6.2005, 19:21
Цитата
Воспользуйтесь для этого CDR API oт Nero, например, которое сейчас на языке Паскаля стало доступно на всеобщее обозрение


А где это найти можно? На http://www.torry.net, что то не удалось отыскать smile

Автор: Quadr0 6.6.2005, 19:40
...

Автор: СССР 6.6.2005, 19:42
Спасибо, буду капать smile

Автор: p0s0l 6.6.2005, 19:42
Один человек уже начинал это дело, не знаю, довел ли он его до конца, но можешь либо начать с этого, либо спросить у него лично:
http://forum.vingrad.ru/index.php?showtopic=42563&view=all

Автор: СССР 7.6.2005, 22:02
а вот как это можно на Delphi перевести smile

Код

CDROM_READ_TOC_EX cd_toc = { 0 };
cd_toc.Format = CDROM_READ_TOC_EX_FORMAT_ATIP; //Query the device for absolute time in pregroove (ATIP) data. 
cd_toc.Msf = 1; //Msf member must be set to 1.
CDROM_TOC_ATIP_DATA atip_data = { 0 };
res = DeviceIoControl(cd_device, IOCTL_CDROM_READ_TOC_EX, &cd_toc, sizeof(cd_toc), &atip_data, sizeof(atip_data), &bytes_returned, NULL);
CDROM_TOC_ATIP_DATA_BLOCK* atip_block = &atip_data.Descriptors[0];

Автор: Quadr0 7.6.2005, 22:38
...

Автор: СССР 8.6.2005, 09:42
Скачать то скачал, но там я ничего не нашел, а именно как получить информацию о диске smile

Автор: p0s0l 8.6.2005, 10:43
СССР, ты ходил по ссылке, что я дал ? Там как раз этот код и есть (не в начале темы, а ближе к концу)... Только он не всегда работает, или вообще не работает smile


Автор: СССР 8.6.2005, 14:08
Да, он действительно не работает, выдает ошибку 97 smile

Мне тут сказали, что нужно

ASPI - SendASPI32Command
+MMC3

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

Автор: СССР 8.6.2005, 14:19
MMC (Multi Media Commands)
smile

Автор: Guest 9.6.2005, 18:56
Я нашел кучу pdf по SendASPI32Command и MMC3, но во-первых они на английском, а во-вторых ничего не понятно smile
А вот можно ли чужую программу разобрать? У меня есть программка на С++ CDR_Identifier_1.63

Автор: СССР 10.6.2005, 10:34
DVD Disc Manufacturing Information

table - Read DVD structure Data Format (Format field = 04h)

-----------------------------------------------------------------------------
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|Byte | | | | | | | | |
|---------------------------------------------------------------------------|
| 0 |(MSB) DVD STRUCTURE Data Length |
|-----------| |
| 1 | (LSB)|
|-----------|---------------------------------------------------------------|
| 2 | Reserved |
|-----------|---------------------------------------------------------------|
| 3 | Reserved |
|-----------|---------------------------------------------------------------|
| | |
|-----------|---------------------------------------------------------------|
| 0 | |
|-----------| |
| ... | |
|-----------| |
| ... | |
|-----------| Disc Manufacturing Information |
| ... | |
|-----------| |
| 2047 | |
-----------------------------------------------------------------------------

The DVD STRUCTURE Data Length specifies the length in bytes of the following
DVD STRUCTURE data that is available to be transferred to the Initiator.
The DVD STRUCTURE Data Length value does not include the DVD STRUCTURE Data
Length field itself.
The Disc Manufacturing Information is taken from the DVD media Lead-in.
In the case of DVD-R/-RW multi session disc, this information is taken from
the last Border-in.

Вот такую информацию я нашел. Вот скорее всего Disc Manufacturing Information
это и есть те данные о производителе и о типе слоя. Вот как обратиться к этой
области диска?



Автор: MetalFan 2.10.2006, 11:40
Цитата(Guest @  9.6.2005,  18:56 Найти цитируемый пост)
У меня есть программка на С++ CDR_Identifier_1.63

вот бы где раздобыть... сорцы пусть и на c++

Автор: bems 15.10.2006, 03:20
Цитата(СССР @  8.6.2005,  14:08 Найти цитируемый пост)
А что это за монстр такой DDK? 
Как СДК, только для писателей дров. Там сам черт ногу сломит smile 

Автор: MetalFan 5.3.2007, 08:50
на всякий случай приведу свою модификацию способа получения ATIP, в частности ID производителя CD.
Код

 const
    CDROM_READ_TOC_EX_FORMAT_ATIP= $4;
    IOCTL_CDROM_READ_TOC_EX = $24054;
  type
    TCDID = array [0..2] of byte;
    CDROM_TOC_ATIP_DATA_BLOCK =record
      a1:  byte ;
        //UCHAR  CdrwReferenceSpeed : 3;
        //UCHAR  Reserved3          : 1;
        //UCHAR  WritePower        : 3;
        //UCHAR  True1              : 1;
      a2:  byte;
          //UCHAR  Reserved4      : 6;
          //UCHAR  UnrestrictedUse : 1;
          //UCHAR  Reserved5      : 1;
      a3:  byte;
          //UCHAR  A3Valid  : 1;
          // UCHAR  A2Valid  : 1;
          //UCHAR  A1Valid  : 1;
          //UCHAR  Reserved6 : 3;
          //UCHAR  IsCdrw    : 1;
          //UCHAR  True2    : 1;
      Reserved7:Byte;
      LeadInMsf:array[0..2]of Byte;
      Reserved8:Byte;
      LeadOutMsf:array[0..2]of Byte;
      Reserved9:Byte ;
      A1Values:array[0..2]of Byte;
      Reserved10:Byte ;
      A2Values:array[0..2]of Byte;
      Reserved11:Byte ;
      A3Values :array[0..2]of Byte;
      Reserved12:Byte;
    end;
    CDROM_READ_TOC_EX = record
      par1: byte;
      //Format : UCHAR:4 ;
      // Reserved1 : UCHAR:3;
      // Msf : UCHAR:1 ;
      SessionTrack:Byte;
      Reserved2:Byte ;
      Reserved3:Byte;
    end;
    CDROM_TOC_ATIP_DATA =record
        Length:array [0..1] of Byte;
        Reserved1:Byte;
        Reserved2:Byte;
        Descriptors: array [0..0] of CDROM_TOC_ATIP_DATA_BLOCK;
    end;

  function GetCDDiskManufactureID( ADriveLetter: Char; var AID: TCDID ): Boolean;
  var
    hCDDevice : THandle;
    in_data: CDROM_READ_TOC_EX;
    out_size: DWORD;
    out_data: CDROM_TOC_ATIP_DATA ;
  begin

    ZeroMemory(@AID, SizeOf(TCDID));
    Result := False;

    FillChar( in_data,SizeOf(in_data),0);
    FillChar( out_data,SizeOf(out_data),0);
    in_data.par1 := CDROM_READ_TOC_EX_FORMAT_ATIP or (1 shl 7);
    in_data.SessionTrack :=  0;
    hCDDevice := CreateFile( PChar( '\\.\'+ADriveLetter+':'),
                                    GENERIC_READ,
                                    FILE_SHARE_READ or FILE_SHARE_WRITE,
                                    nil,
                                    OPEN_EXISTING,
                                    FILE_ATTRIBUTE_NORMAL, 0 );
    if hCDDevice <> INVALID_HANDLE_VALUE then
    begin
       Result := DeviceIoControl( hCDDevice,
                                  IOCTL_CDROM_READ_TOC_EX,
                                  @in_data,
                                  sizeof(in_data),
                                  @out_data,
                                  sizeof(out_data),
                                  out_size,
                                  nil );

       if Result then
       begin
         move( out_data.Descriptors[0].LeadInMsf[0], AID[0], 3 )
//         AIDstr := Format( '%.2d%.2d%.2d', [ out_data.Descriptors[0].LeadInMsf[0],
//                                          out_data.Descriptors[0].LeadInMsf[1],
//                                          out_data.Descriptors[0].LeadInMsf[2]])
       end ;
      CloseHandle( hCDDevice );
   end;
  end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)