Sunday, April 4, 2010

The MarkC Windows 10 + 8.1 + 8 + 7 + Vista + XP Mouse Acceleration Fix Builder

The 'MarkC Windows 10 + 8.1 + 8 + 7 + Vista + XP Mouse Acceleration Fix Builder' is available for download from this link:
MarkC_Windows_10+8.x+7+Vista+XP_MouseFix_Builder_2.5.zip @ google drive

What is it?

It is a VBS script program that creates a registry .REG file that removes Windows' mouse acceleration, or emulates Windows 2000 or Windows 98/95 acceleration.

Fix Builder can build .REG files for Windows 10 or 8.1 or 8 or 7 or Vista or XP.

The registry fix created works like the CPL and Cheese and MarkC fixes, but is customized for your specific desktop display text size (DPI), your specific mouse pointer speed slider setting, your specific refresh rate and has any in-game pointer scaling/sensitivity factor you want (see note).

Fix Builder can create a fix that emulates Windows 2000 or Windows 98/95 acceleration.

For older games that turn acceleration on, it gives the same response as position 6/11 does (1-to-1), without having to move the pointer speed slider to 6/11.
(Yeah, I know : "Whoop-de-do...")

Exactly 1-to-1 means no discarded or delayed mouse input while game playing.

Other Registry fixes need the pointer speed slider set to 6/11 (middle) to get exactly 1-to-1 in-game mouse to pointer response, but this script can create a registry fix that gives exact 1-to-1 in-game response for non-6/11 settings.

Other registry fixes only provide files for some pre-defined display DPI values: 100%, 125%..., but this script can create a fix for any DPI setting.

The Cheese registry fixes only provides files for some pre-defined monitor refresh rate values: 60Hz, 70Hz, but this script can create a fix for any refresh rate setting.

Fix Builder can create a fix with any in-game mouse-to-pointer scaling factor you want (see note).

NOTE: ALL registry based mouse fixes, INCLUDING this one, ONLY work when the
Control Panel > Mouse > 'Enhance pointer precision' option is ON (OR when an older game forces 'Enhance pointer precision' to ON), AND your game does not use DirectInput and does not use Raw Input for mouse input.

Eh? What is it again?

A mostly pointless sledgehammer solution to the problem of having to change your Control Panel > Mouse > pointer speed slider to 6/11 before you play an older game that needs a registry fix so you can avoid at most a single pixel of discarded or delayed mouse input while game playing...

A way to emulate Windows 2000 or Windows 98/95 acceleration.

An interesting programming exercise!

How do you use it?

  • In Windows Explorer, double-click MarkC_Windows_10+8+7+Vista+XP_MouseFix_Builder.vbs,
    or double-click MarkC_Windows_10+8+7+Vista+XP_MouseFix_Builder.CMD.

  • Verify or edit the suggested settings, clicking OK as you go.

  • Add/Merge the created fix to the registry.
    (See below for non-Administrator account use.)

  • Reboot or Log off to apply the fix (you have to reboot or Log off).

  • If you don't use the mouse pointer speed slider set to 6/11, and you do want exact 1-to-1 in-game, then configure your game so that it enables control panel 'Enhance pointer precision'.
    If you want Windows 2000+98+95 acceleration in-game, then configure your game so that it enables control panel 'Enhance pointer precision'.
    (For example, in Counter-Strike: Source and other Source games, do use -useforcedmparms and don't use -noforcemspd. In Half-Life, CounterStrike 1.6, don't use -noforcemspd or -noforcemparms.)

  • Enjoy exactly 1-to-1 mouse to pointer response for your custom desktop settings!
    (Or enjoy Windows 2000-like or Windows 98/95-like acceleration!)
    (If you applied one of the Windows 2000 or Windows 98/95 Acceleration fixes, then 'Enhance pointer precision' must be checked ON to enable it.)

Why do you need a fix?

Some older games turn Windows mouse acceleration on when you don't want them to. See here for more details.

