wie man die DLL entlädt - Seite 4

 
OneDepo >> :

Ja, Sie haben Recht, dies wird die Wartezeit für das Umschreiben der DLL verkürzen, aber es wird das Hauptproblem nicht lösen: Ungeladener Indikator - ändern Sie die DLL! Offensichtlich wird die Bibliothek über LoadLibrary() geladen, der Ladezähler wird auf 1 gesetzt, aber FreeLibrary() wird offenbar nicht in deinit() aufgerufen. Der Zähler wird nicht auf 0 zurückgesetzt und die Dll ist gesperrt, bis das Terminal geschlossen wird. Ich glaube schon, aber wir müssen das mit den Entwicklern abklären.

Wer hindert Sie (außer einigen Teilnehmern dieser Branche) daran

#Importieren Sie "kernel32.dll".

int GetModuleHandleA ( string sss);
void FreeLibrary(int hhh);
#import


deinit()

{

handlissimo=GetModuleHandleA("test-dll.dll");

FreeLibrary(handlissimo) ;

}


???

Sie können die Funktionsparameter selbst eingeben. Um alle auf diese Weise freigegebenen DLL's TOTAL aus dem SPEICHER zu löschen - aufgrund der Einschränkungen von metatrader.exe und aufgrund des von mir bereits erwähnten starken Cachings in vinda (das die Ersetzung geschützter DLL-Dateien aus dem DLL-Cache beinhaltet) - verwenden Sie regsvr32.

Ich sehe, dass TheExpert mit MetaQuotes verbunden ist.

 

Hinweis: Manchmal entlädt auch regsvr32 die DLL nicht, und Windows füllt eine alte Version ein. Die Praxis zeigt, dass eine einzige DLL WIEN lang im Speicher liegen kann. In diesem Fall hilft nur noch ein Neustart. Wenn Sie nicht neu starten möchten, können Sie auf halbhackbare Methoden zurückgreifen, z. B. den Process Explorer. Es kann alles von überall her aus dem Speicher entladen - im Gegensatz zu dem, was die Berufspolitiker in diesem Forum behaupten (und auch laden, ha ha, aber das braucht man nicht).

http://www.softpedia.com/get/System/System-Info/Process-Explorer.shtml

Kurzbeschreibung und Plugin:

http://rootkits.su/app/ShowApp.aspx?id_a=36

 

Wie ich sehe, sind Sie immer noch dabei. Also gut. Hier ist, was MS selbst uns über regsvr32 sagt:


Regsvr32-Tool: Verwendung und Fehlermeldungen


"Das Tool Regsvr32 (Regsvr32.exe) dient zum Registrieren und Aufheben der Registrierung von OLE-Steuerelementen, wie z. B. automatisch registrierten DLL- oder OCX-Dateien. Dies kann bei der Behebung von Problemen mit dem Windows-System, dem Microsoft Internet Explorer und anderen Programmen erforderlich sein. Laut dem unten stehenden Artikel der Microsoft Knowledge Base sollte beispielsweise das Tool Regsvr32.exe verwendet werden, um die Registrierung des Wuv3is.dll-Steuerelements aufzuheben, bevor es von der Windows Update Center-Website neu installiert werden kann.


mehr:

"Das Dienstprogramm regsvr32.exe wird verwendet, um DLLs und ActiveX-Steuerelemente in der Windows-Registrierung zu registrieren. Es kann auch verwendet werden, um Inkonsistenzen zwischen DLL-Dateien zu beseitigen."

 
HideYourRichess >> :

Wie ich sehe, sind Sie immer noch dabei. Also gut. Hier ist, was MS selbst uns über regsvr32 sagt:


Regsvr32-Tool: Verwendung und Fehlermeldungen


"Regsvr32 (Regsvr32.exe) wird zum Registrieren und Aufheben der Registrierung von OLE-Steuerelementen wie automatisch registrierten DLL- oder OCX-Dateien verwendet. Dies kann bei der Behebung von Problemen mit dem Windows-System, dem Microsoft Internet Explorer und anderen Programmen erforderlich sein. Laut dem unten stehenden Microsoft-Knowledgebase-Artikel sollte beispielsweise das Tool Regsvr32.exe verwendet werden, um die Registrierung des Steuerelements Wuv3is.dll aufzuheben, bevor es von der Windows Update Center-Website neu installiert wird.


mehr:

