Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten
Autor
Nachricht
Electrodrome
Newbie
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 Wink

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
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 Wink
 
Electrodrome
Newbie
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
Ü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
Newbie

Anmeldedatum: 25.06.2011
Beiträge: 4

...
Verfasst am: 05.07.2011, 11:43


Danke für den Tipp. Wenigstens etwas Wink
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten

Tags: drive, funktion, source, open

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Problem mit always on top funktion 1107 30.10.2009, 12:26
Keine neuen Beiträge IntStr()funktion 1309 11.10.2007, 09:49
Keine neuen Beiträge TopMost Funktion unter DirectX 1022 27.07.2007, 11:48
Keine neuen Beiträge Wie Funktion nutzen ? 1214 29.06.2007, 21:59
Keine neuen Beiträge update funktion einbauen 1455 29.01.2007, 00:11
 


[ Time: 0.0665s ][ Queries: 92 (0.0225s) ][ GZIP on - Debug on ]