This method returns the calling thread's last-error code value related to RAPI function calls.
You should call the CeGetLastError function immediately when a function's return value indicates that such a call will return useful data. That is because some functions call SetLastError(0) when they succeed, wiping out the error code set by the most recently failed function.
Most functions in the Microsoft Win32® API that set the thread's last error code value set it when they fail; a few functions set it when they succeed. Function failure is typically indicated by a return value error code such as FALSE, NULL, 0xFFFFFFFF, or –1. Some functions call SetLastError under conditions of success; those cases are noted in each function's reference page.
Error codes are 32-bit values (bit 31 is the most significant bit). Bit 29 is reserved for application-defined error codes; no system error code has this bit set. If you are defining an error code for your application, set this bit to one. That indicates that the error code has been defined by an application, and ensures that your error code does not conflict with any error codes defined by the system.
CeGetLastError is not considered thread-safe. If your application creates multiple client threads, they all make RAPI calls using the same session object. Since the last-error code value is shared globally, a failed RAPI call can overwrite the last-error code value written by a RAPI call on another thread. This means the value retrieved by CeGetLastError might not be the one you want, since it might be associated with a RAPI call on another thread.
To obtain an error string for system error codes, use the FormatMessage function. For a complete list of error codes, see Error Values or the SDK header file WINERROR.H.