Function at 0x579400
Capabilities:
Check os version

Disassembly:
sub esp, 0xa4
push ebx
push ebp
push esi
push edi
xor esi, esi
mov edi, eax
xor ebx, ebx
mov ecx, dword [edi + 8]
mov al, byte [ecx]
cmp al, 0x20
je 0x57941d
cmp al, 9
jne 0x579423
inc ecx
mov dword [edi + 8], ecx
jmp 0x579410
mov edx, str.cpuspeed
call fcn.005793b0
test al, al
mov ebp, 7
je 0x579447
mov eax, dword [edi + 8]
mov esi, dword [edi + 0xb0]
add eax, 8
jmp 0x579a99
mov edx, 0x65ea30
call fcn.005793b0
test al, al
je 0x579466
mov eax, dword [edi + 8]
mov esi, dword [edi + 0xb4]
add eax, 3
jmp 0x579a99
mov edx, str.Caps
call fcn.005793b0
test al, al
je 0x579485
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x510]
add eax, 4
jmp 0x579a99
mov edx, str.Caps2
call fcn.005793b0
test al, al
je 0x5794a4
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x514]
add eax, 5
jmp 0x579a99
mov edx, str.Caps3
call fcn.005793b0
test al, al
je 0x5794c3
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x518]
add eax, 5
jmp 0x579a99
mov edx, str.PresentationIntervals
call fcn.005793b0
test al, al
je 0x5794e2
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x51c]
add eax, 0x15
jmp 0x579a99
mov edx, str.CursorCaps
call fcn.005793b0
test al, al
je 0x579501
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x520]
add eax, 0xa
jmp 0x579a99
mov edx, str.DevCaps
call fcn.005793b0
test al, al
je 0x57951f
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x524]
add eax, ebp
jmp 0x579a99
mov edx, str.PrimitiveMiscCaps
call fcn.005793b0
test al, al
je 0x57953e
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x528]
add eax, 0x11
jmp 0x579a99
mov edx, str.RasterCaps
call fcn.005793b0
test al, al
je 0x57955d
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x52c]
add eax, 0xa
jmp 0x579a99
mov edx, str.ZCmpCaps
call fcn.005793b0
test al, al
je 0x57957c
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x530]
add eax, 8
jmp 0x579a99
mov edx, str.SrcBlendCaps
call fcn.005793b0
test al, al
je 0x57959b
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x534]
add eax, 0xc
jmp 0x579a99
mov edx, str.DestBlendCaps
call fcn.005793b0
test al, al
je 0x5795ba
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x538]
add eax, 0xd
jmp 0x579a99
mov edx, str.AlphaCmpCaps
call fcn.005793b0
test al, al
je 0x5795d9
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x53c]
add eax, 0xc
jmp 0x579a99
mov edx, str.ShadeCaps
call fcn.005793b0
test al, al
je 0x5795f8
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x540]
add eax, 9
jmp 0x579a99
mov edx, str.TextureCaps
call fcn.005793b0
test al, al
je 0x579617
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x544]
add eax, 0xb
jmp 0x579a99
mov edx, str.TextureFilterCaps
call fcn.005793b0
test al, al
je 0x579636
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x548]
add eax, 0x11
jmp 0x579a99
mov edx, str.CubeTextureFilterCaps
call fcn.005793b0
test al, al
je 0x579655
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x54c]
add eax, 0x15
jmp 0x579a99
mov edx, str.VolumeTextureFilterCaps
call fcn.005793b0
test al, al
je 0x579674
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x550]
add eax, 0x17
jmp 0x579a99
mov edx, str.TextureAddressCaps
call fcn.005793b0
test al, al
je 0x579693
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x554]
add eax, 0x12
jmp 0x579a99
mov edx, str.VolumeTextureAddressCaps
call fcn.005793b0
test al, al
je 0x5796b2
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x558]
add eax, 0x18
jmp 0x579a99
mov edx, str.LineCaps
call fcn.005793b0
test al, al
je 0x5796d1
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x55c]
add eax, 8
jmp 0x579a99
mov edx, str.MaxTextureWidth
call fcn.005793b0
test al, al
je 0x5796f0
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x560]
add eax, 0xf
jmp 0x579a99
mov edx, str.MaxVolumeExtent
call fcn.005793b0
test al, al
je 0x57970f
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x568]
add eax, 0xf
jmp 0x579a99
mov edx, str.MaxTextureRepeat
call fcn.005793b0
test al, al
je 0x57972e
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x56c]
add eax, 0x10
jmp 0x579a99
mov edx, str.MaxTextureAspectRatio
call fcn.005793b0
test al, al
je 0x57974d
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x570]
add eax, 0x15
jmp 0x579a99
mov edx, str.MaxAnisotropy
call fcn.005793b0
test al, al
je 0x57976c
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x574]
add eax, 0xd
jmp 0x579a99
mov edx, str.StencilCaps
call fcn.005793b0
test al, al
je 0x57978b
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x590]
add eax, 0xb
jmp 0x579a99
mov edx, str.FVFCaps
call fcn.005793b0
test al, al
je 0x5797a9
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x594]
add eax, ebp
jmp 0x579a99
mov edx, str.TextureOpCaps
call fcn.005793b0
test al, al
je 0x5797c8
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x598]
add eax, 0xd
jmp 0x579a99
mov edx, str.MaxTextureBlendStages
call fcn.005793b0
test al, al
je 0x5797e7
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x59c]
add eax, 0x15
jmp 0x579a99
mov edx, str.MaxSimultaneousTextures
call fcn.005793b0
test al, al
je 0x579806
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5a0]
add eax, 0x17
jmp 0x579a99
mov edx, str.VertexProcessingCaps
call fcn.005793b0
test al, al
je 0x579825
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5a4]
add eax, 0x14
jmp 0x579a99
mov edx, str.MaxActiveLights
call fcn.005793b0
test al, al
je 0x579844
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5a8]
add eax, 0xf
jmp 0x579a99
mov edx, str.MaxUserClipPlanes
call fcn.005793b0
test al, al
je 0x579863
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5ac]
add eax, 0x11
jmp 0x579a99
mov edx, str.MaxVertexBlendMatrices
call fcn.005793b0
test al, al
je 0x579882
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5b0]
add eax, 0x16
jmp 0x579a99
mov edx, str.MaxVertexBlendMatrixIndex
call fcn.005793b0
test al, al
je 0x5798a1
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5b4]
add eax, 0x19
jmp 0x579a99
mov edx, str.MaxPrimitiveCount
call fcn.005793b0
test al, al
je 0x5798c0
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5bc]
add eax, 0x11
jmp 0x579a99
mov edx, str.MaxVertexIndex
call fcn.005793b0
test al, al
je 0x5798df
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5c0]
add eax, 0xe
jmp 0x579a99
mov edx, str.MaxStreams
call fcn.005793b0
test al, al
je 0x5798fe
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5c4]
add eax, 0xa
jmp 0x579a99
mov edx, str.MaxStreamStride
call fcn.005793b0
test al, al
je 0x57991d
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5c8]
add eax, 0xf
jmp 0x579a99
mov edx, str.VertexShaderVersion
call fcn.005793b0
test al, al
je 0x57993c
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5cc]
add eax, 0x13
jmp 0x579a99
mov edx, str.MaxVertexShaderConst
call fcn.005793b0
test al, al
je 0x57995b
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5d0]
add eax, 0x14
jmp 0x579a99
mov edx, str.PixelShaderVersion
call fcn.005793b0
test al, al
je 0x57997a
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x5d4]
add eax, 0x12
jmp 0x579a99
mov edx, str.videoram
call fcn.005793b0
test al, al
je 0x579999
mov eax, dword [edi + 8]
mov esi, dword [edi + 0xb8]
add eax, 8
jmp 0x579a99
mov edx, str.subsysid
call fcn.005793b0
test al, al
je 0x5799b8
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x4ec]
add eax, 8
jmp 0x579a99
mov edx, str.revision
call fcn.005793b0
test al, al
je 0x5799d7
mov eax, dword [edi + 8]
mov esi, dword [edi + 0x4f0]
add eax, 8
jmp 0x579a99
mov edx, str.guid
call fcn.005793b0
test al, al
je 0x5799f5
mov eax, dword [edi + 8]
mov ebx, 1
add eax, 4
jmp 0x579a99
mov edx, str.driver
call fcn.005793b0
test al, al
je 0x579a13
mov eax, dword [edi + 8]
mov ebx, 2
add eax, 6
jmp 0x579a99
mov edx, 0x65ea68
call fcn.005793b0
test al, al
je 0x579f8d
lea eax, [esp + 0x20]
push eax
mov dword [esp + 0x24], 0x94
call dword [sym.imp.KERNEL32.dll_GetVersionExA]
mov eax, dword [esp + 0x30]
mov ecx, 2
cmp eax, ecx
jne 0x579a63
mov eax, dword [esp + 0x24]
mov esi, 5
cmp eax, esi
jne 0x579a8f
cmp dword [esp + 0x2c], 0xa28
jae 0x579a8f
mov esi, 4
jmp 0x579a8f
mov eax, dword [esp + 0x2c]
and eax, 0xffff
cmp eax, 0x8ae
mov esi, 3
ja 0x579a7a
mov esi, ecx
cmp eax, 0x7ce
ja 0x579a86
mov esi, 1
cmp eax, 0x3b6
ja 0x579a8f
xor esi, esi
mov eax, dword [edi + 8]
mov ebx, 3
add eax, ecx
mov dword [edi + 8], eax
lea esp, [esp]
mov ecx, dword [edi + 8]
mov al, byte [ecx]
cmp al, 0x20
je 0x579aad
cmp al, 9
jne 0x579ab3
inc ecx
mov dword [edi + 8], ecx
jmp 0x579aa0
mov eax, dword [edi + 8]
mov cx, word [eax]
cmp cx, 0x3d3d
jne 0x579aca
add eax, 2
xor ebp, ebp
jmp 0x579b66
cmp cx, 0x3d21
jne 0x579ade
add eax, 2
mov ebp, 1
jmp 0x579b66
cmp cx, 0x3e3c
jne 0x579aef
add eax, 2
mov ebp, 1
jmp 0x579b66
cmp cx, 0x3e3d
jne 0x579b00
add eax, 2
mov ebp, 4
jmp 0x579b66
cmp cx, 0x3c3d
jne 0x579b11
add eax, 2
mov ebp, 5
jmp 0x579b66
cmp cx, 0x3d3c
jne 0x579b22
add eax, 2
mov ebp, 5
jmp 0x579b66
cmp cx, 0x3d3e
jne 0x579b33
add eax, 2
mov ebp, 4
jmp 0x579b66
mov cl, byte [eax]
cmp cl, 0x3d
jne 0x579b3f
inc eax
xor ebp, ebp
jmp 0x579b66
cmp cl, 0x3e
jne 0x579b4b
mov ebp, 2
jmp 0x579b65
cmp cl, 0x3c
jne 0x579b57
mov ebp, 3
jmp 0x579b65
cmp cl, 0x26
jne 0x579f7d
mov ebp, 6
inc eax
mov dword [edi + 8], eax
lea esp, [esp]
mov ecx, dword [edi + 8]
mov al, byte [ecx]
cmp al, 0x20
je 0x579b7d
cmp al, 9
jne 0x579b83
inc ecx
mov dword [edi + 8], ecx
jmp 0x579b70
cmp ebx, 1
jne 0x579cd1
cmp ebp, ebx
jbe 0x579ba0
pop edi
pop esi
pop ebp
mov eax, str.Only__or___allowed
pop ebx
add esp, 0xa4
ret
mov eax, edi
call fcn.00579300
mov esi, eax
cmp esi, 0xffffffff
je 0x579c67
mov eax, edi
call fcn.00579300
cmp eax, 0xffffffff
je 0x579c67
shl esi, 0x10
add esi, eax
mov eax, dword [edi + 8]
mov cl, byte [eax]
inc eax
cmp cl, 0x2d
mov dword [esp + 0x10], esi
mov dword [edi + 8], eax
jne 0x579c67
mov eax, edi
call fcn.00579300
mov esi, eax
cmp esi, 0xffffffff
je 0x579c67
mov eax, dword [edi + 8]
mov dl, byte [eax]
inc eax
cmp dl, 0x2d
mov dword [edi + 8], eax
jne 0x579c67
mov eax, edi
call fcn.00579300
cmp eax, 0xffffffff
je 0x579c67
shl eax, 0x10
add eax, esi
mov dword [esp + 0x14], eax
mov eax, dword [edi + 8]
mov cl, byte [eax]
inc eax
cmp cl, 0x2d
mov dword [edi + 8], eax
jne 0x579c67
mov eax, edi
call fcn.00579390
mov esi, eax
cmp esi, 0xffffffff
je 0x579c67
mov eax, dword [edi + 8]
mov dl, byte [eax]
inc eax
cmp dl, 0x2d
mov dword [edi + 8], eax
jne 0x579c67
mov eax, edi
call fcn.00579390
cmp eax, 0xffffffff
je 0x579c67
shl eax, 0x10
add eax, esi
mov dword [esp + 0x18], eax
mov eax, edi
call fcn.00579390
mov esi, eax
cmp esi, 0xffffffff
je 0x579c67
mov eax, edi
call fcn.00579390
cmp eax, 0xffffffff
jne 0x579c77
pop edi
pop esi
pop ebp
mov eax, str.Invalid_GUID
pop ebx
add esp, 0xa4
ret
shl eax, 0x10
add eax, esi
add edi, 0x4f4
test ebp, ebp
mov dword [esp + 0x1c], eax
lea esi, [esp + 0x10]
mov ecx, 0x10
jne 0x579cb2
xor eax, eax
repe cmpsb byte [esi], byte es:[edi]
je 0x579c9e
sbb eax, eax
sbb eax, 0xffffffff
xor ecx, ecx
test eax, eax
sete cl
pop edi
pop esi
pop ebp
pop ebx
mov eax, ecx
add esp, 0xa4
ret
xor eax, eax
repe cmpsb byte [esi], byte es:[edi]
je 0x579cbd
sbb eax, eax
sbb eax, 0xffffffff
xor edx, edx
test eax, eax
setne dl
pop edi
pop esi
pop ebp
pop ebx
mov eax, edx
add esp, 0xa4
ret
cmp ebx, 2
jne 0x579e17
mov eax, edi
call fcn.00578f30
mov esi, eax
cmp esi, 0xffffffff
je 0x579e07
mov eax, dword [edi + 8]
mov cl, byte [eax]
inc eax
cmp cl, 0x2e
mov dword [edi + 8], eax
jne 0x579e07
mov eax, edi
call fcn.00578f30
mov ebx, eax
mov eax, dword [edi + 8]
mov dl, byte [eax]
shl esi, 0x10
add ebx, esi
inc eax
cmp dl, 0x2e
mov dword [edi + 8], eax
jne 0x579e07
mov eax, edi
call fcn.00578f30
mov esi, eax
cmp esi, 0xffffffff
je 0x579e07
mov eax, dword [edi + 8]
mov cl, byte [eax]
inc eax
cmp cl, 0x2e
mov dword [edi + 8], eax
jne 0x579e07
mov eax, edi
call fcn.00578f30
mov ecx, dword [edi + 0x4dc]
mov edi, dword [edi + 0x4e0]
shl esi, 0x10
add eax, esi
cmp ebp, 5
ja case.default.0x579e42
jmp dword [ebp*4 + 0x579fa0]
cmp ecx, eax
jne 0x579dfa
cmp edi, ebx
jne 0x579dfa
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0xa4
ret
cmp ecx, eax
jne 0x579d92
cmp edi, ebx
je 0x579dfa
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0xa4
ret
cmp edi, ebx
jl 0x579dfa
jg 0x579dac
cmp ecx, eax
jbe 0x579dfa
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0xa4
ret
cmp edi, ebx
jg 0x579dfa
jl 0x579dc6
cmp ecx, eax
jae 0x579dfa
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0xa4
ret
cmp edi, ebx
jl 0x579dfa
jg 0x579de0
cmp ecx, eax
jb 0x579dfa
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0xa4
ret
cmp edi, ebx
jg 0x579dfa
jl 0x579de0
cmp ecx, eax
jbe 0x579de0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0xa4
ret
pop edi
pop esi
pop ebp
mov eax, str.Invalid_driver_number
pop ebx
add esp, 0xa4
ret
cmp ebx, 3
jne 0x579ed0
mov edx, str.win95
call fcn.005793b0
test al, al
je 0x579e49
xor eax, eax
mov ecx, dword [edi + 8]
add ecx, 5
mov dword [edi + 8], ecx
cmp ebp, 6
ja case.default.0x579e42
jmp dword [ebp*4 + 0x579fb8]
mov edx, str.win98
call fcn.005793b0
test al, al
je 0x579e5e
mov eax, 1
jmp 0x579e30
mov edx, str.win98se
call fcn.005793b0
test al, al
je 0x579e79
mov ecx, dword [edi + 8]
mov eax, 2
add ecx, 7
jmp 0x579e36
mov edx, str.winme
call fcn.005793b0
test al, al
je 0x579e8e
mov eax, 3
jmp 0x579e30
mov edx, str.win2k
call fcn.005793b0
test al, al
je 0x579ea3
mov eax, 4
jmp 0x579e30
mov edx, str.winxp
call fcn.005793b0
test al, al
je 0x579ec0
mov ecx, dword [edi + 8]
mov eax, 5
add ecx, eax
jmp 0x579e36
pop edi
pop esi
pop ebp
mov eax, str.Unknown_OS
pop ebx
add esp, 0xa4
ret
mov eax, edi
call fcn.00578f30
cmp eax, 0xffffffff
jne 0x579e39
pop edi
pop esi
pop ebp
mov eax, str.Number_expected
pop ebx
add esp, 0xa4
ret
xor edx, edx
cmp esi, eax
sete dl
pop edi
pop esi
pop ebp
pop ebx
mov eax, edx
add esp, 0xa4
ret
xor ecx, ecx
cmp esi, eax
setne cl
pop edi
pop esi
pop ebp
pop ebx
mov eax, ecx
add esp, 0xa4
ret
pop edi
cmp eax, esi
pop esi
sbb eax, eax
pop ebp
neg eax
pop ebx
add esp, 0xa4
ret
pop edi
cmp esi, eax
pop esi
sbb eax, eax
pop ebp
neg eax
pop ebx
add esp, 0xa4
ret
pop edi
cmp esi, eax
pop esi
sbb eax, eax
pop ebp
inc eax
pop ebx
add esp, 0xa4
ret
pop edi
cmp eax, esi
pop esi
sbb eax, eax
pop ebp
inc eax
pop ebx
add esp, 0xa4
ret
and eax, esi
pop edi
neg eax
pop esi
sbb eax, eax
pop ebp
neg eax
pop ebx
add esp, 0xa4
ret
pop edi
pop esi
pop ebp
mov eax, str.Invalid
pop ebx
add esp, 0xa4
ret
pop edi
pop esi
pop ebp
mov eax, str.Unknown_operator
pop ebx
add esp, 0xa4
ret
pop edi
pop esi
pop ebp
mov eax, str.Unknown_value
pop ebx
add esp, 0xa4
ret