Function at 0x405140
Capabilities:
Resolve function by parsing pe exports

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x280
mov ecx, dword [0x4a53f0]
push ebx
push ebp
push esi
mov ebp, dword [ecx]
xor esi, esi
push edi
mov dword [esp + 0x6c], esi
mov eax, dword [ebp + 4]
test eax, eax
jle 0x4063ad
lea eax, [esi*8]
sub eax, esi
shl eax, 4
add eax, esi
lea eax, [eax + eax*2]
lea eax, [eax + eax*4]
lea eax, [eax + eax*4]
lea ebp, [ebp + eax*4 + 8]
mov al, byte [ecx + 8]
test al, al
je 0x406364
mov edx, dword [ecx + 0x10]
mov eax, dword [ecx + 0x14]
push str.Drive_Information
mov dword [ecx + edx*4 + 0x18], eax
mov eax, dword [0x4a53f0]
mov ebx, dword [eax + 0x10]
inc ebx
mov dword [eax + 0x10], ebx
mov ecx, dword [0x4a53f0]
xor ebx, ebx
mov dword [ecx + 0x14], ebx
call fcn.00404f80
push str._________________
call fcn.00404f80
lea edx, [ebp + 0x3d]
lea eax, [ebp + 0x35]
push edx
push eax
lea ecx, [esp + 0xa0]
push str.Drive:_.8s__.16s
push ecx
call fcn.0044537b
lea edx, [esp + 0xa8]
push edx
call fcn.00404f80
lea eax, [ebp + 9]
lea ecx, [esp + 0xac]
push eax
push str.Type:_s
push ecx
call fcn.0044537b
lea edx, [esp + 0xb8]
push edx
call fcn.00404f80
lea eax, [ebp + 0x4d]
lea ecx, [esp + 0xbc]
push eax
push str.Firmware_Version:_.4s
push ecx
call fcn.0044537b
lea edx, [esp + 0xc8]
push edx
call fcn.00404f80
mov ax, word [ebp + 0x71]
push eax
call fcn.0040a420
and eax, 0xffff
add esp, 0x40
cmp eax, 0x400
jl 0x405264
test eax, 0x3ff
jne 0x405264
sar eax, 0xa
push eax
lea ecx, [esp + 0x94]
push str.Buffer_Size:_d_MB
push ecx
jmp 0x405272
push eax
lea edx, [esp + 0x94]
push str.Buffer_Size:_d_KB
push edx
call fcn.0044537b
add esp, 0xc
lea eax, [esp + 0x90]
push eax
call fcn.00404f80
lea eax, [ebp + 0x51]
lea ecx, [esp + 0x94]
push eax
push str._.12s
push ecx
call fcn.0044537b
add esp, 0x10
xor edi, edi
lea esi, [esp + 0x90]
movsx edx, byte [esi]
push edx
call fcn.004453ff
add esp, 4
test eax, eax
jne 0x4052c7
mov al, byte [esi]
cmp al, 0x2f
je 0x4052c7
cmp al, 0x20
jne 0x4052e4
test edi, edi
jne 0x4052e4
cmp byte [esi], 0x2f
jne 0x4052d0
inc edi
mov byte [esi], 0x2d
movsx eax, byte [esi]
push eax
call fcn.004453ff
add esp, 4
test eax, eax
je 0x4052e1
inc ebx
inc esi
jmp 0x4052a9
cmp ebx, 6
mov byte [esi], 0
jne 0x40531f
test edi, edi
jne 0x40531f
lea ecx, [esp + 0x94]
lea edx, [esp + 0x92]
push ecx
lea eax, [esp + 0x94]
push edx
push eax
lea ecx, [esp + 0x19c]
push str._.2s__.2s__.2s
push ecx
call fcn.0044537b
add esp, 0x14
jmp 0x40535d
cmp edi, 2
jge 0x405332
lea edx, [esp + 0x190]
mov edi, 0x48a3f0
jmp 0x405340
lea edi, [esp + 0x90]
lea edx, [esp + 0x190]
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, str.Date:
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
lea edx, [esp + 0x90]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
xor eax, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [esp + 0x190]
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
lea eax, [esp + 0x90]
and ecx, 3
push eax
rep movsb byte es:[edi], byte [esi]
call fcn.00404f80
mov edi, str.Serial_Number:
or ecx, 0xffffffff
xor eax, eax
add esp, 4
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
lea edx, [esp + 0x90]
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp + 0x844f]
test eax, eax
je 0x405434
add eax, 4
push 0x1f
lea ecx, [esp + 0x194]
push eax
push ecx
call fcn.004454b0
mov edx, dword [ebp + 0x844f]
xor eax, eax
lea ecx, [esp + 0x19c]
mov al, byte [edx + 3]
push ecx
mov byte [esp + eax + 0x1a0], 0
call fcn.00402b10
add esp, 0x10
jmp 0x405470
mov byte [esp + 0x17], 1
xor esi, esi
mov bl, byte [esi + ebp + 0x5b]
movsx eax, bl
push eax
call fcn.0044547d
add esp, 4
test eax, eax
jne 0x405453
mov byte [esp + 0x17], al
mov byte [esp + esi + 0x190], bl
inc esi
cmp esi, 0xa
jl 0x40543b
mov al, byte [esp + 0x17]
test al, al
je 0x4054a3
mov byte [esp + 0x19a], 0
lea edi, [esp + 0x190]
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea eax, [esp + 0x90]
push eax
call fcn.00404f80
lea eax, [ebp + 0x51]
lea ecx, [esp + 0x94]
push eax
push str.Vendor_Specific:__.20s
push ecx
call fcn.0044537b
lea edx, [esp + 0xa0]
push edx
call fcn.00404f80
mov eax, dword [ebp + 0x29]
lea ecx, [esp + 0xa4]
add eax, 0x41
push eax
push str.Drive_Letter:_c:_
push ecx
call fcn.0044537b
lea edx, [esp + 0xb0]
push edx
call fcn.00404f80
mov eax, dword [ebp + 5]
mov ecx, dword [ebp + 1]
push eax
push ecx
lea edx, [esp + 0xbc]
push str.Location:_d:_d
push edx
call fcn.0044537b
lea eax, [esp + 0xc4]
push eax
call fcn.00404f80
mov al, byte [ebp]
add esp, 0x38
test al, 2
je 0x40609f
mov cl, byte [ebp + 0x6b]
shr cl, 5
push ecx
call fcn.0040a400
push eax
lea edx, [esp + 0x98]
push str.Mechanism:_s
push edx
call fcn.0044537b
lea eax, [esp + 0xa0]
push eax
call fcn.00404f80
mov eax, dword [ebp + 0x8b]
lea esi, [ebp + 0x8b]
add esp, 0x14
cmp eax, 0xffffffff
jne 0x405597
mov edi, str.Read_Speed:_n_a
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
jmp 0x405723
lea ecx, [esp + 0x90]
push str.Read_Speed:
push ecx
call fcn.0044537b
mov eax, dword [esi]
add esp, 8
xor ebx, ebx
cmp eax, 0xffffffff
mov byte [esp + 0x17], bl
mov dword [esp + 0x40], ebx
mov dword [esp + 0x44], 0x40660000
je 0x4056f7
mov eax, esi
mov ecx, dword [eax]
test ebx, ebx
mov dword [esp + 0x18], ecx
jne 0x40562f
mov eax, ecx
mov esi, 0x569
cdq
idiv esi
test edx, edx
je 0x405618
cmp ecx, 0xcfc
je 0x405618
mov eax, ecx
mov esi, 0x564
cdq
idiv esi
test edx, edx
je 0x405601
cmp ecx, 0xcf0
jne 0x40562f
mov dword [esp + 0x40], 0
mov dword [esp + 0x44], 0x40959000
mov byte [esp + 0x17], 1
jmp 0x405637
mov dword [esp + 0x40], 0
mov dword [esp + 0x44], 0x4095a400
mov byte [esp + 0x17], 1
jmp 0x405637
mov al, byte [esp + 0x17]
test al, al
je 0x405654
fild dword [esp + 0x18]
sub esp, 8
lea edx, [esp + 0x198]
fdiv qword [esp + 0x48]
fstp qword [esp]
push 0x48a368
push edx
jmp 0x40566f
fild dword [esp + 0x18]
sub esp, 8
lea eax, [esp + 0x198]
fdiv qword [esp + 0x48]
fstp qword [esp]
push 0x48a360
push eax
call fcn.0044537b
add esp, 0x10
test ebx, ebx
je 0x4056ac
mov edi, 0x48a35c
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [esp + 0x190]
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
inc ebx
rep movsb byte es:[edi], byte [esi]
mov ecx, dword [ebp + ebx*4 + 0x8b]
lea eax, [ebp + ebx*4 + 0x8b]
cmp ecx, 0xffffffff
jne 0x4055cb
mov edi, 0x48a358
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
and ecx, 3
lea eax, [esp + 0x90]
rep movsb byte es:[edi], byte [esi]
push eax
call fcn.00404f80
mov eax, dword [ebp + 0x21b]
lea esi, [ebp + 0x21b]
add esp, 4
cmp eax, 0xffffffff
jne 0x405772
mov edi, str.Write_Speed:_n_a
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
jmp 0x4058fe
lea ecx, [esp + 0x90]
push str.Write_Speed:
push ecx
call fcn.0044537b
mov eax, dword [esi]
add esp, 8
xor ebx, ebx
cmp eax, 0xffffffff
mov byte [esp + 0x17], bl
mov dword [esp + 0x38], ebx
mov dword [esp + 0x3c], 0x40660000
je 0x4058d2
mov eax, esi
mov ecx, dword [eax]
test ebx, ebx
mov dword [esp + 0x18], ecx
jne 0x40580a
mov eax, ecx
mov esi, 0x569
cdq
idiv esi
test edx, edx
je 0x4057f3
cmp ecx, 0xcfc
je 0x4057f3
mov eax, ecx
mov esi, 0x564
cdq
idiv esi
test edx, edx
je 0x4057dc
cmp ecx, 0xcf0
jne 0x40580a
mov dword [esp + 0x38], 0
mov dword [esp + 0x3c], 0x40959000
mov byte [esp + 0x17], 1
jmp 0x405812
mov dword [esp + 0x38], 0
mov dword [esp + 0x3c], 0x4095a400
mov byte [esp + 0x17], 1
jmp 0x405812
mov al, byte [esp + 0x17]
test al, al
je 0x40582f
fild dword [esp + 0x18]
sub esp, 8
lea edx, [esp + 0x198]
fdiv qword [esp + 0x40]
fstp qword [esp]
push 0x48a368
push edx
jmp 0x40584a
fild dword [esp + 0x18]
sub esp, 8
lea eax, [esp + 0x198]
fdiv qword [esp + 0x40]
fstp qword [esp]
push 0x48a360
push eax
call fcn.0044537b
add esp, 0x10
test ebx, ebx
je 0x405887
mov edi, 0x48a35c
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [esp + 0x190]
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
inc ebx
rep movsb byte es:[edi], byte [esi]
mov ecx, dword [ebp + ebx*4 + 0x21b]
lea eax, [ebp + ebx*4 + 0x21b]
cmp ecx, 0xffffffff
jne 0x4057a6
mov edi, 0x48a358
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
and ecx, 3
lea eax, [esp + 0x90]
rep movsb byte es:[edi], byte [esi]
push eax
call fcn.00404f80
push 0x4a53ec
call fcn.00404f80
mov al, byte [ebp]
add esp, 8
test al, 8
je 0x40596f
mov eax, dword [ebp + 0x83c3]
test eax, eax
je 0x4059b6
mov cl, byte [eax + 4]
lea edx, [esp + 0x90]
and ecx, 1
push ecx
push str.Read_CD_Text
push edx
call fcn.00405110
push eax
call fcn.00404f80
mov eax, dword [ebp + 0x83c3]
lea edx, [esp + 0xa0]
mov cl, byte [eax + 4]
shr ecx, 1
and ecx, 1
push ecx
push str.Return_C2_Pointers
push edx
jmp 0x4059a8
mov al, byte [ebp + 0x6c]
lea ecx, [esp + 0x90]
shr eax, 5
and eax, 1
push eax
push str.Read_CD_Text
push ecx
call fcn.00405110
push eax
call fcn.00404f80
mov dl, byte [ebp + 0x6a]
lea eax, [esp + 0xa0]
shr edx, 4
and edx, 1
push edx
push str.Return_C2_Pointers
push eax
call fcn.00405110
push eax
call fcn.00404f80
add esp, 0x20
mov al, byte [ebp]
xor ecx, ecx
xor ebx, ebx
xor edi, edi
test al, 0x10
mov dword [esp + 0x58], ecx
mov dword [esp + 0x48], ecx
mov dword [esp + 0x18], ecx
mov dword [esp + 0x60], ecx
mov dword [esp + 0x30], ecx
mov dword [esp + 0x7c], ecx
mov dword [esp + 0x24], ecx
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x34], ecx
mov dword [esp + 0x80], ecx
mov dword [esp + 0x64], ecx
mov dword [esp + 0x28], ecx
mov dword [esp + 0x20], ecx
mov dword [esp + 0x68], ecx
mov dword [esp + 0x74], ecx
mov dword [esp + 0x88], ecx
mov dword [esp + 0x84], ecx
mov dword [esp + 0x50], ecx
mov dword [esp + 0x70], ecx
mov dword [esp + 0x4c], ecx
mov dword [esp + 0x78], ecx
mov dword [esp + 0x54], ecx
mov dword [esp + 0x5c], ecx
mov dword [esp + 0x1c], ecx
je 0x405a60
mov edx, dword [ebp + 0x8467]
mov esi, 1
test dh, 4
je 0x405a44
mov dword [esp + 0x24], esi
mov dword [esp + 0x48], esi
test dh, 0x20
je 0x405a51
mov dword [esp + 0x28], esi
mov dword [esp + 0x68], esi
test dh, 0x40
je 0x405a65
mov dword [esp + 0x20], esi
mov dword [esp + 0x74], esi
jmp 0x405a65
mov esi, 1
test al, 8
je 0x405bb1
cmp dword [ebp + 0x8417], ecx
je 0x405a81
mov dword [esp + 0x64], esi
mov dword [esp + 0x28], esi
mov dword [esp + 0x20], esi
cmp dword [ebp + 0x8407], ecx
je 0x405a8f
mov ebx, esi
mov dword [esp + 0x58], esi
mov eax, dword [ebp + 0x83ef]
cmp eax, ecx
je 0x405aad
mov dl, byte [eax + 4]
mov dword [esp + 0x2c], esi
test dl, 1
mov dword [esp + 0x34], esi
je 0x405aad
mov dword [esp + 0x60], esi
mov eax, dword [ebp + 0x83f3]
cmp eax, ecx
je 0x405acb
mov dl, byte [eax + 4]
mov dword [esp + 0x2c], esi
test dl, 1
mov dword [esp + 0x34], esi
je 0x405acb
mov dword [esp + 0x18], esi
mov eax, dword [ebp + 0x8467]
test ah, 1
je 0x405ada
mov dword [esp + 0x18], esi
mov eax, dword [ebp + 0x83f7]
cmp eax, ecx
je 0x405af5
test byte [eax + 4], 1
je 0x405aee
mov dword [esp + 0x7c], esi
mov dword [esp + 0x80], esi
mov eax, dword [ebp + 0x83c7]
cmp eax, ecx
je 0x405b09
test byte [eax + 6], 1
je 0x405b09
mov dword [esp + 0x24], esi
mov eax, dword [ebp + 0x841b]
cmp eax, ecx
je 0x405b33
mov dl, byte [eax + 4]
mov dword [esp + 0x88], esi
test dl, 1
je 0x405b29
mov dword [esp + 0x84], esi
test byte [eax + 6], 1
je 0x405b33
mov dword [esp + 0x50], esi
mov eax, dword [ebp + 0x841f]
cmp eax, ecx
je 0x405b51
test byte [eax + 4], 1
je 0x405b47
mov dword [esp + 0x70], esi
test byte [eax + 6], 1
je 0x405b51
mov dword [esp + 0x4c], esi
mov eax, dword [ebp + 0x83ff]
cmp eax, ecx
je 0x405b7f
mov al, byte [eax + 4]
mov dword [esp + 0x30], esi
mov dl, al
shr edx, 6
and edx, 1
test al, 0x40
mov edi, edx
jne 0x405b7a
xor eax, eax
mov al, byte [ebp + 0x69]
mov edi, eax
shr edi, 7
mov esi, 1
cmp dword [ebp + 0x83eb], ecx
je 0x405b8b
mov dword [esp + 0x1c], esi
cmp dword [ebp + 0x8423], ecx
je 0x405b97
mov dword [esp + 0x78], esi
cmp dword [ebp + 0x8427], ecx
je 0x405ba3
mov dword [esp + 0x54], esi
cmp dword [ebp + 0x842b], ecx
je 0x405bcd
mov dword [esp + 0x5c], esi
jmp 0x405bcd
xor eax, eax
xor ecx, ecx
mov al, byte [ebp + 0x68]
mov cl, byte [ebp + 0x69]
mov ebx, eax
and eax, esi
shr ebx, 4
mov edi, ecx
and ebx, esi
mov dword [esp + 0x30], eax
shr edi, 7
mov al, byte [ebp + 0x67]
mov dl, byte [ebp + 0x68]
and eax, 1
lea ecx, [esp + 0x90]
shr edx, 1
push eax
and edx, 1
push str.Read_CD_R
push ecx
mov esi, edx
call fcn.00405110
push eax
call fcn.00404f80
mov dl, byte [ebp + 0x67]
lea eax, [esp + 0xa0]
shr edx, 1
and edx, 1
push edx
push str.Read_CD_RW
push eax
call fcn.00405110
push eax
call fcn.00404f80
mov cl, byte [ebp + 0x67]
lea edx, [esp + 0xb0]
shr ecx, 3
and ecx, 1
push ecx
push str.Read_DVD_ROM
push edx
call fcn.00405110
push eax
call fcn.00404f80
mov al, byte [ebp + 0x67]
lea ecx, [esp + 0xc0]
shr eax, 5
and eax, 1
push eax
push str.Read_DVD_RAM
push ecx
call fcn.00405110
push eax
call fcn.00404f80
mov dl, byte [ebp + 0x67]
add esp, 0x40
shr edx, 4
and edx, 1
lea eax, [esp + 0x90]
push edx
push str.Read_DVD_R
push eax
call fcn.00405110
push eax
call fcn.00404f80
mov cl, byte [ebp + 0x67]
lea edx, [esp + 0xa0]
shr ecx, 4
and ecx, 1
push ecx
push str.Read_DVD_RW
push edx
call fcn.00405110
push eax
call fcn.00404f80
mov eax, dword [esp + 0x44]
lea ecx, [esp + 0xb0]
push eax
push str.Read_DVD_R_DL
push ecx
call fcn.00405110
push eax
call fcn.00404f80
mov edx, dword [esp + 0x5c]
lea eax, [esp + 0xc0]
push edx
push str.Read_DVDR
push eax
call fcn.00405110
push eax
call fcn.00404f80
add esp, 0x40
mov ecx, dword [esp + 0x34]
lea edx, [esp + 0x90]
push ecx
push str.Read_DVDRW
push edx
call fcn.00405110
push eax
call fcn.00404f80
mov eax, dword [esp + 0x90]
lea ecx, [esp + 0xa0]
push eax
push str.Read_DVDR_DL
push ecx
call fcn.00405110
push eax
call fcn.00404f80
mov edx, dword [esp + 0x84]
lea eax, [esp + 0xb0]
push edx
push str.Read_BD_ROM
push eax
call fcn.00405110
push eax
call fcn.00404f80
mov ecx, dword [esp + 0x58]
lea edx, [esp + 0xc0]
push ecx
push str.Read_BD_R
push edx
call fcn.00405110
push eax
call fcn.00404f80
mov eax, dword [esp + 0x60]
add esp, 0x40
lea ecx, [esp + 0x90]
push eax
push str.Read_BD_RE
push ecx
call fcn.00405110
push eax
call fcn.00404f80
mov edx, dword [esp + 0x98]
lea eax, [esp + 0xa0]
push edx
push str.Read_HD_DVD_ROM
push eax
call fcn.00405110
push eax
call fcn.00404f80
mov ecx, dword [esp + 0xa4]
lea edx, [esp + 0xb0]
push ecx
push str.Read_HD_DVD_R
push edx
call fcn.00405110
push eax
call fcn.00404f80
mov eax, dword [esp + 0x80]
lea ecx, [esp + 0xc0]
push eax
push str.Read_HD_DVD_RW
push ecx
call fcn.00405110
push eax
call fcn.00404f80
mov edx, dword [esp + 0xb8]
add esp, 0x40
lea eax, [esp + 0x90]
push edx
push str.Read_HD_BURN
push eax
call fcn.00405110
push eax
call fcn.00404f80
mov cl, byte [ebp + 0x6a]
lea edx, [esp + 0xa0]
and ecx, 1
push ecx
push str.Read_Digital_Audio
push edx
call fcn.00405110
push eax
call fcn.00404f80
xor eax, eax
lea edx, [esp + 0xb0]
mov al, byte [ebp + 0x6a]
mov ecx, eax
and eax, 4
shr ecx, 1
and ecx, 4
or ecx, eax
shr ecx, 2
push ecx
push str.Read_CDG
push edx
call fcn.00405110
push eax
call fcn.00404f80
mov al, byte [ebp + 0x69]
lea ecx, [esp + 0xc0]
shr eax, 5
and eax, 1
push eax
push str.Read_VideoCD
push ecx
call fcn.00405110
push eax
call fcn.00404f80
add esp, 0x40
push 0x4a53ec
call fcn.00404f80
mov edx, dword [esp + 0x34]
lea eax, [esp + 0x94]
push edx
push str.Write_CD_R
push eax
call fcn.00405110
push eax
call fcn.00404f80
push esi
lea ecx, [esp + 0xa8]
push str.Write_CD_RW
push ecx
call fcn.00405110
push eax
call fcn.00404f80
push ebx
lea edx, [esp + 0xb8]
push str.Write_DVD_R
push edx
call fcn.00405110
push eax
call fcn.00404f80
mov eax, dword [esp + 0x8c]
lea ecx, [esp + 0xc4]
push eax
push str.Write_DVD_RW
push ecx
call fcn.00405110
add esp, 0x40
push eax
call fcn.00404f80
mov edx, dword [esp + 0x4c]
lea eax, [esp + 0x94]
push edx
push str.Write_DVD_R_DL
push eax
call fcn.00405110
push eax
call fcn.00404f80
mov ecx, dword [esp + 0x2c]
lea edx, [esp + 0xa4]
push ecx
push str.Write_DVDR
push edx
call fcn.00405110
push eax
call fcn.00404f80
mov eax, dword [esp + 0x84]
lea ecx, [esp + 0xb4]
push eax
push str.Write_DVDRW
push ecx
call fcn.00405110
push eax
call fcn.00404f80
mov edx, dword [esp + 0xb0]
lea eax, [esp + 0xc4]
push edx
push str.Write_DVDR_DL
push eax
call fcn.00405110
add esp, 0x40
push eax
call fcn.00404f80
mov cl, byte [ebp + 0x68]
lea edx, [esp + 0x94]
shr ecx, 5
and ecx, 1
push ecx
push str.Write_DVD_RAM
push edx
call fcn.00405110
push eax
call fcn.00404f80
mov eax, dword [esp + 0x7c]
lea ecx, [esp + 0xa4]
push eax
push str.Write_BD_R
push ecx
call fcn.00405110
push eax
call fcn.00404f80
mov edx, dword [esp + 0x98]
lea eax, [esp + 0xb4]
push edx
push str.Write_BD_RE
push eax
call fcn.00405110
push eax
call fcn.00404f80
mov ecx, dword [esp + 0xa4]
lea edx, [esp + 0xc4]
push ecx
push str.Write_HD_DVD_R
push edx
call fcn.00405110
add esp, 0x40
push eax
call fcn.00404f80
mov eax, dword [esp + 0x50]
lea ecx, [esp + 0x94]
push eax
push str.Write_HD_DVD_RW
push ecx
call fcn.00405110
push eax
call fcn.00404f80
mov edx, dword [esp + 0x68]
lea eax, [esp + 0xa4]
push edx
push str.Write_HD_BURN_R
push eax
call fcn.00405110
push eax
call fcn.00404f80
mov ecx, dword [esp + 0x80]
lea edx, [esp + 0xb4]
push ecx
push str.Write_HD_BURN_RW
push edx
call fcn.00405110
push eax
call fcn.00404f80
push edi
lea eax, [esp + 0xc8]
push str.Buffer_Underrun_Protection
push eax
call fcn.00405110
add esp, 0x40
push eax
call fcn.00404f80
mov ecx, dword [esp + 0x20]
push ecx
lea edx, [esp + 0x98]
push str.Mount_Rainier
push edx
call fcn.00405110
push eax
call fcn.00404f80
xor eax, eax
lea ecx, [esp + 0xa4]
mov al, byte [ebp + 0x846b]
push eax
push str.SolidBurn
push ecx
call fcn.00405110
push eax
call fcn.00404f80
add esp, 0x24
mov edi, 0x4a53ec
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x190]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
xor al, al
and ecx, 3
xor ebx, ebx
rep movsb byte es:[edi], byte [esi]
mov dword [esp + 0x1c], ebx
mov edx, 1
mov ecx, ebx
shl edx, cl
test dword [ebp + 0x7f], edx
je 0x406157
test al, al
je 0x406117
mov edi, 0x48a35c
or ecx, 0xffffffff
xor eax, eax
lea ebx, [esp + 0x190]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov edi, ebx
mov ebx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
mov ebx, dword [esp + 0x1c]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
push edx
mov byte [esp + 0x1b], 1
call fcn.004099d0
mov edi, eax
or ecx, 0xffffffff
xor eax, eax
add esp, 4
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
lea edx, [esp + 0x190]
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov al, byte [esp + 0x17]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
inc ebx
cmp ebx, 0xa
mov dword [esp + 0x1c], ebx
jl 0x4060d0
test al, al
jne 0x406192
mov edi, 0x489e9c
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x190]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x190]
lea edx, [esp + 0x90]
push ecx
push str.Modes:_s
push edx
call fcn.0044537b
lea eax, [esp + 0x9c]
push eax
call fcn.00404f80
push 0x4a53ec
call fcn.00404f80
mov al, byte [ebp]
add esp, 0x14
test al, 4
jne 0x4061d7
test byte [ebp + 0x67], 8
je 0x40634d
xor ebx, ebx
mov eax, str.RPC_II
mov bl, byte [ebp + 0x89]
test ebx, ebx
jne 0x4061ed
mov eax, str.RPC_I
push eax
lea ecx, [esp + 0x94]
push str.Region_Protection_Control:_s
push ecx
call fcn.0044537b
lea edx, [esp + 0x9c]
push edx
call fcn.00404f80
mov al, byte [ebp + 0x88]
add esp, 0x10
and eax, 0x3f
jne 0x406246
mov edi, 0x48a0a0
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x190]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
jmp 0x4062ae
cmp eax, 0x3f
jne 0x406276
mov edi, str.None
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x190]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
jmp 0x4062ae
xor ecx, ecx
mov edx, eax
sar edx, cl
test dl, 1
je 0x406289
inc ecx
cmp ecx, 6
jl 0x406278
jmp 0x406291
inc ecx
mov dword [esp + 0x8c], ecx
mov eax, dword [esp + 0x8c]
lea ecx, [esp + 0x190]
push eax
push 0x48a094
push ecx
call fcn.0044537b
add esp, 0xc
lea edx, [esp + 0x190]
lea eax, [esp + 0x90]
push edx
push str.Region:_s
push eax
call fcn.0044537b
lea ecx, [esp + 0x9c]
push ecx
call fcn.00404f80
add esp, 0x10
test ebx, ebx
jne 0x4062f5
push str.Changes_User:n_a
call fcn.00404f80
push str.Changes_Vendor:n_a
call fcn.00404f80
add esp, 8
jmp 0x40634d
mov dl, byte [ebp + 0x87]
lea eax, [esp + 0x90]
and edx, 7
push edx
push str.Changes_User:_d
push eax
call fcn.0044537b
lea ecx, [esp + 0x9c]
push ecx
call fcn.00404f80
mov dl, byte [ebp + 0x87]
lea eax, [esp + 0xa0]
shr edx, 3
and edx, 7
push edx
push str.Changes_Vendor:_d
push eax
call fcn.0044537b
lea ecx, [esp + 0xac]
push ecx
call fcn.00404f80
add esp, 0x20
push 0x4a53ec
call fcn.00404f80
mov ecx, dword [0x4a53f0]
mov esi, dword [esp + 0x70]
add esp, 4
mov al, byte [ecx + 9]
test al, al
je 0x40638a
mov edx, dword [ebp + 0x29]
mov ecx, dword [ecx]
lea eax, [esi + esi*8]
push edx
lea edx, [esi + eax*4]
lea eax, [esi + edx*4]
lea edx, [ecx + eax*8 + 0x108d88]
push edx
call fcn.004063c0
add esp, 8
push 0x48a038
call fcn.00404f80
mov ecx, dword [0x4a53f0]
add esp, 4
inc esi
mov ebp, dword [ecx]
mov dword [esp + 0x6c], esi
cmp esi, dword [ebp + 4]
jl 0x405169
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret