mDoneEvents is a std::vector<HANDLE> and I use
HANDLE event = CreateEvent(NULL, TRUE, FALSE, "Done");mDoneEvents.push_back(event);
When I use FALSE for bwaitAll the return code is 0 and it will block correctly until a mDoneEvent is set, expected behaviour.
I should also say I would run this through the debugger to check but it's part of a plugin for 3ds max and that excludes the use of the debugger.
Checked the vector, its got 4 proper HANDLE's all different that work fine with WaitForSingleObject, SetEvent, ResetEvent etc so Iam assuming the HANDLE's are valid and havnt been corrupted.
Thanks for you suggestions, reading the MSDN page for the Nth time very carefully :)