"Das Dienstprogramm regsvr32.exe wird verwendet, um DLLs und ActiveX-Steuerelemente in der Windows-Registrierung zu registrieren. Es kann auch zur Beseitigung von Inkonsistenzen zwischen DLL-Dateien verwendet werden."

Nun, Onkel Hacker, du solltest aus deinem letzten Satz bereits erraten haben, wie regsvr32 für uns arbeitet:


http://support.microsoft.com/kb/207132

RegSvr32.exe ruft die folgenden Win32-Funktionen in dieser Reihenfolge auf:

* OleInitialize
* LoadLibrary zum Laden der DLL
* DllRegisterServer oder DllUnregisterServer
* FreeLibrary
* OleUninitialize

http://msdn.microsoft.com/en-us/library/ms683152(VS.85).aspx
FreeLibrary Funktion

Gibt das geladene DLL-Modul (Dynamic-Link-Library) frei und verringert, falls erforderlich, die Anzahl seiner Referenzen.
Wenn die Anzahl der Verweise Null erreicht, wird das Modul aus dem Adressraum des aufrufenden Systems entladen.
Prozess und der Handle ist nicht mehr gültig.

Das heißt, regsvr32 lädt und gibt die Bibliothek frei. Aber im Gegensatz zu terminal.exe, das von sich aus oder mit einer einfachen und eleganten Lösung, die ich oben vorgeschlagen habe, die Bibliothek freigibt, aber weiterhin im Speicher bleibt (was Windows Gründe gibt, die Bibliothek vorerst nicht zu entladen und dies einem anderen Prozess zu überlassen) - im Gegensatz zu metatrader, das im Speicher hängt, das Kommandozeilenprogramm regsvr32.exe-Befehlszeilenprogramm STOPPT seinen PROZESS und BEENDET den SPEICHER, wodurch Windows angewiesen wird, die Bibliothek vollständig aus dem Speicher zu entladen.

Eine Bibliothek kann entladen werden, ohne regsvr32 zu verwenden, aber das ist Roulette. Manche Leute mögen Roulette, die meisten Profis nicht, das ist eine Frage des Entwicklungsstandes.

Wenn die Bibliothek einfach ist und sich nicht an viele andere Bibliotheken klammert, kann sie schnell entladen werden. Wenn es sich jedoch um eine komplexe, datenbankgestützte Bibliothek mit exotischen Steuerelementen handelt, kann das Entladen Minuten oder sogar Stunden dauern.

Übrigens, was den Parameter AlwaysUnloadDLL betrifft, so behauptet Microsoft selbst, dass dies nur bis zum Jahr 2000 funktionierte (damals wie heute werden komplexe Algorithmen angewandt, um "den Bedarf an einer DLL" zu berechnen):

http://msdn.microsoft.com/en-us/library/bb776795(VS.85).aspx

Entladen der DLL

Die Shell entlädt eine DLL automatisch, wenn ihr Verwendungszähler Null ist, aber erst, nachdem die DLL eine Zeit lang nicht verwendet wurde. Diese inaktive Zeitspanne kann manchmal unannehmbar lang sein, insbesondere wenn eine Shell-Erweiterungs-DLL debuggt wird. Bei Betriebssystemen vor Windows 2000 können Sie den inaktiven Zeitraum verkürzen, indem Sie die folgenden Informationen in die Registrierung eintragen.

  • HKEY_LOCAL_MACHINE
  • Software
  • Microsoft
  • Windows
  • AktuelleVersion
  • Entdecker
  • AlwaysUnloadDll
 

Da ich immer noch unter einer schlimmen Erkältung leide (aber wohlgemerkt, selbst wenn ich mit Fieber im Bett liege, helfe ich Leuten kostenlos bei der Lösung ihrer terminal.exe-Probleme, d.h. ich löse ausschließlich ihre Geldprobleme), kann ich Interessierten (und auch uninformierten Berufsschülern) erzählen, wie schwierig es ist, als Systemadministrator in großen Unternehmen mit Fernzugriff zu arbeiten.

