Function at 0x6901bf80
Capabilities:
Get process heap flags
Resolve function by parsing pe exports

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0xbc
mov dword [esp + 0x38], eax
mov eax, dword [eax + 0x14]
mov dword [esp + 0x58], edx
mov dword [esp + 0x5c], ecx
test eax, eax
je 0x6901bfb5
cmp dword [eax + 8], 1
je 0x6901c2a0
mov eax, dword [esp + 0x38]
cmp dword [eax + 0x18], 2
je 0x6901c230
mov eax, dword [esp + 0x38]
lea edx, [esp + 0x80]
call sym._get_clip_hrgn
mov dword [esp + 0x54], eax
test eax, eax
je 0x6901bfe0
mov eax, dword [esp + 0x54]
add esp, 0xbc
pop ebx
pop esi
pop edi
pop ebp
ret
mov edi, dword [esp + 0x38]
mov eax, dword [edi]
mov dword [esp], eax
call dword [sym.imp.gdi32.dll_SaveDC]
mov ebx, dword [sym.imp.gdi32.dll_ExtSelectClipRgn]
sub esp, 4
mov dword [esp + 0x28], eax
mov eax, 5
mov dword [esp + 8], eax
mov eax, dword [esp + 0x80]
mov dword [esp + 4], eax
mov eax, dword [edi]
mov dword [esp], eax
call ebx
sub esp, 0xc
mov edx, dword [esp + 0xe0]
test edx, edx
je 0x6901c043
mov eax, 1
mov dword [esp + 8], eax
mov eax, dword [esp + 0xe0]
mov dword [esp + 4], eax
mov eax, dword [edi]
mov dword [esp], eax
call ebx
sub esp, 0xc
mov dword [esp], 0
xor ebp, ebp
xor esi, esi
call dword [sym.imp.gdi32.dll_CreateCompatibleDC]
xor edi, edi
xor edx, edx
xor ecx, ecx
sub esp, 4
mov ebx, eax
mov dword [esp], ebx
mov eax, 0x28
mov dword [esp + 0x88], eax
mov eax, dword [esp + 0xd4]
mov dword [esp + 0xac], ebp
mov dword [esp + 0x9c], edx
mov dword [esp + 0xa0], ecx
mov dword [esp + 0x8c], eax
mov eax, dword [esp + 0xd8]
mov dword [esp + 0xa4], esi
mov dword [esp + 0xa8], edi
neg eax
mov dword [esp + 0x90], eax
mov eax, 0x200001
mov dword [esp + 0x94], eax
xor eax, eax
mov dword [esp + 0x98], eax
xor eax, eax
mov dword [esp + 0x14], eax
xor eax, eax
mov dword [esp + 0x10], eax
lea eax, [esp + 0x84]
mov dword [esp + 0xc], eax
xor eax, eax
mov dword [esp + 8], eax
lea eax, [esp + 0x88]
mov dword [esp + 4], eax
call dword [sym.imp.gdi32.dll_CreateDIBSection]
sub esp, 0x18
test eax, eax
mov ebp, eax
je 0x6901c288
mov eax, dword [esp + 0x84]
test eax, eax
je 0x6901c288
mov eax, 2
mov esi, dword [sym.imp.gdi32.dll_GetDeviceCaps]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x38]
mov eax, dword [eax]
mov dword [esp], eax
call esi
sub esp, 8
cmp eax, 2
je 0x6901c810
test dword [esp + 0xe4], 0x80000
mov edi, dword [esp + 0x84]
je 0x6901c7c0
mov esi, dword [esp + 0xd4]
mov ecx, dword [esp + 0xd8]
imul ecx, esi
mov esi, dword [esp + 0xd0]
shl ecx, 2
cmp ecx, 8
jae 0x6901c770
rep movsb byte es:[edi], byte [esi]
mov dword [esp + 4], ebp
mov dword [esp], ebx
call dword [sym.imp.gdi32.dll_SelectObject]
xor edx, edx
sub esp, 8
mov dword [esp + 0xc], edx
mov eax, dword [esp + 0xd8]
mov dword [esp + 8], ebx
mov ecx, dword [esp + 0x5c]
mov edx, dword [esp + 0x58]
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0xd4]
mov dword [esp + 0x14], eax
xor eax, eax
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0xd8]
mov dword [esp + 4], eax
mov eax, dword [esp + 0xd4]
mov dword [esp], eax
mov eax, dword [esp + 0x38]
call sym._gdi_alpha_blend
mov eax, dword [sym.imp.gdi32.dll_DeleteObject]
mov dword [esp], ebp
mov dword [esp + 0x78], eax
call eax
sub esp, 4
mov dword [esp], ebx
call dword [sym.imp.gdi32.dll_DeleteDC]
sub esp, 4
mov eax, dword [esp + 0x28]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x38]
mov eax, dword [eax]
mov dword [esp], eax
call dword [sym.imp.gdi32.dll_RestoreDC]
sub esp, 8
mov eax, dword [esp + 0x80]
mov dword [esp], eax
mov eax, dword [esp + 0x78]
call eax
sub esp, 4
mov eax, dword [esp + 0x54]
add esp, 0xbc
pop ebx
pop esi
pop edi
pop ebp
ret
test byte [0x6907a0c8], 2
jne 0x6901c258
mov ecx, 6
mov dword [esp + 0x54], ecx
mov eax, dword [esp + 0x54]
add esp, 0xbc
pop ebx
pop esi
pop edi
pop ebp
ret
mov ebx, str.This_should_not_be_used_for_metafiles__fix_caller_n
mov esi, str.alpha_blend_pixels_hrgn
mov dword [esp + 0xc], ebx
mov edi, 0x6907a0c8
mov dword [esp + 8], esi
mov dword [esp + 4], edi
mov dword [esp], 1
call sym._wine_dbg_log.constprop.0_4
jmp 0x6901c239
mov eax, dword [sym.imp.gdi32.dll_DeleteObject]
mov dword [esp + 0x78], eax
jmp 0x6901c1df
mov dword [esp + 4], ecx
mov eax, dword [esp + 0xd8]
mov dword [esp], edx
add eax, ecx
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0xd4]
add eax, edx
mov dword [esp + 8], eax
call dword [sym.imp.gdi32.dll_CreateRectRgn]
sub esp, 0x10
test eax, eax
mov dword [esp + 0x7c], eax
je 0x6901c7b0
mov eax, dword [esp + 0x38]
lea edx, [esp + 0x84]
call sym._get_clip_hrgn
mov dword [esp + 0x54], eax
test eax, eax
jne 0x6901c840
mov eax, dword [esp + 0x84]
mov ebx, dword [sym.imp.gdi32.dll_DeleteObject]
test eax, eax
mov dword [esp + 0x78], ebx
je 0x6901c337
mov dword [esp + 8], eax
mov eax, dword [esp + 0x7c]
mov esi, 1
mov dword [esp + 0xc], esi
mov dword [esp + 4], eax
mov dword [esp], eax
call dword [sym.imp.gdi32.dll_CombineRgn]
sub esp, 0x10
mov eax, dword [esp + 0x84]
mov dword [esp], eax
call ebx
sub esp, 4
mov ebx, dword [esp + 0xe0]
test ebx, ebx
je 0x6901c36a
mov eax, dword [esp + 0xe0]
mov ecx, 1
mov dword [esp + 0xc], ecx
mov dword [esp + 8], eax
mov eax, dword [esp + 0x7c]
mov dword [esp + 4], eax
mov dword [esp], eax
call dword [sym.imp.gdi32.dll_CombineRgn]
sub esp, 0x10
xor eax, eax
mov esi, dword [sym.imp.gdi32.dll_GetRegionData]
mov dword [esp + 8], eax
xor eax, eax
mov dword [esp + 4], eax
mov eax, dword [esp + 0x7c]
mov dword [esp], eax
call esi
mov edx, 8
sub esp, 0xc
mov ebx, eax
mov dword [esp + 8], ebx
mov dword [esp + 4], edx
mov eax, dword fs:[0x18]
mov eax, dword [eax + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_HeapAlloc]
sub esp, 0xc
test eax, eax
mov dword [esp + 0x74], eax
je 0x6901c878
mov dword [esp + 4], ebx
mov edi, dword [esp + 0x74]
xor ebp, ebp
mov eax, dword [esp + 0x7c]
mov dword [esp + 8], edi
mov dword [esp], eax
call esi
mov eax, dword [edi + 8]
lea ecx, [edi + 0x20]
sub esp, 0xc
test eax, eax
mov dword [esp + 0x70], ecx
mov dword [esp + 0x44], ebp
je 0x6901c651
lea esi, [esi]
nop
mov esi, dword [esp + 0x70]
mov ebp, dword [esp + 0x5c]
mov edi, dword [esi]
mov ebx, dword [esi + 8]
mov ecx, dword [esi + 4]
mov eax, dword [esi + 0xc]
mov dword [esp + 0x60], edi
mov esi, dword [esp + 0x58]
mov dword [esp + 0x28], ebx
sub ebx, edi
mov dword [esp + 0x3c], ebx
mov ebx, edi
mov edx, ecx
sub edx, ebp
sub eax, ecx
sub ebx, esi
mov esi, dword [esp + 0xdc]
imul edx, esi
mov esi, dword [esp + 0x38]
test eax, eax
lea ebx, [edx + ebx*4]
mov dword [esp + 0x40], ebx
mov ebx, dword [esi + 0x14]
mov dword [esp + 0x30], ebx
mov ebx, dword [esi + 0x2c]
mov dword [esp + 0x64], ebx
jle 0x6901c637
mov dword [esp + 0x2c], ecx
add eax, ecx
mov dword [esp + 0x6c], eax
lea eax, [edi*4]
mov edi, dword [esp + 0xd0]
sub edi, eax
mov dword [esp + 0x68], edi
lea esi, [esi]
nop
mov eax, dword [esp + 0x3c]
test eax, eax
jle 0x6901c61a
mov eax, dword [esp + 0x3c]
mov ebp, dword [esp + 0x60]
mov edx, dword [esp + 0x40]
add eax, ebp
mov dword [esp + 0x4c], eax
mov eax, dword [esp + 0x68]
add eax, edx
mov dword [esp + 0x48], eax
mov eax, dword [esp + 0xe4]
and eax, 0x80000
mov dword [esp + 0x50], eax
jmp 0x6901c5cf
test eax, eax
je 0x6901c5c8
mov dword [esp + 4], ebp
lea eax, [esp + 0x88]
mov edi, dword [esp + 0x30]
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x2c]
mov dword [esp], edi
mov dword [esp + 8], eax
call sym.gdiplus.dll_GdipBitmapGetPixel
sub esp, 0x10
mov ebx, dword [esp + 0x28]
mov eax, dword [esp + 0x50]
shr ebx, 0x18
mov byte [esp + 0x34], bl
test eax, eax
je 0x6901c690
mov edx, dword [esp + 0x88]
mov ecx, 0xff
mov dword [esp + 4], ebp
sub ecx, ebx
mov ebx, 0x80808081
mov esi, dword [esp + 0x88]
shr edx, 0x18
imul edx, ecx
shr esi, 0x10
mov eax, edx
mul ebx
movzx eax, byte [esp + 0x34]
mov ecx, edx
mov edx, dword [esp + 0x28]
shr ecx, 7
add al, cl
movzx edi, al
mov eax, esi
shr edx, 0x10
movzx eax, al
imul eax, ecx
movzx esi, dl
mov ebx, esi
shl ebx, 8
mov edx, ebx
sub edx, esi
movzx esi, byte [esp + 0x28]
add eax, edx
xor edx, edx
div edi
movzx edx, byte [esp + 0x88]
imul edx, ecx
shl eax, 0x10
mov ebx, eax
mov eax, esi
shl eax, 8
and ebx, 0xff0000
sub eax, esi
add eax, edx
xor edx, edx
div edi
mov edx, edi
shl edx, 0x18
movzx eax, al
or eax, edx
mov edx, dword [esp + 0x88]
or ebx, eax
movzx eax, dh
xor edx, edx
imul ecx, eax
mov eax, dword [esp + 0x28]
movzx esi, ah
and eax, 0xff00
sub eax, esi
add eax, ecx
div edi
mov edi, dword [esp + 0x30]
mov dword [esp], edi
shl eax, 8
movzx eax, ax
or ebx, eax
mov eax, dword [esp + 0x2c]
mov dword [esp + 0xc], ebx
mov dword [esp + 8], eax
call sym.gdiplus.dll_GdipBitmapSetPixel
sub esp, 0x10
inc ebp
cmp dword [esp + 0x4c], ebp
je 0x6901c61a
mov eax, dword [esp + 0x48]
mov eax, dword [eax + ebp*4]
mov dword [esp + 0x28], eax
and eax, 0xff000000
cmp dword [esp + 0x64], 1
jne 0x6901c4b0
test eax, eax
jne 0x6901c760
xor eax, eax
mov dword [esp + 0xc], eax
mov dword [esp + 4], ebp
mov eax, dword [esp + 0x2c]
inc ebp
mov dword [esp + 8], eax
mov eax, dword [esp + 0x30]
mov dword [esp], eax
call sym.gdiplus.dll_GdipBitmapSetPixel
sub esp, 0x10
cmp dword [esp + 0x4c], ebp
jne 0x6901c5cf
inc dword [esp + 0x2c]
mov ebx, dword [esp + 0xdc]
add dword [esp + 0x40], ebx
mov eax, dword [esp + 0x2c]
cmp dword [esp + 0x6c], eax
jne 0x6901c470
inc dword [esp + 0x44]
mov edi, dword [esp + 0x74]
add dword [esp + 0x70], 0x10
mov eax, dword [esp + 0x44]
cmp dword [edi + 8], eax
ja 0x6901c3f0
mov ecx, dword [esp + 0x74]
xor edi, edi
mov dword [esp + 4], edi
mov eax, dword fs:[0x18]
mov dword [esp + 8], ecx
mov eax, dword [eax + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_HeapFree]
sub esp, 0xc
mov eax, dword [esp + 0x7c]
mov dword [esp], eax
mov eax, dword [esp + 0x78]
call eax
sub esp, 4
jmp 0x6901bfcd
cmp ebx, 0xff
mov eax, dword [esp + 0x88]
je 0x6901c760
mov dword [esp + 0x34], eax
mov ecx, eax
mov edx, 0xff
shr ecx, 0x18
sub edx, ebx
imul ecx, edx
cmp ecx, 0xfe
jbe 0x6901c760
mov eax, ecx
mov edx, 0x80808081
mov esi, dword [esp + 0x28]
mul edx
mov eax, dword [esp + 0x34]
shr esi, 0x10
shr edx, 7
shr eax, 0x10
mov ecx, edx
mov dl, bl
movzx eax, al
add dl, cl
movzx edi, dl
mov edx, eax
imul edx, ecx
mov eax, esi
movzx eax, al
imul eax, ebx
add eax, edx
xor edx, edx
div edi
shl eax, 0x10
mov esi, eax
movzx eax, byte [esp + 0x34]
and esi, 0xff0000
mov edx, eax
movzx eax, byte [esp + 0x28]
imul edx, ecx
imul eax, ebx
add eax, edx
xor edx, edx
div edi
mov edx, edi
shl edx, 0x18
movzx eax, al
or eax, edx
xor edx, edx
or esi, eax
mov eax, dword [esp + 0x34]
movzx eax, ah
imul ecx, eax
mov eax, dword [esp + 0x28]
movzx eax, ah
imul ebx, eax
lea eax, [ecx + ebx]
div edi
shl eax, 8
movzx eax, ax
or esi, eax
mov dword [esp + 0x28], esi
lea esi, [esi]
lea esi, [esi]
nop
mov eax, dword [esp + 0x28]
mov dword [esp + 0xc], eax
jmp 0x6901c5f8
test edi, 1
jne 0x6901c86a
test edi, 2
jne 0x6901c855
test edi, 4
je 0x6901c170
mov eax, dword [esi]
add edi, 4
add esi, 4
sub ecx, 4
mov dword [edi - 4], eax
jmp 0x6901c170
mov ebp, 3
mov dword [esp + 0x54], ebp
jmp 0x6901bfcd
mov dword [esp + 8], edi
mov eax, dword [esp + 0xdc]
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0xd4]
shl eax, 2
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0xd8]
mov dword [esp + 4], eax
mov eax, dword [esp + 0xd4]
mov dword [esp], eax
call sym._convert_32bppARGB_to_32bppPARGB
jmp 0x6901c172
mov eax, dword [esp + 0x38]
mov edi, 0x78
mov dword [esp + 4], edi
mov eax, dword [eax]
mov dword [esp], eax
call esi
sub esp, 8
test eax, eax
jne 0x6901c134
mov edi, dword [esp + 0x84]
jmp 0x6901c14c
mov eax, dword [esp + 0x7c]
mov dword [esp], eax
call dword [sym.imp.gdi32.dll_DeleteObject]
sub esp, 4
jmp 0x6901bfcd
movzx eax, word [esi]
add edi, 2
add esi, 2
sub ecx, 2
mov word [edi - 2], ax
jmp 0x6901c788
movzx eax, byte [esi]
inc edi
inc esi
dec ecx
mov byte [edi - 1], al
jmp 0x6901c77c
mov eax, dword [esp + 0x7c]
mov dword [esp], eax
mov eax, dword [esp + 0x78]
call eax
push eax
mov dword [esp + 0x54], 3
jmp 0x6901bfcd