IOCTL_STORAGE_QUERY_PROPERTY 如何设定呢?function Ctl_Code(DeviceType, FuncNo, Method, Access: integer): integer;
begin
  Result:= (DeviceType shl 16) or (Access shl 14) or (FuncNo shl 2) or (Method)
end;function GetDriveProperty(hDevice:Thandle;pDevDesc:PSTORAGE_DEVICE_DESCRIPTOR):Boolean;
var
    Query:STORAGE_PROPERTY_QUERY;    // 查询输入参数
    dwOutBytes:Dword;                // IOCTL输出数据长度
    IOCTL_STORAGE_QUERY_PROPERTY:integer;begin
    // 指定查询方式
    IOCTL_STORAGE_QUERY_PROPERTY:=Ctl_Code(IOCTL_STORAGE_BASE, $0500, METHOD_BUFFERED, FILE_ANY_ACCESS);
    Query.PropertyId:= StorageDeviceProperty;
    Query.QueryType:= PropertyStandardQuery;
    Result:=DeviceIoControl(hDevice, // 设备句柄
        IOCTL_STORAGE_QUERY_PROPERTY ,    // 取设备属性信息
        @Query,
        sizeof(Query),        // 输入数据缓冲区
        pDevDesc,              // 输出数据缓冲区
        pDevDesc.Size,         // 输出数据长度
        dwOutBytes,
        nil);             // 用同步I/O
    if getlasterror()<>0 then showmessage(inttostr(getlasterror()));
end;
procedure TForm1.Button9Click(Sender: TObject);
var
sDrv: Char;
sDrvLetter: String;
hDevice : THandle;
szBuf: PChar;
pDevDesc: PSTORAGE_DEVICE_DESCRIPTOR;
begin
  for sDrv := 'A' to 'Z' do
  begin
  sDrvLetter := sDrv + ':\';
    Case GetDriveType(PChar(sDrvLetter)) of
      DRIVE_RAMDISK:
        begin
          ShowMessage('test');
        end;
      DRIVE_FIXED :
        begin
          hDevice := CreateFile(PChar('\\.\' + LowerCase(sDrv) + ':'), GENERIC_READ,
          FILE_SHARE_READ or FILE_SHARE_WRITE, 0,
          OPEN_EXISTING, 0, 0);
          {hDevice:=CreateFile(pchar('\\?\'+LowerCase(sDrv)+':'),
          GENERIC_READ or GENERIC_WRITE,
          FILE_SHARE_READ or FILE_SHARE_WRITE,
          0,
          OPEN_EXISTING,
          FILE_FLAG_OVERLAPPED,
          0); }
          if (hDevice <> INVALID_HANDLE_VALUE) then begin          SetLength(pDevDesc.RawDeviceProperties, 512);
          pDevDesc.Size := SizeOf(pDevDesc) + 507;          if(GetDriveProperty(hDevice, pDevDesc)) then
          begin
            
            if pDevDesc.BusType = BusTypeUsb then
            begin
             ShowMessage('test');
            end;
          end;        end;
        CloseHandle(hDevice);
    end;
  end;
end;