1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#include "idl_types.h"
/**
DCOM interfaces
http://www.grimes.demon.co.uk/DCOM/DCOMSpec.htm
*/
/*
The OXID Resolver can turn a OXID (Object Exporter ID) into a
RPC binding string that can be used to contact an object
(used by DCOM)
*/
[
uuid(99fcfec4-5260-101b-bbcb-00aa0021347a),
helpstring("Object Exporter ID Resolver"),
endpoints(epmapper, TCP-135),
pointer_default(unique)
]
interface IOXIDResolver
{
#define OXID HYPER_T
#define SETID HYPER_T
#define IPID GUID
#define OID GUID
// Method to get the protocol sequences, string bindings
// and machine id for an object server given its OXID.
typedef [public] struct {
DUALSTRINGARRAY *ppdsaOxidBindings;
} ppdsaOxidBindingsArray;
[idempotent] WERROR ResolveOxid (
[in] OXID *pOxid,
[in] uint16 cRequestedProtseqs,
[in, size_is(cRequestedProtseqs)] uint16 arRequestedProtseqs[],
[out, ref] ppdsaOxidBindingsArray *ppdsaOxidBindings,
[out, ref] IPID *pipidRemUnknown,
[out, ref] uint32 *pAuthnHint
);
// Simple ping is used to ping a Set. Client machines use this
// to inform the object exporter that it is still using the
// members of the set.
// Returns S_TRUE if the SetId is known by the object exporter,
// S_FALSE if not.
[idempotent] WERROR SimplePing (
[in] SETID *SetId // Must not be zero
);
// Complex ping is used to create sets of OIDs to ping. The
// whole set can subsequently be pinged using SimplePing,
// thus reducing network traffic.
[idempotent] WERROR ComplexPing (
[in, out] SETID *pSetId, // In of 0 on first call for new set.
[in] uint16 SequenceNum,
[in] uint16 cAddToSet,
[in] uint16 cDelFromSet,
// add these OIDs to the set
[in, size_is(cAddToSet)] OID AddToSet[],
//remove these OIDs from the set
[in, size_is(cDelFromSet)] OID DelFromSet[],
[out] uint16 *pPingBackoffFactor// 2^factor = multipler
);
// In some cases the client maybe unsure that a particular
// binding will reach the server. (For example, when the oxid
// bindings have more then one TCP/IP binding) This call
// can be used to validate the binding
// from the client.
[idempotent] WERROR ServerAlive ();
// Method to get the protocol sequences, string bindings,
// RemoteUnknown IPID and COM version for an object server
// given its OXID. Supported by DCOM
// version 5.2 and above.
[idempotent] WERROR ResolveOxid2 (
[in] OXID *pOxid,
[in] uint16 cRequestedProtseqs,
[in, size_is(cRequestedProtseqs)]
uint16 arRequestedProtseqs[],
[out, ref] ppdsaOxidBindingsArray *ppdsaOxidBindings,
[out, ref] IPID *pipidRemUnknown,
[out, ref] uint32 *pAuthnHint,
[out, ref] COMVERSION *pComVersion
);
typedef struct {
COMVERSION version;
uint32 unknown1;
} COMINFO;
[idempotent] WERROR ServerAlive2 (
[out] COMINFO info,
[out] DUALSTRINGARRAY dualstring,
[out] uint8 unknown2[3]);
}
|