Condividi tramite


IOCTL_STORAGE_MCN_CONTROL IOCTL (ntddstor.h)

Abilita o disabilita temporaneamente il recapito degli eventi PnP personalizzati GUID_IO_MEDIA_ARRIVAL e GUID_IO_MEDIA_REMOVAL in un dispositivo multimediale rimovibile. In questo modo, a sua volta, abilita o disabilita il rilevamento delle modifiche multimediali (AutoPlay) per il dispositivo se il chiamante ha aperto il dispositivo con accesso FILE_READ_ATTRIBUTES e se il dispositivo ha AutoPlay abilitato nel Registro di sistema. Il chiamante non deve aprire il dispositivo per l'accesso in lettura o in scrittura oppure l'operazione IOCTL avrà esito negativo. Questo IOCTL non ha alcun effetto sull'impostazione AutoPlay nel Registro di sistema.

Un driver per un dispositivo rimovibile di questo tipo deve eseguire le operazioni seguenti:

  1. Mantenere un conteggio delle richieste di disabilitazione, per dispositivo fisico, nell'estensione dell'oggetto dispositivo.
  2. Quando viene chiamato con questo IOCTL, se il flag per disabilitare il rilevamento delle modifiche multimediali è impostato, incrementare il conteggio; se il flag è chiaro, decrementare il conteggio.
  3. Impostare l'evento di modifica multimediale per il dispositivo quando lo stato del supporto viene modificato solo se il conteggio delle richieste di disabilitazione è zero.
Quando il IRP_MJ_DEVICE_CONTROL IRP che contiene questo IOCTL viene passato al driver di classe SCSI, il membro FileObject del IO_STACK_LOCATION corrente deve puntare a un oggetto file valido. Il driver di classe SCSI richiede un oggetto file per i casi in cui un'applicazione in modalità utente che disabilita o abilita AutoPlay termina in modo imprevisto. In questi casi, il driver di classe SCSI usa l'oggetto file per riabilitare il rilevamento delle modifiche multimediali. Poiché l'oggetto file è necessario per la corretta pulizia, il driver di classe SCSI causerà l'esito negativo di IRP con un messaggio di errore di STATUS_INVALID_PARAMETER se il FileObject membro di IO_STACK_LOCATION non punta a un oggetto file valido. Se un'applicazione in modalità utente apre il dispositivo, il gestore di I/O inizializza questo membro, ma i writer di driver in modalità kernel non devono presupporre che FileObject verrà inizializzato correttamente quando l'IRP viene generato da un'applicazione in modalità utente. Se, ad esempio, un'applicazione in modalità utente apre erroneamente il dispositivo per l'accesso in lettura o scrittura prima di inviare IOCTL, l'IRP del controllo del dispositivo verrà instradato attraverso il file system, impedendo al driver di classe SCSI e al driver di dispositivo di accedere direttamente all'oggetto file del dispositivo.

Codice principale

IRP_MJ_DEVICE_CONTROL

Buffer di input

Il buffer in corrispondenza di Irp->AssociatedIrp.SystemBuffer contiene un valore booleano, con TRUE che indica che il driver deve disabilitare il rilevamento delle modifiche multimediali.

Lunghezza del buffer di input

Lunghezza di un valore Boolean.

Buffer di output

Nessuno.

Lunghezza del buffer di output

Nessuno.

Blocco di stato

Il campo informazioni è impostato su zero. Il campo Stato è impostato su STATUS_SUCCESS oppure su STATUS_BUFFER_TOO_SMALL, STATUS_INVALID_PARAMETER o STATUS_INVALID_DEVICE_STATE.

Fabbisogno

Requisito Valore
intestazione ntddstor.h (include Ntddstor.h)

Vedere anche

IO_STACK_LOCATION