Jedes große Unternehmen verwendet UNIVERSAL-Tools. Das bedeutet, dass auf allen Servern - lokal und global - Eorakl läuft, auf allen Workstations das gleiche Programm in der gleichen Version der Verknüpfung Office, Excel- oder Analyseprogramm mit Eorakl oder MS SQL Server, etwa "dbconnect.dll", verwendet wird. Und dann eines "wunderbaren" Tages für Sysadmins Entwickler endlich eine neue Version des Programms und alle lokalen Sysadmins (in der Gesellschaft der ersten hundert - Sysadmins können 500-800, 1,250 Terabyte Festplattenspeicher, 130 NCR-Knoten, 145 Unix-Server-Systeme und 2600 Windows-Server, 80.000 Mail-Benutzer in mehr als 2.000 Unternehmensstandorte) kommt ein Auftrag zu ersetzen "morgen" dieses Programm. Das Programm ist komplex, es verwendet eine Menge von Dingen, die man nicht einfach auf dem Computer neu schreiben kann. Und es ist notwendig, den Computer nach regsvr32 neu zu starten - wenn der Systemadministrator Zeit dafür hat.

In diesem Ersatz kann nur von 18-00 bis 24-00 getan werden, weil bis 18-00 Büroangestellte sind noch auf Computern arbeiten, und um 24-00 auf dem Server beginnt Service-Arbeit auf Yoraklah, die Stationen beginnen Auto-Update von Windows und Auto-Erneuerung von Antiviren. Es gibt Möglichkeiten, regsvr32 von FERN zu starten und die Station zu überlasten, ohne die Station aufzusuchen, aber sie funktionieren nicht immer(Firewall aktiviert, Benutzer, der sich nicht anmeldet, usw.). Und die Computer der lokalen Systemadministratoren können 50-100 sein, weit voneinander entfernt, auf verschiedenen Etagen und in bereits geschlossenen Büros.

Also laufen die Systemadministratoren durch das Firmengebäude und führen regsvr32 von Hand aus.

 

Regsvr32 wurde entwickelt, um COM-Server zu registrieren und die Registrierung aufzuheben.

Dies sind nicht alle dlls. Dies ist eine besondere Art von Dll. Es ist nicht notwendig, Regsvr32 aufzurufen.

Es ist ausreichend, FreeLibrary wie oben gezeigt aufzurufen oder "#import" nicht zu verwenden, sondern das Paar zu benutzen:

LoadLibrary, FreeLibrary.

Übrigens, meine Dlls werden aus irgendeinem Grund sofort nach dem Entfernen des Indikators freigegeben.

 

Ich persönlich schreibe eigentlich für diejenigen, die Russisch und Englisch lesen können. Seltsame Leute, sie wiederholen hier zum zehnten Mal, WARUM regsvr32 geschaffen wurde. Sie rezitieren es wie ein Mantra, wie einen Zauberspruch, während andere nicht wissen, warum. Und was macht es schon, wenn regsvr32 das tut, was wir brauchen, und keine Nebenwirkungen hat?

Das ist so, als würde ein Notarzt oder ein Intensivmediziner einem Alkoholiker Natriumhyposulfit verschreiben ("Fortgeschrittener" wie er)

http://drugslist.ru/drugs/antichlor-sodium-thiosulfate/

und er fängt an zu schreien, dass er es nicht trinken wird, weil ..... ein Fotofixierer ist und sie ihn vergiften wollen!

http://www.rwwc.ru/recipe/index6.php

Wenn es hier so viele schlaue Leute gibt, dann sollen sie auf ANDERE Standardprogramme hinweisen, die auf jedem Computer zur Verfügung stehen und mit denen man JEDE BIBLIOTHEK, die man haben möchte, laden und sofort wieder entladen kann, um auf diese Weise die Zwischenspeicherung von DLLs durch Windows zurückzusetzen.

 
AlexEro >> :

...

Zum zehnten Mal wird hier wiederholt, WARUM regsvr32 geschaffen wurde. Was macht es aus, wenn regsvr32 das tut, was wir brauchen, und keine Nebenwirkungen hat? Sie rezitieren es wie ein Mantra, wie einen Zauberspruch.

Das ist so, als würde ein Arzt in der Notaufnahme einem Alkoholiker Natriumhyposulfit verschreiben ("Fortgeschrittener" wie er)

...

Das alles ist sehr wichtig. Wenn Sie medizinische Vergleiche anstellen, ist das, was Sie hier schreiben, so, als würde man einen kranken Kopf mit einer Axt behandeln.


AlexEro >> :

...

Das Entladen von Bibliotheken kann OHNE die Verwendung von regsvr32 erfolgen, aber das ist Roulette. Manche Leute mögen Roulette, die meisten Profis nicht, das ist eine Frage des Entwicklungsstandes.

Wenn die Bibliothek einfach ist und sich nicht an viele andere Bibliotheken klammert, kann sie schnell entladen werden. Wenn es sich jedoch um eine komplexe, datenbankgestützte Bibliothek mit exotischen Steuerelementen handelt, kann das Entladen Minuten oder sogar Stunden dauern.

