2 Unix SMB/CIFS implementation.
4 Copyright (C) Jelmer Vernooij 2004-2005.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 #ifndef _DCOM_H /* _DCOM_H */
24 struct cli_credentials
;
27 #include "lib/com/com.h"
28 #include "librpc/gen_ndr/orpc.h"
30 struct dcom_client_context
{
31 struct dcom_server_credentials
{
33 struct cli_credentials
*credentials
;
34 struct dcom_server_credentials
*prev
, *next
;
36 struct dcom_object_exporter
{
39 struct IRemUnknown
*rem_unknown
;
40 struct DUALSTRINGARRAY
*bindings
;
41 struct dcerpc_pipe
*pipe
;
42 struct dcom_object_exporter
*prev
, *next
;
46 typedef enum ndr_err_code (*marshal_fn
)(TALLOC_CTX
*mem_ctx
, struct IUnknown
*pv
, struct OBJREF
*o
);
47 typedef enum ndr_err_code (*unmarshal_fn
)(TALLOC_CTX
*mem_ctx
, struct OBJREF
*o
, struct IUnknown
**pv
);
50 struct dcom_client_context
*dcom_client_init(struct com_context
*ctx
, struct cli_credentials
*credentials
);
51 struct dcom_object_exporter
*object_exporter_by_oxid(struct com_context
*ctx
, uint64_t oxid
);
52 struct dcom_object_exporter
*object_exporter_by_ip(struct com_context
*ctx
, struct IUnknown
*ip
);
53 WERROR
dcom_create_object(struct com_context
*ctx
, struct GUID
*clsid
, const char *server
, int num_ifaces
, struct GUID
*iid
, struct IUnknown
***ip
, WERROR
*results
);
54 WERROR
dcom_get_class_object(struct com_context
*ctx
, struct GUID
*clsid
, const char *server
, struct GUID
*iid
, struct IUnknown
**ip
);
55 NTSTATUS
dcom_get_pipe(struct IUnknown
*iface
, struct dcerpc_pipe
**pp
);
56 NTSTATUS
dcom_OBJREF_from_IUnknown(struct OBJREF
*o
, struct IUnknown
*p
);
57 NTSTATUS
dcom_IUnknown_from_OBJREF(TALLOC_CTX
*mem_ctx
, struct com_context
*ctx
, struct IUnknown
**_p
, struct OBJREF
*o
);
58 uint64_t dcom_get_current_oxid(void);
59 void dcom_add_server_credentials(struct com_context
*ctx
, const char *server
, struct cli_credentials
*credentials
);
60 WERROR
dcom_query_interface(struct IUnknown
*d
, uint32_t cRefs
, uint16_t cIids
, struct GUID
*iids
, struct IUnknown
**ip
, WERROR
*results
);
62 #include "librpc/gen_ndr/com_dcom.h"
64 NTSTATUS
dcom_register_proxy(struct IUnknown_vtable
*proxy_vtable
);
65 struct IUnknown_vtable
*dcom_proxy_vtable_by_iid(struct GUID
*iid
);
66 NTSTATUS
dcom_register_marshal(struct GUID
*clsid
, marshal_fn marshal
, unmarshal_fn unmarshal
);
68 #include "libcli/composite/composite.h"
69 void dcom_release_continue(struct composite_context
*cr
);
70 #define IUnknown_ipid(d) ((d)->obj.u_objref.u_standard.std.ipid)
71 struct composite_context
*dcom_release_send(struct IUnknown
*d
, TALLOC_CTX
*mem_ctx
);
72 marshal_fn
dcom_marshal_by_clsid(struct GUID
*clsid
);
73 unmarshal_fn
dcom_unmarshal_by_clsid(struct GUID
*clsid
);
75 struct dcom_proxy_async_call_state
{
77 const struct ndr_interface_table
*table
;
79 void (*continuation
)(struct rpc_request
*);