GetDescriptor-rutin för Lagringsklassdrivrutin

För dataöverföringsåtgärder behöver lagringsklassdrivrutiner konfigurationsinformation om varje HBA som kör en buss som deras enheter är anslutna till. För att få den här informationen anropar en klassdrivrutin antingen en intern GetDescriptor-rutin eller implementerar samma funktioner i sin StartDevice-rutin . (Information om StartDevice finns i Hantera PnP-start i en lagringsklassdrivrutin.)

En GetDescriptor-rutin skapar och konfigurerar begäranden om frågeegenskap (IRP_MJ_DEVICE_CONTROL med IOCTL_STORAGE_QUERY_PROPERTY) för portdrivrutinen för att hämta enhets- och adapterbeskrivningar som klassdrivrutinen lagrar i enhetstillägget. Klassdrivrutinen kan också ange drivrutinförfattarbestämda flaggor i ett enhetstillägg enligt de returnerade deskriptordata.

Klassdrivrutinen inspekterar de returnerade STORAGE_DEVICE_DESCRIPTOR data för att fastställa enhetsfunktioner (SCSI-undersökningsdata eller icke-SCSI-motsvarigheten), till exempel SCSI-enhetstypen, om enhetens media (om det finns några) är flyttbara (RemovableMedia), om enheten stöder flera utestående kommandon (CommandQueueing) och olika ID-strängar. Klassdrivrutinen inspekterar den returnerade STORAGE_ADAPTER_DESCRIPTOR datan för att fastställa adapterfunktioner, inklusive:

  • Det maximala antalet byte som en viss HBA kan överföra i en enda åtgärd (MaximumTransferLength).

  • Om HBA kan överföra buffrade data som backas upp av icke-sammanhängande fysiska sidor (med andra ord om det stöder punkt-/insamling), hur många icke-sammanhängande fysiska sidor per buffert som den kan hantera, per överföringsåtgärd (MaximumPhysicalPages).

  • HBA:s justeringskrav för överföringar så att klassdrivrutinen korrekt kan ange fältet AlignmentRequirement i sina enhetsobjekt (AlignmentMask).

    Program som skickar IOCTL_SCSI_PASS_THROUGH begäranden kan också använda det här fältet.

    Mer information om hur du konfigurerar AlignmentRequirement i enhetsobjekt finns i Initiera ett enhetsobjekt.

  • Om HBA stöder SCSI-taggade köer och/eller interna köer per logisk enhet (CommandQueueing).

  • Om HBA stöder synkrona överföringar (AcceleratedTransfer).

  • Om HBA cachelagrar data internt (CachesData).

Klassdrivrutinen bör lagra den här informationen i FDO:ns enhetstillägg så att dess sändningsrutiner kan säkerställa att alla begäranden som skickas till lagringsportdrivrutinen överensstämmer med storleken, antalet fysiska avbrott och justeringskraven för den underliggande HBA:n. Mer information om distributionsrutiner för klassdrivrutiner finns i Lagringsklassdrivrutinens dispatch-rutiner. Mer information om hur du konfigurerar enhetstillägg finns i Konfigurera en lagringsklassdrivrutins enhetstillägg.