DLL nur von augesuchten Usern nutzen lassen. Aufrufer zuordnen.



  • Hallo Forum,

    ich habe 3 Probleme:
    Ich möchte eine DLL als Datencontainer verwenden. Nur DLL und Exe Dateien die meiner DLL mit Ihrem SHA1 Hash bekannt sind sollen die Daten auslesen dürfen.
    1. Wie kann ich meine DLL beenden wenn festgestellt wird das eine unbekannte Binary ein DLL_PROCESS_ATTACH auslöst? Ich möchte nun nicht unbedingt bei jedem Funktionsanfang einen Stopper setzen der den ungewollten Nutzer wieder rauswirft.

    2. Kann ich davon ausgehen das beim zweiten DLL_PROCESS_ATTACH Ereignis meine DLL komplett geladen ist? So dass ich dann dort komplexe Operationen ausführen kann? (In dem Splashscreen Thread in diesem Forum wurde davon abgeraten komplexe Operationen in DLL_Main auszuführen. Gilt das generell oder kann ich beim zweiten laden machen was ich will?)

    Die Funktionen zum Ent- und Verschlüsseln sind auch in die DLL auslagert. Eine Funktion lautet SetRsaKey(). Dieser wird einmal ein Key übergeben und alle weiteren zB. DoEncrypt() Aufrufe verwenden ihn dann. Bei der DLL ist jedoch vorgesehen das mehrere Anwendungen die DLL gleichzeitig verwenden.
    3. Wie kann ich nun einem DoEncrypt() Aufrufer einen Key zuordnen? Ich möchte keine Pointer über die DLL Schnittstelle gehen lassen. Also bei SetRsaKey einen Pointer zurückgeben der dann bei jedem DoEncrypt() Aufruf wieder mitgeschleppt wird.

    Vielen Dank im voraus

    Bommel



  • hi,,ich weiß nicht ob ich deine Fragen richtig verstehe.

    1. FALSE zurückgeben?

    2. Was meinst du beim zweiten DLL_PROCESS_ATTACH? Die Dll kriegt genau einmal eine DLL_PROCESS_ATTACH Nachricht und zwar wenn sie im jeweiligen Prozeß eingeblendet wird.

    3. Die DLL hat doch ihren eigenen Satz an Variablen pro Prozess. Also muss jeder Prozess deine SetRsaKey() aufrufen und den Key der DLL übergeben. Oder was meinst du??



  • Ich dachte das die Variablen die ich im Modul von DllMain anlege für jede DLL gleich seien? Irgendwo habe ich gelesen das man so über eine DLL Daten austauschen kann. Programme A und B laden eine DLL. A schiebt Daten rein und B ließt die Daten aus.

    Aber wenn das so ist wie Du beschrieben hast brauche ich mich um konkurierende Zugriffe gar nicht kümmern?! 👍



  • Frage: Mussten die globalen DLL Variablen vielleicht static sein damit man so Daten austauschen konnte?



  • Nein, dazu musst du sie in einem seperaten Datensegment ablegen und dem Linker mitteilen, daß dieses Datensegment von mehreren DLL Instanzen gemeinsam verwendet werden soll.

    #pragma data_seg("SHARED")  // begin the shared data segment.
    // shared variables
    #pragma data_seg() // end the shared data segment 
    
    // tell linker to generate shared data segment
    #pragma comment(linker, "/section:SHARED,RWS")
    


  • Vielen Dank Lobster 🙂


Anmelden zum Antworten