You prefer the mouse acceleration that Windows 2000 or Windows 98/95 had.

How does the fix work?

The current system is queried, and you can change the values and tune the registry fix file created.
The result is saved to a file and can optionally be imported into the registry.

The script asks for:

  • Operating system that the fix will be used for.
  • The desktop Control Panel, Display, text size (DPI) that will be used.
  • The in-game monitor refresh rate that will be used (XP and Vista only).
  • The Control Panel, Mouse, pointer speed slider position that will be used.
  • Windows-2000+98+95-style acceleration thresholds (optional).
  • The pointer speed scaling (sensitivity) factor for that pointer speed setting.
  • Where you want to save the fix to and what name.

It creates a registry .reg file with the settings entered, and optionally lets you merge / apply it into the registry.

How do you know the fix is working?

You can test if it is working by temporarily turning on the 'Enhance pointer precision' feature and see how the mouse responds.
(NOTE: Unless you applied one of the Windows 2000 or Windows 98/95 Acceleration fixes, only turn 'Enhance pointer precision' on for testing: it should normally be set OFF.)

If you have 'Enhance pointer precision' OFF, then the fix will not be active (but it will be waiting to be activated when needed).
Just as some games turn it on when you don't want them to, we can turn it on manually to test that the fix is working properly.

  • Go to Control Panel, and select Hardware and Sound, then click Mouse. Select 'Pointer options' and check-ON/enable the 'Enhance pointer precision' option.

  • See how the mouse responds.

  • If you want, you can run the MouseMovementRecorder.exe program that is included in the ZIP file to see that the mouse and pointer movements are 1-to-1 and always the same (or are whatever custom scaling you entered).
    (The numbers in the MOUSE MOVEMENT column should be the same as the numbers in the POINTER MOVEMENT column. Any differences will appear in green or red.
    If you do see differences, also test with 'Enhance pointer precision' OFF, in case the problem is with Windows or MouseMovementRecorder.exe rather than a problem with the fix:
    - Press the A key on the keyboard while MouseMovementRecorder is running until EnPtPr Accel is Off.
    - When EnPtPr Accel is OFF, if there is a lot of red and green, press the '+' key on the keyboard and move the mouse.
    - Repeat '+' and move the mouse until most of the red and green disappears.
    - Press the A key on the keyboard to toggle EnPtPr Accel and move the mouse.
    - If the amount of red and green is roughly the same when EnPtPr Accel is ON as when EnPtPr Accel is Off, then the fix is working.)

    (NOTE: If you use Windows 10, & scaling of items is not 100%, see below.)
    (NOTE: If you use Windows 8.1 and have too much green and red, see below.)
    (NOTE: While running a game, you may see many red and green lines.
    Games that need a fix usually frequently re-position the pointer and this confuses MouseMovementRecorder.exe but DOES NOT mean acceleration.

    See http://www.esreality.com/?a=post&id=1846538#pid1927879 - scroll to 'Comment #271'.)

  • If you have built a Windows 2000 or Windows 9X fix, you should see that acceleration varies depending upon how fast the mouse is, compared to the thresholds, but is linear (a constant sensitivity) between thresholds.
    (NOTE: See file !Threshold_Acceleration_ReadMe.txt in the ZIP file for more info.)

  • Turn the 'Enhance pointer precision' option OFF when you have finished testing.
    (If you applied one of the Windows 2000 or Windows 98/95 Acceleration fixes, then leave 'Enhance pointer precision' checked ON to enable it.)

How do you know the fix is giving exact 1-to-1 when playing your game?

If you don't use the mouse pointer speed slider set to 6/11, and you do want exact 1-to-1 in-game, then you must configure your game so that it enables control panel 'Enhance pointer precision'.

You can test your game to see if it turns 'Enhance pointer precision' ON, and gets exact 1-to-1.

  • Turn the 'Enhance pointer precision' option OFF,
  • Run Mouse Movement Recorder (included in the ZIP file),
  • Run your game (aim at something!) and look at the 'EnPtPr' column footer at the bottom of the Mouse Movement Recorder window.
    If it is displayed with a red background then the game has turned acceleration ON and will have exact 1-to-1.

How do you remove it?

  • Open the ZIP file at the link above.
  • If you use Windows 7 or Vista or XP:
    Select 'Windows_7+Vista+XP_Default.reg' and Double-click it.
  • If you use Windows 8 or Windows 8.1 or Windows 10:
    Select 'Windows_10+8.x_Default.reg' and Double-click it.
  • Answer Yes, OK to the prompts that appear.
  • Reboot or Log off.

I use Windows 10 and scaling of text, apps and other items is not 100%

In later versions of Windows 10, Microsoft changed how the mouse pointer is moved in response to mouse input, when scaling of text, apps and other items is not 100%, and Enhance pointer precision is OFF.

Mouse pointer movements when Enhance pointer precision is OFF, are now scaled according to the per-monitor scaling of items setting.

When Enhance pointer precision is OFF, and the Control Panel pointer speed slider is set to 6/11, MouseMovementRecorder will not show all-black, exact 1-to-1, but instead Pointer Movement will be multiplied by the same scaling factor applied to text, apps and other items.

Games may also see this difference, or not, depending on their "DPI Awareness".

I use Windows 8.1 and see too much green and/or red in MouseMovementRecorder

Windows 8.1 introduced changes to mouse input processing to reduce power used and improve battery life:
Windows 8.1 delays and coalesces (merges) mouse input for programs, causing the effective mouse polling rate to be as low as 62 Hz in some cases (even for gaming mice with a higher polling rate).

This new processing can affect some games (games that don't use Raw Input and don't use DirectInput). Microsoft have a December 2013 Windows Update Rollup that includes a fix for those games, which will be automatically installed when you have Windows Update set to install updates automatically.
(See here: KB2908279 Mouse pointer stutters or freezes when you play certain games in Windows 8.1.)

The new processing can also affect MouseMovementRecorder and cause it to show red and green (with the mouse delays, MouseMovementRecorder sees a mouse movement from DirectInput, but doesn't see the pointer move until MUCH MUCH later and can't figure out what's going on and displays red and green).

If the KB2908279 update fix is installed, MouseMovementRecorder will activate it
to give more responsive mouse pointer movement and stop the red and green.

Otherwise, while running MouseMovementRecorder, select it and press the '+' key
on the keyboard a until the red and green stops.

If Control Panel, Appearance and Personalization, Display shows a 'Smaller...Larger' slider, high DPI monitors might need a custom size and/or a fix-builder fix to get exact 1-to-1.
See this blog article:
Windows 8.1 DPI Scaling Enhancements @ Extreme Windows Blog
The new multi-monitor DPI scaling in Windows 8.1 is a good thing if you have multiple monitors with different pixels-per-inch values, BUT it might make it harder to find the correct Item Size percentage when choosing which MarkC fix to use to get exact 1-to-1.
Try clicking the 'Let me choose one scaling level for all my displays' checkbox and then find the percentage needed so that your main (gaming) monitor looks the same as it did when using the 'Smaller...Larger' slider (this may require some reboots).
When you have the right percentage value, click '...one scaling level...' OFF (so that you get the benefit of the new Multi-monitor DPI scaling - if you need it) and use the percentage value to choose which fix you need, or to create a Fix-Builder fix.

Loading the fix with a non-administrator account

When adding the mouse acceleration fix to the registry, you may get one of these error messages:

"Cannot import (filename).reg: Not all data was successfully written to the registry."

"Part of the mouse acceleration fix can't be applied, because you are not logged in as an Administrator."

This error happens because part of the fix turns off acceleration for the Welcome screen (the log on screen).
If you use the Welcome screen (or the Windows Log in dialog) and acceleration is NOT turned off for the Welcome screen, then the MarkC fixes have a 1 pixel /1 mouse count error when the mouse changes direction left/right or up/down.

You can remove this 1 mouse count error by any of these methods:

  • Run Disable_WelcomeScreen+Login_Accel.CMD as Administrator (Right-click > Run as administrator).
  • Run MarkC_Windows_10+8+7+Vista+XP_MouseFix_Builder.CMD as Administrator.
  • Add/Merge Disable_WelcomeScreen+Login_Accel.reg to the registry while logged in as an administrator.
  • Run RegEdit.exe and edit 'HKEY_USERS\.DEFAULT\Control Panel\Mouse\MouseSpeed' to 0 (zero), while logged in as an administrator.
  • Not moving or touching the mouse while using the Welcome screen (use arrow keys to select the user and Enter key to log in).
  • Ignoring the 1 mouse count error! It's only a single count: You won't notice it.

219 comments:

«Oldest   ‹Older   201 – 219 of 219
Mariusz Niziałek said...

Hi, how can i install your fix without registry file? (i want manually install)

plus, what mouse SmoothMouseY and X should be set to gain 1-1? Everything to 00 00 00?

Mark Cranness said...

Hi Mariusz,

You could do some or all of these things:

- Open up the REG file with notepad and look at it to see what registry settings it changes.
To do that, open notepad, click File, Open, change the "Text Documents (*.txt)" above the Open button to "All Files (*.*)" and then navigate to the REG file and open it.

- You could use regedit to see what values you currently have for those registry settings.

- You could use regedit to make a backup of your Mouse settings, in case you need to undo changes.
In regedit, navigate to Computer, HKEY_CURRENT_USER, Control Panel, Mouse, right-click "Mouse" and click Export

- You could use regedit to manually change the registry to be the same as the settings you see in notepad, but this is dangerous unless you are careful!
Be careful when editing the SmoothMouse~Curve values! Backspace key and Delete key delete delete bytes, and typing hex digits inserts bytes.
You have to make sure there are only 5 rows of numbers, and the last index on the left is 0028 with NO 6th line of numbers after that, and that each of the 5 lines has all 8 2-digit numbers.
(Sorry, I fixed the line counts.)

The very best thing you can do is realise that changing the settings yourself is identical to having the REG file change the settings for you.
Using the REG file means no typing or keying mistakes.

Baja Boys said...

Hey Mark! Your google drive link has 404'd. I have just installed windows 10 and would love to use your fix on it. Thank you!

Mark Cranness said...

Hi Baja Boys,

Re > Your google drive link has 404'd

Yes, I've received a bogus DMCA takedown.
On the main "The MarkC Windows 10 + 8.1 + 8 + 7 Mouse Acceleration Fix" page, there is a mirror link just below the main link that should still work.

Anonymous said...

Hi,

the download link doesn´t work.

Mark Cranness said...

> the download link doesn´t work.

Yeah, some confused people sent Google a DMCA takedown notice, which I've challenged.

In the meantime, use the mirror link on the MarkC Mouse Acceleration Fix page, and the fix builder is another ZIP file inside the main ZIP file.

Vuk Vukicevic said...

I get mixed green and red bars when dragging a mouse down and left. If i go right or up it's fine, all black. This is with Enhance Pointer Precision off. When it's on it shows mostly green lines, with just a little bit of reds, here and there.
Win 10
1920x1080
125%
Logitech G203 Prodigy

Nuno said...

Greetings Mark. Is there a way to have the exact same feeling of CPL mousefix of Windows XP on windows 10? If yes, what should i do?

Thank you in advance!

Philip C. said...

Hey Marc, I'm a little confused on your instructions to disable acceleration and have 1-to-1 in-game when the pointer speed isn't set to 6/11.

1) Enter the operating system that the fix will be used for
- Could I just type in Windows 10?

2) Enter the pointer speed scaling factor that you want when the pointer speed slider is set to the 8/11 (What I have it at) position.
- What does this mean?

