orpc.idl
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:12k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* orpc.idl - DCOM wire protocol */
  2. /* Copyright (c) 2000, Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01e,10oct01,dbs  add AddKnownInterface() method to IOrpcClientChannel
  7. 01d,07aug01,dbs  add private SCM and OX interfaces
  8. 01c,25jul01,dbs  add private proxy/stub interface definitions
  9. 01b,06jul00,dbs  make OBJREF a cpp_quote
  10. 01a,18feb00,dbs  created
  11. */
  12. cpp_quote("/* Copyright (c) 2000 Wind River Systems, Inc. */")
  13. import "vxidl.idl";
  14. [
  15.     uuid(99fcfe60-5260-101b-bbcb-00aa0021347a),
  16.     pointer_default(unique)
  17. ]
  18. interface ORPCTypes
  19.     {
  20.     /*
  21.      * Identifier Definitions
  22.      */
  23.     typedef hyper ID;
  24.     typedef ID      MID;        // Machine Identifier
  25.     typedef ID      OXID;       // Object Exporter Identifier
  26.     typedef ID      OID;        // Object Identifer
  27.     typedef ID      SETID;      // Ping Set Identifier
  28.     typedef GUID    IPID;       // Interface Pointer Identifier
  29.     typedef GUID    CID;        // Causality Identifier
  30.     /*
  31.      * ORPC Call Packet Format
  32.      */
  33.     // COM_MINOR_VERSION = 1   (NT4.0, SP1, SP2, DCOM95).
  34.     //      - Initial Release
  35.     //      - Must be used when talking to downlevel machines, including
  36.     //        on Remote Activation calls.
  37.     // COM_MINOR_VERSION = 2   (NT4.0 SP3 and beyond).
  38.     //      - Added ResolveOxid2 to IObjectExporter to retrieve the
  39.     //        COM version number of the server. Passed to the NDR engine
  40.     //        to fix fatal endian-ness flaw in the way OLEAUTOMATION marshals
  41.     //        BSTRS. Previous way used trailing padding, which is not NDR
  42.     //        compatible. See Bug# 69189.
  43.     // COM_MINOR_VERSION = 3   (NT4.0 SP4 and DCOM95 builds 1018 and beyond)
  44.     //      - OLEAUT32 added two new types to the SAFEARRAY, but SAFEARRAY
  45.     //        previously included the "default" keyword, which prevented
  46.     //        downlevel NDR engines from correctly handling any extensions.
  47.     //        Machines with version >=5.3 don't use "default" and will
  48.     //        gracefully handle future extensions to SAFEARRAY.
  49.     typedef enum tagCOM_VERSION_LEVEL
  50. {
  51. COM_MINOR_VERSION_1 = 1,
  52. COM_MINOR_VERSION_2 = 2,
  53. COM_MINOR_VERSION = 3,
  54. COM_MAJOR_VERSION = 5
  55. } COM_VERSION_LEVEL;
  56.     // Component Object Model version number
  57.     typedef struct tagCOMVERSION
  58. {
  59.         unsigned short MajorVersion;    // Major version number
  60.         unsigned short MinorVersion;    // Minor version number
  61. } COMVERSION;
  62.     // enumeration of additional information present in the call packet.
  63.     // Should be an enum but DCE IDL does not support sparse enumerators.
  64.     typedef enum tagORPC_FLAGS
  65. {
  66. ORPCF_NULL      = 0, // no additional info in packet
  67. ORPCF_LOCAL     = 1, // call is local to this machine
  68. ORPCF_RESERVED1 = 2, // reserved for local use
  69. ORPCF_RESERVED2 = 4, // reserved for local use
  70. ORPCF_RESERVED3 = 8, // reserved for local use
  71. ORPCF_RESERVED4 = 16 // reserved for local use
  72. } ORPC_FLAGS;
  73.     // Extension to implicit parameters.
  74.     typedef struct tagORPC_EXTENT
  75. {
  76.         GUID                    id; // Extension identifier.
  77.         unsigned long           size; // Extension size.
  78.         [size_is(size)] byte data[]; // Extension data (round up to 8 bytes)
  79. } ORPC_EXTENT;
  80.     // Array of extensions.
  81.     // NB:- extent-array is always a multiple of 2 when transmitted
  82.     typedef struct tagORPC_EXTENT_ARRAY
  83. {
  84.         unsigned long size;     // Num extents.
  85.         unsigned long reserved; // Must be zero.
  86.         [size_is(size), unique] ORPC_EXTENT **extent; // extents 
  87. } ORPC_EXTENT_ARRAY;
  88.     // implicit 'this' pointer which is the first [in] parameter on
  89.     // every ORPC call.
  90.     typedef struct tagORPCTHIS
  91. {
  92.         COMVERSION      version;    // COM version number
  93.         unsigned long   flags;      // ORPCF flags for presence of other data
  94.         unsigned long   reserved1;  // set to zero
  95.         CID             causality;  // causality id of caller
  96.         // Extensions.
  97.         [unique] ORPC_EXTENT_ARRAY *extensions;
  98. } ORPCTHIS;
  99.     // implicit 'that' pointer which is the first [out] parameter on
  100.     // every ORPC call.
  101.     typedef struct tagORPCTHAT
  102. {
  103.         unsigned long  flags;       // ORPCF flags for presence of other data
  104.         [unique] ORPC_EXTENT_ARRAY *extensions;         // Extensions.
  105. } ORPCTHAT;
  106.     /*
  107.      * Marshaled COM Interface Wire Format
  108.      */
  109.     // DUALSTRINGARRAYS are the return type for arrays of network addresses,
  110.     // arrays of endpoints and arrays of both used in many ORPC interfaces
  111.     typedef enum tagPROTSEQ_VALUE
  112. {
  113. NCADG_IP_UDP   = 0x08,
  114. NCACN_IP_TCP   = 0x07,
  115. NCADG_IPX      = 0x0E,
  116. NCACN_SPX      = 0x0C,
  117. NCACN_NB_NB    = 0x12,
  118. NCACN_NB_IPX   = 0x0D,
  119. NCACN_DNET_NSP = 0x04,
  120. NCACN_HTTP     = 0x1F
  121. } PROTSEQ_VALUE;
  122.     typedef struct tagSTRINGBINDING
  123. {
  124.          unsigned short wTowerId;     // Cannot be zero.
  125.          unsigned short aNetworkAddr; // Zero terminated.
  126. } STRINGBINDING;
  127.     typedef enum tagCOM_AUTHZ
  128. {
  129. COM_C_AUTHZ_NONE = 0xffff
  130. } COM_AUTHZ;
  131.     typedef struct tagSECURITYBINDING
  132. {
  133.         unsigned short wAuthnSvc;  // Cannot be zero.
  134.         unsigned short wAuthzSvc;  // Must not be zero.
  135.         unsigned short aPrincName; // Zero terminated.
  136. }  SECURITYBINDING;
  137.     typedef struct tagDUALSTRINGARRAY
  138. {
  139.         unsigned short wNumEntries;     // Number of entries in array.
  140.         unsigned short wSecurityOffset; // Offset of security info.
  141.         // The array contains two parts, a set of STRINGBINDINGs
  142.         // and a set of SECURITYBINDINGs.  Each set is terminated by an
  143.         // extra zero.  The shortest array contains four zeros.
  144.         [size_is(wNumEntries)] unsigned short aStringArray[];
  145. } DUALSTRINGARRAY;
  146.     // signature value for OBJREF (object reference, actually the
  147.     // marshaled form of a COM interface).
  148.     typedef enum tagOBJREF_FLAGS
  149. {
  150. OBJREF_SIGNATURE = 0x574f454d,  // 'MEOW'
  151. // flag values for OBJREF
  152. OBJREF_STANDARD = 0x1, // standard marshaled objref
  153. OBJREF_HANDLER  = 0x2, // handler marshaled objref
  154. OBJREF_CUSTOM   = 0x4, // custom marshaled objref
  155. } OBJREF_FLAGS;
  156.     typedef enum tagSTDOBJREF_FLAGS
  157. {
  158. // Flag values for a STDOBJREF (standard part of an OBJREF).
  159. // SORF_OXRES1 - SORF_OXRES8 are reserved for the object
  160. // exporters use only, object importers must ignore them and
  161. // must not enforce MBZ.
  162. SORF_NULL       = 0x0, // convenient for initializing SORF
  163. SORF_OXRES1     = 0x1, // reserved for exporter
  164. SORF_OXRES2     = 0x20, // reserved for exporter
  165. SORF_OXRES3     = 0x40, // reserved for exporter
  166. SORF_OXRES4     = 0x80, // reserved for exporter
  167. SORF_OXRES5     = 0x100, // reserved for exporter
  168. SORF_OXRES6     = 0x200, // reserved for exporter
  169. SORF_OXRES7     = 0x400, // reserved for exporter
  170. SORF_OXRES8     = 0x800, // reserved for exporter
  171. SORF_NOPING     = 0x1000 // Pinging is not required
  172. } STDOBJREF_FLAGS;
  173.     // standard object reference
  174.     typedef struct tagSTDOBJREF
  175. {
  176.         unsigned long  flags;              // STDOBJREF flags (see above)
  177.         unsigned long  cPublicRefs;        // count of references passed
  178.         OXID           oxid;               // oxid of server with this oid
  179.         OID            oid;                // oid of object with this ipid
  180.         IPID           ipid;               // ipid of Interface
  181. } STDOBJREF;
  182.     /*
  183.      * OBJREF
  184.      *
  185.      * OBJREF is the format of a marshaled interface pointer. It is
  186.      * not actually defined in this IDL since it is (a) unnecessarily
  187.      * complex, and (b) only used at the C/C++ level .
  188.      */
  189.     cpp_quote("typedef struct tagOBJREF OBJREF;")
  190.     
  191.     // wire representation of a marshaled interface pointer
  192.     typedef struct tagMInterfacePointer
  193. {
  194.         ULONG           ulCntData;          // size of data
  195.         [size_is(ulCntData)] BYTE abData[]; // data (OBJREF)
  196. } MInterfacePointer;
  197.     typedef [unique] MInterfacePointer * PMInterfacePointer;
  198.     }
  199. [
  200.     uuid(b78d0404-80fb-11d5-99e5-00c04f68a5b5),
  201.     local,
  202.     object,
  203.     pointer_default(unique)
  204. ]
  205. interface IOrpcProxy : IUnknown
  206.     {
  207.     HRESULT Connect ([in] IOrpcClientChannel* pChannel);
  208.     HRESULT Disconnect ();
  209.     };
  210. [
  211.     uuid(db88361c-80fb-11d5-98e4-00c04f68a5b5),
  212.     local,
  213.     object,
  214.     pointer_default(unique)
  215. ]
  216. interface IOrpcClientChannel : IUnknown
  217.     {
  218.     /*
  219.      * This structure provides a buffer into which data is marshaled
  220.      * for ORPC transport. The <buf> field points to the raw memory,
  221.      * the size of the block is in <len>, and the data representation
  222.      * (in NDR encoding) is in <drep>.
  223.      */
  224.     
  225.     typedef struct tagMSHL_BUFFER
  226.         {
  227.         byte*   buf;
  228.         ULONG   len;
  229.         ULONG   drep;
  230.         } MSHL_BUFFER;
  231.     /*
  232.      * The function invokes method number <opnum> on the remote
  233.      * interface identified by <pipid> (which is of type <iid>)
  234.      * passing it the arguments contained in <pMshlBufIn>. On return,
  235.      * the result and returned arguments will be in the buffer at
  236.      * <pMshlBufOut>.
  237.      */
  238.     
  239.     HRESULT InvokeMethod
  240.         (
  241.         [in] REFIID             iid,
  242.         [in] const IPID *       pIpid,
  243.         [in] USHORT             opnum,
  244.         [in] const MSHL_BUFFER* pMshlBufIn,
  245.         [out] MSHL_BUFFER *     pMshlBufOut
  246.         );
  247.     /*
  248.      * This function informs the channel that the interface identified
  249.      * by <iid> is known to exist at the server end of the channel.
  250.      * This may be used by the channel to optimise network operations 
  251.      * regarding interface IDs.
  252.      */
  253.     HRESULT AddKnownInterface
  254.         (
  255.         [in] REFIID             iid
  256.         );
  257.     
  258.     /*
  259.      * This function allocates a marshaling buffer of size <nBytes>
  260.      * into the MSHL_BUFFER at <pBuf>. Any existing values in the
  261.      * structure are ignored, and overwritten on return.
  262.      */
  263.     HRESULT AllocBuffer
  264.         (
  265.         [in] MSHL_BUFFER*       pBuf,
  266.         [in] DWORD              nBytes
  267.         );
  268.     /*
  269.      * This function frees a previously-allocated marshaling buffer
  270.      * from the MSHL_BUFFER at <pBuf>. On return, the buffer is reset
  271.      * to the 'empty' state.
  272.      */
  273.     HRESULT FreeBuffer
  274.         (
  275.         [in] MSHL_BUFFER*       pBuf
  276.         );
  277.     
  278.     };
  279. #if 0
  280. /*
  281.  * This DCE (non-object) interface provides the private internal
  282.  * interface between the SCM and the rest of the DCOM subsystem. It
  283.  * allows clients to access the SCM to resolve OXIDs, and to activate
  284.  * remote servers.
  285.  */
  286. [
  287.     uuid(ece71f86-8b41-11d5-861c-00c04f68a5b5),
  288.     pointer_default(unique)
  289. ]
  290. interface IPrivateSCM : IUnknown
  291.     {
  292.     /*
  293.      * This method causes the SCM to request a remote server to
  294.      * activate a coclass, and returns one or more interfaces to the
  295.      * local client.
  296.      */
  297.     
  298.     HRESULT IndirectActivation
  299. (
  300.         [in] LPWSTR             pwszServerName, // PROTSEQ + remote server
  301. [in] REFCLSID clsid, // CLSID to activate
  302. [in] DWORD mode, // all-1's == get-class-obj
  303. [in] DWORD nItfs, // num of interfaces
  304. [in, size_is(nItfs)] IID *pIIDs, // array of IIDs
  305. [out] MInterfacePointer** ppItfData, // returned interface(s)
  306. [out] HRESULT* pResults // returned results per i/f
  307. );
  308.     /*
  309.      * These methods add and remove an OID of some remote object
  310.      * to/from the SCM's ping tables.
  311.      */
  312.     HRESULT AddOid ([in] LPWSTR addr, [in] OID oidToAdd);
  313.     HRESULT DelOid ([in] LPWSTR addr, [in] OID oidToDel);
  314.     /*
  315.      * This method returns the next available OID value.
  316.      */
  317.     HRESULT GetNextOid ([out] OID *pOid);
  318.     /*
  319.      * This method returns the OXID-resolver's address for the given
  320.      * protocol sequences.
  321.      */
  322.     
  323.     HRESULT GetOxidResolverBinding
  324.         (
  325.         [in] USHORT             cProtseqs,
  326.         [in,size_is(cProtseqs)]
  327.         USHORT                  arProtseqs[],
  328.         [out] DUALSTRINGARRAY** ppdsaBindings
  329.         );
  330.     };
  331. /*
  332.  * This interface is the private interface between an Object Exporter
  333.  * and the SCM, and allows the SCM to ask the OX to activate classes,
  334.  * and to query it for useful info like the IPID of its IRemUnknown,
  335.  * etc.
  336.  */
  337. [
  338.     uuid(ae1891ce-8b49-11d5-9333-00c04f68a5b5),
  339.     object,
  340.     pointer_default(unique)
  341. ]
  342. interface IPrivateOX : IUnknown
  343.     {
  344.     /*
  345.      * This method returns the string-binding (in the form of a
  346.      * DUALSTRINGARRAY) and the IPID of its IRemUnknown interface, for
  347.      * this object exporter. 
  348.      */
  349.     
  350.     HRESULT GetBindingInfo
  351.         (
  352.         [in]  USHORT            protseq,
  353.         [out] DUALSTRINGARRAY** ppdsaBindings
  354.         );
  355.     HRESULT GetIpidRemUnknown
  356.         (
  357.         [out] IPID *            pipidRemUnknown
  358.         );
  359.     };
  360. #endif