Einzelnen Beitrag anzeigen

Mephistopheles
(Gast)

n/a Beiträge
 
#63

Re: Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

  Alt 4. Mai 2005, 17:13
Zitat von MathiasSimmack:
Delphi-Quellcode:
function SHRestrictedMessageBox(wnd: HWND): integer; stdcall;
  external 'shlwapi.dllindex 384;
Guck mal hier noch mehr so'n Quark.

Zitat von NicoDE:
Zitat von Mephistopheles:
Wie kommst du an den ersten Parameter?
Disassembler. Die Parameter machen nur Sinn wenn sie um eins vorschoben sind. Allerdings ist bei einer Deklaration mit 7 Parametern der Stack im Eimer (Crash). Also entweder handelt sich um eine ungewöhnliche Aufrufkonvention, oder die Funktion ist einfach nicht mehr funktionstüchtig...
Ich tippe auf letzteres. Warum sollten die eine Aufrufkonvention benutzen, die keiner kennt. Auch das Problem an sich scheint nicht wet bekannt zu sein, selbst wenn man mit Google probiert. Habe da eine russische Newsgroup aufgetrieben, wo die unsere besagte Funktion problemlos unter XP mithilfe eines VB-Programmes aufgerufen haben.

Du meinst sicher wegen ...
Code:
-0000001C SomeStruct     InternalMessageBoxCheckStruct ?
+00000000  r             db 4 dup(?)
+00000004 unknown        db 4 dup(?) [color=red]<--- ... dem hier?![/color]
+00000008 hwnd           dd ?
+0000000C pszText        dd ?
+00000010 pszTitle       dd ?
+00000014 uType          dd ?
+00000018 iDefault       dd ?
+0000001C pszRegVal      dd ?
+00000020
+00000020 ; end of stack variables
Normalerweise wären dort die gePUSHten Registerwerte zu finden. Wenn das nicht der Fall ist, existiert immer diese 4-Byte-Lücke.

Auch die Funktion selber gibt eigentlich keinen Hinweis drauf, außer vielleicht das RET am Ende
Code:
.text:70ABFA2F ; Exported entry 191.
.text:70ABFA2F
.text:70ABFA2F ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
.text:70ABFA2F
.text:70ABFA2F ; Attributes: bp-based frame
.text:70ABFA2F
.text:70ABFA2F                public Ordinal191
.text:70ABFA2F Ordinal191      proc near              ; CODE XREF: Ordinal185+9Ep
.text:70ABFA2F
.text:70ABFA2F SomeStruct     = InternalMessageBoxCheckStruct ptr -1Ch
[color=blue].text:70ABFA2F unknown        = byte ptr 4[/color]
[color=green].text:70ABFA2F hwnd           = dword ptr 8
.text:70ABFA2F pszText        = dword ptr 0Ch
.text:70ABFA2F pszTitle       = dword ptr 10h
.text:70ABFA2F uType          = dword ptr 14h
.text:70ABFA2F iDefault       = dword ptr 18h
.text:70ABFA2F pszRegVal      = dword ptr 1Ch[/color]
.text:70ABFA2F
.text:70ABFA2F                mov    eax, eax
.text:70ABFA31                 push   ebp
.text:70ABFA32                 mov    ebp, esp
.text:70ABFA34                 sub    esp, 1Ch
.text:70ABFA37                 push   esi
.text:70ABFA38                 push   edi            ; End of prologue
.text:70ABFA39                 mov    edi, [ebp+pszRegVal]
.text:70ABFA3C                push   TRUE           ; fDefault
.text:70ABFA3E                push   FALSE          ; fIgnoreHKCU
.text:70ABFA40                 push   edi            ; pszValue
.text:70ABFA41                 mov    esi, offset aDontShowMeThisDialogAgain ; "Software\\Microsoft\\Windows\\CurrentVersi"...
.text:70ABFA46                 push   esi            ; pszSubKey
.text:70ABFA47                 call   SHRegGetBoolUSValueW
.text:70ABFA4C                test   eax, eax       ; BOOL returned (either fDefault or from reg)
.text:70ABFA4E                jnz    short ShowMessageBox
.text:70ABFA50                 mov    eax, [ebp+iDefault]
.text:70ABFA53                 jmp    short ExitThis
.text:70ABFA55 ; ---------------------------------------------------------------------------
.text:70ABFA55
.text:70ABFA55 ShowMessageBox:                        ; CODE XREF: Ordinal191+1Fj
.text:70ABFA55                 mov    eax, [ebp+pszText]
.text:70ABFA58                 mov    [ebp+SomeStruct.pszText], eax
.text:70ABFA5B                mov    eax, [ebp+pszTitle]
.text:70ABFA5E                mov    [ebp+SomeStruct.pszTitle], eax
.text:70ABFA61                 mov    eax, [ebp+uType]
.text:70ABFA64                 mov    [ebp+SomeStruct.uType], eax
.text:70ABFA67                 lea    eax, [ebp+SomeStruct]
.text:70ABFA6A                mov    [ebp+SomeStruct.SelfPtr], eax
.text:70ABFA6D                lea    eax, [ebp+pszRegVal] ; lpCookie for activation context
.text:70ABFA70                 push   eax            ; The only parameter for CreateAndActivateContext()
.text:70ABFA71                 mov    [ebp+SomeStruct.pszRegistryPath], esi
.text:70ABFA74                 mov    [ebp+SomeStruct.pszRegVal], edi
.text:70ABFA77                 mov    [ebp+SomeStruct.pfnDlgFunc], offset OtherDialogFunc
.text:70ABFA7E                call   CreateAndActivateContext
.text:70ABFA83                 mov    esi, eax       ; hActivationContext
.text:70ABFA85                 lea    eax, [ebp+SomeStruct]
.text:70ABFA88                 push   eax            ; 5th param == Pointer to struct on stack
.text:70ABFA89                 push   offset DlgFunc ; 4th param == DialogFunc
.text:70ABFA8E                push   [ebp+hwnd]     ; 3rd param == hwnd
.text:70ABFA91                 push   1200h          ; 2nd param == Dialog template
.text:70ABFA96                 push   hInstance      ; 1st param == hInstance
.text:70ABFA9C                call   DialogBoxParamW_Wrapper
.text:70ABFAA1                 push   [ebp+pszRegVal]
.text:70ABFAA4                 mov    edi, eax
.text:70ABFAA6                 push   esi            ; hActivationContext
.text:70ABFAA7                 call   DeactivateAndReleaseContext
.text:70ABFAAC                mov    eax, edi       ; Return result of DialogBoxParamW_Wrapper()
.text:70ABFAAE
.text:70ABFAAE ExitThis:                              ; CODE XREF: Ordinal191+24j
.text:70ABFAAE                pop    edi
.text:70ABFAAF                pop    esi
.text:70ABFAB0                 leave
[color=red].text:70ABFAB1                 retn   18h[/color]
.text:70ABFAB1 Ordinal191      endp ; [b][color=red]sp = 4[/color][/b]
  Mit Zitat antworten Zitat