TAPE_PROCESS_COMMAND_ROUTINE Rückruffunktion (minitape.h)
TAPE_PROCESS_COMMAND_ROUTINE behandelt die gerätespezifischen Aspekte einer IOCTL-Anforderung.
Syntax
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
)
{...}
Parameter
[in, out] MinitapeExtension
Zeiger auf die treiberspezifische Minitape-Erweiterung. Dies ist NULL-, wenn der Miniklassentreiber beim Initialisieren keine Minitape-Erweiterung angefordert hat.
[in, out] CommandExtension
Zeiger auf die Befehlserweiterung. Dies ist NULL-, wenn der Miniklassentreiber beim Initialisieren keine Befehlserweiterung angefordert hat.
[in, out] CommandParameters
Zeiger auf einen Puffer, der vom Aufrufer zugewiesen wurde, der eine TAPE_CREATE_PARTITION Struktur enthält.
[in, out] Srb
Zeiger auf einen SRB zugewiesen und teilweise vom Bandklassentreiber ausgefüllt. TAPE_PROCESS_COMMAND_ROUTINE muss das CDB im SRB ausfüllen.
- Cdb- - Zeiger auf das SCSI-CDB für den Befehl. Löschen Sie das CDB mit TapeClassZeroMemory-, bevor Sie es ausfüllen.
- CdbLength- – Gibt die Anzahl der Bytes im CDB an.
- DataBuffer- – Zeiger auf den zu übertragenden Datenpuffer. Verwenden Sie TapeClassAllocateSrbBuffer-, um eine DataBuffer- länge zuzuweisen, die größer oder gleich DataTransferLengthist.
- DataTransferLength- – Gibt die Anzahl der Bytes an, die im SRB übertragen werden sollen. Dieses Element wird von TapeClassAllocateSrbBufferfestgelegt.
- TimeOutValue- – Gibt einen Timeoutwert für diesen Befehl an, wobei der Standardtimeoutwert aus der Geräteerweiterung des Bandklassentreibers außer Kraft gesetzt wird.
- SrbFlags – Gibt ein Kennzeichen für diesen Befehl an. Der Band-Miniklassentreiber muss SRB_FLAGS_DATA_OUT festlegen, wenn der SRB Daten an das Bandlaufwerk sendet. Dieses Element kann null sein, wenn das SRB Daten vom Bandlaufwerk anfordert oder wenn keine Daten vom Befehl übertragen werden.
[in] CallNumber
Gibt an, wie oft TAPE_PROCESS_COMMAND_ROUTINE aufgerufen wurde, um einen bestimmten Bandbefehl zu verarbeiten. CallNumber ist null, wenn diese Routine zum ersten Mal aufgerufen wird und für jeden nachfolgenden Aufruf erhöht wird, bis der Miniklassentreiber einen TAPE_STATUS Wert zurückgibt, der angibt, dass der Befehl abgeschlossen ist.
[in, optional] StatusOfLastCommand
Gibt den Status des letzten Befehls an. Im ersten Aufruf von TAPE_PROCESS_COMMAND_ROUTINE zum Verarbeiten einer bestimmten Anforderung wird StatusOfLastCommand-TAPE_STATUS_SUCCESS. Bei nachfolgenden Aufrufen ist StatusOfLastCommand-entweder TAPE_STATUS_SUCCESS oder ein Fehlerstatus, wenn ein Fehler aufgetreten ist, und der Band-Miniklassentreiber in RetryFlags im vorherigen Aufruf RETURN_ERRORS festgelegt.
[in, out] RetryFlags
Zeiger auf eine Variable, die angibt, welche Aktion der Bandklassentreiber ausführen soll, wenn ein Bandgerät einen Fehler meldet.
Das Wort mit niedriger Reihenfolge gibt die Anzahl der Wiederholungen an, die im Falle eines SCSI-Befehlsfehlers ausgeführt werden sollen. Der Standardwert ist Null (keine Wiederholungen).
Das Wort mit hoher Reihenfolge enthält Flags, die angeben, wie der Bandklassentreiber die Steuerung zurückgeben soll, wenn ein Fehler auftritt:
- Wenn RETURN_ERRORS und IGNORE_ERRORS klar sind (standard), gibt der Bandklassentreiber einen Fehlerstatus an den ursprünglichen Anforderer zurück.
- Wenn der Miniklassentreiber RETURN_ERRORS festlegt, ruft der Bandklassentreiber TAPE_PROCESS_COMMAND_ROUTINE auf, wobei StatusOfLastCommand auf einen Fehlerstatus festgelegt ist.
- Wenn der Miniklassentreiber IGNORE_ERRORS festlegt, konvertiert der Bandklassentreiber einen Fehlerstatus in Erfolg und ruft TAPE_PROCESS_COMMAND_ROUTINE auf, wobei StatusOfLastCommand auf Erfolg festgelegt ist.
Rückgabewert
Rückgabecode | Beschreibung |
---|---|
|
Gibt den Bandklassentreiber an, dass der SRB ausgefüllt wurde und bereit ist, an das Zielgerät zu senden. Standardmäßig ruft der Bandklassentreiber TAPE_PROCESS_COMMAND_ROUTINE nur dann erneut auf, wenn der SRB erfolgreich ist. Ein Miniklassentreiber kann das Standardverhalten ändern, indem RetryFlags festgelegt wird, bevor er von TAPE_PROCESS_COMMAND_ROUTINEzurückgegeben wird. |
|
Leitet den Bandklassentreiber an, CallNumber- zu erhöhen und erneut TAPE_PROCESS_COMMAND_ROUTINE aufzurufen, ohne einen SRB an das Bandgerät zu senden. |
|
Leitet den Bandklassentreiber an, um einen SRB für den Befehl "TEST UNIT READY" auszufüllen und den SRB an das Gerät zu senden. |
|
Jeder andere Rückgabecode gibt dem Bandklassentreiber an, dass der Befehl abgeschlossen ist, und zeigt Erfolg, Fehler oder Warnung an. Mögliche Rückgabewerte für die Fertigstellung für diese Routine sind jedoch nicht beschränkt auf:
|
Bemerkungen
Diesem Rückrufplatzhalter können die folgenden Funktionen zugewiesen werden:
CreatePartition
CreatePartition behandelt die gerätespezifischen Aspekte einer IOCTL_TAPE_CREATE_PARTITION-Anforderung. Diese Routine ist erforderlich. CreatePartition erstellt eine Partition auf einem Band durch Ausfüllen des CDB in einem vom Bandklassentreiber übergebenen SRB. Zum Erstellen einer Partition ist in der Regel eine Reihe von SRBs erforderlich, um den Vorgang abzuschließen. Nachdem CreatePartition einen bestimmten SRB ausgefüllt und zurückgegeben hat, sendet der Bandklassentreiber den SRB an das Zielgerät und ruft abhängig vom Ergebnis des SRB und dem Wert von RetryFlagserneut TapeMiniCreatePartition auf.CreatePartition müssen die folgenden Member im SRB ausfüllen, bevor sie zum Bandklassentreiber zurückkehren:
Wenn der Band-Miniklassentreiber Partitionsinformationen in der Minitape-Erweiterung speichert, aktualisiert CreatePartition die Erweiterung, bevor Sie mit TAPE_STATUS_SUCCESS zum Bandklassentreiber zurückkehren.
Löschen
Erase behandelt die gerätespezifischen Aspekte einer IOCTL_TAPE_ERASE-Anforderung. Diese Routine ist erforderlich. Erase Löscht ein Band, indem er das CDB in einem vom Bandklassentreiber übergebenen SRB ausfüllt. Das Löschen eines Bandes erfordert in der Regel einen SRB, um den Vorgang abzuschließen. Nachdem Erase den SRB ausfüllt und zurückgibt, sendet der Bandklassentreiber den SRB an das Gerät und ruft je nach Ergebnis des SRB und dem Wert von RetryFlagserneut Erase auf. Radierer gibt dann TAPE_STATUS_SUCCESS zurück.GetDriveParameters
GetDriveParameters behandelt die gerätespezifischen Aspekte einer IOCTL_TAPE_GET_DRIVE_PARAMS-Anforderung. Diese Routine ist erforderlich. GetDriveParameters erhält Bandlaufwerkparameter durch Ausfüllen des CDB in einem vom Bandklassentreiber übergebenen SRB. Zum Abrufen von Laufwerkparametern ist in der Regel eine Reihe von SRBs erforderlich, um den Vorgang abzuschließen. Nachdem GetDriveParameters ein bestimmtes SRB ausgefüllt und zurückgegeben hat, sendet der Bandklassentreiber den SRB an das Zielgerät und ruft je nach Ergebnis des SRB und dem Wert von RetryFlagserneut GetDriveParameters auf.GetMediaParameters
GetMediaParameters behandelt die gerätespezifischen Aspekte einer IOCTL_TAPE_GET_MEDIA_PARAMS-Anforderung. Diese Routine ist erforderlich. GetMediaParameters bandmedienparameter durch Ausfüllen des CDB in einem vom Bandklassentreiber übergebenen SRB ab. Das Abrufen von Medienparametern erfordert in der Regel mehr als einen SRB, um den Vorgang abzuschließen, beginnend mit einer Testeinheit, die vom Miniklassentreiber angefordert wird, indem TAPE_STATUS_CHECK_TEST_UNIT_READY zurückgegeben wird, wenn der Bandklassentreiber die Routine zum ersten Mal aufruft.Nachdem GetMediaParameters einen bestimmten SRB ausfüllt und zurückgibt, sendet der Bandklassentreiber den SRB an das Gerät und ruft je nach Ergebnis des SRB und dem Wert von RetryFlagserneut GetMediaParameters auf.
GetMediaTypes
GetMediaTypes behandelt die gerätespezifischen Aspekte einer IOCTL_STORAGE_GET_MEDIA_TYPES_EX-Anforderung. Diese Routine ist erforderlich. GetMediaTypes erhält Informationen zu den Medientypen, die von einem Bandgerät unterstützt werden, indem sie das CDB in einem vom Bandklassentreiber übergebenen SRB ausfüllen. Das Abrufen von Medientypen erfordert in der Regel mehr als einen SRB, um den Vorgang abzuschließen, beginnend mit einer Testeinheit, die vom Miniklassentreiber angefordert wird, indem TAPE_STATUS_CHECK_TEST_UNIT_READY zurückgegeben wird, wenn der Bandklassentreiber die Routine zum ersten Mal aufruft.GetPosition
GetPosition behandelt die gerätespezifischen Aspekte einer IOCTL_TAPE_GET_POSITION Anforderung. Diese Routine ist erforderlich. GetPosition liest die Position eines Bandes durch Ausfüllen des CDB in einem vom Bandklassentreiber übergebenen SRB vor. Die Lesebandposition erfordert in der Regel mehr als einen SRB, um den Vorgang abzuschließen, häufig beginnend mit einer Testeinheit, die der Miniklassentreiber anfordert, indem TAPE_STATUS_CHECK_TEST_UNIT_READY zurückgegeben wird, wenn der Bandklassentreiber die Routine zum ersten Mal aufruft.GetStatus
GetStatus behandelt die gerätespezifischen Aspekte einer IOCTL_TAPE_GET_STATUS-Anforderung. Diese Routine ist erforderlich. GetStatus- liest den Status eines Bandgeräts vor, in der Regel durch Leiten des Bandklassentreibers, um einen bereiten Befehl für eine Testeinheit auszuweisen.Wenn ein Gerät angibt, ob ein Laufwerk in Sinnesdaten gereinigt werden muss (im Gegensatz zur Meldung der Notwendigkeit der Reinigung als Fehler, den ein Miniklassentreiber in seiner TapeMiniTapeError Routine verarbeiten würde), GetStatus füllt das CDB im vom Bandklassentreiber übergebenen SRB aus, um die Sinnesdaten zu erhalten, und, gibt bei Bedarf TAPE_STATUS_REQUIRES_CLEANING zurück.
Vorbereiten
Vorbereiten behandelt die gerätespezifischen Aspekte einer IOCTL_TAPE_PREPARE-Anforderung. Diese Routine ist erforderlich. Vorbereiten bereitet ein Band vor, indem er das CDB in einem vom Bandklassentreiber übergebenen SRB ausfüllt. Wenn das Gerät den angeforderten Vorgang unterstützt, erfordert die Vorbereitung eines Bandes in der Regel einen SRB. Nachdem Vorbereiten den SRB ausgefüllt und zurückgegeben hat, sendet der Bandklassentreiber den SRB an das Gerät und ruft abhängig vom Ergebnis des SRB und dem Wert von RetryFlagsPrepare erneut auf.SetDriveParameters
SetDriveParameters behandelt die gerätespezifischen Aspekte einer IOCTL_TAPE_SET_DRIVE_PARAMS-Anforderung. Diese Routine ist erforderlich. SetDriveParameters Legt Parameter für ein Bandgerät fest, indem er das CDB in einem vom Bandklassentreiber übergebenen SRB ausfüllt. Das Festlegen von Parametern umfasst in der Regel eine Reihe von SRBs, um den Vorgang abzuschließen. Nachdem SetDriveParameters einen bestimmten SRB ausfüllt und zurückgibt, sendet der Bandklassentreiber den SRB an das Gerät und ruft abhängig vom Ergebnis des SRB und dem Wert von RetryFlagserneut SetDriveParameters auf.SetMediaParameters
SetMediaParameters die gerätespezifischen Aspekte einer IOCTL_TAPE_SET_MEDIA_PARAMS Anforderung behandelt. Diese Routine ist erforderlich. SetMediaParameters legt die Blockgröße eines Bandes fest, indem das CDB in einem vom Bandklassentreiber übergebenen SRB gefüllt wird. Das Festlegen der Blockgröße erfordert in der Regel mehr als einen SRB, um den Vorgang abzuschließen, beginnend mit einer Testeinheit, die der Miniklassentreiber anfordert, indem TAPE_STATUS_CHECK_TEST_UNIT_READY zurückgegeben wird, wenn der Bandklassentreiber die Routine zum ersten Mal aufruft.Nachdem SetMediaParameters ein bestimmtes SRB ausfüllt und zurückgibt, sendet der Bandklassentreiber den SRB an das Gerät und ruft je nach Ergebnis des SRB und dem Wert von RetryFlagserneut SetMediaParameters auf.
SetPosition
SetPosition- behandelt die gerätespezifischen Aspekte einer IOCTL_TAPE_SET_POSITION-Anforderung. Diese Routine ist erforderlich. SetPosition legt die Position eines Bandes fest, indem er das CDB in einem vom Bandklassentreiber übergebenen SRB ausfüllt. Das Festlegen der Position erfordert in der Regel einen SRB. Nachdem SetPosition den SRB ausgefüllt und zurückgegeben hat, sendet der Bandklassentreiber den SRB an das Gerät und ruft je nach Ergebnis des SRB und dem Wert von RetryFlagserneut SetPosition auf. SetPosition- gibt dann TAPE_STATUS_SUCCESS zurück.WriteMarks
WriteMarks- behandelt die gerätespezifischen Aspekte einer IOCTL_TAPE_WRITE_MARKS-Anforderung. Diese Routine ist erforderlich. WriteMarks schreibt Markierungen auf ein Band durch Ausfüllen des CDB in einem vom Bandklassentreiber übergebenen SRB. Beim Schreiben von Markierungen wird in der Regel ein SRB zum Abschließen des Vorgangs benötigt. Nachdem WriteMarks den SRB ausfüllt und zurückgibt, sendet der Bandklassentreiber den SRB an das Gerät und ruft je nach Ergebnis des SRB und dem Wert von RetryFlagserneut WriteMarks auf. WriteMarks gibt dann TAPE_STATUS_SUCCESS zurück.PreProcessReadWrite
PreProcessReadWrite ist eine optionale spezielle Routine, die alle gerätespezifischen Vorgänge ausführt, die vor Lese- und Schreibvorgängen erforderlich sind. Die meisten Tape-Miniklassentreiber benötigen diese Routine nicht. Die Aktivitäten der PreProcessReadWrite Routine sind gerätespezifisch. Die Routine kann die vom Klassentreiber übergebenen Informationen verwenden, um spezielle Vorverarbeitungen für Lese- und Schreibvorgänge zu implementieren. Wenn ein Laufwerk eingeschränkte Funktionen aufweist, benötigt der Treiber diese Routine möglicherweise, um einen kohärenten Zustand aufrechtzuerhalten, z. B.Wenn ein Band-Miniklassentreiber einen nicht-NULL- Einstiegspunkt für diese Routine in der TAPE_INIT_DATA_EX Struktur festlegt, übergibt er an TapeClassInitialize von seiner DriverEntry Routine, ruft der Bandklassentreiber sie vor jedem Lese- und Schreibvorgang auf dem Bandgerät auf. Der Klassentreiber erwartet keine Informationen aus dieser Routine.
WMIOperations
WMIOperations- ist der gemeinsame Einstiegspunkt für alle WMI-Aufrufe vom Bandklassentreiber. Ein Minidriver, der WMI unterstützt, sollte das Funktionszeigerelement WMIOperationsin der Struktur festlegen TAPE_INIT_DATA_EX, um auf die TAPE_PROCESS_COMMAND_ROUTINE Routine des Minidrivers zu verweisen. Der Minidriver sollte dies in seiner DriverEntry-Routine tun, bevor TapeClassInitializeaufgerufen wird. Wenn ein Minidriver WMI-Vorgänge nicht unterstützt, sollte das Feld "TapeWMIOperations" auf NULL-festgelegt werden.Der Bandklassentreiber weist den Membern der TAPE_WMI_OPERATIONS Struktur Werte zu und übergibt diese Struktur an die WMIOperations Routine von Minidriver im CommandParameters Parameter. Wie bei anderen Minidriver-Routinen WMIOperations Füllungen, Erstellt und initialisiert die SCSI-Anforderungsblöcke (SRB) und die Befehlsdeskriptorblöcke (CDB), die zum Implementieren der angegebenen WMI-Methode erforderlich sind, und gibt die Steuerung an den Bandklassentreiber zurück. Der Bandklassentreiber ruft dann den Porttreiber auf, um die Anforderung auszuführen.
Der Minidriver gibt die WMI-Daten im Puffer zurück, auf die vom DataBuffer Member der TAPE_WMI_OPERATIONS-Struktur verwiesen wird.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Desktop |
Header- | minitape.h (include Minitape.h) |