I'm not really sure if this should go in the software forum or this one, but since I think it's more applicable here.
Years ago when I first added rudimentary support for FF in mamehooker the only FF device I had was a xbox controller (not 360, regular old xbox) running in windows with XBCD drivers. I was disappointed to find that I couldn't control the motors independently of each other. I'm not a driver writer, maybe they had a good reason for doing it the way they did, but instead of having each rumble motor as a separate FF axis, they merged the two. Not only that, but they ignore the direction variable, so what could normally be solved via just setting the direction more left or more right doesn't work.
Anyway now that mamehooker has all kinds of fancy FF functions and I know a bit more about it, here is what I discovered.
From testing absolutely nothing allows you to control each motor individually, except for the ramp effect and even then only if used in a way that absolutely nobody uses the ramp effect. You have to set the time to infinite (which completely defeats the purpose, as it'll stop "ramping up" pretty quickly and just top out) and set both the start and end values of the ramp to the same value. In other words don't ramp the ramp effect.

A positive set of values (1 to 10000) control the right (soft) motor and a negative set of values (-1 to -10000) control the left. If you want to control both motors at the same time, load a two layered effect file with two ramps... use -10000 as a multiplier on one and 10000 on the other.
Yes it's THAT convoluted to control them. So convoluted that in a future mamehooker version I'll probably write a custom function just for those. That being said, if you have a specific purpose and want a cheap interface they do fit the bill. Classic xbox controllers can be had new for as little as 6 dollars, less if you buy them used.
I'll eventually write a tutorial for mamehooker but in the mean time I might release a sample effect file and tweak file here.
I know that this isn't interesting to most people, but if you've ever played with the XBCD drivers (yes even the ones for 360 controllers) you've likely be confused with the results and I thought I would share.
*edit... some errors corrected*