Verrouillage et déverrouillage d’un port parallèle à utiliser par un appareil parallèle
Pour exécuter une séquence ininterrompue d’opérations sur un appareil parallèle, un client doit allouer le port parallèle et sélectionner l’appareil IEEE 1284.3 sur le port. Une séquence d’opérations peut inclure l’exécution des demandes d’E/S et l’exécution des routines de rappel fournies par le pilote de bus de port parallèle. Après avoir terminé une séquence d’opérations, un client doit désélectionner l’appareil IEEE 1284.3, puis libérer le port parallèle parent.
Le pilote de bus fourni par le système pour les ports parallèles prend en charge les demandes de contrôle d’appareil internes suivantes pour verrouiller et déverrouiller un port parallèle :
IOCTL_INTERNAL_LOCK_PORT_NO_SELECT
IOCTL_INTERNAL_UNLOCK_PORT_NO_DESELECT
Microsoft recommande aux clients d’utiliser le port de verrouillage et les demandes de port de déverrouillage si les appareils peuvent être utilisés uniquement à l’aide des fonctionnalités que ces demandes fournissent. Dans le cas contraire, les clients peuvent utiliser le port de verrouillage sans sélection et le port de verrouillage aucune demande de désélection. Cela offre au client une flexibilité supplémentaire pour utiliser un appareil qui utilise un mécanisme de sélection et de désélection qui n’est pas conforme aux spécifications de la chaîne daisy IEEE 1284.3. Un client peut utiliser le port de verrouillage sans demande de sélection pour allouer le port, puis utiliser l’appareil à l’aide de demandes de contrôle d’appareil pour les appareils parallèles et lesroutines de rappel d’appareil parallèles.
Les clients peuvent envoyer des demandes d’E/S individuelles à des appareils parallèles sans qu’il soit nécessaire de verrouiller et de déverrouiller un port parallèle, car le pilote de bus de port parallèle gère le partage de ports entre les clients. Le pilote de bus de port parallèle alloue automatiquement le port parallèle immédiatement avant de traiter une demande d’E/S et, si des clients attendent le port, libère le port immédiatement après avoir terminé la demande d’E/S.
Si le pilote de bus de port parallèle peut allouer le port à l’appareil parallèle dans un délai d’attente défini, le thread de travail de l’appareil termine la demande. Sinon, le pilote de bus de port parallèle termine la requête en attente avec une status de STATUS_DEVICE_BUSY.