Как я могу исключить виртуальные диски из массива дисков - PullRequest
1 голос
/ 28 марта 2011

Я получил список всех драйверов, которые я получил на своем компьютере, затем я получил их типы, исключающие дисководы для компакт-дисков, но я хочу удалить виртуальные дисководы, когда я возвращаю реальный дисковод для компакт-дисков и виртуальные дисководы (как флэш-память, USB...)

Ответы [ 2 ]

2 голосов
/ 28 марта 2011

Сара, я думаю, что твой реальный вопрос должен быть, как я могу определить, является ли CD-ROM (или любой) дисковод виртуальным дисководом? поэтому ответ на этот вопрос таков: виртуальные приводы работают и ведут себя так же, как физические приводы CD / DVD, также нет никакого свойства, которое идентифицирует привод как виртуальный , потому что, насколько я знаю, существует не существует какого-либо надежного метода определения виртуального диска. единственное приближенное возможное решение для вашего вопроса - это создать список драйверов SCSI, IDE (что-то вроде словаря), связанных с виртуальными дисками (содержащими строки типа Virtual CloneDrive ), после чего вы можете получить связанный контроллер SCSI или IDE, связанный с дисководом CDROM, и выполните поиск в списке контроллеров виртуальных дисков, чтобы определить, является ли диск виртуальным или нет.

0 голосов
/ 29 марта 2011

Я не уверен, поможет ли это, но в качестве альтернативы вы можете попробовать проверить, готовы ли накопители. Пустые компакт-диски и пустые USB-устройства вернут false, если они не готовы. Это хороший способ удалить из списка не готовые диски.

function IsDriveReady( const ADrive: string ): boolean;
{ Checks if a local drive is ready. Drive must be a valid local drive (A:\ to Z:\). }
var
  ErrorMode: word; // current error mode
  DriveNum: integer; // zero based number of drive
begin
  Result := False;
  // Get zero based drive number
  DriveNum := GetDriveNumber( ADrive );
  if DriveNum = -1 then
    exit;
  ErrorMode := Windows.SetErrorMode( Windows.SEM_FAILCRITICALERRORS );
  try
    // DiskSize requires 1 based drive numbers
    // returns -1 for invalid drives
    if SysUtils.DiskSize( DriveNum + 1 ) <> -1 then
      Result := True;
  finally
    Windows.SetErrorMode( ErrorMode );
  end;
end; 
...