![]() |
Anzeige:
|
|
|||||||
| Spezielles Für die Bereiche API, Subclassing, Inline-Assembler, Prozesse, ect. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Vielleicht hat ja jemand eine Lösung parat...
Ich suche nach einer Programm-Möglichkeit zu ermitteln, ob eine bestimmte System-Dll-Funktion auf dem eingesetzten System vorhanden ist oder nicht. Das Programm kennt allerdings nur den Namen der Funktion, nicht den Namen der Dll, in der sich die Funktion befinden könnte, darum scheidet GetProcAddress() leider schonmal aus. Auch sowas wie IsBadCodePtr() dürfte nicht funktionieren. Hat jemand sowas schonmal probiert?
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
|
#2 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Ob eine API von einem Process gerade verwendet werden kann, kannst du feststellen, das ist kein Problem. Ob diese API auf dem System vorhanden ist...
Du müsstest dazu nacheinander alle DLLs laden, die irgendwo auf dem OS als Datei zu finden sind - wie willst du das machen?
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#3 (Direktlink) | ||
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Zitat:
Zitat:
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
||
|
|
|
|
|
#4 (Direktlink) | |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Zitat:
Toolhelp modBaseAddr = Handle der DLL GetProcAddress
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
|
#5 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Ah, du meinst die modBaseAddr aller vorhandenen Module mit dem Funktionsnamen testen.... Hoffentlich bekomme ich das so hin und es arbeitet auch noch schnell genug.
Danke, das werde ich Sonntag mal testen. Jetzt gehts erstmal zur Betriebsfeier.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
|
#6 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Das geht schneller:
EnumProcessModules
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#7 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Hier Code:
Code:
Def GetCurrentProcess(0) !"Kernel32","GetCurrentProcess"
Def GetProcAddress(2) !"Kernel32","GetProcAddress"
Def EnumProcessModules7(4) !"Kernel32","EnumProcessModules"
Def EnumProcessModules(4) !"PSAPI","EnumProcessModules"
Declare Edit&, Text&, PSAPI&, Needed&, ModuleHandles#, Winver!, OldText$
Windowstyle 31+512
Windowtitle "Ist Funktion vorhanden?"
Window 0,0-640,440
Edit&=Control("Edit","ZwQuerySystemInformation",$40000000 | $10000000 | $1000 | $400000,20,40,(Width(%HWND)-100),30,%HWND,4113,%HINSTANCE)
Text&=Create("Text",%HWND,"",20,100,(Width(%HWND)-100),200)
PSAPI&=UseDll($Syspath+"\PSAPI.DLL")
Settext Text&,Funktion_vorhanden(GetText$(Edit&))
Winver!=Val($WinVer)
Usermessages $10
While %UMessage<>$10
Getmessage
IF OldText$<>GetText$(Edit&)
Settext Text&,Funktion_vorhanden(GetText$(Edit&))
OldText$=GetText$(Edit&)
endif
wend
Freedll PSAPI&
End
Proc Funktion_vorhanden
Parameters FunktionsName$
Declare RetText$, Counter&
RetText$="Die API '"+FunktionsName$+"' wurde nicht gefunden! "
Counter&=0
DIM ModuleHandles#,4
IF Winver!<7.0
EnumProcessModules(GetCurrentProcess(),ModuleHandles#,4,addr(Needed&))
else
EnumProcessModules7(GetCurrentProcess(),ModuleHandles#,4,addr(Needed&))
endif
Dispose ModuleHandles#
DIM ModuleHandles#,Needed&+40
IF Winver!<7.0
EnumProcessModules(GetCurrentProcess(),ModuleHandles#,SizeOf(ModuleHandles#),addr(Needed&))
else
EnumProcessModules7(GetCurrentProcess(),ModuleHandles#,SizeOf(ModuleHandles#),addr(Needed&))
endif
Repeat
IF GetProcAddress(Long(ModuleHandles#,counter&),addr(FunktionsName$))>0
RetText$="Die API '"+FunktionsName$+"' wurde gefunden! "
endif
Counter&=Counter&+4
Until Counter&=Needed&
Dispose ModuleHandles#
Return RetText$
endproc
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT Geändert von AHT (23.06.2009 um 17:52 Uhr) |
|
|
|
|
|
#8 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Danke für den Code, funktioniert fast perfekt. Das Proggie stürzt aber zum Programmende immer ab, wenn man das Hauptfenster nicht explizit zerstört. Das hilft, warum auch immer...:
Code:
DestroyWindow(%hwnd) Freedll PSAPI& End
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#9 (Direktlink) | ||
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Zitat:
Zitat:
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
||
|
|
|
|
|
#10 (Direktlink) |
|
Gast
Beiträge: n/a
|
Habe den Fehler hier auch .
|
|
|
|
|
#11 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Habe den Code gerade nochmal mit der Freeware von XProfan10 getestet - auch da läuft alles ohne Probleme (Windows2000).
Vielleicht Fehler in XProfan11???
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#12 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Nein, läuft hier ohne Probleme ! Vista und Xprofan11.2
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
#13 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Hab den Code mal weiter zurückgenommen. Hierbei bekomme ich immer noch nach dem Programmende die Windowsmeldung: XProfan-Interpreter hat ein Problem festgestellt...:
Code:
Cls Var psapi&=UseDll($Syspath+"\\PSAPI.DLL") Usermessages $10 WaitInput UserMessages 0 Freedll psapi& End Nehme ich die UserMessage-Zeile(n) oder aber auch die UseDll-Zeile raus, kommt die Meldung nicht. EDIT: Getestet mit 11.2a
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. Geändert von Frabbing (20.06.2009 um 21:33 Uhr) |
|
|
|
|
|
#14 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Läuft hier ohne Probleme im Interpreter oder kompiliert.
Vista und XP & XProfan 11.2a.
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher Geändert von Andreas Miethe (20.06.2009 um 21:48 Uhr) |
|
|
|
|
|
#15 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Hat das
Code:
End
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| System32 Ordner existiert nicht | Xerus | Windows XP | 14 | 16.11.2005 16:42 |
| Etwas löschen was nicht mehr existiert? | gast2 | Windows 95/98/ME/2000/NT | 4 | 22.06.2004 08:39 |
| PCI-Karte, die nicht existiert | total_anonym | Hardware - Problemlösungen | 3 | 17.12.2002 20:06 |