problem mit dllopen auf eraser.dll unter vista x64

  • hallo liebe community,

    mir ist bewusst dass es die _EraserAPI.au3 schon gibt. leider funktioniert bei mir das öffnen der eraser.dll mit DllOpen schon nicht.
    deswegen hatte ich versucht eine stark reduzierte funktionalität mit autoit umzusetzen. ziel war den dateiinhalt 1. mit nullen, 2. mit einsen und 3. mit zufälligen daten zu überschreiben. ich bin aber mit der laufzeit bei größeren dateien (die drei durchläufe für 90Mb dauern bei mir 570sec) überhaupt nicht zufrieden.

    [autoit]


    Func erase($file)
    $size = FileGetSize($file)

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

    ;erster durchlauf: überschreiben mit 0
    $fop = FileOpen($file,2)
    For $x = 1 To $size
    FileWrite($fop, Chr(48))
    Next
    FileClose($fop)

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

    ;zweiter durchlauf: überschreiben mit 1
    $fop = FileOpen($file,2)
    For $x = 1 To $size
    FileWrite($fop, Chr(49))
    Next
    FileClose($fop)

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

    ;dritter durchlauf: überschreiben mit zufälligen werten
    $fop = FileOpen($file,2)
    For $x = 1 To $size
    $Chr = Random(33, 126, 1)
    FileWrite($fop, Chr($Chr))
    Next
    FileClose($fop)

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

    ;anschließend FileDelete($split[1])
    EndFunc

    [/autoit]

    was kann man tun um den vorgang zu beschleunigen, oder hat jemand von euch die _EraserAPI.au3 zum laufen bekommen?

    danke und grüße
    vgun

    Edit: ich habe die überschrift geändert, da ich mich jetzt auf die _EraserAPI.au3 konzentrieren werde.

    Einmal editiert, zuletzt von vgun (22. August 2009 um 20:21)

  • ok dann würde nur der weg über die _EraserAPI von http://www.autoitscript.com/forum/index.php?showtopic=73930&st=0&p=537915&hl=_EraserAPI&fromsearch=1&#entry537915 bleiben. leider läuft bei mir schon das $EraserDll = DllOpen($path) aus zeile 77 nicht obwohl pfadangabe korrekt ist.

    hat jemand erfahrungen mit dieser library?
    braucht man irgendeine spezielle eraser.dll, damit das ganze funktioniert? ich hatte es mit den dlls aus den versionen 5.6- 5.8 getestet - es funktionierte nie- immer gab dllopen die -1 zurück.

    grüße vgun

  • Hallo vgun,
    ich würde die Finger von der .au3 lassen.
    Nachdem die error-Abfrage nicht sauber programmiert ist, gehe ich davon aus, dass der Rest auch nicht besser ist.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hallo Schnuffel,

    Ok du hast die das Ding angeschaut und sagt das ist wahrscheinlich misst, gut damit kann man leben aber das eigentlich Problem bleibt doch.

    Wäre es nicht sinnfoll einen Lösungsansatz zu liefern ode villeicht die AU3 zu fixen?
    Mit deiner Aussagt ist das Thema beendet ohne gelöst zu sein.

    ich selbst merke immer wieder das hier im Forum oft so verfahren wird, das finde ich schade denn das ist ja ein Hilfe und kein Philosophie Forum.

  • Hallo,

    Zitat

    Mit deiner Aussagt ist das Thema beendet ohne gelöst zu sein, ich selbst merke immer wieder das hier im Forum oft so verfahren wird

    Was soll uns das jetzt sagen? Wir sollen uns um eine Lösung bemühen weil dein Ansatz so nicht funktioniert?
    Hast du dir auch nur ansatzweise mal überlegt was du überhaupt machen möchtest und was das in einem MODEREN Betriebssystem incl. der Hardware (Netzlaufwerke) bedeutet?
    Wirklich SICHER Daten zu überschreiben heisst, vollen Zugriff auf die Speicherzellen (Sektoren) deines Datenträgers zu haben. Vorbei an allem, was heutzutage Dateien vor dem Schreiben puffert (incl. Festplattenelektronik, Treiber, Caches uswusf...)
    Wie Peethebee schon geschrieben hat, alles andere als einfach.
    Mit diesem Thema wird in der Industrie RICHTIG Geld verdient, glaubst du man bastelt dafür ein Programm in einigen Minuten mit einer Scriptsprache?
    Viel Spass bei z.B. Flash-Speicher (USB-Sicks usw), dort verteilt ein interner Controller die Zugriffe gleichmäßig über die NAND-Speicherchips, da jede einzelne Speicherzelle nur einige hunderttausend Löschzyklen verträgt. Oder muss es SOOO sicher garnicht sein?

    ciao
    Andy

    • Offizieller Beitrag

    Wäre es nicht sinnfoll einen Lösungsansatz zu liefern ode villeicht die AU3 zu fixen?
    Mit deiner Aussagt ist das Thema beendet ohne gelöst zu sein.

    Manchmal ist der Verweis darauf, dass man ein Problem nicht weiter verfolgen sollte, genauso wertvoll, wie Lösungswege. Und das trifft bei der Thematik halt zu: Finger weg!

    ich selbst merke immer wieder das hier im Forum oft so verfahren wird, das finde ich schade denn das ist ja ein Hilfe und kein Philosophie Forum.

    Mit dieser Aussage trittst du vielen von uns freiwilligen Helfern gewaltig auf die Füße. 8|
    Wir bemühen uns und suchen selbst aus teilweise recht hilflos gestammelten Problembeschreibungen noch Aussagen heraus, um dem Fragenden Hilfe zu leisten. Das außerdem in einer beachtlich kurzen Reaktionszeit!

  • danke erstmal für die antworten.
    die grundlagendiskussion ist zwar interessant hilft mir aber momentan nicht so richtig.
    ich bin immer noch hinter einem lösungsanstz her:

    1. die _EraserAPI.au3 baut auf der eraser.dll von heidisoft http://eraser.heidi.ie/ auf. haltet ihr den eraser (open source) für prinzipiell geeignet für sicheres löschen?

    2. wenn ja, zurück zu autoit: ich habe unabhängig von der _EraserAPI.au3 versucht nur das dllopen auf diese eraser.dll hinzuibekommen: fehlschlag der rückgabewert ist unabhängig von der version der dll immer -1 (und nicht das dll-handle). hat irgendjemand das schon mal auf die dll erfolgreich hinbekommen- was muss man beachten?

    grüße vgun

  • Hmmm,

    funktioniert bei mir einwandfrei:

    [autoit]

    ; DLL liegt im Skriptverzeichnis
    $eraserdll = DllOpen ("eraser.dll")

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

    ConsoleWrite ("--- Eraser.dll Instanzzähler = "&$eraserdll & @crlf)

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

    DllClose ($eraserdll)

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

    Exit (0)
    ;

    [/autoit]


    Gruß
    Greenhorn


  • danke!

    ich habe daraufhin das ganze nochmal in der vmware unter xp statt dem physikalischen vista64 getestet da funktionierts. auch unter vista business 32 gehts.

    die 64 bit als ursache hatte ich bis jetzt ausgeschlossen, da das commandlinetool eraserl.exe und auch das normale programm, die beide auf der eraser.dll aufbauen, hier funktionierten.

    kann man etwas tun, damit dllopen("eraser.dll") auch unter 64bit funktioniert?

    grüße vgun

    Einmal editiert, zuletzt von vgun (22. August 2009 um 18:08)

  • hallo greenhorn,

    ja die neueste version habe ich. eraser selbst läuft bei mir auch relativ problemlos unter vista 64 (mit adminrechten).
    das problem ist aus meiner sicht der dllopen- befehl auf die eraser.dll unter vista64.
    den habe ich mit den versionen 5.6- 5.8.7.0 getestet und der gab auf dem vista64 immer nur -1 zurück.

    grüße vgun

  • Du kannst alternativ folgendes versuchen ...

    [autoit]

    $eraserdll = LoadLibrary ("eraser.dll")

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

    ConsoleWrite ("--- Eraser.dll Instanzzähler = "&$eraserdll & @crlf)

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

    FreeLibrary ($eraserdll)

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

    Exit (0)

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

    ;««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

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

    Func FreeLibrary ($hModule)

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

    Local $aRes = DllCall ("kernel32.dll", 'int', 'FreeLibrary', _
    'ptr', $hModule)
    Return $aRes[0]

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

    EndFunc

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

    Func LoadLibrary ($sFileName)

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

    Local $aRes = DllCall ("kernel32.dll", 'ptr', 'LoadLibraryW', _
    'wstr', $sFileName)
    Return $aRes[0]

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

    EndFunc

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

    Func LoadLibraryEx ($sFileName, $hFile, $dwFlags)

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

    Local $aRes = DllCall ("kernel32.dll", 'ptr', 'LoadLibraryExW', _
    'wstr', $sFileName, _
    'ptr', $hFile, _
    'dword', $dwFlags)
    Return $aRes[0]

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

    EndFunc
    ;

    [/autoit]


    Oder LoadLibraryEx mit den entsprechenden Parametern testen ...
    LoadLibraryEx


    Gruß
    Greenhorn


  • unter vista64 gibt mir die funktion das hier zurück: 0x0000000000000000 ich nehme an, dass das mit der -1 von dllopen vergleichbar ist.

    unter xp ist der rückgabewert so: 0x01140000.

  • [autoit]

    Global Const $DONT_RESOLVE_DLL_REFERENCES = 0x00000001

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

    $eraserdll = LoadLibraryEx ("eraser.dll", 0, $DONT_RESOLVE_DLL_REFERENCES)

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

    ConsoleWrite ("--- Eraser.dll Instanzzähler = "&$eraserdll & @crlf)

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

    FreeLibrary ($eraserdll)

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

    Exit (0)

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

    ;««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

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

    Ansonsten fällt mir auch nichts mehr ein ...
    Und bei DllCall "cdecl" unter Umständen verwenden ...

    Hast Du übeprüft, ob dein UAC die Probleme mit DllOpen/LoadLibrary verursacht ...


    Gruß
    Greenhorn


  • hallo greenhorn,

    dankeschön für die geduld!!!
    leider bringt auch das $DONT_RESOLVE_DLL_REFERENCES für LoadLibraryEx nichts. der rückgabewert bleibt null (0x0000000000000000).

    andere werte für das dwFlags habe ich getestet- der rückgabewert bleibt gleich.

    zu uac: das script wird mit adminrechten ausgeführt.
    die vm unter vista business 32 gibt handles für dllopen zurück.

    grüße vgun

  • hallo johannes,

    danke nochmal für deine meinung zu der selbstkonstruierten anfangsfunktion.

    zurück zur eraser.dll; ich verstehe das nicht:
    aus meiner sicht ist die eraser.dll keine 64bit-dll. unter xp, vista 32 funktioniert das ansprechen der selben dll ganz normal.

    bei mir funktioniert derselbe eraser z.b. die portable version sowohl in der grafischen als auch in der command-line version unter 32 und 64 bit ohne das die dll oder programmteile getauscht werden müssen.

    andere *.dll s ließen sich bisher relativ problemlos mit autoit in 64bit und 32bit vista ansprechen z.b. die myodbc5.dll.

    grüße vgun

    Edit: ich sehe gerade, dass nooby ein ähnliches problem hier im forum mit der 7zip- dll hat:
    [ offen ] 7-zip dll auf Windows 64
    vielleicht ergibt sich daraus ein ansatz für eine lösung

    Einmal editiert, zuletzt von vgun (23. August 2009 um 18:10)