ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Определение типа CD носителя
  #1  
Старый 24.12.2008, 01:05
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию Определение типа CD носителя

Вот решил выложить одну свою функцию для определения типа носителя вставленного в DVD-ROM.
Из-за специфики работы дивидиромов - они не показывают тип диска если не поддерживают его.
т.е. если DVD не пише DVD-R то все вставленные не пустые DVD-R диски будут показываться как DVD-ROM.

Мож кому пригодиться )
Код:
program Project2;
uses windows;
{$APPTYPE CONSOLE}


const
 IOCTL_CDROM_GET_CONFIGURATION=$00024058;
 SCSI_GET_CONFIGURATION_REQUEST_TYPE_ONE=2;
 DiskTypeName:array[0..18] of string=(
  'Invalid','NonRemovableDisk','RemovableDisk','MOErasable',
  'MOWriteOnce','AS_MO','CD-ROM','CD-R',
  'CD-RW','DVD-ROM','DVD-R','DVD-RAM',
  'DVD-RW','DVD-RW Sequential','DVD+RW','DVD+R','DDCD-ROM',
  'DDCD-R','DDCD-RW');
 DiskTypeCode:array[0..18] of word=
 (0,1,2,3,4,5,8,9,10,16,17,18,19,20,26,27,32,33,34);
type
GET_CONFIGURATION_IOCTL_INPUT=packed record
 Feature:dword;
 RequestType:dword;
 Reserved:array[0..1] of pointer;
end;
GET_CONFIGURATION_HEADER=packed record
 DataLength:dword;
 Reserved:word;
 CurrentProfile:word;
 Data:char;
end;
PGET_CONFIGURATION_HEADER=^GET_CONFIGURATION_HEADER;

function SWAP(dw:word):word;assembler;
asm
 xchg ah,al
end;

function GetDiskType(Disk:char):string;
var
 h:dword;
 ret:LongBool;
 input:GET_CONFIGURATION_IOCTL_INPUT;
 pConfigHeader:PGET_CONFIGURATION_HEADER;
 retbc:cardinal;
 x:integer;
begin
 h:=CreateFile(pchar('\\.\'+Disk+':'),GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0);
 if h=INVALID_HANDLE_VALUE then
  begin
   result:='Error';
   exit;
  end;
 ZeroMemory(@input, sizeof(GET_CONFIGURATION_IOCTL_INPUT));
 input.RequestType:=SCSI_GET_CONFIGURATION_REQUEST_TYPE_ONE;
 input.Feature:=0;
 getmem(pConfigHeader,32);
 ret:=DeviceIoControl(h,IOCTL_CDROM_GET_CONFIGURATION,@input, sizeof(GET_CONFIGURATION_IOCTL_INPUT),pConfigHeader,32, retbc, nil);
 if not ret then
  begin
   result:='Error';
   CloseHandle(h);
   exit;
  end;
 for x:=0 to 18 do
  if pConfigHeader^.CurrentProfile=SWAP(DiskTypeCode[x]) then
   begin
    result:=DiskTypeName[x];
    break;
   end;
  freemem(pConfigHeader);
 CloseHandle(h);
end;

begin
 writeln(GetDiskType('I'));
end.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Криптоанализ туннельного протокола типа точка-точка(PPTP) от Microsoft bobob Чужие Статьи 3 15.08.2006 00:50
Внедрение Sql кода с завязанными глазами k00p3r Чужие Статьи 0 12.06.2005 20:48
Телевизор на халяву или типа этого Morph Болталка 7 29.10.2004 11:42
типа доступ в локале Болталка 5 04.03.2004 11:37



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