Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

411 lines
14 KiB

/****************************************************************/
/* */
/* OLE header */
/* (c) Copyright Microsoft Corp. 1990 - All Rights Reserved */
/* */
/****************************************************************/
// Object types
#define OT_LINK 1L
#define OT_EMBEDDED 2L
#define OT_STATIC 3L
// return codes for OLE functions
typedef enum {
OLE_OK, // function operated correctly
OLE_WAIT_FOR_RELEASE, // Client must wait for release. command initiated
// keep dispatching messages, till OLE_RELESE
// in callback
OLE_BUSY, // Trying to execute a method while another method
// is being executed.
OLE_ERROR_MEMORY, // Could not alloc or lock memory
OLE_ERROR_FATAL, // only DEBUG version. normally fatal error
OLE_ERROR_STREAM, // (OLESTREAM) stream error
OLE_ERROR_STATIC, // object is unexpectedly static
OLE_ERROR_BLANK, // critical data missing
OLE_ERROR_LAUNCH, // failed to launch server
OLE_ERROR_COMM, // failed to establish communication with server
OLE_ERROR_DRAW, // error or interrupt while drawing
OLE_ERROR_CLIP, // failed to get/set clip board data
OLE_ERROR_FORMAT, // requested format is not availble
OLE_ERROR_OBJECT, // Not a valid object
OLE_ERROR_OPTION, // invalid option (link update / render)
OLE_ERROR_PROTOCOL, // invalid protocol
OLE_ERROR_ADDRESS, // one of the pointers is invalid
OLE_ERROR_NOT_EQUAL, // objects are not equal
OLE_ERROR_HANDLE, // invalid handle encountered
OLE_ERROR_GENERIC,
OLE_ERROR_MAPPING_MODE, // This is temporary. Remove it when you figure
// out how to convert to MM_ANISOTROPIC
OLE_ERROR_CLASS, // Invalid class
OLE_ERROR_SYNTAX, // command syntax error
OLE_ERROR_PROTECT_ONLY, // create APIs are called from real mode
OLE_ERROR_NOT_OPEN, // object is not open for editing
OLE_ERROR_POKENATIVE, // failure of poking native data to server
OLE_ERROR_ADVISE_PICT, // failure of advise for picture data
OLE_ERROR_DATATYPE, // data format is not supported
OLE_ERROR_SERVER_BLOCKED, // trying to block a blocked server or trying
// revoke a blocked server or document
OLE_ERROR_NOT_LINK, // Not linked object
OLE_ERROR_NOT_EMPTY, // object list of the client doc is not empty
OLE_ERROR_SIZE, // incorrect size has been passed to the api.
OLE_ERROR_PALETTE, // color palette is invalid
OLE_ERROR_DRIVE,
OLE_ERROR_NETWORK,
OLE_ERROR_NAME,
// Following are warnings
OLE_WARN_DELETE_DATA = 200 // Caller should delete data, that he gets from
// OleGetData.
} OLESTATUS;
typedef enum {
OLE_PLAY, // play
OLE_EDIT // edit
} OLE_VERBS; // activate verbs
// Codes for CallBack events
typedef enum {
OLE_CHANGED,
OLE_SAVED,
OLE_CLOSED,
OLE_RENAMED,
OLE_QUERY_PAINT, // interruptible paint support
OLE_RELEASE, // object is released (asynchronous operation is
// is finished)
OLE_QUERY_RETRY, // retry query for the busy from the server.
OLE_DATA_READY // callback for OleRequestdata.
} OLE_NOTIFICATION;
typedef enum {
OLE_NONE, // no method active
OLE_DELETE, // object delete
OLE_LNKPASTE, // PasteLink (auto reconnect)
OLE_SHOW, // Show
OLE_RUN, // Run
OLE_ACTIVATE, // Activate
OLE_UPDATE, // Update
OLE_CLOSE, // Close
OLE_RECONNECT, // Reconnect
OLE_SETUPDATEOPTIONS, // setting update options
OLE_SERVERUNLAUNCH, // server is being unluanched
OLE_LOADFROMSTREAM, // LoadFromStream (auto reconnect)
OLE_CREATE, // create
OLE_CREATEFROMTEMPLATE, // CreatefromTemplate
OLE_CREATELINKFROMFILE, // CreateLinkFromFile
OLE_COPYFROMLNK, // CopyFromLink (auto reconnect)
OLE_CREATEFROMFILE, // CreateFromFile
OLE_SETDATA, // OleSetData
OLE_REQUESTDATA, // OleRequestData
OLE_OTHER // other misc async operations
} OLE_RELEASE_METHOD;
// rendering options
typedef enum { olerender_none, olerender_draw, olerender_format } OLEOPT_RENDER;
typedef WORD OLECLIPFORMAT; // standard clipboard format type
// Link update options
typedef enum { oleupdate_always,
oleupdate_onsave,
oleupdate_oncall,
#ifdef OLE_INTERNAL
oleupdate_onclose
#endif
} OLEOPT_UPDATE;
typedef HANDLE HOBJECT;
typedef LONG LHSERVER;
typedef LONG LHCLIENTDOC;
typedef LONG LHSERVERDOC;
typedef struct _OLEOBJECT * LPOLEOBJECT;
typedef struct _OLESTREAM * LPOLESTREAM;
typedef struct _OLECLIENT * LPOLECLIENT;
#ifndef OLE_INTERNAL
// object method table definitions.
typedef struct _OLEOBJECTVTBL{
LPVOID (STDCALL *QueryProtocol) (LPOLEOBJECT, LPSTR);
OLESTATUS (STDCALL *Release) (LPOLEOBJECT);
OLESTATUS (STDCALL *Show) (LPOLEOBJECT, BOOL);
OLESTATUS (STDCALL *DoVerb) (LPOLEOBJECT, WORD, BOOL, BOOL);
OLESTATUS (STDCALL *GetData) (LPOLEOBJECT, OLECLIPFORMAT, LPHANDLE);
OLESTATUS (STDCALL *SetData) (LPOLEOBJECT, OLECLIPFORMAT, HANDLE);
OLESTATUS (STDCALL *SetTargetDevice) (LPOLEOBJECT, HANDLE);
OLESTATUS (STDCALL *SetBounds) (LPOLEOBJECT, LPRECT);
OLECLIPFORMAT (STDCALL *EnumFormats) (LPOLEOBJECT, OLECLIPFORMAT);
OLESTATUS (STDCALL *SetColorScheme) (LPOLEOBJECT, LPLOGPALETTE);
// Server has to implement only the above methods.
#ifndef SERVERONLY
// Extra methods required for client.
OLESTATUS (STDCALL *Delete) (LPOLEOBJECT);
OLESTATUS (STDCALL *SetHostNames) (LPVOID, LPSTR, LPSTR);
OLESTATUS (STDCALL *SaveToStream) (LPOLEOBJECT, LPOLESTREAM);
OLESTATUS (STDCALL *Clone) (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT *);
OLESTATUS (STDCALL *CopyFromLink) (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT *);
OLESTATUS (STDCALL *Equal) (LPOLEOBJECT, LPOLEOBJECT);
OLESTATUS (STDCALL *CopyToClipboard) (LPOLEOBJECT);
OLESTATUS (STDCALL *Draw) (LPOLEOBJECT, HDC, LPRECT, HDC);
OLESTATUS (STDCALL *Activate) (LPOLEOBJECT, WORD, BOOL, BOOL, HWND, LPRECT);
OLESTATUS (STDCALL *Close) (LPOLEOBJECT);
OLESTATUS (STDCALL *Update) (LPOLEOBJECT);
OLESTATUS (STDCALL *Reconnect) (LPOLEOBJECT);
OLESTATUS (STDCALL *ObjectConvert) (LPOLEOBJECT, LPSTR, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT *);
OLESTATUS (STDCALL *GetLinkUpdateOptions) (LPOLEOBJECT, OLEOPT_UPDATE *);
OLESTATUS (STDCALL *SetLinkUpdateOptions) (LPOLEOBJECT, OLEOPT_UPDATE);
OLESTATUS (STDCALL *Rename) (LPOLEOBJECT, LPSTR);
OLESTATUS (STDCALL *QueryName) (LPOLEOBJECT, LPSTR, WORD *);
OLESTATUS (STDCALL *QueryType) (LPOLEOBJECT, LPLONG);
OLESTATUS (STDCALL *QueryBounds) (LPOLEOBJECT, LPRECT);
BOOL (STDCALL *QueryOpen) (LPOLEOBJECT);
OLESTATUS (STDCALL *QueryOutOfDate) (LPOLEOBJECT);
OLESTATUS (STDCALL *QueryReleaseStatus) (LPOLEOBJECT);
OLESTATUS (STDCALL *QueryReleaseError) (LPOLEOBJECT);
OLE_RELEASE_METHOD (STDCALL *QueryReleaseMethod)(LPOLEOBJECT);
// This method is internal only
OLESTATUS (STDCALL *RequestData) (LPVOID, OLECLIPFORMAT);
OLESTATUS (STDCALL *ChangeData) (LPVOID, HANDLE, LPOLECLIENT, BOOL);
#endif
} OLEOBJECTVTBL;
typedef OLEOBJECTVTBL *LPOLEOBJECTVTBL;
typedef struct _OLEOBJECT {
LPOLEOBJECTVTBL lpvtbl;
} OLEOBJECT;
#endif
// ole client definitions
typedef struct _OLECLIENTVTBL{
int (STDCALL *CallBack) (LPOLECLIENT, OLE_NOTIFICATION, LPOLEOBJECT);
} OLECLIENTVTBL;
typedef OLECLIENTVTBL *LPOLECLIENTVTBL;
typedef struct _OLECLIENT {
LPOLECLIENTVTBL lpvtbl;
} OLECLIENT;
// Stream definions
typedef struct _OLESTREAMVTBL{
DWORD (STDCALL *Get) (LPOLESTREAM, LPSTR, DWORD);
DWORD (STDCALL *Put) (LPOLESTREAM, LPSTR, DWORD);
LONG (STDCALL *Seek) (LPOLESTREAM, LONG);
} OLESTREAMVTBL;
typedef OLESTREAMVTBL *LPOLESTREAMVTBL;
typedef struct _OLESTREAM {
LPOLESTREAMVTBL lpstbl;
} OLESTREAM;
// Public Function Prototypes
OLESTATUS STDCALL OleDelete (LPOLEOBJECT);
OLESTATUS STDCALL OleRelease (LPOLEOBJECT);
OLESTATUS STDCALL OleSaveToStream (LPOLEOBJECT, LPOLESTREAM);
OLESTATUS STDCALL OleEqual (LPOLEOBJECT, LPOLEOBJECT );
OLESTATUS STDCALL OleCopyToClipboard (LPOLEOBJECT);
OLESTATUS STDCALL OleSetHostNames (LPOLEOBJECT, LPSTR, LPSTR);
OLESTATUS STDCALL OleSetTargetDevice (LPOLEOBJECT, HANDLE);
OLESTATUS STDCALL OleSetBounds (LPOLEOBJECT, LPRECT);
OLESTATUS STDCALL OleSetColorScheme (LPOLEOBJECT, LPLOGPALETTE);
OLESTATUS STDCALL OleQueryBounds (LPOLEOBJECT, LPRECT);
OLESTATUS STDCALL OleDraw (LPOLEOBJECT, HDC, LPRECT, HDC);
OLESTATUS STDCALL OleQueryOpen (LPOLEOBJECT);
OLESTATUS STDCALL OleActivate (LPOLEOBJECT, WORD, BOOL, BOOL, HWND, LPRECT);
OLESTATUS STDCALL OleClose (LPOLEOBJECT);
OLESTATUS STDCALL OleUpdate (LPOLEOBJECT);
OLESTATUS STDCALL OleReconnect (LPOLEOBJECT);
OLESTATUS STDCALL OleGetLinkUpdateOptions (LPOLEOBJECT, OLEOPT_UPDATE *);
OLESTATUS STDCALL OleSetLinkUpdateOptions(LPOLEOBJECT, OLEOPT_UPDATE);
LPVOID STDCALL OleQueryProtocol (LPOLEOBJECT, LPSTR);
// Routines related to asynchronous operations.
OLESTATUS STDCALL OleQueryReleaseStatus (LPOLEOBJECT);
OLESTATUS STDCALL OleQueryReleaseError (LPOLEOBJECT);
OLE_RELEASE_METHOD STDCALL OleQueryReleaseMethod (LPOLEOBJECT);
OLESTATUS STDCALL OleQueryType (LPOLEOBJECT, LPLONG);
// LOW WORD is major version, HIWORD is minor version
DWORD STDCALL OleQueryClientVersion (void);
DWORD STDCALL OleQueryServerVersion (void);
// Converting to format (as in clipboard):
OLECLIPFORMAT STDCALL OleEnumFormats (LPOLEOBJECT, OLECLIPFORMAT);
OLESTATUS STDCALL OleGetData (LPOLEOBJECT, OLECLIPFORMAT, HANDLE *);
OLESTATUS STDCALL OleSetData (LPOLEOBJECT, OLECLIPFORMAT, HANDLE );
OLESTATUS STDCALL OleQueryOutOfDate (LPOLEOBJECT);
OLESTATUS STDCALL OleRequestData (LPOLEOBJECT, OLECLIPFORMAT);
// Query apis for creation from clipboard
OLESTATUS STDCALL OleQueryLinkFromClip (LPSTR, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS STDCALL OleQueryCreateFromClip (LPSTR, OLEOPT_RENDER, OLECLIPFORMAT);
// Object creation functions
OLESTATUS STDCALL OleCreateFromClip (LPSTR, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS STDCALL OleCreateLinkFromClip (LPSTR, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS STDCALL OleCreateFromFile (LPSTR, LPOLECLIENT, LPSTR, LPSTR, LHCLIENTDOC, LPSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS STDCALL OleCreateLinkFromFile (LPSTR, LPOLECLIENT, LPSTR, LPSTR, LPSTR, LHCLIENTDOC, LPSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS STDCALL OleLoadFromStream (LPOLESTREAM, LPSTR, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT *);
OLESTATUS STDCALL OleCreate (LPSTR, LPOLECLIENT, LPSTR, LHCLIENTDOC, LPSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS STDCALL OleCreateFromTemplate (LPSTR, LPOLECLIENT, LPSTR, LHCLIENTDOC, LPSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS STDCALL OleClone (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT *);
OLESTATUS STDCALL OleCopyFromLink (LPOLEOBJECT, LPSTR, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT *);
OLESTATUS STDCALL OleObjectConvert (LPOLEOBJECT, LPSTR, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT *);
OLESTATUS STDCALL OleRename (LPOLEOBJECT, LPSTR);
OLESTATUS STDCALL OleQueryName (LPOLEOBJECT, LPSTR, WORD *);
OLESTATUS STDCALL OleRevokeObject (LPOLECLIENT);
// client document API
OLESTATUS STDCALL OleRegisterClientDoc (LPSTR, LPSTR, LONG, LHCLIENTDOC *);
OLESTATUS STDCALL OleRevokeClientDoc (LHCLIENTDOC);
OLESTATUS STDCALL OleRenameClientDoc (LHCLIENTDOC, LPSTR);
OLESTATUS STDCALL OleRevertClientDoc (LHCLIENTDOC);
OLESTATUS STDCALL OleSavedClientDoc (LHCLIENTDOC);
OLESTATUS STDCALL OleEnumObjects (LHCLIENTDOC, LPOLEOBJECT *);
// Used by Client-Server app while copying a document (containing objects) to
// the clipboard
OLESTATUS STDCALL OleMarkForCopy (LHCLIENTDOC, LPOLEOBJECT);
OLESTATUS STDCALL OleCopyCompleted (LHCLIENTDOC);
// server usage definitions
typedef enum {
OLE_SERVER_MULTI, // multiple instances
OLE_SERVER_SINGLE // single instnace (mutiple document)
} OLE_SERVER_USE;
// Server API
typedef struct _OLESERVER * LPOLESERVER;
OLESTATUS STDCALL OleRegisterServer (LPSTR, LPOLESERVER, LHSERVER *, HANDLE, OLE_SERVER_USE);
OLESTATUS STDCALL OleRevokeServer (LHSERVER);
OLESTATUS STDCALL OleBlockServer (LHSERVER);
OLESTATUS STDCALL OleUnblockServer (LHSERVER, BOOL *);
// APIs to keep server open
OLESTATUS STDCALL OleLockServer (LPOLEOBJECT, LHSERVER *);
OLESTATUS STDCALL OleUnlockServer (LHSERVER);
// Server document API
typedef struct _OLESERVERDOC * LPOLESERVERDOC;
OLESTATUS STDCALL OleRegisterServerDoc (LHSERVER, LPSTR, LPOLESERVERDOC, LHSERVERDOC *);
OLESTATUS STDCALL OleRevokeServerDoc (LHSERVERDOC);
OLESTATUS STDCALL OleRenameServerDoc (LHSERVERDOC, LPSTR);
OLESTATUS STDCALL OleRevertServerDoc (LHSERVERDOC);
OLESTATUS STDCALL OleSavedServerDoc (LHSERVERDOC);
typedef struct _OLESERVERVTBL{
OLESTATUS (STDCALL *Open) (LPOLESERVER, LHSERVERDOC, LPSTR, LPOLESERVERDOC *);
// long handle to doc (privtate to DLL)
// lp to OLESERVER
// document name
// place holder for returning oledodc.
OLESTATUS (STDCALL *Create) (LPOLESERVER, LHSERVERDOC, LPSTR, LPSTR, LPOLESERVERDOC *);
// long handle to doc (privtate to DLL)
// lp to OLESERVER
// lp class name
// lp doc name
// place holder for returning oledodc.
OLESTATUS (STDCALL *CreateFromTemplate) (LPOLESERVER, LHSERVERDOC, LPSTR, LPSTR, LPSTR, LPOLESERVERDOC *);
// long handle to doc (privtate to DLL)
// lp to OLESERVER
// lp class name
// lp doc name
// lp template name
// place holder for returning oledodc.
OLESTATUS (STDCALL *Edit) (LPOLESERVER, LHSERVERDOC, LPSTR, LPSTR, LPOLESERVERDOC *);
// long handle to doc (privtate to DLL)
// lp to OLESERVER
// lp class name
// lp doc name
// place holder for returning oledodc.
OLESTATUS (STDCALL *Exit) (LPOLESERVER);
// lp OLESERVER
OLESTATUS (STDCALL *Release) (LPOLESERVER);
// lp OLESERVER
} OLESERVERVTBL;
typedef OLESERVERVTBL *LPOLESERVERVTBL;
typedef struct _OLESERVER {
LPOLESERVERVTBL lpvtbl;
} OLESERVER;
typedef struct _OLEDOCMENTVTBL{
OLESTATUS (STDCALL *Save) (LPOLESERVERDOC);
OLESTATUS (STDCALL *Close) (LPOLESERVERDOC);
OLESTATUS (STDCALL *SetHostNames) (LPOLESERVERDOC, LPSTR, LPSTR);
OLESTATUS (STDCALL *SetDocDimensions) (LPOLESERVERDOC, LPRECT);
OLESTATUS (STDCALL *GetObject) (LPOLESERVERDOC, LPSTR, LPOLEOBJECT *, LPOLECLIENT);
OLESTATUS (STDCALL *Release) (LPOLESERVERDOC);
OLESTATUS (STDCALL *SetColorScheme) (LPOLESERVERDOC, LPLOGPALETTE);
} OLESERVERDOCVTBL;
typedef OLESERVERDOCVTBL *LPOLESERVERDOCVTBL;
typedef struct _OLESERVERDOC {
LPOLESERVERDOCVTBL lpvtbl;
} OLESERVERDOC;