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.
Affinché questo oggetto IOCTL abbia esito positivo, è necessario che esista un handle FileObject valido. L'handle FileObject protegge il sistema dalla chiusura imprevista dell'applicazione o dall'acquisizione accidentale di un blocco di accesso esclusivo senza rilascio successivo del blocco di accesso esclusivo. È necessario un handle FileObject valido perché, quando un'applicazione si chiude, il driver di classe CD-ROM riceverà i pacchetti di richiesta I/O CLEANUP e CLOSE, che può usare per rilasciare automaticamente un blocco di accesso esclusivo ottenuto da tale handle. Questo metodo semplice protegge dalla maggior parte delle versioni accidentali di accesso esclusivo. Qualsiasi metodo usato per evitare questa funzionalità può ridurre la sicurezza e l'efficacia del metodo di blocco dell'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_STATEnel buffer in corrispondenza Irp->AssociatedIrp.SystemBuffer il cui membro LockState indica lo stato di accesso del dispositivo.

Lunghezza del buffer di output

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

Blocco di 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 di 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 di 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 un livello IRQL diverso da PASSIVE_LEVEL.
  • Il chiamante ha inviato una richiesta con RequestType = ExclusiveAccessUnlockDevice per sbloccare un dispositivo 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 di un driver di file system montato. Per sospendere il controllo di un driver di file system montato, il chiamante deve impostare il Flag membro 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:

  • L'oggetto file necessario per tenere traccia della richiesta non era 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 di 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:

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

Fabbisogno

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

Vedere anche

CDROM_EXCLUSIVE_ACCESS

CDROM_EXCLUSIVE_LOCK

CDROM_EXCLUSIVE_LOCK_STATE

EXCLUSIVE_ACCESS_REQUEST_TYPE

IO_STACK_LOCATION