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.
Code principal
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> :
-
CDROM_EXCLUSIVE_ACCESS (pour signaler l’état d’accès d’un périphérique CD-ROM)
-
CDROM_EXCLUSIVE_LOCK (pour verrouiller un périphérique CD-ROM pour un accès exclusif)
-
CDROM_EXCLUSIVE_ACCESS (pour déverrouiller un périphérique CD-ROM verrouillé par l’application pour un accès exclusif)
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) |