LW-Buchstabe U3-Stick ermitteln

  • Hi, ich habe folgendes Problem. Ein U3-Stick meldet sich mit einem CD-LW und einem USB-Stick am System. Nun möchte ich aus dem U3-Bereich (CD-LW) ein Autoit-Script starten, welches auf den normalen USB-Stick-Bereich zugreifen muss.

    Den Buchstaben aus dem das Script gstartet wird kann ich ja ermitteln, aber wie finde ich mit Autoit den passenden Laufwerksbuchstaben der USB-Stick-Partition ? Der Buchstabe kann ja genauso variieren und auch mit dem Festplatten-Manager verstellt werden !

    Besten Dank für alle Ideen...
    Micha_he

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Wenn es aber mehreren U3-Stick funktionieren soll, müssten alle gleich heißen. Das wäre natürlich nicht so toll.

    Irgendwie kann Windows die beiden Buchstaben auch erkennen, da der "Hardware sicher entfernen" Dialog ja beide zusammen anzeigt !

    Vielleicht hilft dies weiter; Ein Tool von "Uwe Sieber" zeigt beide USB Geräte mit Laufwerksbuchstaben an. Einmal als Drivetype CDRom einmal als Removeable. Dann könnte ich über "Laufwerksbuchstabe (CD) --> Seriennummer der Devices --> Laufwerksbuchstabe (USB Stick)" den betroffenen Buchstaben ermitteln. Kann ich eine Abfrage nach dem Muster des Tools von Uwe Sieber in AutoIt oder per WMI nachbilden, ohne das ich die Ausgabe eines weiteren DOS-Befehls bemühen muss ???

    Dank nochmal an alle die helfen können
    Micha_he

    Dateien

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    2 Mal editiert, zuletzt von Micha_he (24. April 2008 um 10:14)

  • Ich versuche zur Zeit die Zuordnung eines Laufwerk zum physikalische Device mit folgendem Script herauszufinden. Leider gibt die Funktion 'DeviceIoControl" nichts brauchbares zurück. Kann mir jemand bei der API-Funktion helfen ?

    Spoiler anzeigen
    [autoit]

    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS = 0x00560000
    Dim $bytes

    [/autoit] [autoit][/autoit] [autoit]

    $handle = _APIFileOpen("\\.\C:")

    [/autoit] [autoit][/autoit] [autoit]

    $ret = Dllcall("kernel32.dll","int","DeviceIoControl", _
    "hwnd",$handle, _
    "int",$IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, _
    "ptr",0, _
    "int",0, _
    "ptr",0, _
    "int",0, _
    "int*",$bytes, _
    "ptr",0)

    _ArrayDisplay($ret)

    [/autoit] [autoit][/autoit] [autoit]

    _APIFileClose($handle)
    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; _APIFileOpen( <FileName> )
    ;
    ; Returns a "REAL" file handle for reading and writing.
    ; The return value comes directly from "CreateFile" api.
    Func _APIFileOpen( $szFile )
    Local $GENERIC_READ = 0x80000000
    Local $GENERIC_WRITE = 0x40000000
    Local $OPEN_ALWAYS = 4
    Local $FILE_ATTRIBUTE_NORMAL = 0x00000080
    Local $AFO_h
    $AFO_h = DllCall( "kernel32.dll", "hwnd", "CreateFile","str", $szFile,"long", BitOR($GENERIC_READ,$GENERIC_WRITE),"long", 0,"ptr", 0,"long", $OPEN_ALWAYS,"long", $FILE_ATTRIBUTE_NORMAL,"long", 0 )
    Return $AFO_h[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; _APIFileClose( <FileHandle> )
    ;
    ; The return value comes directly from "CloseHandle" api.
    Func _APIFileClose( $hFile )
    Local $AFC_r
    $AFC_r = DllCall( "kernel32.dll", "int", "CloseHandle","hwnd", $hFile )
    Return $AFC_r[0]
    EndFunc

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Genau, auf dieser Seite steht das mit der Zuordnung per "IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS" unter anderem auch. Eine weitere Möglichkeit per WMI funktioniert leider nur mit Admin-Recht. Nur die Autoit-Umsetzung der Funktion "DeviceIoControl" will bei mir scheinbar nicht !
    Ein Beispiel unter AutoIt habe ich leider nirgends gefunden. Wahrscheinlich übergebe ich falsche Parameter beim Aufruf. Der Contolcode "0x00560000" für "IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS" sollte eigentlich korrekt sein.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Du hast das FileOpen falsch gehabt und du musst ne Otput-Struct übergeben
    Hab mal die WINAPI-Funktionen genommen, ist übersichtlicher. Kannst natürlich aus wieder rauskopieren.

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #include <WINAPI.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS = 0x00560000
    Dim $bytes

    [/autoit] [autoit][/autoit] [autoit]

    $handle = _APIFileOpen("\\.\c:")

    [/autoit] [autoit][/autoit] [autoit]

    $s = DllStructCreate("byte[100]")
    $ret = Dllcall("kernel32.dll","int","DeviceIoControl", _
    "hwnd",$handle, _
    "int",$IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, _
    "ptr",0, _
    "int",0, _
    "ptr",DllStructGetPtr($s), _
    "int",DllStructGetSize($s), _
    "int*",$bytes, _
    "ptr",0)

    ;~ _ArrayDisplay($ret)
    $Res = BinaryMid(DllStructGetData($s,1),1,$ret[7])

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "The ExTEnds",$Res)

    [/autoit] [autoit][/autoit] [autoit]

    _APIFileClose($handle)
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    ; _APIFileOpen( <FileName> )
    ;
    ; Returns a "REAL" file handle for reading and writing.
    ; The return value comes directly from "CreateFile" api.
    Func _APIFileOpen( $szFile )
    Return _WinAPI_CreateFile($szFile,$OPEN_ALWAYS,0,$FILE_SHARE_READ+$FILE_SHARE_Write,$FILE_ATTRIBUTE_NORMAL)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; _APIFileClose( <FileHandle> )
    ;
    ; The return value comes directly from "CloseHandle" api.
    Func _APIFileClose( $hFile )
    Return _WinAPI_CloseHandle($hFile)
    EndFunc

    [/autoit]
  • Hallo progandy

    Hat das Script bei Dir etwas ausgegeben ? Bei mir erscheint nur eine leere MsgBox !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • UUps, da hab ich in der FileOPen Methode nochmal was ersetzt und nicht getestet. So gehts:

    [autoit]

    Func _APIFileOpen( $szFile )
    Return _WinAPI_CreateFile($szFile,2,0,$FILE_SHARE_READ+$FILE_SHARE_Write);,$FILE_ATTRIBUTE_NORMAL)
    EndFunc

    [/autoit]
  • 1. Es geht jetzt. Wahrscheinlich ist die ID des Physikalischen Device das 9te Byte.

    2. Schade, nur leider funktioniert das bei CD/DVD-Laufwerken nicht. Es gibt scheinbar hier keine "Extents" zurück !

    Also wieder keine brauchbare Lösung um ohne Adminrecht an den U3-Stick-Buchstaben zu kommen.
    Hat jemand vielleicht noch eine Idee ?

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Micha_he

    Also wenn Du einen U3-Stick hast und die original Software, dann findet WinDoof doch auf jeden Fall den Stick und dann nur den nächsten Buchstaben nehmen.
    Also wenn ich den U3-Stick hier einstecke erscheint ein LW-M und dann kommt ein Fenster, wo ich das PW eingebe (kann man ausschalten). Aber wenn das PW richtig ist, kommt das LW-N. Die Eingabe mit dem Passwort könnte man auch irgendwie sicherlich automatisch machen.

    Es gibt die Möglichkeit, das Du auch selber Deine Programme U3 lauffähig machst. Ich habe mein eigenes Menü U3 fähig gemacht.

    Google mal nach: "PStartU3" und / oder "Packagefactory" und / oder "U3Shortcut"

    Unter http://www.u3.com kannst Du Dich kostenlos als Entwickler anmelden. Dort findest Du in den Dokumentationen auch eine Anleitung zur U3-Package Erzeugung.

    Gruß,

    Crazy-A

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Ich will mich ja von der U3 Software trennen, da diese ohne Admin-Recht unter Windows 2000 SP4 nicht funktioniert und eine halbe Ewigkeit zum Starten braucht.

    Also erstelle ich eine neues ISO für das U3-CD-LW welches mir vom dazugehörigen ( hier liegt die Schwierigkeit ) U3-USB-Stick ein AutoIt-Menü-Tool starten soll, bzw. das die darin befindliche "autorun.inf" ausführt. Nur weiß ich nicht, wie das U3-Launchpad den zweiten Teil des U3-Sticks ermittelt, damit ich den Weg in AutoIt nachprogrammieren kann.

    Gruß
    micha_he

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Bei PartableApps wird auch nur nach einer speziellen INI-Datei auf allen USB-Laufwerken gesucht und wenn gefunden die darin enthaltenen gestartet.

    Funktioniert also auch nur solange kein zweiter U3-Stick gleichzeitig in Betrieb genommen wird ! Dann startet nämlich wieder die zuerst gefundene INI-Datei.
    Daher meine Idee über die Seriennummer oder etwas ähnliches den U3-USB-Stick zu ermitteln.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"