Udostępnij przez


Procedura GetDescriptor sterownika klasy pamięci

W przypadku operacji transferu danych sterowniki klas magazynowania potrzebują informacji o konfiguracji każdej karty HBA kierującej magistralę, do której są dołączone ich urządzenia. Aby uzyskać te informacje, sterownik klasy wywołuje wewnętrzną procedurę GetDescriptor lub implementuje te same funkcje w swojej procedurze StartDevice . (Aby uzyskać informacje na temat StartDevice, zobacz temat Obsługi PnP Start w sterowniku klasy pamięci masowej.)

Procedura GetDescriptor kompiluje i konfiguruje żądania właściwości zapytania (IRP_MJ_DEVICE_CONTROL za pomocą IOCTL_STORAGE_QUERY_PROPERTY) dla sterownika portu w celu pobrania deskryptorów urządzeń i adapterów, które sterownik klasy przechowuje w rozszerzeniu urządzenia. Sterownik klasy może również ustawić flagi określone przez sterownik w rozszerzeniu urządzenia zgodnie ze zwróconymi danymi deskryptora.

Sterownik klasy sprawdza zwrócone dane STORAGE_DEVICE_DESCRIPTOR , aby określić możliwości urządzenia (dane zapytania SCSI lub odpowiednik innego niż SCSI), takie jak typ urządzenia SCSI, czy nośnik urządzenia (jeśli istnieje) jest wymienny (RemovableMedia), czy urządzenie obsługuje wiele zaległych poleceń (CommandQueueing) i różne ciągi identyfikatorów. Sterownik klasy sprawdza zwrócone dane STORAGE_ADAPTER_DESCRIPTOR w celu określenia możliwości adaptera, w tym:

  • Maksymalna liczba bajtów, jaką określona karta HBA może przenieść w ramach jednej operacji (MaximumTransferLength).

  • Jeśli karta HBA może przesyłać buforowane dane wspierane przez nieciągłe strony fizyczne (innymi słowy, jeśli obsługuje rozproszone/zebrane), ile nieciągłych stron fizycznych na bufor może obsłużyć, na jedną operację transferu (MaximumPhysicalPages).

  • Wymagania dotyczące wyrównania karty HBA w związku z transferami, aby sterownik klasy mógł właściwie ustawić pole AlignmentRequirement w obiektach urządzenia (AlignmentMask).

    Aplikacje wysyłające żądania IOCTL_SCSI_PASS_THROUGH mogą również używać tego pola.

    Aby uzyskać więcej informacji na temat konfigurowania funkcji AlignmentRequirement w obiektach urządzeń, zobacz Inicjowanie obiektu urządzenia.

  • Czy HBA obsługuje kolejkowanie SCSI z tagowaniem i/lub wewnętrzne kolejki dla jednostek logicznych (CommandQueueing).

  • Czy karta HBA obsługuje transfery synchroniczne (AcceleratedTransfer).

  • Określa, czy karta HBA buforuje dane wewnętrznie (CachesData).

Sterownik klasy powinien przechowywać te informacje w rozszerzeniu urządzenia FDO, aby procedury wysyłki mogły upewnić się, że wszystkie żądania wysyłane do sterownika portu pamięci masowej są zgodne z rozmiarem, liczbą przerw fizycznych i wymaganiami wyrównania podstawowego adaptera magistrali hosta. Aby uzyskać więcej informacji na temat rut dyspozycyjnych sterownika klasy, zobacz Ruty dyspozycyjne sterownika klasy magazynu. Aby uzyskać więcej informacji na temat konfigurowania rozszerzeń urządzenia, zobacz Konfigurowanie rozszerzenia urządzenia sterownika klasy pamięci masowej.