|
| Autor |
Nachricht |
Electrodrome Newbie

Anmeldedatum: 25.06.2011 Beiträge: 4
|
Tape Drive - Bandlaufwerk
Verfasst am: 25.06.2011, 14:01 |
|
|
Hallo Leute,
seit Windows Vista wurde der Removable Storage Manager (RSM) aus dem OS entfernt. Somit ist die Backup-Unterstützung mit Bandlaufwerks vom OS nicht mehr direkt möglich (früher ntbackup o.ä.) - Microsoft sagt man soll sich an Dritthersteller von Backupsoftware wenden. Naja, über die Win32 API ist das TapeDrive aber weiterhin ansprechbar, denke ich.
So nun ich vor ein Programm zu schreiben um TapeDrives zu bedienen und auch Backups zu machen was eben über die Win32 API läuft.
Ich arbeite zur Zeit mit der VB 2010 Express Edition...
Als erstes würde ich gerne mal die PrepareTape Funktion ausprobieren ob überhaupt was geht - Der Rest der Backupsoftware kommt dann später
Dazu hab ich mal folgendes zusammengetragen:
PrepareTape Function
[url= http://msdn.microsoft.com/en-us/library/aa362532%28v=vs.85%29.aspx Web Page Name[/url]
CreateFile Function
[url= http://msdn.microsoft.com/en-us/library/aa363858%28v=vs.85%29.aspx Web Page Name[/url]
PrepareTape Beispiel Source
[url= http://www.ex-designz.net/apidetail.asp?api_id=558] Web Page Name[/url]
Dann habe ich mich mal ans Werke gemacht und eine schöne GUI gebastelt. Dann wollte ich jetzt als erstes die PrepareTape Function einbauen. Das erste Erfolgserlebnis soll z.B. der Auswurf des Tapes sein...
Inhalt von Form1.vb:
code ...
| Code: |
Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click
secatt.bInheritHandle = 0&
secatt.lpSecurityDescriptor = 0&
secatt.nLength = 0&
' Open Tape Device
tapehandle = CreateFile("\\.\Tape0", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, secatt, OPEN_EXISTING, 0, 0&)
' Unload Tape
PrepareTape(tapehandle, TAPE_UNLOAD, False)
End Sub |
code...
Inahlt des Moduls was ich dafür angelegt habe:
| Code: | Module ModulTape1
Public Declare Function PrepareTape Lib "kernel32" (ByVal hDevice As Integer, ByVal dwOperation As Integer, ByVal bimmediate As Long) As Integer
Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Integer, ByVal dwShareMode As Integer, ByVal lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Integer, ByVal dwFlagsAndAttributes As Integer, ByVal hTemplateFile As Integer) As Integer
' CreateFile dwDesiredAccess Konstanten
Public Const GENERIC_READ = &H80000000 ' Nur Lesen
Public Const GENERIC_WRITE = &H40000000 ' Nur Schreiben
' CreateFile dwShareMode Konstanten
Public Const FILE_SHARE_READ = &H1
Public Const FILE_SHARE_WRITE = &H2
' Öffnet eine bereits vorhandene Datei
Public Const OPEN_EXISTING = 3
'
' IOCTL_TAPE_PREPARE definitions
'
Public Const TAPE_LOAD = 0
Public Const TAPE_UNLOAD = 1
Public Const TAPE_TENSION = 2
Public Const TAPE_LOCK = 3
Public Const TAPE_UNLOCK = 4
Public Const TAPE_FORMAT = 5
Public Structure TAPE_PREPARE
Dim Operation As Integer
Dim Immediate As Boolean
' TAPE_PREPARE, *PTAPE_PREPARE;
End Structure
Public Structure SECURITY_ATTRIBUTES
Dim nLength As Integer
Dim lpSecurityDescriptor As IntPtr
Dim bInheritHandle As Boolean
End Structure
Public secatt As SECURITY_ATTRIBUTES
Public tapehandle As IntPtr
End Module
|
Wenn ich das Debbuging starte kommen erstmal keine Fehler, allerdings wenn ich auf den Button12 klicke kommt folgender Fehler:
PInvokeStackImbalance wurde erkannt.
Message: Ein Aufruf an die PInvoke-Funktion "Tape Drive Manager!Tape_Drive_Manager.ModulTape1::CreateFile" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.
Auch wenn ich den entsprechenden MDA deaktiviere komme ich nicht weiter. Es passiert dann nix.
Was mache ich falsch? Wer kann mir bitte helfen? Bin noch Newbie in VB...
Gruß Andy
Zusatzinfo von Microsoft:
Tape Drives
You can open tape drives by using a file name of the following form: "\\.\TAPEx" where x is a number that indicates which drive to open, starting with tape drive zero. To open tape drive zero in an application that is written in C or C++, use the following file name: "\\\\.\\TAPE0".
|
|
| |
|
 |
Electrodrome Newbie

Anmeldedatum: 25.06.2011 Beiträge: 4
|
Tape Drive - Bandlaufwerk - Function Update
Verfasst am: 25.06.2011, 14:30 |
|
|
Long durch Integer ersetzt, damit es den Konventionen entspricht
| Code: | | Public Declare Function PrepareTape Lib "kernel32" (ByVal hDevice As Integer, ByVal dwOperation As Integer, ByVal bimmediate As Integer) As Integer |
Ändert aber nicht wirklich was  |
|
| |
|
 |
Electrodrome Newbie

Anmeldedatum: 25.06.2011 Beiträge: 4
|
...
Verfasst am: 04.07.2011, 13:46 |
|
|
| Schade das in diesem Forum nix passiert... |
|
| |
|
 |
christopher.g Überflieger

Anmeldedatum: 03.05.2008 Beiträge: 565
|
Verfasst am: 05.07.2011, 07:25 |
|
|
das forum ist fast tot
versuchs mal auf vb-future.de
oder vb-community.eu
gibt ja unzählige foren
lg |
|
| |
|
 |
Electrodrome Newbie

Anmeldedatum: 25.06.2011 Beiträge: 4
|
...
Verfasst am: 05.07.2011, 11:43 |
|
|
Danke für den Tipp. Wenigstens etwas  |
|
| |
|
 |
|
|