mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
7.1 KiB
222 lines
7.1 KiB
/****************************Module*Header******************************\
|
|
* Module Name: ICMPRIV.H
|
|
*
|
|
* Module Descripton: Internal data structures and constants for ICM
|
|
*
|
|
* Warnings:
|
|
*
|
|
* Issues:
|
|
*
|
|
* Created: 8 January 1996
|
|
* Author: Srinivasan Chandrasekar [srinivac]
|
|
*
|
|
* Copyright (c) 1996, 1997 Microsoft Corporation
|
|
\***********************************************************************/
|
|
|
|
#ifndef _ICMPRIV_H_
|
|
#define _ICMPRIV_H_
|
|
|
|
#include "icm.h" // include external stuff first
|
|
|
|
#define LITTLE_ENDIAN 1 // Hmmm. Shouldn't this be part of the makefile
|
|
|
|
typedef struct tagTAGDATA {
|
|
TAGTYPE tagType;
|
|
DWORD dwOffset;
|
|
DWORD cbSize;
|
|
} TAGDATA;
|
|
typedef TAGDATA *PTAGDATA;
|
|
|
|
/*
|
|
* ICM supports the following objects:
|
|
* 1. Profile object: This is created when an application requsts a handle
|
|
* to a profile.
|
|
* 2. Color transform object: This is created when an application creates
|
|
* a color transform.
|
|
* 3. CMM object: This is created when ICM loads a CMM into memory to
|
|
* perform color matching.
|
|
*/
|
|
typedef enum {
|
|
OBJ_PROFILE = 'PRFL',
|
|
OBJ_TRANSFORM = 'XFRM',
|
|
OBJ_CMM = ' CMM',
|
|
} OBJECTTYPE;
|
|
|
|
typedef struct tagOBJHEAD {
|
|
OBJECTTYPE objType;
|
|
DWORD dwUseCount;
|
|
} OBJHEAD;
|
|
typedef OBJHEAD *POBJHEAD;
|
|
|
|
/*
|
|
* Profile object:
|
|
* Memory for profile objects is allocated from ICM's per process heap.
|
|
* These objects use handles from ICM's per process handle table.
|
|
*/
|
|
typedef struct tagPROFOBJ {
|
|
OBJHEAD objHdr; // common object header info
|
|
DWORD dwType; // type (from profile structure)
|
|
PVOID pProfileData; // data (from profile structure)
|
|
DWORD cbDataSize; // size of data (from profile structure)
|
|
DWORD dwFlags; // miscellaneous flags
|
|
HANDLE hFile; // handle to open profile
|
|
HANDLE hMap; // handle to profile mapping
|
|
DWORD dwMapSize; // size of the file mapping object
|
|
PBYTE pView; // pointer to mapped view of profile
|
|
} PROFOBJ;
|
|
typedef PROFOBJ *PPROFOBJ;
|
|
|
|
/*
|
|
* Flags for ((PPROFOBJ)0)->dwFlags
|
|
*/
|
|
#define MEMORY_MAPPED 1 // memory mapped profile
|
|
#define PROFILE_TEMP 2 // temporary profile has been created
|
|
|
|
/*
|
|
* Transform returned by CMM
|
|
*/
|
|
typedef HANDLE HCMTRANSFORM;
|
|
|
|
/*
|
|
* CMM function calltable
|
|
*/
|
|
typedef struct tagCMMFNS {
|
|
//
|
|
// Required functions
|
|
//
|
|
DWORD (WINAPI *pCMGetInfo)(DWORD);
|
|
HCMTRANSFORM (WINAPI *pCMCreateTransform)(PCOLORSPACE, PVOID, PVOID);
|
|
BOOL (WINAPI *pCMDeleteTransform)(HCMTRANSFORM);
|
|
BOOL (WINAPI *pCMTranslateRGBs)(HCMTRANSFORM, PVOID, BMFORMAT,
|
|
DWORD, DWORD, DWORD, PVOID, BMFORMAT, DWORD);
|
|
BOOL (WINAPI *pCMCheckRGBs)(HCMTRANSFORM, PVOID, BMFORMAT,
|
|
DWORD, DWORD, DWORD, PBYTE);
|
|
HCMTRANSFORM (WINAPI *pCMCreateMultiProfileTransform)(PVOID, DWORD);
|
|
BOOL (WINAPI *pCMTranslateColors)(HCMTRANSFORM, PCOLOR, DWORD,
|
|
COLORTYPE, PCOLOR, COLORTYPE);
|
|
BOOL (WINAPI *pCMCheckColors)(HCMTRANSFORM, PCOLOR, DWORD,
|
|
COLORTYPE, PBYTE);
|
|
//
|
|
// Optional functions
|
|
//
|
|
BOOL (WINAPI *pCMCreateProfile)(PCOLORSPACE, PTSTR);
|
|
BOOL (WINAPI *pCMCreateDeviceLinkProfile)(PVOID, DWORD, PTSTR);
|
|
BOOL (WINAPI *pCMIsProfileValid)(PVOID);
|
|
BOOL (WINAPI *pCMGetPS2ColorSpaceArray)(PVOID, PVOID, PDWORD, PBOOL);
|
|
BOOL (WINAPI *pCMGetPS2ColorRenderingIntent)(PVOID, PVOID, PDWORD, PBOOL);
|
|
BOOL (WINAPI *pCMGetPS2ColorRenderingDictionary)(PVOID, DWORD,
|
|
PVOID, PDWORD, PBOOL);
|
|
} CMMFNS;
|
|
typedef CMMFNS *PCMMFNS;
|
|
|
|
/*
|
|
* CMM object:
|
|
* Memory for CMM objects is allocated from ICM's per process heap.
|
|
* They are maintained in a linked list.
|
|
*/
|
|
typedef struct tagCMMOBJ {
|
|
OBJHEAD objHdr;
|
|
DWORD dwFlags; // miscellaneous flags
|
|
DWORD dwCMMID; // ICC identifier
|
|
DWORD dwTaskID; // process ID of current task
|
|
HINSTANCE hCMM; // handle to instance of CMM dll
|
|
CMMFNS fns; // function calltable
|
|
struct tagCMMOBJ* pNext; // pointer to next object
|
|
} CMMOBJ;
|
|
typedef CMMOBJ *PCMMOBJ;
|
|
|
|
/*
|
|
* dwFlags for CMMOBJ
|
|
*/
|
|
#define CMM_DONT_USE_PS2_FNS 0x00001
|
|
|
|
/*
|
|
* Color transform object
|
|
*/
|
|
typedef struct tagTRANSFORMOBJ {
|
|
OBJHEAD objHdr;
|
|
PCMMOBJ pCMMObj; // pointer to CMM object
|
|
HCMTRANSFORM hcmxform; // transform returned by CMM
|
|
} TRANSFORMOBJ;
|
|
typedef TRANSFORMOBJ *PTRANSFORMOBJ;
|
|
|
|
/*
|
|
* Parameter to InternalHandleColorProfile
|
|
*/
|
|
typedef enum {
|
|
ADDPROFILES,
|
|
REMOVEPROFILES,
|
|
ENUMPROFILES,
|
|
} PROFILEOP;
|
|
|
|
/*
|
|
* CMM returned transform should be larger than this value
|
|
*/
|
|
#define TRANSFORM_ERROR (HTRANSFORM)255
|
|
|
|
/*
|
|
* Parameter for callback function that translates from Unicode to ANSI
|
|
*/
|
|
typedef struct tagCALLBACKDATA {
|
|
PPROFILECALLBACK pCallbackFunc;
|
|
PVOID pClientData;
|
|
} CALLBACKDATA;
|
|
typedef CALLBACKDATA *PCALLBACKDATA;
|
|
|
|
|
|
/*
|
|
* Useful macros
|
|
*/
|
|
#define PROFILE_SIGNATURE 'psca'
|
|
#define ABS(x) ((x) > 0 ? (x) : -(x))
|
|
#define DWORD_ALIGN(x) (((x) + 3) & ~3)
|
|
|
|
#ifdef LITTLE_ENDIAN
|
|
#define FIX_ENDIAN(x) (((x) & 0xff000000) >> 24 | \
|
|
((x) & 0xff0000) >> 8 | \
|
|
((x) & 0xff00) << 8 | \
|
|
((x) & 0xff) << 24 )
|
|
#else
|
|
#define FIX_ENDIAN(x) (x)
|
|
#endif
|
|
|
|
#define HEADER(pProfObj) ((PPROFILEHEADER)pProfObj->pView)
|
|
#define VIEW(pProfObj) (pProfObj->pView)
|
|
#define PROFILE_SIZE(pProfObj) (FIX_ENDIAN(HEADER(pProfObj)->phSize))
|
|
#define TAG_COUNT(pProfObj) (*((DWORD *)(VIEW(pProfObj) + \
|
|
sizeof(PROFILEHEADER))))
|
|
#define TAG_DATA(pProfObj) ((PTAGDATA)(VIEW(pProfObj) + \
|
|
sizeof(PROFILEHEADER) + sizeof(DWORD)))
|
|
|
|
#define VALIDPROFILE(pProfObj) \
|
|
((FIX_ENDIAN(HEADER(pProfObj)->phSize) <= pProfObj->dwMapSize) && \
|
|
(HEADER(pProfObj)->phSignature == PROFILE_SIGNATURE))
|
|
|
|
#define MAGIC 'ICM '
|
|
#define PTRTOHDL(x) ((HANDLE)((DWORD)(x) ^ MAGIC))
|
|
#define HDLTOPTR(x) ((DWORD)(x) ^ MAGIC)
|
|
|
|
/*
|
|
* External functional declarations
|
|
*/
|
|
PVOID MemAlloc(DWORD);
|
|
PVOID MemReAlloc(PVOID, DWORD);
|
|
VOID MemFree(PVOID);
|
|
PVOID AllocateHeapObject(OBJECTTYPE);
|
|
VOID FreeHeapObject(HANDLE);
|
|
BOOL ValidHandle(HANDLE, OBJECTTYPE);
|
|
PCMMOBJ GetColorMatchingModule(DWORD);
|
|
PCMMOBJ GetPreferredCMM();
|
|
VOID ReleaseColorMatchingModule(PCMMOBJ);
|
|
BOOL InternalGetPS2ColorSpaceArray(HPROFILE, PVOID, PDWORD, PBOOL);
|
|
BOOL InternalGetPS2ColorRenderingIntent(HPROFILE, PVOID, PDWORD, PBOOL);
|
|
BOOL InternalGetPS2ColorRenderingDictionary(HPROFILE, DWORD, PVOID, PDWORD, PBOOL);
|
|
|
|
// Temporary
|
|
#define CMM_WINDOWS_DEFAULT 'KCMS'
|
|
#define ERROR_NO_FUNCTION 10
|
|
#define ERROR_INVALID_PROFILE 11
|
|
#define ERROR_TAG_NOT_FOUND 12
|
|
|
|
#endif // ifndef _ICMPRIV_H_
|
|
|