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 di comando quando è stata inizializzata.

[in, out] CommandParameters

Puntatore a un buffer allocato dal chiamante che contiene una struttura TAPE_CREATE_PARTITION .

[in, out] Srb

Puntatore a una SRB allocata e parzialmente compilata dal driver della classe nastro. TAPE_PROCESS_COMMAND_ROUTINE deve compilare il 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.
TAPE_PROCESS_COMMAND_ROUTINE può anche compilare i membri seguenti in SRB:
  • DataBuffer : puntatore al buffer dei 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 è impostato da TapeClassAllocateSrbBuffer.
  • TimeOutValue : specifica un valore di timeout per questo comando, sostituendo il 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 i dati all'unità nastro. Questo membro può essere zero se la SRB richiede dati dall'unità nastro o se non vengono trasferiti dati dal comando.

[in] CallNumber

Specifica il numero di volte in cui è stato chiamato 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 restituisce un valore TAPE_STATUS che indica che il comando è 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 di 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 a basso ordine specifica il numero di tentativi da eseguire in caso di errore di comando SCSI. Il valore predefinito è zero (nessun tentativo).

La parola ad 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 miniclass 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
TAPE_STATUS_SEND_SRB_AND_CALLBACK
Indica al driver della classe nastro in cui è stato compilato il file SRB 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 la SRB ha esito positivo. Un driver miniclasse può modificare il comportamento predefinito impostando RetryFlags prima di restituire da TAPE_PROCESS_COMMAND_ROUTINE.
TAPE_STATUS_CALLBACK
Indirizza il driver della classe nastro per aumentare CallNumber e chiamare di nuovo TAPE_PROCESS_COMMAND_ROUTINE senza inviare un SRB al dispositivo nastro.
TAPE_STATUS_CHECK_TEST_UNIT_READY
Indirizza il driver della classe nastro per compilare un SRB per il comando TEST UNIT READY e inviare il file SRB al dispositivo.
TAPE_STATUS_XXX
Qualsiasi altro codice restituito indica al driver della classe nastro che il comando è completato e indica l'esito positivo, l'errore o l'avviso. I valori restituiti di completamento possibili per questa routine includono, ma non sono limitati a:
TAPE_STATUS_SUCCESS
TAPE_STATUS_INSUFFICIENT_RESOURCES
TAPE_STATUS_INVALID_DEVICE_REQUEST
TAPE_STATUS_INVALID_PARAMETER
TAPE_STATUS_IO_DEVICE_ERROR
TAPE_STATUS_MEDIA_WRITE_PROTECTED
TAPE_STATUS_NOT_IMPLEMENTED

Commenti

Le funzioni seguenti possono essere assegnate al segnaposto callback:

Createpartition

CreatePartition gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_CREATE_PARTITION . Questa routine è necessaria. CreatePartition crea una partizione su un nastro inserendo il CDB in un driver di classe nastro passato dal driver della classe nastro. La creazione di una partizione richiede in genere una serie di SRB per completare l'operazione. Dopo il riempimento di CreatePartition in un determinato SRB e restituisce, il driver della classe nastro invia di nuovo LRB 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 miniclass 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.

Cancellare

Cancella gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_ERASE . Questa routine è necessaria. Cancella un nastro riempiendo il CDB in una SRB passata dal driver della classe nastro. L'cancellazione di un nastro richiede in genere un SRB per completare l'operazione. Dopo aver cancellato il file SRB e restituito, il driver della classe nastro invia nuovamente l'SRB al dispositivo e, a seconda del risultato di SRB e del valore di RetryFlags, chiama di nuovo Cancella . 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 è necessaria. GetDriveParameters ottiene i parametri dell'unità nastro inserendo il CDB in una SRB passata dal driver della classe nastro. Il recupero dei parametri dell'unità richiede in genere una serie di SRB per completare l'operazione. Dopo il riempimento di GetDriveParameters in un determinato SRB e restituisce, il driver della classe nastro invia la 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 è necessaria. GetMediaParameters ottiene i parametri dei supporti nastro inserendo il CDB in un driver di classe nastro passato dal driver della classe nastro. Il recupero dei parametri multimediali richiede in genere più di una SRB per completare l'operazione, a partire da un'unità di test pronta per cui il driver miniclasse richiede TAPE_STATUS_CHECK_TEST_UNIT_READY la prima volta che il driver della classe nastro chiama la routine.

Dopo il riempimento di GetMediaParameters in un determinato SRB e restituisce, il driver della classe nastro invia nuovamente la SRB al dispositivo e, a seconda del risultato della SRB e del valore di RetryFlags, chiama di nuovo GetMediaParameters.

GetMediaTypes