3) Select the folder where the registry mouse acceleration fix will be saved
- Does this mean where the regedit file will be stored?

Mark Cranness said...

> Could I just type in Windows 10?

Yes, you can just type in Windows 10.
If you are running the fix builder on Windows 10, it should automatically choose "Windows 10+8" for you. The fixes for Windows 10 and Windows 8 and Windows 8.1 are all the same, so you can leave it at "Windows 10+8".

> Enter the pointer speed scaling factor that you want when the pointer speed slider is set to the 8/11

"Pointer speed scaling factor" = Windows sensitivity, but as an actual ratio, rather than as "8/11".

When Enhance pointer precision (EPP) is OFF, the pointer speed scaling factor for 8/11 is × 2.0
That means that every 1 mouse count causes 2 pixels of pointer movement, so 10 mouse counts would cause 20 pixels of pointer movement.

When Enhance pointer precision (EPP) is ON, the pointer speed scaling factor for 8/11 is × 1.4
That means that every 1 mouse count causes 1.4 pixels of pointer movement (but rounded), so 10 mouse counts would cause 14 pixels of pointer movement.

I would enter it as 2.0, to be consistent with EPP = OFF.
(NOTE: that with it set to 2.0, you will see green in MouseMovementRecorder when EPP is ON, but that's OK when scaling factor is set to 2.)

Usually it is recommended to set 1.0, so that you get exact 1-to-1, but exact 2-to-1 is as good, because there is no fractional part to the scaling factor.

If you set 1.0, then in effect your 8/11 will be undone and forced to 6/11, and 6/11 is exactly 1-to-1, but is different from the 8/11 you are used to.
If you set 1.0, then in games that keep EPP OFF, you would be using 8/11 still (× 2.0), but in games that set EPP ON, which enables my fix, you would effectively be using 6/11 (× 1.0), because that's what you told the fix builder to do. The difference in sensitivity may be annoying.

> Does this mean where the regedit file will be stored?

Yes.
The regedit file will be stored in that folder, and you will also be asked if you want to apply the regedit file right away.

Mark Cranness said...

> Is there a way to have the exact same feeling of CPL mousefix of Windows XP on windows 10? If yes, what should i do?

Yes.
On Windows XP, the sensitivity of CPL can be calculated with a formula:

CPL_Sensitivity = 4.24 × Monitor_Refresh_Rate / Font_Size_DPI / 3.5

If you had a 60Hz monitor, and used the standard "Normal" sized text, then CPL_Sensitivity = × 0.757

If your Windows XP monitor (in-game) was not 60Hz, then put in the number you used.

Best is to then use a normal 1-to-1 MarkC fix, or use Raw Input if your game supports it, and adjust your in-game sensitivity down by × 0.75

Or you could build a fix and set the "pointer speed scaling (sensitivity) factor" to 0.75, but I wouldn't.

Mark Cranness said...

> I get mixed green and red bars when dragging a mouse down and left.

That is strange!

Philip C. said...

Hey Mark, it's me again, I noticed some issues and would like to address it.

- When playing Fortnite, the mouse stutters insanely post-registry tweak, I don't know if it's because of the registry tweak though.

- When applying the tweak, would resetting windows explorer work?

- I've been told there is no reason to do this tweak in Windows 10, what are your thoughts?

- If I wanted to convert from 8/11 with 550 DPI to 6/11, what would the equivalent DPI be?

Mark Cranness said...

> I get mixed green and red bars when dragging a mouse down and left.

Strange, but now explained below, and I have a sort-of fix for that.

In later versions of Windows 10 (Version 1709 and later?), Microsoft changed how the mouse pointer is moved in response to mouse input, when scaling of text, apps and other items is not 100%, and Enhance pointer precision is OFF.

Mouse pointer movements when Enhance pointer precision is OFF, are now scaled according to the per-monitor scaling of items setting.

When Enhance pointer precision is OFF, and the Control Panel pointer speed slider is set to 6/11, MouseMovementRecorder will NOW (as of the latest version) not show all-black, exact 1-to-1, but instead Pointer Movement will be multiplied by the same scaling factor applied to text, apps and other items. (It will display much red.)

The old version of MouseMovementRecorder behaved different than above. The old version of MouseMovementRecorder was not "Per monitor DPI aware", and because of this, if you changed your monitor DPI in Windows 10 Version 1709, Windows sent fake, adjusted pointer position numbers to MouseMovementRecorder.
Those adjusted pointer positions were the actual pointer positions, but adjusted down by a DPI adjustment, and rounding errors caused single pixel differences in some directions.
(Strangely, if you press 'A' key while MouseMovementRecorder has focus, move a little, then press 'A' again to turn EPP=OFF, the direction that didn't have rounding errors can change.)
(You can toggle between the old MouseMovementRecorder and new MouseMovementRecorder DPI behaviour by pressing the 'D' key.)

This rounding wobble, just as it affected the old MouseMovementRecorder, might also affect old games that use the pointer position to decode mouse movement.

Mark Cranness said...

> When playing Fortnite, the mouse stutters insanely post-registry tweak, I don't know if it's because of the registry tweak though.

The fix only makes the mouse response the same as EPP=OFF, so can't cause any stutter.

> When applying the tweak, would resetting windows explorer work?

No, unfortunately, Windows only reads the new SmoothMouse settings when you signon, which means you have to signout or restart.

> I've been told there is no reason to do this tweak in Windows 10, what are your thoughts?

Whether you need the fix or not is entirely up to the game, and does not depend on which version of Windows you have.
Any game that sets EPP=ON, and can't be told to not do that (-noforcemspd for example), and can't be set to use Raw Input will need the fix.

> If I wanted to convert from 8/11 with 550 DPI to 6/11, what would the equivalent DPI be?

With EPP=Off, 8/11 is × 2, so = 6/11 and 1100 DPI.

(With EPP=ON, and WITHOUT a fix applied (normal Windows), 8/11 is × 1.4, so is approximately similar to 6/11 and 770 DPI, approximately, because the mouse DPI applies BEFORE the EPP=On acceleration is applied, whereas the 6/11, 8/11 is applied AFTER the EPP=On acceleration is applied.)

Rogério said...

First of all, hello to everybody!

Second thing, hey Mark i just want to thank you for all your help to the community for free!

Third, please help me man! hehehehe

I've used to play CS 1.6 for a long time, and those are were my settings:

CS 1.6
Windows: 6/11 - Default
Enhance pointer precision: OFF
With CPL MOUSE FIX
Launch Options: -noforcemparms -noforcemaccel -freq 100
Monitor Refresh Rate: 100hz (OLD CRT MONITORS)
Mouse Rate: 500hz (with HIDUSBF)
Sensitivity in game: 3.6
Mouse: Intellimouse Explorer 3.0
Res: 640x480

With this configuration i've had a great experience playing cs 1.6, absolutely perfect control.

So, recently i've started to play CS:GO, and i just love the game, but it seens to be unplayable how it is.

I've tryied a lot of things, to set up like the CS 1.6 but i've fail, and i just can't get the same mouse movement feeling, even on the desktop!!! Loosing all the control of the crosshair.

Is there anything that you would recommend me to try to set the mouse feeling like the settings i've used to play on CS 1.6?

Anyway, just want to thank you already. Regards!

By the way, those are my settings right now:

Mouse: Zowie EC1-A with 500hz
Monitor: Benq XL2411 playing on 144hz
Still using the same sensitivity in game: 3.6

Mark said...

I know this doesn't make much sense, but I am 100% certain that the builder settings can (if you pick certain options) cause a BSOD crash on Windows 10 (fall creators update) when you move your mouse! I know that sounds crazy given that this just edits the acceleration curve, but I was getting crashes on boot after moving the mouse every single time. I had to boot without a mouse connected and run the "Windows_10+8.x_Default" reg file then reboot to stop this from happening, even safe mode with a mouse connected was crashing, both with a bluetooth mouse and USB mouse.

These are the settings that caused the BSOD:

Windows Registry Editor Version 5.00
; Windows_10+8.x_MouseFix_Scale=W2K_Medium_x1_x2@4+_x4@12+_ItemsSize=125%_@7-of-11

[HKEY_CURRENT_USER\Control Panel\Mouse]

"MouseSensitivity"="12"
"SmoothMouseXCurve"=hex:\
00,60,01,00,00,00,00,00,\
00,A0,03,00,00,00,00,00,\
00,00,00,00,00,00,00,00,\
02,00,00,09,00,00,00,00,\
00,00,00,00,92,24,00,00
"SmoothMouseYCurve"=hex:\
57,05,08,00,00,00,00,00,\
59,25,15,00,00,00,00,00,\
00,00,00,00,00,00,00,00,\
98,11,00,69,00,00,00,00,\
56,D5,00,00,00,00,00,00

[HKEY_USERS\.DEFAULT\Control Panel\Mouse]

"MouseSpeed"="0"
"MouseThreshold1"="0"
"MouseThreshold2"="0"

Mark Cranness said...

> I am 100% certain that the builder settings can (if you pick certain options) cause a BSOD crash on Windows 10 (fall creators update) when you move your mouse!

Unfortunately, what you found is true: Any MarkC fix that has 2 acceleration thresholds (including the W2K_Medium, and W2K_High), will crash Windows 10 x64 as soon as you move the mouse.
I just tested, and confirmed.
When it crashes, it created a MEMORY.DMP file (noted in the event viewer) and when that memory dump is analysed, it shows exactly the byte of code that crashes, and I can see why it will crash.

So please be advised: Do not use or create mouse fixes with 2 thresholds for use in Windows 10 x64.

I will shortly update the ZIP files to add a severe warning and semi-hide the REG files.

Neither Windows 7 x64, nor Windows 8.1 x64, have the same problem: they don't crash.

Too much detail!:

Windows 7 has this code (at same point that Windows 10 crashes):
.text:FFFFF97FFF17A044 dec esi
.text:FFFFF97FFF17A046 movsxd rcx, esi
.text:FFFFF97FFF17A049 mov rax, [rdi+rcx*8+0F8h]
Windows 8.1 has this code:
.text:FFFFF97FFF13429B dec ebx
.text:FFFFF97FFF13429D movsxd rcx, ebx
.text:FFFFF97FFF1342A0 mov rax, [rdi+rcx*8+120h]

For my 2 threshold mouse fixes, a very clever and naughty thing is happening: I am making Windows index into an array of SmoothMouse values with array index = -1.
The array index in Windows 7 is in the esi register and is sign extended into rcx.
The "movsxd" is move with sign extend, so it handles the -1 correctly.
rcx*8 is -8, and the clever array access works.
The last line above retrieves a SmoothMouse value with the -1 index.

On Windows 10, there is no sign extension, likely as a C++ compiler optimisation, because the C++ compiler has decided that a negative array index is illegal and not possible.
Windows 10 has:
.text:00000001C007D8D6 dec ebx
.text:00000001C007D8D8 mov r11, [rsp+78h+var_28]
.text:00000001C007D8DD mov rax, [r10+rbx*8] ; Crash here!

The array index in Windows 10 is in the ebx register and is not sign extended into rbx.
-1 in 32 bits, in ebx is 0xFFFFFFFF, but without sign extension, rbx is 0x00000000FFFFFFFF, and rbx*8 is 0x00000007FFFFFFF8 (approx. 3.4×10^10), and r10+rbx*8 is an invalid memory address, causing the crash.

Mariusz Niziałek said...

Hi again,

What would happen if i apply W7 fix for W10? SInce W10 mouse movement is so slow and hard to even feel it after many years of W10 (feeling, quick-scope, flick-shot or bhopping), will copying W7 fix on W10 make it work like using W7 fix on W7? This w10 is delayed and slow which is unplayable even the xp movement would be nice (if deleted acc somehow)

«Oldest ‹Older   201 – 219 of 219   Newer› Newest»