94 lines
3.9 KiB
C
94 lines
3.9 KiB
C
|
/****************************** Module Header ******************************\
|
||
|
* Module Name: ddetrack.h
|
||
|
*
|
||
|
* Copyright (c) 1985 - 1999, Microsoft Corporation
|
||
|
*
|
||
|
* Stuff for dde tracking
|
||
|
*
|
||
|
* History:
|
||
|
* 9-3-91 sanfords Created
|
||
|
\***************************************************************************/
|
||
|
|
||
|
typedef struct tagDDEPACK {
|
||
|
UINT_PTR uiLo;
|
||
|
UINT_PTR uiHi;
|
||
|
} DDEPACK, *PDDEPACK;
|
||
|
|
||
|
|
||
|
#if defined(BUILD_WOW6432)
|
||
|
//
|
||
|
// This structure has the same layout as the DDEDATA when allocated by 32-bit
|
||
|
// clients running on Win64. It's used only by USER to apply correct structure-size
|
||
|
// validation.
|
||
|
//
|
||
|
typedef struct _DDEDATA_WOW6432
|
||
|
{
|
||
|
WORD wStatus;
|
||
|
WORD wFmt;
|
||
|
ULONG_PTR Data;
|
||
|
} DDEDATA_WOW6432, *PDDEDATA_WOW6432;
|
||
|
#endif
|
||
|
|
||
|
// Packing set to 1 on 64 bits to prevent compiler from generating extra
|
||
|
// packing for DDE_DATA that will later corrupt data when we attempt to cast
|
||
|
// a pointer to a DDEDATA structure as a DDE_DATA pointer. DDEDATA is not
|
||
|
// packed and uses __unaligned directive to assign pointer values to Value
|
||
|
// field. To make sure those pointer values are extracted properly, DDE_DATA
|
||
|
// must be packed to 1.
|
||
|
|
||
|
#if defined(_WIN64) || defined(BUILD_WOW6432)
|
||
|
#pragma pack(1)
|
||
|
#endif
|
||
|
typedef struct tagDDE_DATA { // useful for sanely manipulating DDE data
|
||
|
WORD wStatus;
|
||
|
WORD wFmt;
|
||
|
KERNEL_PVOID Data; // often cast to a HANDLE so has to scale 32 and 64 bits.
|
||
|
} DDE_DATA, *PDDE_DATA;
|
||
|
#if defined(_WIN64) || defined(BUILD_WOW6432)
|
||
|
#pragma pack()
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// This structure heads the single server side object used to hold DDE Data.
|
||
|
// Its complexity derives from the fact that we may need to copy huge and
|
||
|
// complex DDE data across the CSR barrier. (TYPE_DDEDATA object)
|
||
|
//
|
||
|
typedef struct tagINTDDEINFO {
|
||
|
DDEPACK DdePack; // original dde pack struct
|
||
|
DWORD flags; // XS_ flags describing the data
|
||
|
HANDLE hDirect; // handle to direct DDE data
|
||
|
PBYTE pDirect; // pointer to source buffer for direct data
|
||
|
int cbDirect; // size of direct data total
|
||
|
HANDLE hIndirect; // handle referenced by direct data
|
||
|
PBYTE pIndirect; // pointer to source of indirect data - if being copied
|
||
|
int cbIndirect; // amount of indirect data total
|
||
|
// Directly following this struct is the
|
||
|
// raw DDE data being copied between processes
|
||
|
} INTDDEINFO, *PINTDDEINFO;
|
||
|
|
||
|
// values for flags fields
|
||
|
|
||
|
#define XS_PACKED 0x0001 // this transaction has a packed lParam
|
||
|
#define XS_DATA 0x0002 // this transaction has data w/status-format info.
|
||
|
#define XS_METAFILEPICT 0x0004 // the data in this transaction has a METAFILEPICT
|
||
|
#define XS_BITMAP 0x0008 // the data in this transaction has a HBITMAP
|
||
|
#define XS_DIB 0x0010 // the data in this transaction has a DIB
|
||
|
#define XS_ENHMETAFILE 0x0020 // the data in this transaction has a HMF
|
||
|
#define XS_PALETTE 0x0040 // the data in this transaction has a HPALETTE
|
||
|
#define XS_LOHANDLE 0x0080 // the uiLo part has the data handle
|
||
|
#define XS_HIHANDLE 0x0100 // the uiHi part has the data handle
|
||
|
#define XS_FREEPXS 0x0200 // DDETrackGetMessageHook() should free pxs.
|
||
|
#define XS_FRELEASE 0x0400 // DDE_FRELEASE bit was set in the data msg.
|
||
|
#define XS_EXECUTE 0x0800 // execute data handle
|
||
|
#define XS_FREESRC 0x1000 // free source after copy.
|
||
|
#define XS_PUBLICOBJ 0x2000 // object being shared is public - cleanup if needed.
|
||
|
#define XS_GIVEBACKONNACK 0x4000 // object was given and may need to be returned.
|
||
|
#define XS_DUMPMSG 0x8000 // used for backing out PostMessages.
|
||
|
#define XS_UNICODE 0x10000 // execute string is expected to be UNICODE
|
||
|
|
||
|
#define FAIL_POST 0 // return values from DDETrackPostHook()
|
||
|
#define FAKE_POST 1
|
||
|
#define DO_POST 2
|
||
|
#define FAILNOFREE_POST 3
|
||
|
|