---------------------------------------------------------------------------------
                      VFP 9.0 FIX - THE NUMBER OF TIMES TO TRY AGAIN AFTER DELETE FILE FAILED
                                  March 2019
                 ---------------------------------------------------------------------------------
                                     CCB



1. BUG:

     In vfp9 (and vfp6, vfp7, vfp8), somtimes the DELETE FILE (or ERASE) command runs failed on Windows Vista or later.


2. CAUSE:

     There are some compatible problems when the DELETE FILE (or ERASE) command calls the DeleteFileA Windows API
     for the Windows Defender program or the antivirus programs.
     Now if the DELETE FILE (or ERASE) command calls the DeleteFileA Windows API failed,
     it will call the DeleteFileA Windows API many times again.

     There are some BUGs in the following code.


3. RESOLUTION:

     We can write some code to fix the BUG.

     Fun546c56 :: ; proc near


     ;
     ;                 ---------------------------------------------------------------------------------
     ;                      VFP 9.0 FIX - THE NUMBER OF TIMES TO TRY AGAIN AFTER DELETE FILE FAILED
     ;                                  March 2019
     ;                 ---------------------------------------------------------------------------------
     ;                                     CCB
     ;
     ; The number of times to try again after delete file failed.
     ;
     ; 2019/3/4, by ccb
     ;

     ;         push edi                                                        ;0x00546c56 :        57
     ;         call  DeleteFileA                                 ;0x00546c57 :        ff1584709100

             mov dword ptr vfpa_deletefile_deletefile_cnt,00h

     Label546c57 ::
             push edi
             call  DeleteFileA
             test eax , eax
             jne Label546c5d
             cmp dword ptr [ esp + 00 ] , offset Label51da7a ;; Fun51d979 :: ; proc near
             jne Label546c5d
             cmp dword ptr [ esp + 00 + (4+4CCh) ] , offset Label51d968 ;; Fun51d90e :: ; proc near
             jne Label546c5d
             mov ecx,dword ptr vfpa_sys9015_data
             inc dword ptr vfpa_deletefile_deletefile_cnt
             cmp dword ptr vfpa_deletefile_deletefile_cnt,ecx
             ja Label546c5d
             pushd 032h
             call  Sleep
             jmp Label546c57


     Label546c5d ::
             test eax , eax                                                  ;0x00546c5d :        85c0
             je Label5471bd                                                  ;0x00546c5f :        0f8458050000
             xor eax , eax                                                   ;0x00546c65 :        33c0
             ret                                                             ;0x00546c67 :        c3


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_vfp9fix69.asp

     2, microsoft.com:
     https://blogs.msdn.microsoft.com/oldnewthing/20120907-00/?p=6663


6. OTHER:

     For reference only, there is no guarantees.

     Any questions or suggestions, please send me an email at ccb2000@163.com.