Condividi tramite


IOCTL_CDROM_EXCLUSIVE_ACCESS IOCTL (ntddcdrm.h)

La richiesta di IOCTL_CDROM_EXCLUSIVE_ACCESS indica al driver di classe CD-ROM di:

  • Segnalare lo stato di accesso di un dispositivo CD-ROM.
  • Bloccare un dispositivo CD-ROM per l'accesso esclusivo.
  • Sbloccare un dispositivo CD-ROM per l'accesso esclusivo.
Un handle FileObject valido deve esistere per consentire a questo oggetto IOCTL di avere esito positivo. L'handle FileObject protegge il sistema dalla terminazione imprevista dell'applicazione o dall'acquisizione accidentale di un blocco di accesso esclusivo senza rilascio successivo del blocco di accesso esclusivo. Un handle FileObject valido è necessario perché quando un'applicazione chiude, il driver di classe CD-ROM riceverà i pacchetti di richiesta DI PULIZIA e CLOSE I/O (IRP), che può usare per rilasciare automaticamente un blocco di accesso esclusivo ottenuto da tale handle. Questo semplice metodo protegge dalla maggior parte delle versioni accidentali di accesso esclusivo. Tutti i metodi usati per evitare questa funzionalità possono ridurre la sicurezza e l'efficacia del metodo di blocco di accesso esclusivo.

Codice principale

IRP_MJ_DEVICE_CONTROL

Buffer di input

A seconda dell'operazione richiesta dal chiamante, il chiamante deve fornire una delle strutture seguenti come input in Irp-AssociatedIrp.SystemBuffer>:

Lunghezza del buffer di input

Il membro Parameters.DeviceIoControl.InputBufferLength nella struttura IO_STACK_LOCATION indica le dimensioni, in byte, del buffer di input allocato dall'utente.

Buffer di output

Se il chiamante richiede lo stato di accesso esclusivo del dispositivo CD-ROM (RequestType = ExclusiveAccessQueryState), il driver di classe CD-ROM restituisce una struttura di tipo CDROM_EXCLUSIVE_LOCK_STATE nel buffer in Irp-AssociatedIrp.SystemBuffer>il cui membro LockState indica lo stato di accesso del dispositivo.

Lunghezza del buffer di output

Il membro Parameters.DeviceIoControl.OutputBufferLength nella posizione dello stack I/O (IO_STACK_LOCATION) indica le dimensioni, in byte, del buffer di output.

Blocco dello stato

Il campo Informazioni è impostato sul numero di byte restituiti. Il campo Stato è impostato su STATUS_SUCCESS se la richiesta ha esito positivo.

Se la richiesta ha esito negativo, il campo Stato potrebbe essere impostato su uno dei messaggi di errore seguenti:

STATUS_ACCESS_DENIED (codice errore di Windows: ERROR_ACCESS_DENIED)

Il dispositivo è già bloccato per l'accesso esclusivo.

STATUS_BUFFER_TOO_SMALL (codice errore di Windows: ERROR_INSUFFICIENT_BUFFER)

Il buffer di output era troppo piccolo per una richiesta ExclusiveAccessQueryState .

STATUS_INFO_LENGTH_MISMATCH (codice errore di Windows: ERROR_BAD_LENGTH)

Il buffer di input era troppo piccolo.

STATUS_INVALID_DEVICE_REQUEST (codice errore di Windows: ERROR_INVALID_FUNCTION)

Il driver di classe CD-ROM restituisce questo codice di stato quando si verifica uno dei due errori seguenti:

  • Il chiamante ha effettuato la richiesta a livello IRQL diverso da PASSIVE_LEVEL.
  • Il chiamante ha inviato una richiesta con RequestType = ExclusiveAccessUnlockDevice per sbloccare un dispositivo che non è in modalità esclusiva.

STATUS_INVALID_DEVICE_STATE (codice errore di Windows: ERROR_BAD_COMMAND)

Il chiamante ha tentato di bloccare un dispositivo mentre il driver del file system è stato montato su questo dispositivo, senza specificare che il driver di classe deve sospendere il controllo per un driver di file system montato. Per sospendere il controllo di un driver di file system montato, il chiamante deve impostare il membro Flags di CDROM_EXCLUSIVE_ACCESS su 1.

STATUS_INVALID_HANDLE (codice errore di Windows: ERROR_INVALID_HANDLE)

Il driver di classe CD-ROM restituisce questo codice di stato quando si verifica uno dei due errori seguenti:

  • Oggetto file necessario per tenere traccia della richiesta non disponibile. Il driver di classe CD-ROM non ha ricevuto una richiesta per creare un oggetto file da questo chiamante.
  • Il chiamante ha inviato una richiesta con RequestType = ExclusiveAccessUnlockDevice per sbloccare un dispositivo, anche se il chiamante non ha accesso esclusivo al dispositivo.

STATUS_INVALID_PARAMETER (codice errore di Windows: ERROR_INVALID_PARAMETER)

Il driver di classe CD-ROM restituisce questo codice di stato quando si verifica uno dei due errori seguenti:

  • RequestType specificato non è un membro valido di EXCLUSIVE_ACCESS_REQUEST_TYPE.
  • La stringa del nome del chiamante nel membro CallerName di CDROM_EXCLUSIVE_LOCK viola la convenzione di denominazione. CallerName deve essere una stringa con terminazione NULL che contiene i caratteri seguenti: alfanumerici (A - Z, a - z, 0 - 9), spazi, punti, virgole, punti (:), punti e virgola (;), trattini (-) e sottolineatura (_). La lunghezza della stringa deve essere minore di CDROM_EXCLUSIVE_CALLER_LENGTH byte, incluso NULL alla fine della stringa.

Requisiti

Requisito Valore
Intestazione ntddcdrm.h (include Ntddcdrm.h)

Vedi anche

CDROM_EXCLUSIVE_ACCESS

CDROM_EXCLUSIVE_LOCK

CDROM_EXCLUSIVE_LOCK_STATE

EXCLUSIVE_ACCESS_REQUEST_TYPE

IO_STACK_LOCATION