I thought I had this problem solved. I took the suggestion of someone to setup the general controls in MAME then set the default.cfg to READ ONLY. Also, setting special controls per game when needed and setting those to READ ONLY. That seemed to work, but Windows will still randomly change my arcade stick designations. I don't unplug any of the USB controllers btw.
I have a custom built arcade box with 3 sticks, multiple buttons, a tracball and spinner. I also have a gun, racing wheel and gamepad seperate from the arcade box. Everything is connected to a usb hub with power buttons for each (the arcade controller with all the sticks and buttons is all in one. Inside the box, all devices are connected to a usb hub, then that hub is connected to the powered hub). I only power on the controller that I need. So, if I'm in mame, the whole arcade controller with all sticks and buttons is powered on. I don't think Windows changes things after every reboot, but it does eventually change the designations. I set it up in Mame, then Windows eventually changes joystick 1 to Joystcik 2, etc. and I have to reconfigure in mame all over again. Is there anything that I might have missed? I read that there's a MAME function using the command prompt, but this seems very complicated and I have a LOT of controllers. Is there a better way?