Partager via


IOCTL_CDROM_EXCLUSIVE_ACCESS IOCTL (ntddcdrm.h)

La requête IOCTL_CDROM_EXCLUSIVE_ACCESS indique au pilote de classe CD-ROM de :

  • Signalez l’état d’accès d’un appareil CD-ROM.
  • Verrouillez un appareil CD-ROM pour un accès exclusif.
  • Déverrouillez un appareil CD-ROM pour un accès exclusif.
Un handle FileObject valide doit exister pour que ce IOCTL réussisse. Le handle FileObject protège le système contre l’arrêt inattendu de l’application ou l’acquisition accidentelle d’un verrou d’accès exclusif sans publication ultérieure du verrou d’accès exclusif. Un handle FileObject valide est nécessaire, car lorsqu’une application se ferme, le pilote de classe CD-ROM reçoit CLEANUP et CLOSE E/S Request Packets (IRPs), qu’il peut utiliser pour libérer automatiquement un verrou d’accès exclusif obtenu par ce handle. Cette méthode simple protège contre la majorité des versions accidentelles d’accès exclusif. Toutes les méthodes utilisées pour éviter cette fonctionnalité peuvent réduire la sécurité et l’efficacité de la méthode de verrouillage d’accès exclusif.

Code principal

IRP_MJ_DEVICE_CONTROL

Mémoire tampon d’entrée

Selon l’opération que l’appelant demande, l’appelant doit fournir l’une des structures suivantes comme entrée à Irp->AssociatedIrp.SystemBuffer:

Longueur de la mémoire tampon d’entrée

Le membre Parameters.DeviceIoControl.InputBufferLength dans la structure IO_STACK_LOCATION indique la taille, en octets, de la mémoire tampon d’entrée allouée par l’utilisateur.

Mémoire tampon de sortie

Si l’appelant demande l’état d’accès exclusif de l’appareil CD-ROM (RequestType = ExclusiveAccessQueryState), le pilote de classe CD-ROM retourne une structure CDROM_EXCLUSIVE_LOCK_STATE-type dans la mémoire tampon à Irp->AssociatedIrp.SystemBuffer dont le membre LockState indique l’état d’accès de l’appareil.

Longueur de la mémoire tampon de sortie

Le membre Parameters.DeviceIoControl.OutputBufferLength dans l’emplacement de la pile d’E/S (IO_STACK_LOCATION) indique la taille, en octets, de la mémoire tampon de sortie.

Bloc d’état

Le champ Informations est défini sur le nombre d’octets retournés. Le champ Status est défini sur STATUS_SUCCESS si la requête réussit.

Si la requête échoue, le champ Status peut être défini sur l’un des messages d’erreur suivants :

STATUS_ACCESS_DENIED (code d’erreur Windows : ERROR_ACCESS_DENIED)

L’appareil est déjà verrouillé pour un accès exclusif.

STATUS_BUFFER_TOO_SMALL (code d’erreur Windows : ERROR_INSUFFICIENT_BUFFER)

La mémoire tampon de sortie était trop petite pour une requête exclusiveAccessQueryState.

STATUS_INFO_LENGTH_MISMATCH (code d’erreur Windows : ERROR_BAD_LENGTH)

La mémoire tampon d’entrée était trop petite.

STATUS_INVALID_DEVICE_REQUEST (code d’erreur Windows : ERROR_INVALID_FUNCTION)

Le pilote de classe CD-ROM retourne ce code d’état quand l’une des deux erreurs suivantes se produit :

  • L’appelant a effectué la requête au niveau IRQL autre que PASSIVE_LEVEL.
  • L’appelant a envoyé une requête avec RequestType = ExclusiveAccessUnlockDevice pour déverrouiller un appareil qui n’est pas en mode exclusif.

STATUS_INVALID_DEVICE_STATE (code d’erreur Windows : ERROR_BAD_COMMAND)

L’appelant a tenté de verrouiller un appareil pendant que le pilote du système de fichiers a été monté sur cet appareil, sans spécifier que le pilote de classe doit suspendre la vérification d’un pilote de système de fichiers monté. Pour suspendre la vérification d’un pilote de système de fichiers monté, l’appelant doit définir les indicateurs membre de CDROM_EXCLUSIVE_ACCESS sur 1.

STATUS_INVALID_HANDLE (code d’erreur Windows : ERROR_INVALID_HANDLE)

Le pilote de classe CD-ROM retourne ce code d’état quand l’une des deux erreurs suivantes se produit :

  • L’objet de fichier requis pour effectuer le suivi de la demande n’a pas été disponible. Le pilote de classe CD-ROM n’a pas reçu de demande de création d’un objet de fichier à partir de cet appelant.
  • L’appelant a envoyé une requête avec RequestType = ExclusiveAccessUnlockDevice pour déverrouiller un appareil, même si l’appelant n’a pas d’accès exclusif à l’appareil.

STATUS_INVALID_PARAMETER (code d’erreur Windows : ERROR_INVALID_PARAMETER)

Le pilote de classe CD-ROM retourne ce code d’état quand l’une des deux erreurs suivantes se produit :

  • Le RequestType spécifié n’est pas un membre valide de EXCLUSIVE_ACCESS_REQUEST_TYPE.
  • La chaîne de nom de l’appelant dans le CallerName membre de CDROM_EXCLUSIVE_LOCK enfreint la convention d’affectation de noms. CallerName doit être une chaîne NULL-terminated qui contient les caractères suivants : alphanumériques (A - Z, a - z, 0 - 9), espaces, points, virgules, deux-points (:), points-virgules, points-virgules (:), points-virgules (;), traits d’union (-) et traits de soulignement (_). La longueur de la chaîne doit être inférieure à CDROM_EXCLUSIVE_CALLER_LENGTH octets, y compris la NULL à la fin de la chaîne.

Exigences

Exigence Valeur
d’en-tête ntddcdrm.h (include Ntddcdrm.h)

Voir aussi

CDROM_EXCLUSIVE_ACCESS

CDROM_EXCLUSIVE_LOCK

CDROM_EXCLUSIVE_LOCK_STATE

EXCLUSIVE_ACCESS_REQUEST_TYPE

IO_STACK_LOCATION