Esquissons l'image.Comment émuler le périphérique SCSI
Windows fournit un pilote de port SCSI (bus). Le pilote crée FDO
pour le bus (FILE_DEVICE_BUS_EXTENDER
) et PDO
pour chaque périphérique connecté au bus (FILE_DEVICE_MASS_STORAGE
). Nous "connectons" les périphériques de stockage de masse au périphérique de bus dans le gestionnaire de requêtes PnP.
Windows fournit également un pilote de classe (pour chaque classe d'unités) qui est placé en couches au-dessus du pilote de port. Il forme une pile de périphériques avec FDO
au-dessus de PDO
pour chaque périphérique enfant.
Le pilote de classe envoie des ioctls internes au pilote de port; le code de fonction principal est IRP_MJ_SCSI
, le code de fonction secondaire est IRP_MN_SCSI_CLASS
, SCSI_REQUEST_BLOCK
structure est remplie avec des informations spécifiques à la demande.
Le pilote de port gère la communication avec le périphérique (transfert des données de SRB vers le périphérique/transfert de données de l'unité vers SRB) et termine la demande.
Imaginez maintenant que nous voulons émuler un périphérique scsi. Nous devons développer un pilote de port SCSI virtuel (bus). Ce pilote créera FDO
pour le bus (FILE_DEVICE_BUS_EXTENDER
) et PDO
pour chaque périphérique que nous allons créer (FILE_DEVICE_MASS_STORAGE
). Nous allons gérer les ioctls internes, faire la gestion des files d'attente irp, déplacer les données vers/depuis SRB, etc.
Je veux comprendre quelle "condition" doit être remplie pour que Windows "pense" que le périphérique SCSI est réel (donc qu'il apparaîtra à l'intérieur de l'explorateur, etc). Est-ce que le pilote de classe enverra automatiquement des ioctls internes dès que nous créerons un périphérique ou nous devrons émuler ces requêtes? Mes questions pourraient être stupides mais j'ai besoin de comprendre ce qui se passe pour comprendre plus. Merci de votre aide.