mirror of
https://github.com/samba-team/samba.git
synced 2025-02-24 13:57:43 +03:00
r1703: - Lots of RPC updates, adding new pipes and protocols.
- More updates/fixes to the ethereal parser generator (This used to be commit 547f860285b117e291bf3dbaca0707dc268b214e)
This commit is contained in:
parent
2c7c48017b
commit
1f0ea81ae9
@ -297,6 +297,9 @@ sub ParseElementPullSwitch($$$)
|
||||
|
||||
my $cprefix = util::c_pull_prefix($e);
|
||||
|
||||
pidl "\t{\n";
|
||||
pidl "\t\tguint16 _level;\n";
|
||||
|
||||
my $utype = $structs{$e->{TYPE}};
|
||||
if (!defined $utype ||
|
||||
!util::has_property($utype->{DATA}, "nodiscriminant")) {
|
||||
@ -304,6 +307,8 @@ sub ParseElementPullSwitch($$$)
|
||||
pidl "\tif (($ndr_flags) & NDR_SCALARS) {\n";
|
||||
pidl "\t\tndr_pull_level(ndr, tree, hf_level, &_level);\n";
|
||||
pidl "\t}\n";
|
||||
} else {
|
||||
pidl "\t_level = $switch_var;\n";
|
||||
}
|
||||
|
||||
my $sub_size = util::has_property($e, "subcontext");
|
||||
@ -312,8 +317,7 @@ sub ParseElementPullSwitch($$$)
|
||||
} else {
|
||||
pidl "\tndr_pull_$e->{TYPE}(ndr, tree, $ndr_flags, _level);\n";
|
||||
}
|
||||
|
||||
|
||||
pidl "\t}\n";
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
@ -350,6 +354,13 @@ sub ParseElementPullScalar($$)
|
||||
pidl "\tndr_pull_subcontext_flags_fn(ndr, get_subtree(tree, \"$e->{NAME}\", ndr, ett_$e->{TYPE}), $sub_size, (ndr_pull_flags_fn_t) ndr_pull_$e->{TYPE});\n";
|
||||
}
|
||||
} elsif (util::is_builtin_type($e->{TYPE})) {
|
||||
$needed{"hf_$e->{NAME}_$e->{TYPE}"} = {
|
||||
'name' => $e->{NAME},
|
||||
'type' => $e->{TYPE},
|
||||
'ft' => type2ft($e->{TYPE}),
|
||||
'base' => type2base($e->{TYPE})
|
||||
};
|
||||
|
||||
pidl "\tndr_pull_$e->{TYPE}(ndr, tree, hf_$e->{NAME}_$e->{TYPE}, &elt_$e->{NAME});\n";
|
||||
} else {
|
||||
pidl "\tndr_pull_$e->{TYPE}(ndr, get_subtree(tree, \"$e->{NAME}\", ndr, ett_$e->{TYPE}), $ndr_flags);\n";
|
||||
@ -512,6 +523,13 @@ sub ParseUnionPull($)
|
||||
|
||||
pidl "\tndr_pull_struct_start(ndr);\n";
|
||||
|
||||
foreach my $el (@{$e->{DATA}}) {
|
||||
my $e2 = $el->{DATA};
|
||||
if ($e2->{POINTERS}) {
|
||||
pidl "\tguint32 ptr_$e2->{NAME};\n";
|
||||
}
|
||||
}
|
||||
|
||||
# my $align = union_alignment($e);
|
||||
# pidl "\tndr_pull_align(ndr, $align);\n";
|
||||
|
||||
@ -524,19 +542,16 @@ sub ParseUnionPull($)
|
||||
pidl "\tcase $el->{CASE}: {\n";
|
||||
}
|
||||
if ($el->{TYPE} eq "UNION_ELEMENT") {
|
||||
my $e2 = $el->{DATA};
|
||||
if ($e2->{POINTERS}) {
|
||||
pidl "\t\tguint32 ptr_$e2->{NAME};\n";
|
||||
}
|
||||
ParseElementPullScalar($el->{DATA}, "NDR_SCALARS");
|
||||
}
|
||||
pidl "\t\tbreak;\n\t}\n";
|
||||
}
|
||||
if (! $have_default) {
|
||||
pidl "\tdefault:\n";
|
||||
pidl "\tdefault: {\n";
|
||||
pidl "\t\tproto_tree_add_text(tree, ndr->tvb, ndr->offset, 0, \"Bad switch value %u\", level);\n";
|
||||
pidl "\t\tif (check_col(ndr->pinfo->cinfo, COL_INFO))\n";
|
||||
pidl "\t\t\tcol_append_fstr(ndr->pinfo->cinfo, COL_INFO, \", Bad switch value %u\", level);\n";
|
||||
pidl "\t}\n";
|
||||
}
|
||||
pidl "\t}\n";
|
||||
pidl "buffers:\n";
|
||||
@ -544,12 +559,12 @@ sub ParseUnionPull($)
|
||||
pidl "\tswitch (level) {\n";
|
||||
foreach my $el (@{$e->{DATA}}) {
|
||||
if ($el->{CASE} eq "default") {
|
||||
pidl "\tdefault:\n";
|
||||
pidl "\tdefault: {\n";
|
||||
} else {
|
||||
pidl "\tcase $el->{CASE}: {\n";
|
||||
}
|
||||
if ($el->{TYPE} eq "UNION_ELEMENT") {
|
||||
ParseElementPullBuffer($el->{DATA}, "NDR_BUFFERS");
|
||||
ParseElementPullBuffer($el->{DATA}, "NDR_BUFFERS");
|
||||
}
|
||||
pidl "\t\tbreak;\n\t}\n";
|
||||
}
|
||||
@ -654,22 +669,12 @@ sub ParseFunctionElementPull($$)
|
||||
pidl "\tndr_pull_ptr(ndr, tree, hf_ptr, &ptr_$e->{NAME});\n";
|
||||
pidl "\tif (ptr_$e->{NAME}) {\n";
|
||||
pidl "\t\tguint32 " . find_size_var($e, util::array_size($e)) . ";\n";
|
||||
} elsif ($inout eq "out" && util::has_property($e, "ref")) {
|
||||
pidl "\tif (r->$inout.$e->{NAME}) {\n";
|
||||
} else {
|
||||
pidl "\t{\n";
|
||||
}
|
||||
ParseArrayPull($e, "NDR_SCALARS|NDR_BUFFERS");
|
||||
pidl "\t}\n";
|
||||
} else {
|
||||
if ($inout eq "out" && util::has_property($e, "ref")) {
|
||||
# pidl "\tif (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {\n";
|
||||
# pidl "\tNDR_ALLOC(ndr, r->out.$e->{NAME});\n";
|
||||
# pidl "\t}\n";
|
||||
}
|
||||
if ($inout eq "in" && util::has_property($e, "ref")) {
|
||||
# pidl "\tNDR_ALLOC(ndr, r->in.$e->{NAME});\n";
|
||||
}
|
||||
|
||||
ParseElementPullScalar($e, "NDR_SCALARS|NDR_BUFFERS");
|
||||
if ($e->{POINTERS}) {
|
||||
|
@ -113,14 +113,33 @@ void ndr_pull_uint64(struct e_ndr_pull *ndr, proto_tree *tree, int hf,
|
||||
|
||||
void ndr_pull_DATA_BLOB(struct e_ndr_pull *ndr, proto_tree *tree, int hf, gDATA_BLOB *h)
|
||||
{
|
||||
guint32 len1, ofs, len2;
|
||||
char *data;
|
||||
guint32 length;
|
||||
|
||||
if (!(ndr_flags & NDR_SCALARS)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* FIXME */
|
||||
if (ndr->flags & LIBNDR_ALIGN_FLAGS) {
|
||||
if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
|
||||
length = NDR_ALIGN(ndr, 2);
|
||||
} else if (ndr->flags & LIBNDR_FLAG_ALIGN4) {
|
||||
length = NDR_ALIGN(ndr, 4);
|
||||
} else if (ndr->flags & LIBNDR_FLAG_ALIGN8) {
|
||||
length = NDR_ALIGN(ndr, 8);
|
||||
}
|
||||
if (ndr->data_size - ndr->offset < length) {
|
||||
length = ndr->data_size - ndr->offset;
|
||||
}
|
||||
} else if (ndr->flags & LIBNDR_FLAG_REMAINING) {
|
||||
length = ndr->data_size - ndr->offset;
|
||||
} else {
|
||||
ndr_pull_uint32(ndr, &length);
|
||||
}
|
||||
|
||||
h->data = g_malloc(length);
|
||||
proto_tree_add_bytes(tree, hf_bytes_data, ndr->tvb, ndr->offset, length, h->data);
|
||||
|
||||
ndr->offset += length;
|
||||
}
|
||||
|
||||
void ndr_pull_string(struct e_ndr_pull *ndr, proto_tree *tree, int ndr_flags)
|
||||
|
@ -60,8 +60,8 @@ typedef guint32 gWERROR;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int foobar;
|
||||
/* FIXME */
|
||||
guint8 *data;
|
||||
guint32 length;
|
||||
} gDATA_BLOB;
|
||||
|
||||
#include "packet-dcerpc-proto.h"
|
||||
@ -92,7 +92,7 @@ void ndr_pull_NTTIME(struct e_ndr_pull *ndr, proto_tree *tree, int hf, gNTTIME *
|
||||
void ndr_pull_HYPER_T(struct e_ndr_pull *ndr, proto_tree *tree, int hf, gHYPER_T *data);
|
||||
void ndr_pull_int64(struct e_ndr_pull *ndr, proto_tree *tree, int hf, gint64 *data);
|
||||
void ndr_pull_uint64(struct e_ndr_pull *ndr, proto_tree *tree, int hf, guint64 *data);
|
||||
void ndr_pull_DATA_BLOB(struct e_ndr_pull *ndr, proto_tree *tree, int hf, gDATA_BLOB *blob);
|
||||
void ndr_pull_DATA_BLOB(struct e_ndr_pull *ndr, proto_tree *tree, int hf, gDATA_BLOB *data);
|
||||
void ndr_pull_string(struct e_ndr_pull *ndr, proto_tree *tree, int ndr_flags);
|
||||
void ndr_pull_dom_sid2(struct e_ndr_pull *ndr, proto_tree *tree, int flags);
|
||||
|
||||
|
@ -13,6 +13,7 @@ SMB_SUBSYSTEM(LIBNDR_RAW,[],
|
||||
librpc/gen_ndr/ndr_lsads.o
|
||||
librpc/gen_ndr/ndr_dfs.o
|
||||
librpc/gen_ndr/ndr_drsuapi.o
|
||||
librpc/gen_ndr/ndr_policyagent.o
|
||||
librpc/gen_ndr/ndr_samr.o
|
||||
librpc/gen_ndr/ndr_spoolss.o
|
||||
librpc/gen_ndr/ndr_wkssvc.o
|
||||
|
@ -6,5 +6,50 @@ interface browser
|
||||
{
|
||||
/******************/
|
||||
/* Function 0x00 */
|
||||
NTSTATUS browser_Unknown0();
|
||||
NTSTATUS BrowserrServerEnum();
|
||||
|
||||
/******************/
|
||||
/* Function 0x01 */
|
||||
NTSTATUS BrowserrDebugCall();
|
||||
|
||||
/******************/
|
||||
/* Function 0x02 */
|
||||
NTSTATUS BrowserrQueryOtherDomains();
|
||||
|
||||
/******************/
|
||||
/* Function 0x03 */
|
||||
NTSTATUS BrowserrResetNetlogonState();
|
||||
|
||||
/******************/
|
||||
/* Function 0x04 */
|
||||
NTSTATUS BrowserrDebugTrace();
|
||||
|
||||
/******************/
|
||||
/* Function 0x05 */
|
||||
NTSTATUS BrowserrQueryStatistics();
|
||||
|
||||
/******************/
|
||||
/* Function 0x06 */
|
||||
NTSTATUS BrowserResetStatistics();
|
||||
|
||||
/******************/
|
||||
/* Function 0x07 */
|
||||
NTSTATUS NetrBrowserStatisticsClear();
|
||||
|
||||
/******************/
|
||||
/* Function 0x08 */
|
||||
NTSTATUS NetrBrowserStatisticsGet();
|
||||
|
||||
/******************/
|
||||
/* Function 0x09 */
|
||||
NTSTATUS BrowserrSetNetlogonState();
|
||||
|
||||
/******************/
|
||||
/* Function 0x10 */
|
||||
NTSTATUS BrowserrQueryEmulatedDomains();
|
||||
|
||||
/******************/
|
||||
/* Function 0x11 */
|
||||
NTSTATUS BrowserrServerEnumEx();
|
||||
|
||||
}
|
||||
|
@ -1,34 +1,428 @@
|
||||
/*
|
||||
this is just a placeholder until we start to support DCOM calls
|
||||
*/
|
||||
#include "idl_types.h"
|
||||
|
||||
#define HRESULT uint32
|
||||
|
||||
[
|
||||
uuid(99fcfec4-5260-101b-bbcb-00aa0021347a),
|
||||
version(0.0)
|
||||
uuid(99fcfe60-5260-101b-bbcb-00aa0021347a),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface ObjectRpcBaseTypes
|
||||
{
|
||||
WERROR stub();
|
||||
|
||||
typedef [public] struct {
|
||||
uint32 upper;
|
||||
uint32 lower;
|
||||
} hyper;
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Identifier Definitions
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
// Machine Identifier
|
||||
#define MID hyper
|
||||
|
||||
|
||||
// Object Exporter Identifier
|
||||
#define OXID hyper
|
||||
|
||||
// Object Identifer
|
||||
#define OID hyper
|
||||
|
||||
// Ping Set Identifier
|
||||
#define SETID hyper
|
||||
|
||||
// Interface Pointer Identifier
|
||||
#define IPID GUID
|
||||
|
||||
// Causality Identifier
|
||||
#define CID GUID
|
||||
|
||||
#define CLSID GUID
|
||||
|
||||
#define IID GUID
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// ORPC Call Packet Format
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// COM_MINOR_VERSION = 1 (NT4.0, SP1, SP2, DCOM95).
|
||||
// - Initial Release
|
||||
// - Must be used when talking to downlevel machines, including
|
||||
// on Remote Activation calls.
|
||||
// COM_MINOR_VERSION = 2 (NT4.0 SP3 and beyond).
|
||||
// - Added ResolveOxid2 to IObjectExporter to retrieve the
|
||||
// COM version number of the server. Passed to the NDR engine
|
||||
// to fix fatal endian-ness flaw in the way OLEAUTOMATION marshals
|
||||
// BSTRS. Previous way used trailing padding, which is not NDR
|
||||
// compatible. See Bug# 69189.
|
||||
// COM_MINOR_VERSION = 3 (NT4.0 SP4 and DCOM95 builds 1018 and beyond)
|
||||
// - OLEAUT32 added two new types to the SAFEARRAY, but SAFEARRAY
|
||||
// previously included the "default" keyword, which prevented
|
||||
// downlevel NDR engines from correctly handling any extensions.
|
||||
// Machines with version >=5.3 don't use "default" and will
|
||||
// gracefully handle future extensions to SAFEARRAY.
|
||||
// old constants (for convenience)
|
||||
const uint16 COM_MINOR_VERSION_1 = 1;
|
||||
const uint16 COM_MINOR_VERSION_2 = 2;
|
||||
// current version
|
||||
const uint16 COM_MAJOR_VERSION = 5;
|
||||
const uint16 COM_MINOR_VERSION = 3;
|
||||
// Component Object Model version number
|
||||
|
||||
typedef [public] struct
|
||||
{
|
||||
uint16 MajorVersion; // Major version number
|
||||
uint16 MinorVersion; // Minor version number
|
||||
} COMVERSION;
|
||||
|
||||
|
||||
// enumeration of additional information present in the call packet.
|
||||
// Should be an enum but DCE IDL does not support sparse enumerators.
|
||||
const uint32 ORPCF_NULL = 0; // no additional info in packet
|
||||
const uint32 ORPCF_LOCAL = 1; // call is local to this machine
|
||||
const uint32 ORPCF_RESERVED1 = 2; // reserved for local use
|
||||
const uint32 ORPCF_RESERVED2 = 4; // reserved for local use
|
||||
const uint32 ORPCF_RESERVED3 = 8; // reserved for local use
|
||||
const uint32 ORPCF_RESERVED4 = 16; // reserved for local use
|
||||
// Extension to implicit parameters.
|
||||
typedef [public] struct
|
||||
{
|
||||
GUID id; // Extension identifier.
|
||||
uint32 size; // Extension size.
|
||||
//FIXME[size_is((size+7)&~7)] uint8 data[]; // Extension data.
|
||||
[size_is(size)] uint8 data[];
|
||||
} ORPC_EXTENT;
|
||||
|
||||
|
||||
// Array of extensions.
|
||||
typedef struct
|
||||
{
|
||||
uint32 size; // Num extents.
|
||||
uint32 reserved; // Must be zero.
|
||||
//FIXME[size_is((size+1)&~1,), unique] ORPC_EXTENT **extent; // extents
|
||||
[size_is(size),unique] ORPC_EXTENT extent[];
|
||||
} ORPC_EXTENT_ARRAY;
|
||||
|
||||
|
||||
// implicit 'this' pointer which is the first [in] parameter on
|
||||
// every ORPC call.
|
||||
typedef [public] struct
|
||||
{
|
||||
COMVERSION version; // COM version number
|
||||
uint32 flags; // ORPCF flags for presence of other data
|
||||
uint32 reserved1; // set to zero
|
||||
CID cid; // causality id of caller
|
||||
// Extensions.
|
||||
[unique] ORPC_EXTENT_ARRAY *extensions;
|
||||
} ORPCTHIS;
|
||||
|
||||
|
||||
// implicit 'that' pointer which is the first [out] parameter on
|
||||
// every ORPC call.
|
||||
typedef [public] struct
|
||||
{
|
||||
uint32 flags; // ORPCF flags for presence of other data
|
||||
// Extensions.
|
||||
[unique] ORPC_EXTENT_ARRAY *extensions;
|
||||
} ORPCTHAT;
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Marshaled COM Interface Wire Format
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// DUALSTRINGARRAYS are the return type for arrays of network addresses,
|
||||
// arrays of endpoints and arrays of both used in many ORPC interfaces
|
||||
typedef struct
|
||||
{
|
||||
uint16 wTowerId; // Cannot be zero.
|
||||
uint16 aNetworkAddr; // Zero terminated.
|
||||
} STRINGBINDING;
|
||||
|
||||
|
||||
const uint16 COM_C_AUTHZ_NONE = 0xffff;
|
||||
typedef struct
|
||||
{
|
||||
uint16 wAuthnSvc; // Cannot be zero.
|
||||
uint16 wAuthzSvc; // Must not be zero.
|
||||
uint16 aPrincName; // Zero terminated.
|
||||
} SECURITYBINDING;
|
||||
|
||||
|
||||
typedef [public] struct
|
||||
{
|
||||
uint16 wNumEntries; // Number of entries in array.
|
||||
uint16 wSecurityOffset; // Offset of security info.
|
||||
// The array contains two parts, a set of STRINGBINDINGs
|
||||
// and a set of SECURITYBINDINGs. Each set is terminated by an
|
||||
// extra zero. The shortest array contains four zeros.
|
||||
[size_is(wNumEntries)] uint16 aStringArray[];
|
||||
} DUALSTRINGARRAY;
|
||||
|
||||
|
||||
// signature value for OBJREF (object reference, actually the
|
||||
// marshaled form of a COM interface).
|
||||
const uint32 OBJREF_SIGNATURE = 0x574f454d; // 'MEOW'
|
||||
|
||||
// flag values for OBJREF
|
||||
typedef enum {
|
||||
OBJREF_STANDARD = 0x1, // standard marshaled objref
|
||||
OBJREF_HANDLER = 0x2, // handler marshaled objref
|
||||
OBJREF_CUSTOM = 0x4 // custom marshaled objref
|
||||
} OBJREF_FLAGS;
|
||||
|
||||
// Flag values for a STDOBJREF (standard part of an OBJREF).
|
||||
// SORF_OXRES1 - SORF_OXRES8 are reserved for the object exporters
|
||||
// use only, object importers must ignore them and must not enforce MBZ.
|
||||
const uint32 SORF_OXRES1 = 0x1; // reserved for exporter
|
||||
const uint32 SORF_OXRES2 = 0x20; // reserved for exporter
|
||||
const uint32 SORF_OXRES3 = 0x40; // reserved for exporter
|
||||
const uint32 SORF_OXRES4 = 0x80; // reserved for exporter
|
||||
const uint32 SORF_OXRES5 = 0x100;// reserved for exporter
|
||||
const uint32 SORF_OXRES6 = 0x200;// reserved for exporter
|
||||
const uint32 SORF_OXRES7 = 0x400;// reserved for exporter
|
||||
const uint32 SORF_OXRES8 = 0x800;// reserved for exporter
|
||||
const uint32 SORF_NULL = 0x0; // convenient for initializing SORF
|
||||
const uint32 SORF_NOPING = 0x1000;// Pinging is not required
|
||||
// standard object reference
|
||||
typedef struct
|
||||
{
|
||||
uint32 flags; // STDOBJREF flags (see above)
|
||||
uint32 cPublicRefs; // count of references passed
|
||||
OXID oxid; // oxid of server with this oid
|
||||
OID oid; // oid of object with this ipid
|
||||
IPID ipid; // ipid of Interface
|
||||
} STDOBJREF;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
STDOBJREF std; // standard objref
|
||||
DUALSTRINGARRAY saResAddr; // resolver address
|
||||
} u_standard;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
STDOBJREF std; // standard objref
|
||||
CLSID clsid; // Clsid of handler code
|
||||
DUALSTRINGARRAY saResAddr; // resolver address
|
||||
} u_handler;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
CLSID clsid; // Clsid of unmarshaling code
|
||||
uint32 cbExtension; // size of extension data
|
||||
uint32 size; // size of data that follows
|
||||
[size_is(size), ref] uint8 *pData; // extension + class specific data
|
||||
} u_custom;
|
||||
|
||||
|
||||
|
||||
typedef union
|
||||
{
|
||||
[case(OBJREF_STANDARD)] u_standard u_standard;
|
||||
[case(OBJREF_HANDLER)] u_handler u_handler;
|
||||
[case(OBJREF_CUSTOM)] u_custom u_custom;
|
||||
} OBJREF_Types;
|
||||
|
||||
// OBJREF is the format of a marshaled interface pointer.
|
||||
typedef struct
|
||||
{
|
||||
uint32 flags; // OBJREF flags (see above)
|
||||
GUID iid; // interface identifier
|
||||
[switch_is(flags), switch_type(uint32)] OBJREF_Types u_objref;
|
||||
} OBJREF;
|
||||
// wire representation of a marshalled interface pointer
|
||||
typedef [public] struct
|
||||
{
|
||||
uint32 ulCntData; // size of data
|
||||
[size_is(ulCntData)] uint8 abData[]; // data (OBJREF)
|
||||
} MInterfacePointer;
|
||||
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
// The remote version of Iunknown. This interface exists on every
|
||||
// OXID (whether an OXID represents either a thread or a process is
|
||||
// implementation specific). It is used by clients to query for new
|
||||
// interfaces, get additional references (for marshaling), and release
|
||||
// outstanding references.
|
||||
// This interface is passed along during OXID resolution.
|
||||
//
|
||||
[
|
||||
uuid(00000131-0000-0000-C000-000000000046),
|
||||
version(0.0)
|
||||
]
|
||||
interface IRemUnknown // : IUnknown
|
||||
{
|
||||
typedef struct
|
||||
{
|
||||
HRESULT hResult; // result of call
|
||||
STDOBJREF std; // data for returned interface
|
||||
}
|
||||
REMQIRESULT;
|
||||
|
||||
HRESULT RemQueryInterface (
|
||||
[in] IPID *ripid, // interface to QI on
|
||||
[in] uint32 cRefs, // count of AddRefs requested
|
||||
[in] uint16 cIids, // count of IIDs that follow
|
||||
[in, size_is(cIids)]
|
||||
IID* iids // IIDs to QI for
|
||||
/*FIXME: [out, size_is(,cIids)]
|
||||
REMQIRESULT** ppQIResults // results returned*/
|
||||
);
|
||||
typedef struct
|
||||
{
|
||||
IPID ipid; // ipid to AddRef/Release
|
||||
uint32 cPublicRefs;
|
||||
uint32 cPrivateRefs;
|
||||
} REMINTERFACEREF;
|
||||
|
||||
HRESULT RemAddRef (
|
||||
[in] uint16 cInterfaceRefs,
|
||||
[in, size_is(cInterfaceRefs)] REMINTERFACEREF InterfaceRefs[],
|
||||
[out, size_is(cInterfaceRefs)] HRESULT* pResults
|
||||
);
|
||||
|
||||
HRESULT RemRelease (
|
||||
[in] uint16 cInterfaceRefs,
|
||||
[in, size_is(cInterfaceRefs)] REMINTERFACEREF InterfaceRefs[]
|
||||
);
|
||||
}
|
||||
|
||||
// Derived from IRemUnknown, this interface supports Remote Query interface
|
||||
// for objects that supply additional data beyond the STDOBJREF in their
|
||||
// marshaled interface packets.
|
||||
[
|
||||
uuid(00000143-0000-0000-C000-000000000046),
|
||||
version(0.0)
|
||||
]
|
||||
|
||||
interface IRemUnknown2 //: IRemUnknown
|
||||
{
|
||||
HRESULT RemQueryInterface2 (
|
||||
[in] IPID *ripid,
|
||||
[in] uint16 cIids,
|
||||
[in, size_is(cIids)] IID *iids,
|
||||
[out, size_is(cIids)] HRESULT *phr
|
||||
//FIXME [out, size_is(cIids)] MInterfacePointer **ppMIF
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
[ uuid(99fcfec4-5260-101b-bbcb-00aa0021347a),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IOXIDResolver
|
||||
{
|
||||
// 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,ref] policy_handle *hRpc,
|
||||
[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] policy_handle hRpc,
|
||||
[in] SETID *pSetId // 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] policy_handle hRpc,
|
||||
[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, unique, size_is(cAddToSet)] OID AddToSet[],
|
||||
//remove these OIDs from the set
|
||||
[in, unique, 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 (
|
||||
[in] policy_handle hRpc
|
||||
);
|
||||
// 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] error_status_t ResolveOxid2 (
|
||||
[in] policy_handle hRpc,
|
||||
[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
|
||||
);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x00 */
|
||||
WERROR ResolveOxid();
|
||||
}
|
||||
|
||||
|
||||
[
|
||||
uuid(4d9f4ab8-7d1c-11cf-861e-0020af6e7c57),
|
||||
version(0.0)
|
||||
uuid(4d9f4ab8-7d1c-11cf-861e-0020af6e7c57),
|
||||
version(0.0),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IRemoteActivation
|
||||
{
|
||||
typedef [public] struct {
|
||||
MInterfacePointer *ppInterfaceData;
|
||||
} ppInterfaceDataArray;
|
||||
|
||||
/*****************/
|
||||
/* Function 0x00 */
|
||||
NTSTATUS RemoteActivation();
|
||||
const uint32 MODE_GET_CLASS_OBJECT = 0xffffffff;
|
||||
HRESULT RemoteActivation (
|
||||
[in] policy_handle hRpc,
|
||||
[in] ORPCTHIS *ORPCthis,
|
||||
[out] ORPCTHAT *ORPCthat,
|
||||
[in] GUID *Clsid,
|
||||
[in, unique] unistr *pwszObjectName,
|
||||
[in, unique] MInterfacePointer *pObjectStorage,
|
||||
[in] uint32 ClientImpLevel,
|
||||
[in] uint32 Mode,
|
||||
[in] uint32 Interfaces,
|
||||
[in,unique,size_is(Interfaces)] IID *pIIDs,
|
||||
[in] uint16 cRequestedProtseqs,
|
||||
[in, size_is(cRequestedProtseqs)]
|
||||
uint16 RequestedProtseqs[],
|
||||
[out] OXID *pOxid,
|
||||
[out] ppdsaOxidBindingsArray *ppdsaOxidBindings,
|
||||
[out] IPID *pipidRemUnknown,
|
||||
[out] uint32 *pAuthnHint,
|
||||
[out] COMVERSION *pServerVersion,
|
||||
[out] HRESULT *phr,
|
||||
[out,size_is(Interfaces)] ppInterfaceDataArray *ppInterfaceData,
|
||||
[out,size_is(Interfaces)] HRESULT *pResults
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* The Win2k equivalent of IRemoteActivation */
|
||||
[
|
||||
uuid(000001a0-0000-0000-c000-000000000046),
|
||||
version(0.0)
|
||||
@ -40,4 +434,23 @@ interface ISystemActivator
|
||||
/* Function 0x00 */
|
||||
NTSTATUS isa_Unknown0();
|
||||
|
||||
/*****************/
|
||||
/* Function 0x01 */
|
||||
NTSTATUS isa_Unknown1();
|
||||
|
||||
/*****************/
|
||||
/* Function 0x02 */
|
||||
NTSTATUS isa_Unknown2();
|
||||
|
||||
/*****************/
|
||||
/* Function 0x03 */
|
||||
NTSTATUS isa_Unknown3();
|
||||
|
||||
|
||||
// Binding strings and the OBJREF_SIGNATURE in this call
|
||||
/*****************/
|
||||
/* Function 0x04 */
|
||||
NTSTATUS isa_Unknown4();
|
||||
|
||||
|
||||
}
|
||||
|
@ -2,6 +2,10 @@
|
||||
|
||||
/*
|
||||
endpoint mapper interface
|
||||
Related links:
|
||||
http://www.opengroup.org/onlinepubs/9629399/apdxl.htm : Details on towers
|
||||
http://www.opengroup.org/onlinepubs/9629399/chap6.htm#tagcjh_11_02_03_01: binding strings
|
||||
|
||||
*/
|
||||
|
||||
[
|
||||
@ -36,14 +40,22 @@ interface epmapper
|
||||
} epm_prot_uuid;
|
||||
|
||||
typedef enum {
|
||||
EPM_PROTOCOL_TCP = 0x07,
|
||||
EPM_PROTOCOL_IP = 0x09,
|
||||
EPM_PROTOCOL_PIPE = 0x10,
|
||||
EPM_PROTOCOL_NETBIOS = 0x11,
|
||||
EPM_PROTOCOL_RPC_C = 0x0b,
|
||||
EPM_PROTOCOL_UUID = 0x0d,
|
||||
EPM_PROTOCOL_SMB = 0x0f,
|
||||
EPM_PROTOCOL_HTTP = 0x1f
|
||||
EPM_PROTOCOL_NCACN_DNET_NSP = 0x04,
|
||||
EPM_PROTOCOL_NCACN_OSI_TP4 = 0x05,
|
||||
EPM_PROTOCOL_NCACN_OSI_CLNS = 0x06,
|
||||
EPM_PROTOCOL_NCACN_TCP = 0x07,
|
||||
EPM_PROTOCOL_NCADG_UDP = 0x08,
|
||||
EPM_PROTOCOL_NCACN_IP = 0x09,
|
||||
EPM_PROTOCOL_NCADG_RPC = 0x0a, /* Connectionless RPC */
|
||||
EPM_PROTOCOL_NCACN_RPC_C = 0x0b,
|
||||
EPM_PROTOCOL_NCACN_SPX = 0x0c,
|
||||
EPM_PROTOCOL_UUID = 0x0d,
|
||||
EPM_PROTOCOL_NCADG_IPX = 0x0e,
|
||||
EPM_PROTOCOL_NCACN_SMB = 0x0f,
|
||||
EPM_PROTOCOL_NCACN_PIPE = 0x10,
|
||||
EPM_PROTOCOL_NCACN_NETBIOS = 0x11,
|
||||
EPM_PROTOCOL_NCACN_NB_NB = 0x12,
|
||||
EPM_PROTOCOL_NCACN_HTTP = 0x1f
|
||||
} epm_protocols;
|
||||
|
||||
typedef [nodiscriminant] union {
|
||||
@ -158,7 +170,7 @@ interface epmapper
|
||||
|
||||
|
||||
/**********************/
|
||||
/* Function 0x05 */
|
||||
/* Function 0x06 */
|
||||
void epm_MgmtDelete(
|
||||
[in] uint32 object_speced,
|
||||
[in] GUID *object,
|
||||
|
@ -2,6 +2,8 @@
|
||||
cryptographic key services interface
|
||||
*/
|
||||
|
||||
|
||||
/* Also seen as: 0d72a7d4-6148-11d1-b4aa-00c04fb66ea0 */
|
||||
[
|
||||
uuid(8d0ffe72-d252-11d0-bf8f-00c04fd9126b),
|
||||
version(1.0)
|
||||
|
11
source4/librpc/idl/policyagent.idl
Normal file
11
source4/librpc/idl/policyagent.idl
Normal file
@ -0,0 +1,11 @@
|
||||
|
||||
/* IPSec policy agent (Win2k) */
|
||||
[
|
||||
uuid(d335b8f6-cb31-11d0-b0f9-006097ba4e54),
|
||||
version(1.5)
|
||||
] interface policyagent
|
||||
{
|
||||
/*****************/
|
||||
/* Function 0x00 */
|
||||
WERROR policyagent_Dummy();
|
||||
}
|
@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
protected_storage interface definitions
|
||||
Also seen with UUID: c9378ff1-16f7-11d0-a0b2-00aa0061426a ver 1.0
|
||||
*/
|
||||
|
||||
[ uuid(e3514235-4b06-11d1-ab04-00c04fc2dcd2),
|
||||
|
@ -47,6 +47,28 @@
|
||||
SERVICE_STATE_INACTIVE=0x02,
|
||||
SERVICE_STATE_ALL=0x03
|
||||
} ServiceState;
|
||||
|
||||
typedef enum {
|
||||
SV_TYPE_WORKSTATION =0x00000001,
|
||||
SV_TYPE_SERVER =0x00000002,
|
||||
SV_TYPE_DOMAIN_CTRL =0x00000008,
|
||||
SV_TYPE_DOMAIN_BAKCTRL =0x00000010,
|
||||
SV_TYPE_TIME_SOURCE =0x00000020,
|
||||
SV_TYPE_AFP =0x00000040,
|
||||
SV_TYPE_DOMAIN_MEMBER =0x00000100,
|
||||
SV_TYPE_PRINTQ_SERVER =0x00000200,
|
||||
SV_TYPE_DIALIN_SERVER =0x00000400,
|
||||
SV_TYPE_XENIX_SERVER =0x00000800,
|
||||
SV_TYPE_SERVER_UNIX =0x00000800,
|
||||
SV_TYPE_NT =0x00001000,
|
||||
SV_TYPE_WFW =0x00002000,
|
||||
SV_TYPE_POTENTIAL_BROWSER =0x00010000,
|
||||
SV_TYPE_BACKUP_BROWSER =0x00020000,
|
||||
SV_TYPE_MASTER_BROWSER =0x00040000,
|
||||
SV_TYPE_DOMAIN_MASTER =0x00080000,
|
||||
SV_TYPE_LOCAL_LIST_ONLY =0x40000000,
|
||||
SV_TYPE_DOMAIN_ENUM =0x80000000
|
||||
} SERVICE_BITS;
|
||||
|
||||
/*****************/
|
||||
/* Function 0x00 */
|
||||
@ -57,11 +79,19 @@
|
||||
/*****************/
|
||||
/* Function 0x01 */
|
||||
|
||||
WERROR svcctl_ControlService();
|
||||
typedef enum {
|
||||
FIXME=1
|
||||
} SERVICE_CONTROL;
|
||||
|
||||
WERROR svcctl_ControlService(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 control,
|
||||
[out] SERVICE_STATUS status
|
||||
);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x02 */
|
||||
WERROR svcctl_DeleteService();
|
||||
WERROR svcctl_DeleteService([in,ref] policy_handle *handle);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x03 */
|
||||
@ -101,23 +131,54 @@
|
||||
|
||||
/*****************/
|
||||
/* Function 0x0a */
|
||||
WERROR svcctl_SCSetServiceBits();
|
||||
WERROR svcctl_SCSetServiceBitsW(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 bits,
|
||||
[in] boolean32 bitson,
|
||||
[in] boolean32 immediate);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x0b */
|
||||
WERROR svcctl_ChangeServiceConfig();
|
||||
WERROR svcctl_ChangeServiceConfigW([in,ref] policy_handle *handle,
|
||||
[in] uint32 type,
|
||||
[in] uint32 start,
|
||||
[in] uint32 error,
|
||||
[in] unistr *binary_path,
|
||||
[in] unistr *load_order_group,
|
||||
[out] uint32 tag_id,
|
||||
[in] unistr *dependencies,
|
||||
[in] unistr *service_start_name,
|
||||
[in] unistr *password,
|
||||
[in] unistr *display_name);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x0c */
|
||||
WERROR svcctl_CreateService();
|
||||
WERROR svcctl_CreateServiceW([in,ref] policy_handle *handle,
|
||||
[in] unistr *ServiceName,
|
||||
[in] unistr *DisplayName,
|
||||
[in] uint32 desired_access,
|
||||
[in] uint32 type,
|
||||
[in] uint32 start_type,
|
||||
[in] uint32 error_control,
|
||||
[in] unistr *binary_path,
|
||||
[in] unistr *LoadOrderGroupKey,
|
||||
[out] uint32 *TagId,
|
||||
[in] unistr *dependencies,
|
||||
[in] unistr *service_start_name,
|
||||
[in] unistr *password);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x0d */
|
||||
WERROR svcctl_EnumDependentServices();
|
||||
WERROR svcctl_EnumDependentServicesW([in,ref] policy_handle *service,
|
||||
[in] uint32 state,
|
||||
[out] ENUM_SERVICE_STATUS *status,
|
||||
[in] uint32 buf_size,
|
||||
[out] uint32 bytes_needed,
|
||||
[out] uint32 services_returned);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x0e */
|
||||
WERROR svcctl_EnumServicesStatus(
|
||||
WERROR svcctl_EnumServicesStatusW(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 type,
|
||||
[in] uint32 state,
|
||||
@ -129,7 +190,7 @@
|
||||
);
|
||||
/*****************/
|
||||
/* Function 0x0f */
|
||||
WERROR svcctl_OpenSCManager(
|
||||
WERROR svcctl_OpenSCManagerW(
|
||||
[in] unistr *MachineName,
|
||||
[in] unistr *DatabaseName,
|
||||
[in] uint32 access_mask,
|
||||
@ -137,15 +198,21 @@
|
||||
|
||||
/*****************/
|
||||
/* Function 0x10 */
|
||||
WERROR svcctl_OpenService();
|
||||
WERROR svcctl_OpenServiceW([in,ref] policy_handle *scmanager_handle,
|
||||
[in] unistr *ServiceName,
|
||||
[in] uint32 access_mask);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x11 */
|
||||
WERROR svcctl_QueryServiceConfig();
|
||||
WERROR svcctl_QueryServiceConfigW([in,ref] policy_handle *handle,
|
||||
[out] uint8 query[buf_size], //QUERY_SERVICE_CONFIG
|
||||
[in] uint32 buf_size,
|
||||
[out] uint32 bytes_needed
|
||||
);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x12 */
|
||||
WERROR svcctl_QueryServiceLockStatus(
|
||||
WERROR svcctl_QueryServiceLockStatusW(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 buf_size,
|
||||
[out,ref] SERVICE_LOCK_STATUS *status,
|
||||
@ -154,8 +221,211 @@
|
||||
|
||||
/*****************/
|
||||
/* Function 0x13 */
|
||||
WERROR svcctl_StartService(
|
||||
WERROR svcctl_StartServiceW(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 NumArgs,
|
||||
[in,length_of(NumArgs)] unistr *Arguments);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x14 */
|
||||
WERROR svcctl_GetServiceDisplayNameW([in,ref] policy_handle *handle,
|
||||
[in] unistr *service_name,
|
||||
[out] unistr *display_name,
|
||||
[in,out] uint32 *display_name_length);
|
||||
/*****************/
|
||||
/* Function 0x15 */
|
||||
WERROR svcctl_GetServiceKeyNameW([in,ref] policy_handle *handle,
|
||||
[in] unistr *service_name,
|
||||
[out] unistr *key_name,
|
||||
[in,out] uint32 *display_name_length);
|
||||
/*****************/
|
||||
/* Function 0x16 */
|
||||
WERROR svcctl_SCSetServiceBitsA(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 bits,
|
||||
[in] boolean32 bitson,
|
||||
[in] boolean32 immediate);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x17 */
|
||||
WERROR svcctl_ChangeServiceConfigA([in,ref] policy_handle *handle,
|
||||
[in] uint32 type,
|
||||
[in] uint32 start,
|
||||
[in] uint32 error,
|
||||
[in] unistr *binary_path,
|
||||
[in] unistr *load_order_group,
|
||||
[out] uint32 tag_id,
|
||||
[in] unistr *dependencies,
|
||||
[in] unistr *service_start_name,
|
||||
[in] unistr *password,
|
||||
[in] unistr *display_name);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x18 */
|
||||
WERROR svcctl_CreateServiceA([in,ref] policy_handle *handle,
|
||||
[in] unistr *ServiceName,
|
||||
[in] unistr *DisplayName,
|
||||
[in] uint32 desired_access,
|
||||
[in] uint32 type,
|
||||
[in] uint32 start_type,
|
||||
[in] uint32 error_control,
|
||||
[in] unistr *binary_path,
|
||||
[in] unistr *LoadOrderGroupKey,
|
||||
[out] uint32 *TagId,
|
||||
[in] unistr *dependencies,
|
||||
[in] unistr *service_start_name,
|
||||
[in] unistr *password);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x19 */
|
||||
WERROR svcctl_EnumDependentServicesA([in,ref] policy_handle *service,
|
||||
[in] uint32 state,
|
||||
[out] ENUM_SERVICE_STATUS *status,
|
||||
[in] uint32 buf_size,
|
||||
[out] uint32 bytes_needed,
|
||||
[out] uint32 services_returned);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x1a */
|
||||
WERROR svcctl_EnumServicesStatusA(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 type,
|
||||
[in] uint32 state,
|
||||
[in] uint32 buf_size,
|
||||
[out,size_is(buf_size)] uint8 service[*],
|
||||
[out] uint32 bytes_needed,
|
||||
[out] uint32 services_returned,
|
||||
[in,out] uint32 *resume_handle
|
||||
);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x1b */
|
||||
WERROR svcctl_OpenSCManagerA(
|
||||
[in] unistr *MachineName,
|
||||
[in] unistr *DatabaseName,
|
||||
[in] uint32 access_mask,
|
||||
[out,ref] policy_handle *handle);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x1c */
|
||||
WERROR svcctl_OpenServiceA([in,ref] policy_handle *scmanager_handle,
|
||||
[in] unistr *ServiceName,
|
||||
[in] uint32 access_mask);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x1d */
|
||||
WERROR svcctl_QueryServiceConfigA([in,ref] policy_handle *handle,
|
||||
[out] uint8 query[buf_size], //QUERYU_SERVICE_CONFIG
|
||||
[in] uint32 buf_size,
|
||||
[out] uint32 bytes_needed
|
||||
);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x1e */
|
||||
WERROR svcctl_QueryServiceLockStatusA(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 buf_size,
|
||||
[out,ref] SERVICE_LOCK_STATUS *status,
|
||||
[out,ref] uint32 *required_buf_size
|
||||
);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x1f */
|
||||
WERROR svcctl_StartServiceA(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 NumArgs,
|
||||
[in,length_of(NumArgs)] unistr *Arguments);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x20 */
|
||||
WERROR svcctl_GetServiceDisplayNameA([in,ref] policy_handle *handle,
|
||||
[in] unistr *service_name,
|
||||
[out] unistr *display_name,
|
||||
[in,out] uint32 *display_name_length);
|
||||
/*****************/
|
||||
/* Function 0x21 */
|
||||
WERROR svcctl_GetServiceKeyNameA([in,ref] policy_handle *handle,
|
||||
[in] unistr *service_name,
|
||||
[out] unistr *key_name,
|
||||
[in,out] uint32 *display_name_length);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x22 */
|
||||
WERROR svcctl_GetCurrentGroupeStateW();
|
||||
|
||||
/*****************/
|
||||
/* Function 0x23 */
|
||||
WERROR svcctl_EnumServiceGroupW();
|
||||
|
||||
/*****************/
|
||||
/* Function 0x24 */
|
||||
WERROR svcctl_ChangeServiceConfig2A([in,ref] policy_handle *handle,
|
||||
[in] uint32 info_level,
|
||||
[in] uint8 *info
|
||||
);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x25 */
|
||||
WERROR svcctl_ChangeServiceConfig2W([in,ref] policy_handle *handle,
|
||||
[in] uint32 info_level,
|
||||
[in] uint8 *info);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x26 */
|
||||
WERROR svcctl_QueryServiceConfig2A(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 info_level,
|
||||
[out] uint8 buffer[buf_size],
|
||||
[in] uint32 buf_size,
|
||||
[out] uint32 bytes_needed);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x27 */
|
||||
WERROR svcctl_QueryServiceConfig2W(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 info_level,
|
||||
[out] uint8 buffer[buf_size],
|
||||
[in] uint32 buf_size,
|
||||
[out] uint32 bytes_needed);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x28 */
|
||||
WERROR svcctl_QueryServiceStatusEx(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in] uint32 info_level,
|
||||
[out] uint8 buffer[buf_size],
|
||||
[in] uint32 buf_size,
|
||||
[out] uint32 bytes_needed);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x29 */
|
||||
WERROR EnumServicesStatusExA(
|
||||
[in,ref] policy_handle *scmanager,
|
||||
[in] uint32 info_level,
|
||||
[in] uint32 type,
|
||||
[in] uint32 state,
|
||||
[out] uint8 services[buf_size],
|
||||
[in] uint32 buf_size,
|
||||
[out] uint32 bytes_needed,
|
||||
[out] uint32 service_returned,
|
||||
[in,out] uint32 *resume_handle,
|
||||
[out] unistr *group_name);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x2a */
|
||||
WERROR EnumServicesStatusExW(
|
||||
[in,ref] policy_handle *scmanager,
|
||||
[in] uint32 info_level,
|
||||
[in] uint32 type,
|
||||
[in] uint32 state,
|
||||
[out] uint8 services[buf_size],
|
||||
[in] uint32 buf_size,
|
||||
[out] uint32 bytes_needed,
|
||||
[out] uint32 service_returned,
|
||||
[in,out] uint32 *resume_handle,
|
||||
[out] unistr *group_name);
|
||||
|
||||
/*****************/
|
||||
/* Function 0x2b */
|
||||
WERROR svcctl_SCSendTSMessage();
|
||||
}
|
||||
|
@ -105,17 +105,17 @@ NTSTATUS dcerpc_epm_map_tcp_port(const char *server,
|
||||
twr.towers.floors[1].rhs.rhs_data = data_blob_talloc_zero(p->mem_ctx, 2);
|
||||
|
||||
/* on an RPC connection ... */
|
||||
twr.towers.floors[2].lhs.protocol = EPM_PROTOCOL_RPC_C;
|
||||
twr.towers.floors[2].lhs.protocol = EPM_PROTOCOL_NCACN_RPC_C;
|
||||
twr.towers.floors[2].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr.towers.floors[2].rhs.rhs_data = data_blob_talloc_zero(p->mem_ctx, 2);
|
||||
|
||||
/* on a TCP port ... */
|
||||
twr.towers.floors[3].lhs.protocol = EPM_PROTOCOL_TCP;
|
||||
twr.towers.floors[3].lhs.protocol = EPM_PROTOCOL_NCACN_TCP;
|
||||
twr.towers.floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr.towers.floors[3].rhs.rhs_data = data_blob_talloc_zero(p->mem_ctx, 2);
|
||||
|
||||
/* on an IP link ... */
|
||||
twr.towers.floors[4].lhs.protocol = EPM_PROTOCOL_IP;
|
||||
twr.towers.floors[4].lhs.protocol = EPM_PROTOCOL_NCACN_IP;
|
||||
twr.towers.floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr.towers.floors[4].rhs.rhs_data = data_blob_talloc_zero(p->mem_ctx, 4);
|
||||
|
||||
|
@ -70,21 +70,21 @@ static BOOL fill_protocol_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr,
|
||||
twr->floors[1].rhs.rhs_data = data_blob_talloc_zero(mem_ctx, 2);
|
||||
|
||||
/* on an RPC connection ... */
|
||||
twr->floors[2].lhs.protocol = EPM_PROTOCOL_RPC_C;
|
||||
twr->floors[2].lhs.protocol = EPM_PROTOCOL_NCACN_RPC_C;
|
||||
twr->floors[2].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr->floors[2].rhs.rhs_data = data_blob_talloc_zero(mem_ctx, 2);
|
||||
|
||||
switch (e->ep_description.type) {
|
||||
case ENDPOINT_SMB:
|
||||
/* on a SMB pipe ... */
|
||||
twr->floors[3].lhs.protocol = EPM_PROTOCOL_SMB;
|
||||
twr->floors[3].lhs.protocol = EPM_PROTOCOL_NCACN_SMB;
|
||||
twr->floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr->floors[3].rhs.rhs_data.data = talloc_asprintf(mem_ctx, "\\PIPE\\%s",
|
||||
e->ep_description.info.smb_pipe);
|
||||
twr->floors[3].rhs.rhs_data.length = strlen(twr->floors[3].rhs.rhs_data.data)+1;
|
||||
|
||||
/* on an NetBIOS link ... */
|
||||
twr->floors[4].lhs.protocol = EPM_PROTOCOL_NETBIOS;
|
||||
twr->floors[4].lhs.protocol = EPM_PROTOCOL_NCACN_NETBIOS;
|
||||
twr->floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr->floors[4].rhs.rhs_data.data = talloc_asprintf(mem_ctx, "\\\\%s",
|
||||
lp_netbios_name());
|
||||
@ -93,13 +93,13 @@ static BOOL fill_protocol_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr,
|
||||
|
||||
case ENDPOINT_TCP:
|
||||
/* on a TCP connection ... */
|
||||
twr->floors[3].lhs.protocol = EPM_PROTOCOL_TCP;
|
||||
twr->floors[3].lhs.protocol = EPM_PROTOCOL_NCACN_TCP;
|
||||
twr->floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr->floors[3].rhs.rhs_data = data_blob_talloc(mem_ctx, NULL, 2);
|
||||
RSSVAL(twr->floors[3].rhs.rhs_data.data, 0, e->ep_description.info.tcp_port);
|
||||
|
||||
/* on an IP link ... */
|
||||
twr->floors[4].lhs.protocol = EPM_PROTOCOL_IP;
|
||||
twr->floors[4].lhs.protocol = EPM_PROTOCOL_NCACN_IP;
|
||||
twr->floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr->floors[4].rhs.rhs_data = data_blob_talloc_zero(mem_ctx, 4);
|
||||
/* TODO: we should fill in our IP address here as a hint to the
|
||||
@ -272,7 +272,7 @@ static NTSTATUS epm_Map(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
||||
floors[1].lhs.protocol != EPM_PROTOCOL_UUID ||
|
||||
guid_cmp(mem_ctx, &floors[1].lhs.info.uuid.uuid, NDR_GUID) != 0 ||
|
||||
floors[1].lhs.info.uuid.version != NDR_GUID_VERSION ||
|
||||
floors[2].lhs.protocol != EPM_PROTOCOL_RPC_C) {
|
||||
floors[2].lhs.protocol != EPM_PROTOCOL_NCACN_RPC_C) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
@ -283,14 +283,14 @@ static NTSTATUS epm_Map(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
||||
}
|
||||
switch (eps[i].ep_description.type) {
|
||||
case ENDPOINT_SMB:
|
||||
if (floors[3].lhs.protocol != EPM_PROTOCOL_SMB ||
|
||||
floors[4].lhs.protocol != EPM_PROTOCOL_NETBIOS) {
|
||||
if (floors[3].lhs.protocol != EPM_PROTOCOL_NCACN_SMB ||
|
||||
floors[4].lhs.protocol != EPM_PROTOCOL_NCACN_NETBIOS) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case ENDPOINT_TCP:
|
||||
if (floors[3].lhs.protocol != EPM_PROTOCOL_TCP ||
|
||||
floors[4].lhs.protocol != EPM_PROTOCOL_IP) {
|
||||
if (floors[3].lhs.protocol != EPM_PROTOCOL_NCACN_TCP ||
|
||||
floors[4].lhs.protocol != EPM_PROTOCOL_NCACN_IP) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
|
@ -34,6 +34,10 @@ static void display_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr)
|
||||
struct epm_lhs *lhs = &twr->floors[i].lhs;
|
||||
struct epm_rhs *rhs = &twr->floors[i].rhs;
|
||||
switch (lhs->protocol) {
|
||||
case EPM_PROTOCOL_NCACN_DNET_NSP:
|
||||
printf(" DNET/NSP");
|
||||
break;
|
||||
|
||||
case EPM_PROTOCOL_UUID:
|
||||
uuid = GUID_string(mem_ctx, &lhs->info.uuid.uuid);
|
||||
if (strcasecmp(uuid, NDR_GUID) == 0) {
|
||||
@ -43,11 +47,11 @@ static void display_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr)
|
||||
}
|
||||
break;
|
||||
|
||||
case EPM_PROTOCOL_RPC_C:
|
||||
case EPM_PROTOCOL_NCACN_RPC_C:
|
||||
printf(" RPC-C");
|
||||
break;
|
||||
|
||||
case EPM_PROTOCOL_IP:
|
||||
case EPM_PROTOCOL_NCACN_IP:
|
||||
printf(" IP:");
|
||||
if (rhs->rhs_data.length == 4) {
|
||||
struct in_addr in;
|
||||
@ -56,30 +60,43 @@ static void display_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr)
|
||||
}
|
||||
break;
|
||||
|
||||
case EPM_PROTOCOL_PIPE:
|
||||
case EPM_PROTOCOL_NCACN_PIPE:
|
||||
printf(" PIPE:%.*s", rhs->rhs_data.length, rhs->rhs_data.data);
|
||||
break;
|
||||
|
||||
case EPM_PROTOCOL_SMB:
|
||||
case EPM_PROTOCOL_NCACN_SMB:
|
||||
printf(" SMB:%.*s", rhs->rhs_data.length, rhs->rhs_data.data);
|
||||
break;
|
||||
|
||||
case EPM_PROTOCOL_NETBIOS:
|
||||
case EPM_PROTOCOL_NCACN_NETBIOS:
|
||||
printf(" NetBIOS:%.*s", rhs->rhs_data.length, rhs->rhs_data.data);
|
||||
break;
|
||||
|
||||
case EPM_PROTOCOL_NCACN_NB_NB:
|
||||
printf(" NB_NB");
|
||||
break;
|
||||
|
||||
case EPM_PROTOCOL_NCACN_SPX:
|
||||
printf(" SPX");
|
||||
break;
|
||||
|
||||
/*
|
||||
case EPM_PROTOCOL_NCACN_NB_IPX:
|
||||
printf(" NB_IPX");
|
||||
break;*/
|
||||
|
||||
case 0x01:
|
||||
printf(" UNK(1):%.*s", rhs->rhs_data.length, rhs->rhs_data.data);
|
||||
break;
|
||||
|
||||
case EPM_PROTOCOL_HTTP:
|
||||
case EPM_PROTOCOL_NCACN_HTTP:
|
||||
printf(" HTTP:");
|
||||
if (rhs->rhs_data.length == 2) {
|
||||
printf("%d", RSVAL(rhs->rhs_data.data, 0));
|
||||
}
|
||||
break;
|
||||
|
||||
case EPM_PROTOCOL_TCP:
|
||||
case EPM_PROTOCOL_NCACN_TCP:
|
||||
/* what is the difference between this and 0x1f? */
|
||||
printf(" TCP:");
|
||||
if (rhs->rhs_data.length == 2) {
|
||||
@ -87,6 +104,10 @@ static void display_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr)
|
||||
}
|
||||
break;
|
||||
|
||||
case EPM_PROTOCOL_NCADG_UDP:
|
||||
printf(" UDP:");
|
||||
break;
|
||||
|
||||
default:
|
||||
printf(" UNK(%02x):", lhs->protocol);
|
||||
if (rhs->rhs_data.length == 2) {
|
||||
@ -128,15 +149,15 @@ static BOOL test_Map(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
printf("epm_Map results for '%s':\n",
|
||||
idl_pipe_name(uuid_str, twr->towers.floors[0].lhs.info.uuid.version));
|
||||
|
||||
twr->towers.floors[2].lhs.protocol = EPM_PROTOCOL_RPC_C;
|
||||
twr->towers.floors[2].lhs.protocol = EPM_PROTOCOL_NCACN_RPC_C;
|
||||
twr->towers.floors[2].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr->towers.floors[2].rhs.rhs_data = data_blob_talloc_zero(p->mem_ctx, 2);
|
||||
|
||||
twr->towers.floors[3].lhs.protocol = EPM_PROTOCOL_TCP;
|
||||
twr->towers.floors[3].lhs.protocol = EPM_PROTOCOL_NCACN_TCP;
|
||||
twr->towers.floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr->towers.floors[3].rhs.rhs_data = data_blob_talloc_zero(p->mem_ctx, 2);
|
||||
|
||||
twr->towers.floors[4].lhs.protocol = EPM_PROTOCOL_IP;
|
||||
twr->towers.floors[4].lhs.protocol = EPM_PROTOCOL_NCACN_IP;
|
||||
twr->towers.floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr->towers.floors[4].rhs.rhs_data = data_blob_talloc_zero(p->mem_ctx, 4);
|
||||
|
||||
@ -149,7 +170,7 @@ static BOOL test_Map(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
}
|
||||
}
|
||||
|
||||
twr->towers.floors[3].lhs.protocol = EPM_PROTOCOL_HTTP;
|
||||
twr->towers.floors[3].lhs.protocol = EPM_PROTOCOL_NCACN_HTTP;
|
||||
twr->towers.floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr->towers.floors[3].rhs.rhs_data = data_blob_talloc_zero(p->mem_ctx, 2);
|
||||
|
||||
@ -162,11 +183,11 @@ static BOOL test_Map(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
}
|
||||
}
|
||||
|
||||
twr->towers.floors[3].lhs.protocol = EPM_PROTOCOL_SMB;
|
||||
twr->towers.floors[3].lhs.protocol = EPM_PROTOCOL_NCACN_SMB;
|
||||
twr->towers.floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr->towers.floors[3].rhs.rhs_data = data_blob_talloc_zero(p->mem_ctx, 2);
|
||||
|
||||
twr->towers.floors[4].lhs.protocol = EPM_PROTOCOL_NETBIOS;
|
||||
twr->towers.floors[4].lhs.protocol = EPM_PROTOCOL_NCACN_NETBIOS;
|
||||
twr->towers.floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
|
||||
twr->towers.floors[4].rhs.rhs_data = data_blob_talloc_zero(p->mem_ctx, 2);
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
static BOOL test_EnumServicesStatus(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct policy_handle *h)
|
||||
{
|
||||
struct svcctl_EnumServicesStatus r;
|
||||
struct svcctl_EnumServicesStatusW r;
|
||||
int i;
|
||||
NTSTATUS status;
|
||||
uint32 resume_handle = 0;
|
||||
@ -40,7 +40,7 @@ static BOOL test_EnumServicesStatus(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
r.out.services_returned = 0;
|
||||
r.out.bytes_needed = 0;
|
||||
|
||||
status = dcerpc_svcctl_EnumServicesStatus(p, mem_ctx, &r);
|
||||
status = dcerpc_svcctl_EnumServicesStatusW(p, mem_ctx, &r);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("ËnumServicesStatus failed!\n");
|
||||
@ -51,7 +51,7 @@ static BOOL test_EnumServicesStatus(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
r.in.buf_size = r.out.bytes_needed;
|
||||
r.out.service = talloc(mem_ctx, r.out.bytes_needed);
|
||||
|
||||
status = dcerpc_svcctl_EnumServicesStatus(p, mem_ctx, &r);
|
||||
status = dcerpc_svcctl_EnumServicesStatusW(p, mem_ctx, &r);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("ËnumServicesStatus failed!\n");
|
||||
@ -74,7 +74,7 @@ static BOOL test_EnumServicesStatus(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
|
||||
static BOOL test_OpenSCManager(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct policy_handle *h)
|
||||
{
|
||||
struct svcctl_OpenSCManager r;
|
||||
struct svcctl_OpenSCManagerW r;
|
||||
NTSTATUS status;
|
||||
|
||||
r.in.MachineName = NULL;
|
||||
@ -82,7 +82,7 @@ static BOOL test_OpenSCManager(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struc
|
||||
r.in.access_mask = SEC_RIGHTS_MAXIMUM_ALLOWED;
|
||||
r.out.handle = h;
|
||||
|
||||
status = dcerpc_svcctl_OpenSCManager(p, mem_ctx, &r);
|
||||
status = dcerpc_svcctl_OpenSCManagerW(p, mem_ctx, &r);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("OpenSCManager failed!\n");
|
||||
return False;
|
||||
|
Loading…
x
Reference in New Issue
Block a user