Condividi tramite


SRB_OPEN_STREAM

Il driver di classe invia questa richiesta per aprire un flusso.

Valore restituito

Il minidriver deve impostare uno dei seguenti come stato in SRB:

STATUS_SUCCESS
Indica il completamento corretto del comando.

STATUS_NOT_IMPLEMENTED
Indica che la funzione non è supportata dal minidriver.

STATUS_TOO_MANY_NODES
Indica che non sono disponibili risorse sufficienti per aprire questo flusso.

STATUS_IO_DEVICE_ERROR
Indica che si è verificato un errore hardware.

Commenti

Il driver di classe fornisce un buffer HW_STREAM_OBJECT in pSrb-StreamObject, con pSrb-StreamObject-StreamNumber>>> impostato sul numero di flusso da aprire. Il puntatore pSrb punta a una struttura di HW_STREAM_REQUEST_BLOCK . StreamNumber corrisponde all'offset del flusso all'interno della struttura HW_STREAM_DESCRIPTOR il minidriver fornisce in risposta a una richiesta di SRB_GET_STREAM_INFO . Il driver di classe specifica il formato di dati che il flusso aperto deve fornire in pSrb-CommandData-OpenFormat.>>

Quando il minidriver riceve questa richiesta, deve determinare se il flusso specificato può essere aperto in questo momento. Il minidriver deve anche verificare il formato KSDATAFORMAT passato. campo OpenFormat di SRB. Se il flusso può essere aperto, il minidriver aggiorna la struttura HW_STREAM_OBJECT e restituisce STATUS_SUCCESS. Se il numero massimo di istanze di flusso è già aperto o le risorse hardware necessarie per aprire questo flusso non sono disponibili, il minidriver restituisce uno stato di errore appropriato.

Quando il comando SRB_OPEN_STREAM viene ricevuto dal minidriver, il minidriver deve:

  1. Verificare che il numero massimo di istanze di flusso non sia stato superato e che il valore dell'indice di flusso sia valido.

  2. Verificare che il formato di dati richiesto sia valido per questo flusso.

  3. Impostare il formato per il flusso.

  4. Mantenere una matrice di tutte le strutture di estensione del flusso nell'estensione del dispositivo in modo che i provider di integrazione possano essere annullati da qualsiasi flusso.

  5. Specificare puntatori, nell'oggetto stream, ai gestori di dati di flusso e ai gestori di controllo.

  6. Impostare il flag DMA nell'oggetto stream se il dispositivo eseguirà DMA direttamente agli indirizzi del buffer di dati passati alle routine ReceiveDataPacket . Se il driver accede ai buffer di dati passati usando l'indirizzamento logico, impostare anche il flag PIO nell'oggetto stream.

  7. Se il supporto dell'orologio è disponibile nel flusso, indicare questo tramite il membro HwClockObject nell'oggetto stream.