| |
|
|
- page 1 - |
|
| allô Profaner...
je besoin sous possible allen 32BIt Windowssystemen (allez pas sous NT4) qui Rückgaben aus qui Editbox pour den unten stehenden Voir le texte source. und dir à Aufdeckung eines "Fehlers" dans qui MSDN Documentation. j'ai déjà quelque chose länger den le doute, dass là irgendetwas tout à fait pas stimmt.... KompilierenMarqueSéparationDef @GetWindowThreadProcessId(2) !"USER32","GetWindowThreadProcessId"
Def @CreateToolhelp32Snapshot(2) !"kernel32","CreateToolhelp32Snapshot"
Def @Heap32ListNext(2) !"kernel32","Heap32ListNext"
Def @Heap32ListFirst(2) !"kernel32","Heap32ListFirst"
Def @Heap32Next(1) !"kernel32","Heap32Next"
Def @Heap32First(3) !"kernel32","Heap32First"
Def @CloseHandle(1) !"KERNEL32","CloseHandle"
Def @GetLastError(0) !"KERNEL32","GetLastError"
Def @GetVersionEx(1) !"KERNEL32","GetVersionExA"
DEF &Ver_Platform_Win32_Windows 1
DEF &Ver_Platform_Win32_NT 2
Declare Fenster&, PROCESSID#, ThreadID&, PROCESSID&, HEAPLIST32#, Result_HL&, hSnapshot&, HeapCount%
Declare HEAPENTRY32#, HeapBlockCount%, Result2&, Zwischenmerker&, Heap_Handle_LIST%, Zwischenmerker$
Declare WinVer&, Winver$, OS#
Struct HEAPLIST32 = LISTdwsize&, Listth32ProcessID&, LISTth32HeapID&, dwLISTFlags&
Struct HEAPENTRY32 = HEdwsize&, hHandle&, dwAddress&, dwBlockSize&, dwFlags&, dwLockCount&, dwResvd&, HEth32ProcessID&, HEth32HeapID&
Struct OSVERSIONINFO = dwOSVersionInfoSize&,dwMajorVersion&,dwMinorVersion&,dwBuildNumber&,dwPlatformId&,szCSDVersion$(128)
Proc ?_GetWinVersion
Parameters ServicePack%
Declare ServicePack$
Windows-Version ermitteln
DEF &Ver_Platform_Win32_Windows 1
DEF &Ver_Platform_Win32_NT 2
Dim OS#,OSVERSIONINFO
OS#.dwOSVersionInfoSize& = 148
External("Kernel32","GetVersionExA",OS#)
LET Winver& = 100
LET ServicePack$ = " ("+OS#.szCSDVersion$+")"
If OS#.dwPlatformId& = &Ver_Platform_Win32_Windows
If OS#.dwMajorVersion& = 4
Case OS#.dwMinorVersion& = 0 : Winver& = 1
Case OS#.dwMinorVersion& = 10 : Winver& = 2
Case OS#.dwMinorVersion& = 90 : Winver& = 3
Endif
ElseIf OS#.dwPlatformId& = &Ver_Platform_Win32_NT
Case OS#.dwMajorVersion& = 3 : Winver& = 4
Case OS#.dwMajorVersion& = 4 : Winver& = 5
IF @and(OS#.dwMajorVersion& = 5,OS#.dwMinorVersion& <> 2)
LET Winver& = 6
Elseif @and(OS#.dwMajorVersion& = 5,OS#.dwMinorVersion& = 2)
LET Winver& = 8
endif
IF @and(OS#.dwMajorVersion& = 6,OS#.dwMinorVersion& = 0)
LET Winver& = 9
endif
Case OS#.dwMinorVersion& = 1 : Winver& = 7
Endif
Dispose OS#
case WinVer& = 1: Let Winver$ = "Windows95"
case WinVer& = 2: Let Winver$ = "Windows98"
case WinVer& = 3: Let Winver$ = "WindowsME"
case WinVer& = 4: Let Winver$ = "WindowsNT 3.5"
case WinVer& = 5: Let Winver$ = "WindowesNT 4"
case WinVer& = 6: Let Winver$ = "Windows2000"
case WinVer& = 7: Let Winver$ = "WindowsXP"
case WinVer& = 8: Let Winver$ = "Windows Server 2003"
case WinVer& = 9: Let Winver$ = "WindowsVista oder Longhorn"
case WinVer& = 100: Let Winver$ = "unbekannte Windowsversion"
CASE ServicePack% = 1 : Let Winver$ = Winver$ + ServicePack$
EndProc
@winexec("WRITE.EXE", 1)
Sleep 500
LET Fenster& = @FindWindow("Dokument - ")
DIM PROCESSID#, 4
LET ThreadID& = @GetWindowThreadProcessId(Fenster&, PROCESSID#)
LET PROCESSID& = @Long(PROCESSID#, 0)
Dispose PROCESSID#
Dim HEAPLIST32#, HEAPLIST32
Dim HEAPENTRY32#, HEAPENTRY32
Clear HEAPLIST32#
LET Heap_Handle_LIST% = 1
HEAPLIST32#.LISTdwsize& = 16
LET hSnapshot& = @CreateToolhelp32Snapshot($1, ProcessID&)
IfNot hSnapshot& = -1
Clearlist
?_GetWinVersion 1
Addstring "Windowsversion: "+Winver$
LET Result_HL& = @Heap32ListFirst(hSnapshot&, HEAPLIST32#)
While Result_HL& = 1
Clear HEAPENTRY32#
HEAPENTRY32#.HEdwsize& = 36
INC HeapCount%
Clear HeapBlockCount%
Addstring "____________________________"
LET Result2& = @Heap32First(HEAPENTRY32#, ProcessID&, HEAPLIST32#.Listth32HeapID&)
LET Zwischenmerker& = HEAPLIST32#.dwLISTFlags&
Addstring "Daten des "+@STR$(HEAPCOUNT%)+".Heaps"
Addstring "Heapflags: $"+@HEX$(Zwischenmerker&)
IF Heap_Handle_LIST% = 1
IF Result2& = 1
Addstring "Handle im Prozess: "+@STR$(HEAPENTRY32#.hHandle&)
Addstring "Toolhelp-ID des Heaps: "+@STR$(HEAPLIST32#.LISTth32HeapID&)
Else
Addstring "Handle im Prozess: "+@STR$(HEAPLIST32#.LISTth32HeapID&)
endif
IF @or(Zwischenmerker&, $2) = Zwischenmerker&
Addstring "Speicherstatus: "+"Heap kann wachsen"
LET Zwischenmerker& = Zwischenmerker&-$2
else
Addstring "Speicherstatus: "+"Größe beschränkt"
Endif
IF @or(Zwischenmerker&, $1) = Zwischenmerker&
Addstring "Speicherverwaltung: "+"Kein gleichzeitiger Zugriff mehrerer Threads"
LET Zwischenmerker& = Zwischenmerker&-$1
else
Addstring "Speicherverwaltung: "+"Gleichzeitiger Zugriff mehrerer Threads möglich"
Endif
IF @or(Zwischenmerker&, $4) = Zwischenmerker&
Addstring "Fehlerbehandlung: "+"Meldung einer Zugriffsverletzung bei Fehlern"
LET Zwischenmerker& = Zwischenmerker&-$4
else
Addstring "Fehlerbehandlung: "+"API gibt bei Fehlern 0 zurück"
Endif
else
IF @or(Zwischenmerker&, $1) = Zwischenmerker&
Addstring "Typ: "+"Standard Prozessheap"
LET Zwischenmerker& = Zwischenmerker&-$1
endif
IF @or(Zwischenmerker&, $2) = Zwischenmerker&
Addstring "Speicherverwaltung: "+"Shared Heap"
LET Zwischenmerker& = Zwischenmerker&-$2
endif
endif
IF Zwischenmerker&<>0
Addstring "Nicht erkannte Heapflags: "+"$"+@Hex$(Zwischenmerker&)
endif
While Result2& = 1
INC HeapBlockCount%
Addstring ""
IF Heap_Handle_LIST% = 0
Addstring @STR$(HEAPCOUNT%)+".Heap "+@Str$(HeapBlockCount%)+".Block Handle im Prozess: "+@STR$(HEAPENTRY32#.hHandle&)
Addstring @STR$(HEAPCOUNT%)+".Heap "+@Str$(HeapBlockCount%)+".Block Startadresse: "+@STR$(HEAPENTRY32#.dwAddress&)
Else
Addstring @STR$(HEAPCOUNT%)+".Heap "+@Str$(HeapBlockCount%)+".Block Startadresse: "+@STR$(HEAPENTRY32#.dwAddress&)
endif
Let Zwischenmerker$ = " ("
IF HEAPENTRY32#.dwFlags& = $1
LET Zwischenmerker$ = Zwischenmerker$+"feste Adresse"
ElseIf HEAPENTRY32#.dwFlags& = $2
LET Zwischenmerker$ = Zwischenmerker$+"frei"
ElseIf HEAPENTRY32#.dwFlags& = $4
LET Zwischenmerker$ = Zwischenmerker$+"beweglich"
Else
LET Zwischenmerker$ = Zwischenmerker$+"$"+@HEX$(HEAPENTRY32#.dwFlags&)
endif
Let Zwischenmerker$ = Zwischenmerker$+")"
Addstring @STR$(HEAPCOUNT%)+".Heap "+@Str$(HeapBlockCount%)+".Block Größe / Status: "+@STR$(HEAPENTRY32#.dwBlockSize&)+" Bytes"+Zwischenmerker$
LET Result2& = @Heap32Next(HEAPENTRY32#)
wend
LET Result_HL& = @Heap32ListNext(hSnapshot&, HEAPLIST32#)
wend
@CloseHandle(hSnapshot&)
endif
Dispose HEAPLIST32#
Editbox("Infos sur Heaps de Wordpad", 1)
et pour alle qui, qui den Code so pas testen peut, ici qui EXE zum Downloaden: [...] |
|
|
| |
|
|
|
| |
|
- page 1 - |
|
| cela mon je pas, und dir um cela Handle des Heapblocks. Wordpad muss incidemment offen rester, jusqu'à qui Editbox venez. |
|
|
| |
|
|
|
Nico Madysa | Bitteschön, ici mon Ergebnis: |
|
|
| |
|
|
|
| wohin vous êtes car? justement qui brauche je encore! |
|
|
| |
|
|
|
| merci Nico, Vermutung scheint (si je mich pas irgendwo total verhaspelt habe ) bestätigt. |
|
|
| |
|
|
|
Nico Madysa | Freut mich pour toi. je hab de dem Zeug nämlich nix kapiert. |
|
|
| |
|
|
| |
|
- page 2 - |
|
|
| Kurz dit: Microsoft scheint sous NT Systemen quelque chose dans qui API geändert trop avons et verschweigt scheinbar cet Changement depuis Windows2000. cet Changement betrifft qui Toolhelp Strukturen HEAPLIST32 et HEAPENTRY32, qui de den APIs Heap32ListFirst, Heap32ListNext Heap32First et Heap32Next genutzt volonté. Richtet on sich pour qui Documentation, bekommt on falsche Werte. Toll, ou bien?
Hat quelqu'un vers mon Feststellung quelque chose einzuwenden? |
|
|
| |
|
|
|
Nico Madysa |
Toll, ou bien?
Im Hinblick puis, dass cet Feststellung offensichtlich ironisch gemeint ist, hab je rien dagegen einzuwenden. |
|
|
| |
|
|
|
| j'ai mir justement qui kompletten Rückmeldungen de Vue (merci Rolf) angesehen. Chaotik sans gleichen - et cela chez einer dokumentierten API! qui irgendwie à Loghorn / 2003 venez - aussi en hätte je volontiers qui kompletten Rückmeldungen des Quelltextes!
comment soll on car Programme écrivons, si Microsoft dokumentiertes Verhalten einer API laufend ändert? (ausführlicher Artikel en supplément sur meiner Page d'accueil [...] ) |
|
|
| |
|
|
|
| Du sollst ebend qui SDKs benutzen. |
|
|
| |
|
|
|
| quoi steht là oui c'est ca le Strukturen? Ist qui Erklärung là besser? |
|
|
| |
|
|
|
| iF
Du sollst ebend qui SDKs benutzen.
Sorry, dass je nochmals demande: comment oui c'est ca sieht qui Erklärung qui Strukturen HEAPLIST32 et HEAPENTRY32 im SDK trop Windows2000 ou bien XP aus? là MSDN ses Documentation scheinbar pour dem Erscheinen de Vue angepasst hat, vais je im Augenblick en aus, dass là rien d'autre steht. |
|
|
| |
|
|
|
| Wir reden aneinander vorbei - habe grad un blöderes Problem qui Codeanzeige qui Nity ist futsch. |
|
|
| |
|
|