I recently noticed a discrepancy between the online documentation for the WcsOpenColorProfile and OpenColorProfile APIs and their declarations in the icm. h header file (and the icm.h version is correct). The Windows Vista SDK online documentation at http://windowssdk.msdn.microsoft.com/en-us/library/ms536878.aspx has it as:
HPROFILE WINAPI WcsOpenColorProfile( __in PPROFILE pDMPProfile, __in_opt PPROFILE pCAMPProfile, __in_opt PPROFILE pGMMPProfile, __in DWORD dwDesiredAccess, __in DWORD dwShareMode, __in DWORD dwCreationMode);
And says concerning the pDMPProfile parameter:
"If the profile is ICC and its dwType member is set to DONT_USE_EMBEDDED_WCS_PROFILES, WcsOpenColorProfile ignores any embedded WCS profile within the ICC profile."
This is incorrect. There is actually an additional parameter in the WcsOpenColorProfile interface, dwFlags, and DONT_USE_EMBEDDED_WCS_PROFILES may be set in dwFlags, rather than in the dwType member of the PROFILE data structure. Here's the correct WcsOpenColorProfile interface:
HPROFILE WINAPI WcsOpenColorProfile( __in PPROFILE pDMPProfile, __in_opt PPROFILE pCAMPProfile, __in_opt PPROFILE pGMMPProfile, __in DWORD dwDesiredAccess, __in DWORD dwShareMode, __in DWORD dwCreationMode, __in DWORD dwFlags);
The interface for OpenColorProfile is correct in the online docs at http://windowssdk.msdn.microsoft.com/en-us/library/ms536835.aspx as:
HPROFILE WINAPI OpenColorProfile( PPROFILE pProfile, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationMode);
However, there is a similar incorrect comment in the description of the pProfile parameter:
"If the dwType member within the Profile structure takes the value DONT_USE_EMBEDDED_WCS_PROFILES, and the Profile is of type ICC, this function ignores any embedded WCS profile within the ICC profile."
The dwType member of the PROFILE data structure cannot be used in this way, and since OpenColorProfile was a pre-WCS/pre-Vista ICM 2.0 API (which precluded our adding an additional parameter to its interface) there is no way to prevent the use of WCS profiles embedded in ICC profiles opened via OpenColorProfile. If such control is necessary, you should use WcsOpenColorProfile.
These errors have already been corrected in more recent versions of the SDK documentation that have not yet been posted to MSDN.