GetMediaTypes gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_STORAGE_GET_MEDIA_TYPES_EX . Questa routine è necessaria. GetMediaTypes ottiene informazioni sui tipi di supporti supportati da un dispositivo nastro inserendo il CDB in una SRB passata dal driver della classe nastro. Ottenere tipi di supporti richiede in genere più di una SRB per completare l'operazione, a partire da un'unità di test pronta per cui il driver miniclasse richiede 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 è necessaria. GetPosition legge la posizione di un nastro riempiendo il CDB in un driver di classe nastro passato dal driver della classe nastro. La lettura della posizione del nastro richiede in genere più di una SRB per completare l'operazione, spesso a partire da un'unità di test pronta per cui il driver miniclasse richiede 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 è necessaria. GetStatus legge lo stato di un dispositivo nastro, in genere indirizzando il driver della classe nastro a rilasciare un comando pronto per l'unità di test.

Se un dispositivo indica se un'unità richiede la pulizia dei dati di senso (anziché segnalare la necessità di pulizia come errore, che un driver miniclasse gestirebbe nella routine TapeMiniTapeError ), GetStatus riempie il CDB nel driver della classe di nastro passato dal driver della classe nastro per ottenere i dati di senso e, se necessario, restituisce TAPE_STATUS_REQUIRES_CLEANING.

Preparare

Preparare gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_PREPARE . Questa routine è necessaria. Preparare un nastro riempiendo il CDB in una SRB passata dal driver della classe nastro. Se il dispositivo supporta l'operazione richiesta, la preparazione di un nastro richiede in genere una SRB. Dopo aver compilato il file SRB e restituito, il driver della classe nastro invia il SRB al dispositivo e, a seconda del risultato della SRB e del valore di RetryFlags, chiama di nuovo Prepare .

SetDriveParameters

SetDriveParameters gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_SET_DRIVE_PARAMS . Questa routine è necessaria. SetDriveParameters imposta i parametri per un dispositivo nastro inserendo il CDB in una SRB passata dal driver della classe nastro. L'impostazione dei parametri comporta in genere una serie di SRB per completare l'operazione. Dopo aver compilato SetDriveParameters in un determinato SRB e restituisce, il driver della classe nastro invia nuovamente il file SRB al dispositivo e, a seconda del risultato di SRB e il 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 è necessaria. SetMediaParameters imposta le dimensioni del blocco di un nastro riempiendo il CDB in una SRB passata dal driver della classe nastro. L'impostazione delle dimensioni del blocco richiede in genere più di una SRB per completare l'operazione, a partire da un'unità di test pronta per cui il driver miniclasse richiede TAPE_STATUS_CHECK_TEST_UNIT_READY la prima volta che il driver della classe nastro chiama la routine.

Dopo aver compilato setMediaParameters in un determinato SRB e restituisce, il driver della classe nastro invia nuovamente il controllo 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 è necessaria. SetPosition imposta la posizione di un nastro riempiendo il CDB in una SRB passata dal driver della classe nastro. L'impostazione della posizione richiede in genere una SRB. Dopo aver compilato SetPosition nella SRB e restituito, il driver della classe nastro invia di nuovo la SRB al dispositivo e, a seconda del risultato di SRB e del valore di RetryFlags, chiama di nuovo SetPosition . SetPosition restituisce quindi TAPE_STATUS_SUCCESS.

WriteMarks

WriteMarks gestisce gli aspetti specifici del dispositivo di una richiesta di IOCTL_TAPE_WRITE_MARKS . Questa routine è necessaria. WriteMarks scrive i segni in un nastro inserendo il CDB in una SRB passata dal driver della classe nastro. La scrittura dei segni richiede in genere una SRB per completare l'operazione. Dopo aver compilato WriteMarks nella SRB e restituito, il driver della classe nastro invia nuovamente il file SRB al dispositivo e, a seconda del risultato di SRB e del valore di RetryFlags, chiama di nuovo WriteMarks . WriteMarks restituisce quindi TAPE_STATUS_SUCCESS.

PreProcessReadWrite

PreProcessReadWrite è una routine facoltativa e speciale che esegue operazioni specifiche del dispositivo necessarie prima delle operazioni di lettura e scrittura. La maggior parte dei driver miniclasse nastro non ha bisogno di questa routine. Le attività della routine PreProcessReadWrite sono specifiche del dispositivo. La routine può usare le informazioni passate dal driver della classe per implementare un pre-elaborazione speciale per le letture e le scritture. Se un'unità ha funzionalità limitate, il driver potrebbe dover mantenere questo stato coerente, ad esempio.

Se un driver di miniclasse nastro imposta un punto di ingresso non NULL 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 si aspetta 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 alla funzione, WMIOperations, nella struttura TAPE_INIT_DATA_EX per puntare alla routine di 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 i valori ai membri della struttura TAPE_WMI_OPERATIONS e passa questa struttura alla routine WMIOperations del minidriver nel parametro CommandParameters . Come per altre routine di minidriver, WMIOperations riempie, crea e inizializza i blocchi di richiesta SCSI (SRB) e il descrittore di comando (CDB) necessario per implementare il metodo WMI indicato e restituisce il controllo al driver della 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 fa riferimento il membro DataBuffer della struttura TAPE_WMI_OPERATIONS.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione minitape.h (include Minitape.h)

Vedi anche

SCSI_REQUEST_BLOCK

TAPE_STATUS

TapeClassAllocateSrbBuffer

TapeClassZeroMemory