Zitat von
MathiasSimmack:
Delphi-Quellcode:
function SHRestrictedMessageBox(wnd: HWND): integer; stdcall;
external 'shlwapi.dll' index 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]