Как проверить, есть ли диск в дисководе (или CD-ROM-e)

Следующая функция в качестве параметра принимает букву диска. Возвращаемое значение сигнализирует о наличие диска в дисководе или отсутствии:

function DiskInDrive(Drive: Char): Boolean;
var
ErrorMode: word;
begin
   { переводим в верхний регистр }
   if Drive in ['a'..'z'] then Dec(Drive, $20);    { убеждаемся, что это буква }
   if not (Drive in ['A'..'Z']) then
      raise EConvertError.Create('Not a valid drive ID');
      { отключаем критические ошибки }
      ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
      try
      { диск 1 = a, 2 = b, 3 = c, и т.д. }
      if DiskSize(Ord(Drive) - $40) = -1 then
         Result := False
      else
         Result := True;
   finally
   { восстанавливаем старый режим ошибок }
   SetErrorMode(ErrorMode);
   end;
end;