Surprise! My success is your failure
Windows APIs often use HRESULTs. Almost every function returns an HRESULT and almost every caller is expected to check it. COM provides a few helpers for these tasks: SUCCEEDED()/FAILED() broadly check for success or for failure; HRESULT_FROM_WIN32() constructures a failure code from a Win32 error code; etc.
There is also a naming convension. Success codes are named FACILITY_S_REASON. Failures are FACILITY_E_REASON. But look out! There lurk amoung the multitude of errors, some that disguise success as failure!
BOOL fContinue = SUCCEEDED(p->TestCancel())
to see if the call is pending.
I did this and discovered in testing that RPC_S_CALLPENDING is defined as a failure code: 0x80010115L. So fCountinue is always FALSE in the code above. It looks like RPC_S_WAITONTIMER is also this way.
So much for naming convensions.