De-/EncryptFile -> Fehler 997



  • Hallo Leute,

    ich möchte gern eine Datei Ver- und wieder entschlüsseln.
    Zum verschlüsseln verwende ich ja die Funktion "EncryptFile" und zum entschlüsseln "DecryptFile".

    Ich habe zu Testzwecken eine Textdatei angelegt und diese mit EncryptFile verschlüsseln lassen. Dass funktionniert auch einwandfrei (das Attribut ist jedenfals schonmal gesetzt und es ist grün 🙂 ) Die Funktion selbst liefert auch "true". Doch wenn ich "GetLastError()" aufrufe bekomme ich den Code "997".

    Was hat das zu bedeuten? Muss ich vorher noch irgendwas "einstellen".

    PS: Die Ver/Entschlüsselung ist in einem komplexeren Programm integriert.

    Mfg



  • ERROR_IO_PENDING
    997 (0x3E5)

    Overlapped I/O operation is in progress.

    Das ist aus der MSDN. Datei ist geschlossen und nicht in gebrauch usw.?



  • îch hab schon extra nachgeschaut, ob ich die Datei irgenwo irgendwie geöffnet habe. Aber ich hab kein "loch" gefunden. Habb immer vorher sauber mit "CloseHandle" Datein geschlossen etc.

    Kann man irgendwie vorher überprüfen, ob die Datei schon offen/ in gebrauch ist?



  • Rainu schrieb:

    Die Funktion selbst liefert auch "true". Doch wenn ich "GetLastError()" aufrufe bekomme ich den Code "997".

    Was hat das zu bedeuten?

    Gar nichts. Es ist Blödsinn, GetLastError aufzurufen, wenn die Funktion Erfolg meldet.



  • Es besteht folgendes problem: Mein Programm verwendet SOCKETs. Nun prüfe ich per "WSAGetLastError()" permanent die Fehlermeldungen. Fals da ein Fehler auftritt, trennt er die verbindung.

    Das dumme ist nur, dass GetLastError und WSAGetLastError anscheinend auf den gleichen Fehler-Stack (oder was auch immer) zugreift. Ergo, er trennt die Verbindung, obwohl alles IO mit dem SOCKET (oder was damit zusammen hängt) ist.



  • WSAGetLastError() / GetLastError() sollte man nur aufrufen, wenn die aufgerufene Funktion auch einen Fehlercode zurückgeliefert hat.

    int recvReturn=recv(socket,buffer,...);
    if (recvReturn>0)
    {
        // Alles ok ;D
        // recvReturn enthält die Anzahl der empfangenen Bytes
    }
    else if (recvReturn==0)
    {
        // Verbindung wurde geschlossen
    }
    else if (recvReturn==SOCKET_ERROR)
    {
        // Verdammter Mist ;D
        int errorCode=WSAGetLastError();
        ...
    }
    

    ohne dass auch tatsächlich ein Fehler aufgetreten ist liefert (WSA)GetLastError() unter Umständen zufälligen Müll.



  • geeky schrieb:

    WSAGetLastError() / GetLastError() sollte man nur aufrufen, wenn die aufgerufene Funktion auch einen Fehlercode zurückgeliefert hat.

    Dieser Tipp hat mir geholfen .. vielen Dank 🙂


Anmelden zum Antworten