-------------------------------------------------------------------------------- [NEW.....] VFP 9.0 FIX - THE VFPLMDMODE TERM IN THE CONFIGURATION FILE November 2024 -------------------------------------------------------------------------------- CCB 1. THE VFPLMDMODE TERM: VFPLMDMODE - Specifies the copy memory mode for Visual FoxPro Large Memory Driver (VFPLMD) Specifies the copy memory mode for Visual FoxPro Large Memory Driver (VFPLMD). VFPLMDMODE = nValue Parameters nValue The nValue parameter specifies the copy memory mode for Visual FoxPro Large Memory Driver (VFPLMD). The range for nValue is 0 to 14. The default value is 0 for Visual FoxPro Advanced 10.0 and 10.1. The default value is 14 for Visual FoxPro Advanced 10.2 or later. 0 The DeviceIoControl mode, VFP Advanced will call the DeviceIoControl Windows API for Visual FoxPro Large Memory Driver (VFPLMD). 1 The Read-Byte and Write-Byte mode, VFP Advanced will read a byte and write a byte for Visual FoxPro Large Memory Driver (VFPLMD). 2 The Repeat-Move-Byte mode, VFP Advanced will run the rep movsb command for Visual FoxPro Large Memory Driver (VFPLMD). 3 The Read-Dword and Write-Dword mode, VFP Advanced will read a dword and write a dword for Visual FoxPro Large Memory Driver (VFPLMD). 4 The Repeat-Move-Dword mode, VFP Advanced will run the rep movsd command for Visual FoxPro Large Memory Driver (VFPLMD). 5 The Read-Qword and Write-Qword mode, VFP Advanced will read a qword and write a qword for Visual FoxPro Large Memory Driver (VFPLMD). 6 The Repeat-Move-Qword mode, VFP Advanced will run the rep movsq command for Visual FoxPro Large Memory Driver (VFPLMD). 7 The memcpy mode, VFP Advanced will call the memcpy function for Visual FoxPro Large Memory Driver (VFPLMD). 8 The Read-Byte and Write-Byte (align data on 8-byte boundaries) mode, VFP Advanced will read a byte and write a byte for Visual FoxPro Large Memory Driver (VFPLMD). 9 The Repeat-Move-Byte (align data on 8-byte boundaries) mode, VFP Advanced will run the rep movsb command for Visual FoxPro Large Memory Driver (VFPLMD). 10 The Read-Dword and Write-Dword (align data on 8-byte boundaries) mode, VFP Advanced will read a dword and write a dword for Visual FoxPro Large Memory Driver (VFPLMD). 11 The Repeat-Move-Dword (align data on 8-byte boundaries) mode, VFP Advanced will run the rep movsd command for Visual FoxPro Large Memory Driver (VFPLMD). 12 The Read-Qword and Write-Qword (align data on 8-byte boundaries) mode, VFP Advanced will read a qword and write a qword for Visual FoxPro Large Memory Driver (VFPLMD). 13 The Repeat-Move-Qword (align data on 8-byte boundaries) mode, VFP Advanced will run the rep movsq command for Visual FoxPro Large Memory Driver (VFPLMD). 14 The memcpy (align data on 8-byte boundaries) mode, VFP Advanced will call the memcpy function for Visual FoxPro Large Memory Driver (VFPLMD). Remarks We ALWAYS set VFPLMDMODE = 0 in Visual FoxPro Advanced 10.0 and 10.1. 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Fun40a45d :: ; proc near push ebp ;0x0040a45d : 55 lea ebp , dword ptr [ esp - 104 ] ;0x0040a45e : 8d6c2498 sub esp , 0454h ;0x0040a462 : 81ec54040000 mov eax , dword ptr [ Data937090 ] ;0x0040a468 : a190709300 mov ecx , dword ptr [ ebp + 112 ] ;0x0040a46d : 8b4d70 push ebx ;0x0040a470 : 53 push esi ;0x0040a471 : 56 mov esi , dword ptr [ ebp + 116 ] ;0x0040a472 : 8b7574 mov dword ptr [ ebp + 100 ] , eax ;0x0040a475 : 894564 lea eax , dword ptr [ esi + 0642h ] ;0x0040a478 : 8d8642060000 mov dword ptr [ ebp + 0FFFFFD04h ] , eax ;0x0040a47e : 898504fdffff push edi ;0x0040a484 : 57 lea eax , dword ptr [ esi + 0A5Ch ] ;0x0040a485 : 8d865c0a0000 mov dword ptr [ ebp + 0FFFFFD24h ] , eax ;0x0040a48b : 898524fdffff xor ebx , ebx ;0x0040a491 : 33db xor eax , eax ;0x0040a493 : 33c0 inc eax ;0x0040a495 : 40 push ebx ;0x0040a496 : 53 push eax ;0x0040a497 : 50 mov dword ptr [ ebp + 0FFFFFD10h ] , eax ;0x0040a498 : 898510fdffff push ebx ;0x0040a49e : 53 lea eax , dword ptr [ ebp + 0FFFFFF38h ] ;0x0040a49f : 8d8538ffffff push eax ;0x0040a4a5 : 50 mov dword ptr [ ebp + 0FFFFFD28h ] , ebx ;0x0040a4a6 : 899d28fdffff mov dword ptr [ ebp + 0FFFFFF58h ] , ecx ;0x0040a4ac : 898d58ffffff call Fun430428 ;0x0040a4b2 : e8715f0200 cmp eax , 04h ;0x0040a4b7 : 83f804 jne Label40a660 ;0x0040a4ba : 0f85a0010000 lea ecx , dword ptr [ ebp + 0FFFFFF60h ] ;0x0040a4c0 : 8d8d60ffffff mov edx , 0100h ;0x0040a4c6 : ba00010000 lea eax , dword ptr [ ebp + 0FFFFFE38h ] ;0x0040a4cb : 8d8538feffff call Fun42c33e ;0x0040a4d1 : e8681e0200 cmp byte ptr [ ebp + 0FFFFFF60h ] , 05Fh ;0x0040a4d6 : 80bd60ffffff5f jne Label40a540 ;0x0040a4dd : 7561 lea edi , dword ptr [ ebp + 0FFFFFF60h ] ;0x0040a4df : 8dbd60ffffff call Fun43099a ;0x0040a4e5 : e8b0640200 mov edi , eax ;0x0040a4ea : 8bf8 lea eax , dword ptr [ edi - 36 ] ;0x0040a4ec : 8d47dc cmp eax , 034h ;0x0040a4ef : 83f834 ja Label40a540 ;0x0040a4f2 : 774c movzx eax ,byte ptr [ eax + offset Data4134f1 ] ;0x0040a4f4 : 0fb680f1344100 jmp dword ptr [ 4 * eax + offset DataPtr4134e9 ] ;0x0040a4fb : ff2485e9344100 Label40a502 :: cmp dword ptr [ ebp + 120 ] , ebx ;0x0040a502 : 395d78 jne Label5d60f1 ;0x0040a505 : 0f85e6bb1c00 Label40a50b :: xor eax , eax ;0x0040a50b : 33c0 lea ecx , dword ptr [ ebp + 0FFFFFF38h ] ;0x0040a50d : 8d8d38ffffff call Fun43d764 ;0x0040a513 : e84c320300 lea eax , dword ptr [ ebp + 0FFFFFF60h ] ;0x0040a518 : 8d8560ffffff push eax ;0x0040a51e : 50 mov eax , edi ;0x0040a51f : 8bc7 call Fun409f9c ;0x0040a521 : e876faffff mov eax , edi ;0x0040a526 : 8bc7 sub eax , 04Dh ;0x0040a528 : 83e84d je Label5d613c ;0x0040a52b : 0f840bbc1c00 dec eax ;0x0040a531 : 48 je Label5d611c ;0x0040a532 : 0f84e4bb1c00 Label40a538 :: xor eax , eax ;0x0040a538 : 33c0 inc eax ;0x0040a53a : 40 jmp Label40a666 ;0x0040a53b : e926010000 Label40a540 :: cmp dword ptr [ ebp + 0FFFFFF3Ch ] , 06D1h ;0x0040a540 : 81bd3cffffffd1060000 je Label5d615c ;0x0040a54a : 0f840cbc1c00 lea eax , dword ptr [ ebp + 0FFFFFF40h ] ;0x0040a550 : 8d8540ffffff lea ecx , dword ptr [ ebp + 0FFFFFF60h ] ;0x0040a556 : 8d8d60ffffff call Fun415309 ;0x0040a55c : e8a8ad0000 cmp eax , 07h ;0x0040a561 : 83f807 mov dword ptr [ ebp + 0FFFFFD18h ] , eax ;0x0040a564 : 898518fdffff je Label40a5e2 ;0x0040a56a : 7476 cmp eax , 067h ;0x0040a56c : 83f867 je Label40a5e2 ;0x0040a56f : 7471 cmp eax , 030h ;0x0040a571 : 83f830 je Label5d61b3 ;0x0040a574 : 0f8439bc1c00 mov edi , strncmp ;0x0040a57a : 8b3dcc799100 pushd 04h ;0x0040a580 : 6a04 lea eax , dword ptr [ ebp + 0FFFFFE38h ] ;0x0040a582 : 8d8538feffff pushd offset Data9191dc ;0x0040a588 : 68dc919100 push eax ;0x0040a58d : 50 call edi ;0x0040a58e : ffd7 add esp , 0Ch ;0x0040a590 : 83c40c test eax , eax ;0x0040a593 : 85c0 je Label5d61fb ;0x0040a595 : 0f8460bc1c00 pushd 05h ;0x0040a59b : 6a05 lea eax , dword ptr [ ebp + 0FFFFFE38h ] ;0x0040a59d : 8d8538feffff pushd offset Data91cc84 ;0x0040a5a3 : 6884cc9100 push eax ;0x0040a5a8 : 50 call edi ;0x0040a5a9 : ffd7 add esp , 0Ch ;0x0040a5ab : 83c40c test eax , eax ;0x0040a5ae : 85c0 je Label5d61fb ;0x0040a5b0 : 0f8445bc1c00 Label40a5b6 :: cmp dword ptr [ ebp + 120 ] , ebx ;0x0040a5b6 : 395d78 je Label40a5e2 ;0x0040a5b9 : 7427 ; ; --------------------------------------------------------------------- ; VFP 9.0 FIX - THE VFPLMDMODE TERM IN THE CONFIGURATION FILE ; November 2024 ; --------------------------------------------------------------------- ; CCB ; ; The VFPLMDMODE term in the configuration file. ; ; 2024/11/13, by ccb ; lea ecx , dword ptr [ ebp + 0FFFFFF60h ] vfpa_config_vfplmdmode_start: cmp byte ptr [ecx] , 056h ;; V jne vfpa_config_vfplmdmode_end cmp byte ptr [ecx+1] , 046h ;; F jne vfpa_config_vfplmdmode_end cmp byte ptr [ecx+2] , 050h ;; P jne vfpa_config_vfplmdmode_end cmp byte ptr [ecx+3] , 04Ch ;; L jne vfpa_config_vfplmdmode_end cmp byte ptr [ecx+4] , 04Dh ;; M jne vfpa_config_vfplmdmode_end cmp byte ptr [ecx+5] , 044h ;; D jne vfpa_config_vfplmdmode_end cmp byte ptr [ecx+6] , 04Dh ;; M jne vfpa_config_vfplmdmode_end cmp byte ptr [ecx+7] , 04Fh ;; O jne vfpa_config_vfplmdmode_end cmp byte ptr [ecx+8] , 044h ;; D jne vfpa_config_vfplmdmode_end cmp byte ptr [ecx+9] , 045h ;; E jne vfpa_config_vfplmdmode_end cmp byte ptr [ecx+10] , 000h jne vfpa_config_vfplmdmode_end xor edi , edi inc edi push ebx push edi push ebx lea eax , dword ptr [ ebp + 0FFFFFF38h ] push eax call Fun430428 cmp eax , edi jne Label5d6256 cmp dword ptr [ ebp + 0FFFFFF3Ch ] , 010h jne Label5d6256 push ebx push edi push ebx lea eax , dword ptr [ ebp + 0FFFFFF38h ] push eax call Fun430428 cmp eax , 05h jne Label5d6256 mov eax , dword ptr [ Data937fdc ] pushd 0Eh pushd 00h lea esi , dword ptr [ ebp + 0FFFFFF38h ] mov dword ptr [ ebp + 0FFFFFF58h ] , eax mov byte ptr [ ebp + 0FFFFFF38h ] , 07h call Fun87e084 cmp eax , 0FFFFFFFFh je Label5d6256 mov dword ptr vfpa_sys9087_data,eax mov dword ptr vfpa_sys99009076_data,eax vfpa_config_vfplmdmode_end1: IFDEF RAX IF VFPA_VERSION GE 102 ELSE mov dword ptr vfpa_sys9087_data,00h mov dword ptr vfpa_sys99009076_data,00h ENDIF ELSE IF VFPA_VERSION GE 102 ELSE mov dword ptr vfpa_sys9087_data,00h mov dword ptr vfpa_sys99009076_data,00h ENDIF ENDIF vfpa_config_vfplmdmode_end2: mov eax,dword ptr vfpa_sys9087_data mov dword ptr vfpa_config_vfplmdmode_data,eax jmp Label40a660 vfpa_config_vfplmdmode_end: push ebx ;0x0040a5bb : 53 xor edi , edi ;0x0040a5bc : 33ff inc edi ;0x0040a5be : 47 push edi ;0x0040a5bf : 57 push ebx ;0x0040a5c0 : 53 lea eax , dword ptr [ ebp + 0FFFFFF38h ] ;0x0040a5c1 : 8d8538ffffff push eax ;0x0040a5c7 : 50 call Fun430428 ;0x0040a5c8 : e85b5e0200 cmp eax , edi ;0x0040a5cd : 3bc7 jne Label5d6256 ;0x0040a5cf : 0f8581bc1c00 cmp dword ptr [ ebp + 0FFFFFF3Ch ] , 010h ;0x0040a5d5 : 83bd3cffffff10 jne Label5d6256 ;0x0040a5dc : 0f8574bc1c00 Label40a5e2 :: mov eax , dword ptr [ ebp + 0FFFFFD18h ] ;0x0040a5e2 : 8b8518fdffff cmp eax , 0F6h ;0x0040a5e8 : 3df6000000 ja Label5d6273 ;0x0040a5ed : 0f8780bc1c00 movzx eax ,byte ptr [ eax + offset Data413716 ] ;0x0040a5f3 : 0fb68016374100 jmp dword ptr [ 4 * eax + offset DataPtr413526 ] ;0x0040a5fa : ff248526354100 Label40a601 :: lea edx , dword ptr [ ebp + 0FFFFFD00h ] ;0x0040a601 : 8d9500fdffff lea eax , dword ptr [ ebp + 0FFFFFC68h ] ;0x0040a607 : 8d8568fcffff call Fun42c27f ;0x0040a60d : e86d1c0200 push ebx ;0x0040a612 : 53 push eax ;0x0040a613 : 50 call Fun42c2be ;0x0040a614 : e8a51c0200 cmp eax , ebx ;0x0040a619 : 3bc3 pop ecx ;0x0040a61b : 59 pop ecx ;0x0040a61c : 59 jne Label40a64e ;0x0040a61d : 752f lea eax , dword ptr [ ebp + 0FFFFFD1Ch ] ;0x0040a61f : 8d851cfdffff push eax ;0x0040a625 : 50 lea eax , dword ptr [ ebp + 0FFFFFF38h ] ;0x0040a626 : 8d8538ffffff call Fun40a75a ;0x0040a62c : e829010000 test eax , eax ;0x0040a631 : 85c0 je Label40a64e ;0x0040a633 : 7419 lea eax , dword ptr [ ebp + 0FFFFFD1Ch ] ;0x0040a635 : 8d851cfdffff xor ecx , ecx ;0x0040a63b : 33c9 push eax ;0x0040a63d : 50 inc ecx ;0x0040a63e : 41 call Fun4157c8 ;0x0040a63f : e884b10000 mov eax , dword ptr [ ebp + 116 ] ;0x0040a644 : 8b4574 or dword ptr [ eax + 0A78h ] , 01h ;0x0040a647 : 8388780a000001 Label40a64e :: lea eax , dword ptr [ ebp + 0FFFFFD00h ] ;0x0040a64e : 8d8500fdffff push eax ;0x0040a654 : 50 lea eax , dword ptr [ ebp + 0FFFFFC68h ] ;0x0040a655 : 8d8568fcffff Label40a65b :: call Fun42d200 ;0x0040a65b : e8a02b0200 Label40a660 :: mov eax , dword ptr [ ebp + 0FFFFFD10h ] ;0x0040a660 : 8b8510fdffff Label40a666 :: mov ecx , dword ptr [ ebp + 100 ] ;0x0040a666 : 8b4d64 call Fun42bf1d ;0x0040a669 : e8af180200 pop edi ;0x0040a66e : 5f pop esi ;0x0040a66f : 5e pop ebx ;0x0040a670 : 5b add ebp , 068h ;0x0040a671 : 83c568 leave ;0x0040a674 : c9 ret 010h ;0x0040a675 : c21000 4. APPLIES TO: VFP 10 (VFP Advanced) 5. REFERENCE WEBSITES: 1, baiyujia.com: http://www.baiyujia.com http://www.baiyujia.com/vfpdocuments/f_vfpconfigterms.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix113.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix114.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix282.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix283.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix284.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix285.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix286.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix288.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix294.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix295.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix296.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix297.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix302.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix358.asp 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |