Partager via


IOCTL_CDROM_EXCLUSIVE_ACCESS IOCTL (ntddcdrm.h)

La demande IOCTL_CDROM_EXCLUSIVE_ACCESS indique au pilote de classe CD-ROM :

  • Signaler l’état d’accès d’un périphérique CD-ROM.
  • Verrouillez un périphérique 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 cet 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 libération 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 des paquets de requête d’E/S CLEANUP et CLOSE, 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 libérations 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 dans 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 du périphérique CD-ROM (RequestType = ExclusiveAccessQueryState), le pilote de classe CD-ROM retourne une structure de type CDROM_EXCLUSIVE_LOCK_STATE dans la mémoire tampon sur 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 État est défini sur STATUS_SUCCESS si la demande réussit.

Si la demande échoue, le champ État 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 status lorsque l’une des deux erreurs suivantes se produit :

  • L’appelant a effectué la demande à un 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 périphérique pendant que le pilote du système de fichiers était monté sur ce périphérique, sans spécifier que le pilote de classe doit suspendre la case activée pour un pilote de système de fichiers monté. Pour suspendre la case activée d’un pilote de système de fichiers monté, l’appelant doit définir le membre Indicateurs 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 status lorsque l’une des deux erreurs suivantes se produit :

  • L’objet file requis pour effectuer le suivi de la demande n’était pas disponible. Le pilote de classe CD-ROM n’a pas reçu de demande de création d’objet file à 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 status lorsque l’une des deux erreurs suivantes se produit :

  • Le Type de requête spécifié n’est pas un membre valide de EXCLUSIVE_ACCESS_REQUEST_TYPE.
  • La chaîne de nom de l’appelant dans le membre CallerName de CDROM_EXCLUSIVE_LOCK enfreint la convention d’affectation de noms. CallerName doit être une chaîne terminée par NULL qui contient les caractères suivants : alphanumériques (A - Z, a - z, 0 - 9), espaces, 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 valeur NULL à la fin de la chaîne.

Configuration requise

Condition requise Valeur
En-tête ntddcdrm.h (incluez Ntddcdrm.h)

Voir aussi

CDROM_EXCLUSIVE_ACCESS

CDROM_EXCLUSIVE_LOCK

CDROM_EXCLUSIVE_LOCK_STATE

EXCLUSIVE_ACCESS_REQUEST_TYPE

IO_STACK_LOCATION