...


Du verstehst einfach nicht, wie der Mechanismus zum Be- und Entladen von Müll im Prinzip funktioniert, deshalb hast du so kranke Fantasien zu diesem Thema. Sie sollten regsvr32 nicht verwenden, es ist nicht dafür gedacht, und Sie sollten auch nicht versuchen, die Bibliothek mit FreeLibrary in deinit zu entladen, die Bibliothek sollte von selbst entladen werden, wenn sie keine groben Fehler hat, natürlich. Ihre "einfache und elegante Lösung" ist Unsinn. Dies wird in vielen Fällen nicht funktionieren, insbesondere wenn es zu Deadlocks innerhalb der DllMain kommt.


Ich wiederhole: Der einzige normale und korrekte Weg, eine DLL zu entladen, ist, die DLL selbst ohne Fehler zu schreiben. Wenn dll nicht normal entladen wird - dann sind die Hände des Programmierers falsch (die Hände des Programmierers, alles richtig gemacht im Terminal selbst), das ist alles. Ich habe die Dll immer, ich wiederhole, immer normal entladen, sofort nach dem Entfernen des Indikators. Und das ist richtig, so ist es im Terminal vorgesehen.


Und Sie versuchen vergeblich, Ihrer Fiktion Gewicht zu verleihen, indem Sie sich auf Ihre Erfahrung als Systemadministrator berufen. Wir haben bereits herausgefunden, dass Sie kein sehr kluger Systemadministrator sind, daher wirkt es sehr kindisch und lächerlich.

 
HideYourRichess >> :
Du verstehst einfach nicht, wie der Mechanismus zum Laden/Entladen von DLLs im Prinzip funktioniert, deshalb hast du so kranke Fantasien zu diesem Thema.... (Man sollte auch nicht versuchen, eine Bibliothek zu entladen, um sie mit FreeLibrary zu deinitieren, die Bibliothek sollte von selbst entladen werden, wenn sie keine groben Fehler enthält. Ihre "einfache und elegante Lösung" ist Unsinn. Dies wird in vielen Fällen nicht funktionieren, insbesondere wenn es zu Deadlocks innerhalb der DllMain kommt.
Onkel Hacker, deine Worte entbehren jeglicher Logik: Wenn die Bibliothek IMMER entladen ist, warum funktioniert "mein" FreeLibrary-Aufruf deiner Meinung nach "in vielen Fällen nicht"? Welcher Schaden könnte durch einen zusätzlichen FreeLibrary-Aufruf im deinit()-Block entstehen? Würde der Aufruf von FreeLibrary() Ihrer Meinung nach irgendwie die Freigabe der Bibliothek oder etwas blockieren? Das ist nicht klar, Onkel Kool Hacker, und es ist offensichtlich.
 
AlexEro >> :
Onkel Hacker, es gibt keine Logik in dem, was du sagst.

1. Frage: Woher weiß das System, von welchen Prozessen die DLL entladen werden soll?

Frage 2 - wie finde ich den Einstiegspunkt, ohne die DLL zu laden?


Nun, im Wesentlichen. Die DLL wird während der Regsvr-Registrierung geladen und entladen, um eine korrekte Registrierung zu gewährleisten. Dies hat natürlich keine Auswirkung auf das Entladen aus anderen Prozessen.

Versuchen Sie nicht, dümmer zu klingen als Sie sind. Du kannst aber Mana lesen.

Wenn die Bibliothek IMMER entladen wurde, warum funktioniert "mein" FreeLibrary-Aufruf Ihrer Meinung nach "in vielen Fällen nicht"? Welcher Schaden könnte durch einen zusätzlichen FreeLibrary-Aufruf in einem deinit()-Block entstehen? Vielleicht blockiert Ihr FreeLibrary()-Aufruf irgendwie die Freigabe der Bibliothek, oder was? Onkel kooler Hacker, und ein klarer noch dazu.

Das liegt auf der Hand. Zusätzlich zum Entladen der DLL kann die Implementierung der Deinitialisierung des Indikators (Experte) alles sein, was direkt damit zusammenhängt, was die unbefugte Freigabe der DLL in einen Hack verwandelt, der wiederum den korrekten Betrieb des Terminals nicht garantiert.


>> Also, viel Glück, versucht es weiter.

2Alles: Denken Sie nicht daran, ihn als Verwaltungsangestellten einzustellen.

Grund der Beschwerde: