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.
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 à Irp->AssociatedIrp.SystemBuffer:
-
CDROM_EXCLUSIVE_ACCESS (pour signaler l’état d’accès d’un appareil CD-ROM)
-
CDROM_EXCLUSIVE_LOCK (pour verrouiller un appareil CD-ROM pour un accès exclusif)
-
CDROM_EXCLUSIVE_ACCESS (pour déverrouiller un appareil 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 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) |