TAPE_PROCESS_COMMAND_ROUTINE funzione di callback (minitape.h)
TAPE_PROCESS_COMMAND_ROUTINE gestisce gli aspetti specifici del dispositivo di una richiesta IOCTL.
Sintassi
TAPE_PROCESS_COMMAND_ROUTINE TapeProcessCommandRoutine;
TAPE_STATUS TapeProcessCommandRoutine(
[in, out] PVOID MinitapeExtension,
[in, out] PVOID CommandExtension,
[in, out] PVOID CommandParameters,
[in, out] PSCSI_REQUEST_BLOCK Srb,
[in] ULONG CallNumber,
[in, optional] TAPE_STATUS StatusOfLastCommand,
[in, out] PULONG RetryFlags
)
{...}
Parametri
[in, out] MinitapeExtension
Puntatore all'estensione minitape specifica del driver. Questo è NULL se il driver miniclasse non ha richiesto un'estensione minitape quando è stata inizializzata.
[in, out] CommandExtension
Puntatore all'estensione del comando. Si tratta di NULL se il driver miniclasse non ha richiesto un'estensione del comando durante l'inizializzazione.
[in, out] CommandParameters
Puntatore a un buffer allocato dal chiamante che contiene una struttura TAPE_CREATE_PARTITION.
[in, out] Srb
Puntatore a un SRB allocato e parzialmente compilato dal driver della classe nastro. TAPE_PROCESS_COMMAND_ROUTINE deve compilare la rete CDB in SRB.
- cdb - Puntatore al CDB SCSI per il comando. Cancellare il CDB con TapeClassZeroMemory prima di compilarlo.
- CdbLength : specifica il numero di byte nel CDB.
- DataBuffer - Puntatore al buffer di dati da trasferire. Usare TapeClassAllocateSrbBuffer per allocare un DataBuffer di lunghezza maggiore o uguale a DataTransferLength.
- DataTransferLength : specifica il numero di byte da trasferire in SRB. Questo membro viene impostato da TapeClassAllocateSrbBuffer.
- TimeOutValue : specifica un valore di timeout per questo comando, eseguendo l'override del valore di timeout predefinito dall'estensione del dispositivo del driver della classe nastro.
- SrbFlags: specifica un flag per questo comando. Il driver miniclasse nastro deve impostare SRB_FLAGS_DATA_OUT se SRB invia dati all'unità nastro. Questo membro può essere zero se SRB richiede dati dall'unità nastro o se non vengono trasferiti dati dal comando.
[in] CallNumber
Specifica il numero di chiamate TAPE_PROCESS_COMMAND_ROUTINE per elaborare un determinato comando nastro. callNumber è zero la prima volta che questa routine viene chiamata e viene incrementata per ogni chiamata successiva fino a quando il driver miniclasse non restituisce un valore TAPE_STATUS che indica che il comando è stato completato.
[in, optional] StatusOfLastCommand
Specifica lo stato dell'ultimo comando. Nella prima chiamata a TAPE_PROCESS_COMMAND_ROUTINE per elaborare una determinata richiesta, StatusOfLastCommand è TAPE_STATUS_SUCCESS. Nelle chiamate successive, StatusOfLastCommand è TAPE_STATUS_SUCCESS o uno stato di errore se si è verificato un errore e il set di driver della miniclasse nastro RETURN_ERRORS in RetryFlags nella chiamata precedente.
[in, out] RetryFlags
Puntatore a una variabile che specifica l'azione che deve essere eseguita dal driver della classe nastro quando un dispositivo nastro segnala un errore.
La parola con ordine basso specifica il numero di tentativi da eseguire in caso di errore di comando SCSI. Il valore predefinito è zero (nessun tentativo).
La parola di ordine elevato contiene flag che specificano il modo in cui il driver della classe nastro deve restituire il controllo se si verifica un errore:
- Se RETURN_ERRORS e IGNORE_ERRORS sono chiari (impostazione predefinita), il driver della classe nastro restituisce uno stato di errore al richiedente originale.
- Se il driver miniclasse imposta RETURN_ERRORS, il driver della classe nastro chiama TAPE_PROCESS_COMMAND_ROUTINE con StatusOfLastCommand impostato su uno stato di errore.
- Se il driver miniclasse imposta IGNORE_ERRORS, il driver della classe nastro converte lo stato di errore in esito positivo e chiama TAPE_PROCESS_COMMAND_ROUTINE con StatusOfLastCommand impostato su esito positivo.
Valore restituito
Codice restituito | Descrizione |
---|---|
|
Indica al driver della classe nastro che il SRB è stato compilato ed è pronto per l'invio al dispositivo di destinazione. Per impostazione predefinita, il driver della classe nastro chiama di nuovo TAPE_PROCESS_COMMAND_ROUTINE solo se SRB ha esito positivo. Un driver miniclasse può modificare il comportamento predefinito impostando RetryFlags prima di tornare da TAPE_PROCESS_COMMAND_ROUTINE. |
|
Indirizza il driver di classe nastro a incrementare CallNumber e chiamare di nuovo TAPE_PROCESS_COMMAND_ROUTINE senza inviare un SRB al dispositivo nastro. |
|
Indirizza il driver di classe nastro a compilare un SRB per il comando TEST UNIT READY e inviare SRB al dispositivo. |
|
Qualsiasi altro codice restituito indica al driver della classe nastro che il comando è completo e indica l'esito positivo, negativo o avviso. I possibili valori restituiti di completamento per questa routine includono, ma non sono limitati a:
|
Osservazioni
A questo segnaposto di callback è possibile assegnare le funzioni seguenti:
CreatePartition
CreatePartition gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_CREATE_PARTITION. Questa routine è obbligatoria. CreatePartition crea una partizione su un nastro compilando il CDB in un SRB passato dal driver di classe nastro. Per la creazione di una partizione è in genere necessaria una serie di SBS per completare l'operazione. Dopo CreatePartition riempie un determinato SRB e restituisce, il driver della classe nastro invia SRB al dispositivo di destinazione e, a seconda del risultato di SRB e del valore di RetryFlags, chiama di nuovo TapeMiniCreatePartition.CreatePartition deve compilare i membri seguenti in SRB prima di tornare al driver della classe nastro:
Se il driver miniclasse nastro archivia le informazioni di partizione nell'estensione minitape, CreatePartition aggiorna l'estensione prima di tornare al driver della classe nastro con TAPE_STATUS_SUCCESS.
cancellazione
Cancella gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_ERASE. Questa routine è obbligatoria. Cancella cancella un nastro compilando il CDB in un SRB passato dal driver di classe nastro. La cancellazione di un nastro richiede in genere un SRB per completare l'operazione. Dopo Cancella riempie SRB e restituisce, il driver della classe nastro invia SRB al dispositivo e, a seconda del risultato di SRB e del valore di RetryFlags, chiama di nuovo Erase. Cancella quindi restituisce TAPE_STATUS_SUCCESS.GetDriveParameters
GetDriveParameters gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_GET_DRIVE_PARAMS. Questa routine è obbligatoria. GetDriveParameters ottiene i parametri dell'unità nastro compilando il CDB in un SRB passato dal driver della classe nastro. Per ottenere i parametri di unità è in genere necessaria una serie di SBS per completare l'operazione. Dopo GetDriveParameters riempie un determinato SRB e restituisce un determinato SRB, il driver della classe nastro invia SRB al dispositivo di destinazione e, a seconda del risultato di SRB e del valore di RetryFlags, chiama di nuovo GetDriveParameters.GetMediaParameters
GetMediaParameters gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_GET_MEDIA_PARAMS. Questa routine è obbligatoria. GetMediaParameters ottiene i parametri dei supporti nastro compilando il CDB in un SRB passato dal driver della classe nastro. Il recupero dei parametri multimediali richiede in genere più SRB per completare l'operazione, a partire da un'unità di test pronta per cui il driver miniclasse richiede restituendo TAPE_STATUS_CHECK_TEST_UNIT_READY la prima volta che il driver della classe nastro chiama la routine.Dopo GetMediaParameters riempie un determinato SRB e restituisce un determinato SRB, il driver della classe nastro invia l'SRB al dispositivo e, a seconda del risultato di SRB e del valore di RetryFlags, chiama nuovamente GetMediaParameters.
GetMediaTypes
GetMediaTypes gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_STORAGE_GET_MEDIA_TYPES_EX. Questa routine è obbligatoria. GetMediaTypes ottiene informazioni sui tipi di supporti supportati da un dispositivo nastro compilando il CDB in un SRB passato dal driver di classe nastro. L'acquisizione di tipi di supporti richiede in genere più SRB per completare l'operazione, a partire da un'unità di test pronta per cui il driver miniclasse richiede la restituzione di TAPE_STATUS_CHECK_TEST_UNIT_READY la prima volta che il driver della classe nastro chiama la routine.GetPosition
GetPosition gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_GET_POSITION. Questa routine è obbligatoria. GetPosition legge la posizione di un nastro compilando il CDB in un SRB passato dal driver della classe nastro. La lettura della posizione del nastro richiede in genere più SRB per completare l'operazione, spesso a partire da un'unità di test pronta per cui il driver miniclasse richiede la restituzione di TAPE_STATUS_CHECK_TEST_UNIT_READY la prima volta che il driver della classe nastro chiama la routine.GetStatus
GetStatus gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_GET_STATUS. Questa routine è obbligatoria. GetStatus legge lo stato di un dispositivo nastro, in genere indirizzando il driver di classe nastro a eseguire un comando pronto per l'unità di test.Se un dispositivo indica se un'unità richiede la pulizia dei dati in senso (invece di segnalare la necessità di pulire come errore, che un driver miniclasse gestirà nella sua routine TapeMiniTapeError), GetStatus riempie il CDB nel SRB passato dal driver di classe nastro per ottenere i dati di senso e, se necessario, restituisce TAPE_STATUS_REQUIRES_CLEANING.
Preparazione
Preparare gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_PREPARE. Questa routine è obbligatoria. Prepara prepara un nastro compilando il CDB in un SRB passato dal driver di classe nastro. Se il dispositivo supporta l'operazione richiesta, la preparazione di un nastro richiede in genere uno SRB. Dopo Preparare riempie SRB e restituisce, il driver della classe nastro invia SRB al dispositivo e, a seconda del risultato di SRB e del valore di RetryFlags, chiama di nuovo Prepara.SetDriveParameters
SetDriveParameters gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_SET_DRIVE_PARAMS. Questa routine è obbligatoria. SetDriveParameters imposta i parametri per un dispositivo nastro compilando il CDB in un SRB passato dal driver di classe nastro. L'impostazione dei parametri comporta in genere una serie di SBS per completare l'operazione. Dopo SetDriveParameters riempie un determinato SRB e restituisce un determinato SRB, il driver della classe nastro invia l'SRB al dispositivo e, a seconda del risultato di SRB e del valore di RetryFlags, chiama di nuovo SetDriveParameters.SetMediaParameters
SetMediaParameters gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_SET_MEDIA_PARAMS. Questa routine è obbligatoria. SetMediaParameters imposta le dimensioni del blocco di un nastro compilando il CDB in un SRB passato dal driver di classe nastro. L'impostazione delle dimensioni del blocco richiede in genere più SRB per completare l'operazione, a partire da un'unità di test pronta per cui il driver miniclasse richiede la restituzione di TAPE_STATUS_CHECK_TEST_UNIT_READY la prima volta che il driver della classe nastro chiama la routine.Dopo SetMediaParameters riempie un determinato SRB e restituisce un determinato SRB, il driver della classe nastro invia SRB al dispositivo e, a seconda del risultato di SRB e del valore di RetryFlags, chiama di nuovo SetMediaParameters.
SetPosition
SetPosition gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_SET_POSITION. Questa routine è obbligatoria. SetPosition imposta la posizione di un nastro compilando il CDB in un SRB passato dal driver della classe nastro. L'impostazione della posizione richiede in genere uno SRB. Dopo setPosition riempie SRB e restituisce, il driver della classe nastro invia SRB al dispositivo e, a seconda del risultato di SRB e del valore di RetryFlags, chiama di nuovo SetPosition. setPosition quindi restituisce TAPE_STATUS_SUCCESS.WriteMarks
WriteMarks gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_WRITE_MARKS. Questa routine è obbligatoria. WriteMarks scrive contrassegni in un nastro compilando il CDB in un SRB passato dal driver della classe nastro. La scrittura di segni richiede in genere un SRB per completare l'operazione. Dopo WriteMarks riempie SRB e restituisce, il driver della classe nastro invia SRB al dispositivo e, a seconda del risultato di SRB e del valore di RetryFlags, chiama di nuovo WriteMarks. WriteMarks quindi restituisce TAPE_STATUS_SUCCESS.PreProcessReadWrite
PreProcessReadWrite è una routine facoltativa e speciale che esegue tutte le operazioni specifiche del dispositivo necessarie prima di operazioni di lettura e scrittura. La maggior parte dei driver di miniclasse nastro non richiede questa routine. Le attività della routine PreProcessReadWrite sono specifiche del dispositivo. La routine può usare le informazioni passate dal driver di classe per implementare una pre-elaborazione speciale per letture e scritture. Se un'unità dispone di funzionalità limitate, il driver potrebbe avere bisogno di questa routine per mantenere lo stato coerente, ad esempio.Se un driver di miniclasse nastro imposta un punto di ingressoNULL non per questa routine nella struttura TAPE_INIT_DATA_EX passa a TapeClassInitialize dalla routine DriverEntry, il driver della classe nastro lo chiama prima di ogni operazione di lettura e scrittura sul dispositivo nastro. Il driver di classe non prevede alcuna informazione da questa routine.
WMIOperations
WMIOperations è il punto di ingresso comune per tutte le chiamate WMI dal driver della classe nastro. Un minidriver che supporta WMI deve impostare il membro del puntatore di funzione, WMIOperations, nella struttura TAPE_INIT_DATA_EX in modo che punti alla routine TAPE_PROCESS_COMMAND_ROUTINE del minidriver. Il minidriver deve eseguire questa operazione nella routine DriverEntry prima di chiamare TapeClassInitialize. Se un minidriver non supporta le operazioni WMI, deve impostare il campo TapeWMIOperations su NULL.Il driver della classe nastro assegna valori ai membri della struttura di TAPE_WMI_OPERATIONS e passa questa struttura al WMIOperations di minidriver routine nel parametro CommandParameters. Come per altre routine di minidriver, WMIOperations riempimenti, crea e inizializza i blocchi di richiesta SCSI (SRB) e i blocchi del descrittore di comando (CDB) necessari per implementare il metodo WMI indicato e restituisce il controllo al driver di classe nastro. Il driver della classe nastro chiama quindi il driver della porta per eseguire la richiesta.
Il minidriver restituisce i dati WMI nel buffer a cui punta il membro DataBuffer della struttura TAPE_WMI_OPERATIONS.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Desktop |
intestazione | minitape.h (include Minitape.h) |