Zitat von
Blutiger Anfänger:
Hier habe ich noch jeweils einen Auszug aus der shell32.dll (nur Bezugnehmend auf die shlWapi.dll und den OrdinalWert 185) ,
vielleicht kann jemand, der Ahnung hat etwas damit anfangen (Unterschiede sind
fett dargestellt)!
Vers.: 6.0.2800.1106
30 [NONAME] (forwarded to shlwapi.PathBuildRootW)
37 [NONAME] (forwarded to shlwapi.PathCombineW)
39 [NONAME] (forwarded to shlwapi.PathIsUNCW)
40 [NONAME] (forwarded to shlwapi.PathIsRelativeW)
57 [NONAME] (forwarded to shlwapi.PathGetDriveNumberW)
185
0009CEA2 [NONAME]
------------------------------------------------------------------------------------------
Vers.: 6.0.2900.2180
30 [NONAME] (forwarded to shlwapi.PathBuildRootW)
37 [NONAME] (forwarded to shlwapi.PathCombineW)
39 [NONAME] (forwarded to shlwapi.PathIsUNCW)
40 [NONAME] (forwarded to shlwapi.PathIsRelativeW)
57 [NONAME] (forwarded to shlwapi.PathGetDriveNumberW)
520 75 SHAllocShared (forwarded to shlwapi.SHAllocShared)
521 D3 SHLockShared (forwarded to shlwapi.SHLockShared)
522 EC SHUnlockShared (forwarded to shlwapi.SHUnlockShared)
523 A3 SHFreeShared (forwarded to shlwapi.SHFreeShared)
185
000D731F [NONAME]
Das hat nichts zu sagen. Die Ordinals haben nur die gleiche Nummer wie in SHLWAPI - haben aber nichts (zumindest nicht zwangsläufig) miteinander zu tun. Der eigentliche Bezug sind die "Export Forwarder", mit denen man als Delphianer herzlich wenig in Kontakt kommt. Diese Forwarder besagen in obiger Ausgabe, daß die jeweiligen Funktionen, z.B. in der zweiten
DLL die Funktion #37, auf die jeweilige andere Funktion nach dem Muster DLLNAME.FUNKTIONSNAME verweisen. Diese Verweise können auch auf Ordinals geschehen, was dann so aussieht: DLLNAME.#FUNKTIONSNUMMER!
Das besagt im Grunde nur, daß man die Funktion, in den ersten drei Spalten (Nummer, Hint, Name) aufgelistet wird, den gleichen Prototypen wie die Funktion hat, zu der verwiesen wird.
Beispiel Kernel32.dll hat mehrere Export Forwarder. Einer der neueren (ich glaube ab Windows 2003 oder XP) ist GetLastError(), welcher in diesen Versionen auf ntdll.RtlGetLastWin32Error() verweist.
Wenn der Loader also so einen Forwarder findet, wird anstelle einer Adresse, die in das Modul zeigt, ggf. die
DLL geladen (auf welche verwiesen wird) und die Adresse der Funktion (auf welche verwiesen wird,) wird eingetragen. Somit ist der Aufruf für den Aufrufer immer transparent, obwohl er bei o.g. Beispiel statt GetLastError() aus der Kernel32.dll eigentlich RtlGetLastWin32Error() aus der NTDLL.dll aufruft.
Zitat von
Blutiger Anfänger:
Eine Frage noch an die Allgemeinheit, mein dumpbin funktioniert inzwischen,
(Link.exe hatte ne Macke), weiss jemand wie man den Dialog von TOMS,
Zitat:
-----------------------------------------------------------------------------
C:\WINDOWS\system32>dumpbin /exports shlwapi.dll | find "SHMessageBoxCheck"
185 00057865 [NONAME] _SHMessageBoxCheckA@24
191 000577DB [NONAME] _SHMessageBoxCheckW@24
291 000579FA [NONAME] _SHMessageBoxCheckExA@28
292 0005797B [NONAME] _SHMessageBoxCheckExW@28
The SHMessageBoxCheck family of functions are apparently exported only
by ordinal.
------------------------------------------------------------------------------
angezeigt bekommt,alles was ich hier
Dumpbin gefunden habe , half nichts !
Gruss OPA
Ich wage zu behaupten, daß dies u.U. nicht die neueste dumpbin-Version ist. Das soll erst mit einer der wirklich neueren Versionen gehen. Irgendwo in einer Newsgroup nannten die es Whidbey-DUMPBIN (Whidbey war der Codename für irgendeine Windowsversion).