Español
Foro

Fehlerhaft dokumentierte Windows API? Bitte en Tests...

 
- Página 1 -


¡Hola Profaner...

Yo necesidad bajo möglichst allen 32BIt Windowssystemen (va no bajo NT4) el Rückgaben de el Editbox para el unten stehenden Ver código fuente. Lo va a Aufdeckung uno "Fehlers" en el MSDN Documentación. Yo habe ya algo länger el Verdacht, dass como irgendetwas bastante y nada stimmt....
KompilierenMarcaSeparación
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 encima Heaps de Wordpad", 1)

Und para todos el, el el código así no testen puede, hier el EXE para Downloaden:
[...] 
 
16.02.2007  
 



 
- Página 1 -


Das mi Yo no, lo va en el Handle des Heapblocks. Wordpad muss de paso offen bleiben, a el Editbox kommt.
 
16.02.2007  
 




Nico
Madysa
Bitteschön, hier mi Ergebnis:

38 kB
Hochgeladen:16.02.2007
Ladeanzahl66
Descargar
 
Nico Madysa
16.02.2007  
 



Wo son ellos porque? Gerade el brauche Todavía!
 
16.02.2007  
 



Gracias Nico, Vermutung scheint (si yo mich no irgendwo total verhaspelt habe ) bestätigt.
 
16.02.2007  
 




Nico
Madysa
Freut mich para dich. Yo de el Zeug nämlich nix kapiert.
 
Nico Madysa
16.02.2007  
 



 
- Página 2 -


Kurz dijo: Microsoft scheint bajo NT Systemen algo en el API geändert a haben y verschweigt scheinbar esta Änderung seit Windows2000. Diese Änderung betrifft el Toolhelp Estructuras HEAPLIST32 y HEAPENTRY32, el de los APIs Heap32ListFirst, Heap32ListNext Heap32First y Heap32Next genutzt voluntad. Richtet uno se después de el Documentación, bekommt uno falsche Werte. Toll, oder?

Sombrero alguien gegen mi Feststellung algo einzuwenden?
 
16.02.2007  
 




Nico
Madysa

Toll, oder?


Im Hinblick darauf, dass esta Feststellung offensichtlich ironisch gemeint es, tener Yo nichts dagegen einzuwenden.
 
Nico Madysa
16.02.2007  
 



Yo habe me gerade el kompletten Rückmeldungen de Vista (danke Rolf) angesehen. Chaotik sin gleichen - y en el uno dokumentierten API!
Wer irgendwie a Loghorn / 2003 kommt - auch su hätte Me gusta el kompletten Rückmeldungen des Quelltextes!

Como se uno porque Programas escribir, si Microsoft dokumentiertes Comportamiento uno API laufend ändert?
(ausführlicher Artikel dazu en meiner Homepage [...] )
 
17.02.2007  
 



Usted sollst ebend el SDKs benutzen.
 
17.02.2007  
 



Was es como genau a Estructuras? Ist el Erklärung como mejor?
 
17.02.2007  
 



IF
Usted sollst ebend el SDKs benutzen.


Sorry, dass Yo nochmals nachfrage: Como genau sieht el Erklärung el Estructuras HEAPLIST32 y HEAPENTRY32 en el SDK a Windows2000 oder XP de? Como MSDN ihre Documentación scheinbar después de el Erscheinen de Vista adaptado ha, gehe Yo en el Augenblick su de, dass como nichts más es.
 
17.02.2007  
 



Wir reden aneinander vorbei - habe grad una blöderes Problema el Codeanzeige el Nity es futsch.
 
17.02.2007  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

3.773 Views

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

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie