---------------------------------------------------------------------------------------------
[BUG/PRB.] VFP 9.0 FIX - THE NUMBER OF TIMES TO TRY AGAIN AFTER OPENING FILE FAILED
January 2026
---------------------------------------------------------------------------------------------
CCB
1. BUG:
In vfp9 (and vfp6, vfp7, vfp8), somtimes the open file command fails on Windows Vista or later.
2. CAUSE:
There are some compatible problems when the open file command calls the CreateFileA Windows API
for the Windows Defender program or the antivirus programs.
Now if the open file command calling the CreateFileA Windows API failed,
it will call the CreateFileA Windows API many times again.
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Fun42cf7b :: ; proc near
sub esp , 010Ch ;0x0042cf7b : 81ec0c010000
mov eax , dword ptr [ Data937090 ] ;0x0042cf81 : a190709300
push ebp ;0x0042cf86 : 55
push esi ;0x0042cf87 : 56
push edi ;0x0042cf88 : 57
mov edi , SetErrorMode ;0x0042cf89 : 8b3d04719100
pushd 08001h ;0x0042cf8f : 6801800000
mov dword ptr [ esp + 0118h ] , eax ;0x0042cf94 : 89842418010000
call edi ;0x0042cf9b : ffd7
mov esi , dword ptr [ esp + 011Ch ] ;0x0042cf9d : 8bb4241c010000
mov ebp , eax ;0x0042cfa4 : 8be8
lea eax , dword ptr [ esp + 12 ] ;0x0042cfa6 : 8d44240c
mov ecx , eax ;0x0042cfaa : 8bc8
cmp ecx , esi ;0x0042cfac : 3bce
je Label598206 ;0x0042cfae : 0f8452b21600
lea ecx , dword ptr [ esp + 12 ] ;0x0042cfb4 : 8d4c240c
mov edx , 0105h ;0x0042cfb8 : ba05010000
sub esi , ecx ;0x0042cfbd : 2bf1
lea ebx , dword ptr [ebx] ;0x0042cfbf : 8d1b
Label42cfc1 ::
mov cl , byte ptr [ esi + eax ] ;0x0042cfc1 : 8a0c06
dec edx ;0x0042cfc4 : 4a
test cl , cl ;0x0042cfc5 : 84c9
je Label42cef5 ;0x0042cfc7 : 0f8428ffffff
mov byte ptr [eax] , cl ;0x0042cfcd : 8808
inc eax ;0x0042cfcf : 40
test edx , edx ;0x0042cfd0 : 85d2
jbe Label42cef5 ;0x0042cfd2 : 0f861dffffff
jmp Label42cfc1 ;0x0042cfd8 : ebe7
Label42cef5 ::
mov byte ptr [eax] , 00h ;0x0042cef5 : c60000
Label42cef8 ::
mov edx , dword ptr [ esp + 0120h ] ;0x0042cef8 : 8b942420010000
mov eax , dword ptr [edx] ;0x0042ceff : 8b02
test byte ptr ah , 02h ;0x0042cf01 : f6c402
jne Label43d8d9 ;0x0042cf04 : 0f85cf090100
mov cl , al ;0x0042cf0a : 8ac8
and cl , 04h ;0x0042cf0c : 80e104
neg cl ;0x0042cf0f : f6d9
sbb ecx , ecx ;0x0042cf11 : 1bc9
and ecx , 0FFFFFFFDh ;0x0042cf13 : 83e1fd
add ecx , 03h ;0x0042cf16 : 83c103
Label42cf19 ::
test al , 01h ;0x0042cf19 : a801
je Label43480d ;0x0042cf1b : 0f84ec780000
mov eax , 080000000h ;0x0042cf21 : b800000080
Label42cf26 ::
;
; ----------------------------------------------------------------------------------
; VFP 9.0 FIX - THE NUMBER OF TIMES TO TRY AGAIN AFTER OPENING FILE FAILED
; January 2020
; ----------------------------------------------------------------------------------
; CCB
;
; The number of times to try again after opening file failed.
;
; 2020/1/29, by ccb
;
; pushd 00h ;0x0042cf26 : 6a00
; pushd 080h ;0x0042cf28 : 6880000000
; pushd 03h ;0x0042cf2d : 6a03
; pushd 00h ;0x0042cf2f : 6a00
; push ecx ;0x0042cf31 : 51
; push eax ;0x0042cf32 : 50
; lea edx , dword ptr [ esp + 36 ] ;0x0042cf33 : 8d542424
; push edx ;0x0042cf37 : 52
; call CreateFileA ;0x0042cf38 : ff15f8719100
mov dword ptr vfpa_filetostr_createfile_cnt,00h
mov dword ptr vfpa_filetostr_createfile_access,eax
mov dword ptr vfpa_filetostr_createfile_sharemode,ecx
mov dword ptr vfpa_filetostr_createfile_flags,80h
Label42cf26_isopenfile_start ::
cmp dword ptr vfpa_sys9029_data,00h
je Label42cf26_isopenfile_end
jmp Label42cf27_isopenfile_createfile
Label42cf26_isopenfile_end ::
jmp Label42cf27
Label42cf27_isopenfile_createfile ::
pushd 00h
push dword ptr vfpa_filetostr_createfile_flags
pushd 03h
pushd 00h
push dword ptr vfpa_filetostr_createfile_sharemode
push dword ptr vfpa_filetostr_createfile_access
lea edx , dword ptr [ esp + 36 ]
push edx
call CreateFileA
cmp eax , 0FFFFFFFFh
jne Label42cf28
call GetLastError
mov ecx , eax
mov eax , 0FFFFFFFFh
cmp ecx , 05h
je Label42cf27_isopenfile_createfile_attribute
cmp ecx , 20h
je Label42cf27_isopenfile_createfile_attribute
cmp ecx , 02h
je Label42cf28
cmp ecx , 03h
je Label42cf28
cmp ecx , 0Fh
je Label42cf28
cmp ecx , 07Bh
je Label42cf28
jmp Label42cf27_isopenfile_createfile_attribute
Label42cf27_isopenfile_createfile_attribute ::
lea edx , dword ptr [ esp + 12 ]
push edx
call GetFileAttributesA
mov ecx , eax
mov eax , 0FFFFFFFFh
cmp ecx , 0FFFFFFFFh
je Label42cf27_isopenfile_createfile_cnt
test ecx , 10h
jne Label42cf28
test dword ptr vfpa_filetostr_createfile_access , 40000000h
je Label42cf27_isopenfile_createfile_cnt
test ecx , 01h
jne Label42cf28
jmp Label42cf27_isopenfile_createfile_cnt
Label42cf27_isopenfile_createfile_cnt ::
lea edx , dword ptr [ esp + 12 ]
push edx
call lstrlenA
lea edx , dword ptr [ esp + 12 ]
add edx , eax
dec edx
mov eax , 0FFFFFFFFh
cmp byte ptr [edx],"\"
je Label42cf28
mov ecx,dword ptr vfpa_sys9029_data
inc dword ptr vfpa_filetostr_createfile_cnt
cmp dword ptr vfpa_filetostr_createfile_cnt,ecx
ja Label42cf28
push dword ptr vfpa_sys9132_data
call Sleep
jmp Label42cf27_isopenfile_createfile
Label42cf27 ::
pushd 00h
push dword ptr vfpa_filetostr_createfile_flags
pushd 03h
pushd 00h
push dword ptr vfpa_filetostr_createfile_sharemode
push dword ptr vfpa_filetostr_createfile_access
lea edx , dword ptr [ esp + 36 ]
push edx
call CreateFileA
cmp eax , 0FFFFFFFFh
jne Label42cf28
call GetLastError
mov ecx , eax
mov eax , 0FFFFFFFFh
cmp ecx , 05h
je Label42cf27_createfile_attribute
cmp ecx , 20h
je Label42cf27_createfile_attribute
cmp ecx , 02h
je Label42cf28
cmp ecx , 03h
je Label42cf28
cmp ecx , 0Fh
je Label42cf28
cmp ecx , 07Bh
je Label42cf28
jmp Label42cf27_createfile_attribute
Label42cf27_createfile_attribute ::
lea edx , dword ptr [ esp + 12 ]
push edx
call GetFileAttributesA
mov ecx , eax
mov eax , 0FFFFFFFFh
cmp ecx , 0FFFFFFFFh
je Label42cf27_createfile_cnt
test ecx , 10h
jne Label42cf28
test dword ptr vfpa_filetostr_createfile_access , 40000000h
je Label42cf27_createfile_cnt
test ecx , 01h
jne Label42cf28
jmp Label42cf27_createfile_cnt
Label42cf27_createfile_cnt ::
lea edx , dword ptr [ esp + 12 ]
push edx
call lstrlenA
lea edx , dword ptr [ esp + 12 ]
add edx , eax
dec edx
mov eax , 0FFFFFFFFh
cmp byte ptr [edx],"\"
je Label42cf28
inc dword ptr vfpa_filetostr_createfile_cnt
cmp dword ptr vfpa_filetostr_createfile_cnt,03h
ja Label42cf28
push dword ptr vfpa_sys9074_data
call Sleep
jmp Label42cf27
Label42cf28 ::
; mov dword ptr vfpa_filetostr_isfiletostr,00h
; mov dword ptr vfpa_filetostr_isfiletostr2,00h
; mov dword ptr vfpa_filetostr_isfiletostr3,00h
; mov dword ptr vfpa_strtofile_isstrtofile,00h
; mov dword ptr vfpa_strtofile_isstrtofile2,00h
; mov dword ptr vfpa_strtofile_isstrtofile3,00h
; mov dword ptr vfpa_buildexe_isbuildexe,00h
; mov dword ptr vfpa_buildexe_isbuildexe2,00h
; mov dword ptr vfpa_buildexe_isbuildexe3,00h
push ebp ;0x0042cf3e : 55
mov dword ptr [ebx] , eax ;0x0042cf3f : 8903
call edi ;0x0042cf41 : ffd7
cmp dword ptr [ebx] , 0FFFFFFFFh ;0x0042cf43 : 833bff
je Label43d3c1 ;0x0042cf46 : 0f8475040100
mov edi , dword ptr [ esp + 0120h ] ;0x0042cf4c : 8bbc2420010000
mov ecx , dword ptr [ esp + 011Ch ] ;0x0042cf53 : 8b8c241c010000
xor esi , esi ;0x0042cf5a : 33f6
call Fun43195e ;0x0042cf5c : e8fd490000
Label42cf61 ::
mov ecx , dword ptr [ esp + 0114h ] ;0x0042cf61 : 8b8c2414010000
pop edi ;0x0042cf68 : 5f
mov eax , esi ;0x0042cf69 : 8bc6
pop esi ;0x0042cf6b : 5e
pop ebp ;0x0042cf6c : 5d
call Fun42bf1d ;0x0042cf6d : e8abefffff
add esp , 010Ch ;0x0042cf72 : 81c40c010000
ret 08h ;0x0042cf78 : c20800
4. APPLIES TO:
VFP 6.0.8167.0
VFP 6.0.8961.0 (SP5)
VFP 7.0.0.9262
VFP 7.0.0.9465 (SP1)
VFP 8.0.0.2521
VFP 8.0.0.3117 (SP1)
VFP 9.0.0.2412
VFP 9.0.0.3504 (SP1)
VFP 9.0.0.4611 (SP2)
VFP 9.0.0.5015 (SP2)
VFP 9.0.0.5411 (SP2)
VFP 9.0.0.5721 (SP2)
VFP 9.0.0.5815 (SP2)
VFP 9.0.0.6303 (SP2)
VFP 9.0.0.6602 (SP2)
VFP 9.0.0.7423 (SP2)
The bug has been fixed in VFP Advanced.
5. REFERENCE WEBSITES:
1, baiyujia.com:
http://www.baiyujia.com
http://www.baiyujia.com/vfpdocuments/f_vfp9fix107.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix65.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix66.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix67.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix68.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix69.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix70.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix71.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix72.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix73.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix74.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix84.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix85.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix109.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix110.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix143.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix144.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix145.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix146.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix147.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix148.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix149.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix150.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix203.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix261.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix262.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix269.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix270.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix278.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix279.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix348.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix349.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix350.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix351.asp
2, microsoft.com:
https://devblogs.microsoft.com/oldnewthing/20120907-00/?p=6663
3, foxite.com:
https://www.foxite.com/archives/error-111-after-zap-0000493590.htm
https://www.foxite.com/archives/intermittent-error-111-0000406044.htm
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|