Français
Forum

incorrect dokumentierte Windows API? s'il te plaît um Tests...

 
- 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éparation
Def @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:
[...] 
 
16.02.2007  
 



 
- page 1 -


cela mon je pas, und dir um cela Handle des Heapblocks. Wordpad muss incidemment offen rester, jusqu'à qui Editbox venez.
 
16.02.2007  
 




Nico
Madysa
Bitteschön, ici mon Ergebnis:

38 kB
Hochgeladen:16.02.2007
Downloadcounter66
Download
 
Nico Madysa
16.02.2007  
 



wohin vous êtes car? justement qui brauche je encore!
 
16.02.2007  
 



merci Nico, Vermutung scheint (si je mich pas irgendwo total verhaspelt habe ) bestätigt.
 
16.02.2007  
 




Nico
Madysa
Freut mich pour toi. je hab de dem Zeug nämlich nix kapiert.
 
Nico Madysa
16.02.2007  
 



 
- 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?
 
16.02.2007  
 




Nico
Madysa

Toll, ou bien?


Im Hinblick puis, dass cet Feststellung offensichtlich ironisch gemeint ist, hab je rien dagegen einzuwenden.
 
Nico Madysa
16.02.2007  
 



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 [...] )
 
17.02.2007  
 



Du sollst ebend qui SDKs benutzen.
 
17.02.2007  
 



quoi steht là oui c'est ca le Strukturen? Ist qui Erklärung là besser?
 
17.02.2007  
 



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.
 
17.02.2007  
 



Wir reden aneinander vorbei - habe grad un blöderes Problem qui Codeanzeige qui Nity ist futsch.
 
17.02.2007  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

3.616 Views

Untitledvor 0 min.
Michael Uckermann19.08.2014
Andreas Koch13.06.2012

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie