AVCSTRM_GET_STATE
Il codice della funzione AVCSTRM_GET_STATE ottiene lo stato corrente del flusso specificato.
Blocco dello stato I/O
Se ha esito positivo, avcstrm.sys imposta Irp-IoStatus.Status> su STATUS_SUCCESS.
Se ha esito positivo, viene restituito un STATUS_SUCCESS. Il membro StreamState dell'unione CommandData ha lo stato corrente del flusso. Può essere KSSTATE_STOP, KSTATE_PAUSE o KSSTATE_RUN.
I valori restituiti degli errori 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 nell'IRP non è corretto, |
STATUS_INSUFFICIENT_RESOURCES | Le risorse di sistema non sono state 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
Usare la macro INIT_AVCSTRM_HEADER per inizializzare questi membri. Passare AVCSTRM_GET_STATE nell'argomento Request della macro.
AVCStreamContext
Specifica il contesto di flusso (handle) restituito da una chiamata precedente AVCSTRM_OPEN per ottenere lo stato del flusso.
StreamState
Se AVCSTRM_GET_STATE restituisce correttamente, questo membro contiene lo stato del flusso corrente.
Un driver subunit deve prima allocare un'IRP e una struttura AVC_STREAM_REQUEST_BLOCK . Successivamente, deve usare la macro INIT_AVCSTRM_HEADER per inizializzare la struttura AVC_STREAM_REQUEST_BLOCK , passando AVCSTRM_GET_STATE come argomento Request alla macro. Successivamente, il driver subunit imposta il membro AVCStreamContext sul contesto di flusso (handle) del flusso da cui ottenere lo stato del flusso.
Per inviare questa richiesta, un 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 il flusso da cui ottenere lo stato del flusso.
Un driver subunit può prevedere che questo comando venga completato in modo sincrono. Il risultato restituisce immediatamente senza l'operazione in sospeso in avcstrm.sys.
Questo codice di funzione deve essere chiamato in IRQL = PASSIVE_LEVEL.
Commenti
Questa funzione usa il membro StreamState dell'unione CommandData nella struttura AVC_STREAM_REQUEST_BLOCK, come illustrato di seguito.
typedef struct _AVC_STREAM_REQUEST_BLOCK {
ULONG SizeOfThisBlock;
ULONG Version;
AVCSTRM_FUNCTION Function;
.
.
PVOID AVCStreamContext;
.
.
union _tagCommandData {
.
.
KSSTATE StreamState;
.
.
} CommandData;
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;
Requisiti
Intestazioni: Dichiarato in avcstrm.h. Includere avcstrm.h.