AVCSTRM_ABORT_STREAMING
Il codice della funzione AVCSTRM_ABORT_STREAMING annulla tutte le richieste di dati in sospeso e libera le risorse usate.
Blocco dello stato I/O
In caso di esito positivo, avcstrm.sys imposta Irp-IoStatus.Status> su STATUS_SUCCESS.
I valori restituiti di errore possibili includono:
Stato errore | Descrizione |
---|---|
STATUS_DEVICE_REMOVED | Il dispositivo corrispondente all'operazione di AVCSTRM_READ non esiste più. |
STATUS_CANCELLED | Impossibile completare la richiesta. |
STATUS_INVALID_PARAMETER | Un parametro specificato in IRP non è corretto. |
STATUS_INSUFFICIENT_RESOURCES | Non sono state necessarie risorse di sistema sufficienti per completare la richiesta. |
STATUS_PENDING | La richiesta è stata ricevuta ma richiede un'ulteriore elaborazione. La routine di completamento di I/O gestirà la risposta finale. |
AVC_STREAM_REQUEST_BLOCK Input
SizeOfThisBlock, versione e funzione
Utilizzare la macro INIT_AVCSTRM_HEADER per inizializzare questi membri. Passare AVCSTRM_ABORT_STREAMING nell'argomento Request della macro.
AVCStreamContext
Specifica il contesto del flusso (handle) restituito da una chiamata AVCSTRM_OPEN precedente che rappresenta la destinazione per l'operazione di scrittura dei dati.
Un driver subunit deve prima allocare un IRP e una struttura AVC_STREAM_REQUEST_BLOCK .
Successivamente, deve utilizzare la macro INIT_AVCSTRM_HEADER per inizializzare la struttura AVC_STREAM_REQUEST_BLOCK, passando AVCSTRM_READ come argomento Request alla macro.
Successivamente, il driver subunit imposta il membro AVCStreamContext sul contesto di flusso (handle) del flusso per interrompere lo streaming.
Per inviare questa richiesta, una subunit invia un IRP_MJ_INTERNAL_DEVICE_CONTROL IRP con il membro IoControlCode dell'IRP impostato su IOCTL_AVCSTRM_CLASS e il membro Argument1 dell'IRP impostato sulla struttura AVC_STREAM_REQUEST_BLOCK che descrive l'operazione di streaming di interruzione da eseguire.
Questo codice di funzione deve essere chiamato in PASSIVE_LEVEL. Quando un IRP dei dati viene annullato, può essere eseguito in DISPATCH_LEVEL. In questo caso, una subunit deve avviare un elemento di lavoro e chiamare questa funzione nella routine dell'elemento di lavoro, che viene eseguita nel PASSIVE_LEVEL.
Commenti
Si noti che questa funzionalità annulla tutti i runtime di integrazione di streaming. Per annullare un singolo IRP, usare IoCancelIrp.
Una subunit deve chiamare questa operazione quando il dispositivo di destinazione viene rimosso o l'IRP dei dati originali viene annullato per arrestare l'operazione di flusso.
Questa funzione non usa alcun membro dell'unione CommandData nella struttura AVC_STREAM_REQUEST_BLOCK.
typedef struct _AVC_STREAM_REQUEST_BLOCK {
ULONG SizeOfThisBlock;
ULONG Version;
AVCSTRM_FUNCTION Function;
.
.
PVOID AVCStreamContext;
.
.
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;
Requisiti
Intestazioni: Dichiarato in avcstrm.h. Includere avcstrm.h.