Is UINT_MAX really supposed to fail? Otherwise you need an errno check. Either way, some more test cases would be a good idea.
For the given test for 4GB: on 32-bit, strtoulW returns 32-bit ULONG_MAX and sets errno to ERANGE on 64-bit, strtoulW returns 0x100000000 and does not set errno
since the return is DWORD, I chose UINT_MAX since it's the same for both 32 and 64-bit and shortened the check to just "value >= UINT_MAX"
will add more tests, though
thanks daniel