vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ActiveX-Programmierung
Re: DLL Schützen 
Autor: CPUWärmer
Datum: 12.02.05 19:01

Man kann das System verar....en:

Im Grunde ist eine ActiveX-DLL ja auch eine richtige DLL, allerdings eher eine die auf
COM basiert, funktioneller Art. Aber nach Fileart ist die DLL eine Datei die der PE-Loader von Windows einwandfrei als DLL einstufen wird und somit auch alle Mechanismen um die Datei wie eine DLL in den Speicher zu laden.

Dieser Moment ist nun Deine Chance oder Dein Part:

Der PE-Loader wertet den Fileheader aus und wird irgendwann

DLLEntryPoint

aufrufen. Findet der PE-Loader diese Funktion in der DLL, werden zwei Paramter übermittelt: hInstance der DLL (oder Basisaddresse der FileMapped-Struktur) sowie ein Parameter, der angibt, wieso der PE-Loader die DLL laden will bzw. was für ein kernel-Objekt versucht die DLL als Client an sich zu binden. Das kann nur ein Process oder ein Thread sein. Der PE-Loader erwartet von der DLL in jedem Fall, dass sich die DLL rührt und wenigstens ein TRUE für die Bemühungen zurück gibt. Gibt die DLL aber ein FALSE zurück bewirkt das, dass der PE-Loader abbricht und die DLL gar nicht in den Speicher geladen wird. Dann bekommt der VB-USER eine entzückende Meldung über den Verweis-Manager, das war die schlechte Nachricht.
Die gute Nachricht: Zum Check von DLLEntryPoint ist die DLL kurzfristig im Runningmode, das bedeutet, dass die DLL hier ihre Umgebung checken kann. Findet sie eine brauchbare Konstellation vor, so gibt sie True zurück, wenn nicht: False.

Was tun, um dieses Kernel-PE-Feature in die ActiveX-DLL einzubauen?
Nicht viel: Eigentlich nur ein triviales Modul hinzufügen. Ein Schmierpapier, auf das Windows zugreifen kann. Keine Klasse. Dort hinein gehört solch ein Code:

Private Const DLL_PROCESS_ATTACH As Long = 1
Private Const DLL_PROCESS_DETACH As Long = 0
Private Const DLL_THREAD_ATTACH As Long = 2
Private Const DLL_THREAD_DETACH As Long = 3
 
Public Function DLLEntryPoint(hInstance As Long, dwReason As Long, _
                                                         lpReserved As Long) As _
                                                         Long
      Dim bInit As Boolean
 
      DLLEntryPoint = False
      Select Case dwReason
             Case DLL_PROCESS_ATTACH : bInit = True
             Case DLL_THREAD_ATTACH : bInit = True
      End Select
 
      If bInit Then
            '... hier prüfen
            DLLEntryPoint = True
      End If
End Function
Nach C-Notation ist auf Groß-u. Kleinschreibung zu achten (der Funktionsname ist damit gemeint).
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
DLL Schützen1.452Florian Huber11.02.05 15:58
Re: DLL Schützen942Danzi11.02.05 19:42
Re: DLL Schützen861Florian Huber11.02.05 20:33
Re: DLL Schützen940CPUWärmer12.02.05 19:01
Re: DLL Schützen1.200Florian Huber12.02.05 23:15

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel