but mainly it's a windows problem - most of the drivers (all of them ? ) allow the 100mA (low power) without identification on windows. on linux systems (with the same hardware) the drivers usually allows you to draw 500mA without identification. all of the controllers have power management, and it's the job of the driver (OS specific) to setup the controller and and control the power schemes.
But the hardware controller for a 500mA capable port usually does not physically limit the current to 100mA. I have never found a single one that does that. So any device is free to ignore any and all standards for negotiation and simply draw 500mA on 500mA capable port. The "negotiation" part is simply a software thing so that the O/S can keep track of total power max consumption on a port.
For those who don't believe this, go stick a suitable resistor on your USB port you'll see.
A proper implementation doesn't limit the current to 100 mA. Nor does it limit the current to whatever value is specified in the device enumeration (which is how the device tells the host that it's a "high-power" guy). Rather, if the power-control hardware in the hub (either in the computer or external) detects an overcurrent condition, it'll shut down that port. Hopefully, the operating system will throw up a warning about exceeding current limits.
I ran into this doing a bus-powered USB audio project. The device enumeration indicated that it used all of the 500 mA available after enumeration. The device did things the right way: it used power switching to stage power bring-up. Before enumeration, all of the analog power rails were disabled so current draw was much less than the allowed 100 mA. After enumeration, the processor would enable the analog power rail and the device would be fully functional. The product has two mic preamps with available individually-switched phantom power, which the user could enable as needed.
I built up the first prototype, it all worked and passed audio. Then I switched on the phantom, and HELLO! OS X threw up a "USB device uses too much power!" warning dialog and shut off the port. But what was actually interesting is that Windows XP (this was awhile ago) on a standard Dell box
also detected the overcurrent condition and shut off the port (which is the correct response), BUT neglected to throw up the overcurrent warning. The over-current condition was logged somewhere; I don't remember how I found the log.
(The problem was that I had a largish filter cap hanging on the phantom supply; the inrush to that cap was sufficient to trip the overcurrent sensor in the hub. I removed the cap and there was no impact on noise performance and the power issue went away.)
I never did a test to see what would happen if I had the device enumerate indicating that it needed less than 100 mA and then turn on the analog rails. I should do that ...
-a