summaryrefslogtreecommitdiffstats
path: root/librpc/idl/ODJ.idl
diff options
context:
space:
mode:
Diffstat (limited to 'librpc/idl/ODJ.idl')
-rw-r--r--librpc/idl/ODJ.idl268
1 files changed, 268 insertions, 0 deletions
diff --git a/librpc/idl/ODJ.idl b/librpc/idl/ODJ.idl
new file mode 100644
index 0000000..00c731b
--- /dev/null
+++ b/librpc/idl/ODJ.idl
@@ -0,0 +1,268 @@
+/*
+ The MIT License (MIT)
+ Copyright (c) Microsoft Corporation
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+ associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial
+ portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ The Offline Domain Join IDL has been derived from :
+
+ https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/NetMgmt/odj-idl.md
+*/
+
+import "misc.idl", "lsa.idl", "netlogon.idl", "security.idl";
+
+#include "idl_types.h"
+
+cpp_quote("#define OP_JP2_FLAG_PERSISTENTSITE 0x00000001")
+
+[
+ uuid("11111111-3333-5555-7777-99999999"),
+ version(0.0),
+ pointer_default(unique),
+ helpstring("Offline Domain Join IDL"),
+ helper("../librpc/ndr/ndr_ODJ.h")
+]
+interface ODJ
+{
+ typedef struct {
+ uint32 cbBlob;
+ [size_is(cbBlob),flag(LIBNDR_PRINT_ARRAY_HEX)] uint8 *pBlob;
+ } OP_BLOB;
+
+ /* Contains a serialized ODJ_WIN7_BLOB structure. */
+ const string ODJ_GUID_JOIN_PROVIDER = "{631c7621-5289-4321-bc9e-80f843f868c3}";
+
+ /* Contains a serialized OP_JOIN_PROV2_PART structure. */
+ const string ODJ_GUID_JOIN_PROVIDER2 = "{57BFC56B-52F9-480C-ADCB-91B3F8A82317}";
+
+ /* Contains a serialized OP_JOIN_PROV3_PART structure. */
+ const string ODJ_GUID_JOIN_PROVIDER3 = "{FC0CCF25-7FFA-474A-8611-69FFE269645F}";
+
+ /* Contains a serialized OP_CERT_PART structure. */
+ const string ODJ_GUID_CERT_PROVIDER = "{9c0971e9-832f-4873-8e87-ef1419d4781e}";
+
+ /* Contains a serialized OP_POLICY_PART structure. */
+ const string ODJ_GUID_POLICY_PROVIDER = "{68fb602a-0c09-48ce-b75f-07b7bd58f7ec}";
+
+#if 0
+ typedef struct {
+ char Value[6];
+ } SID_IDENTIFIER_AUTHORITY;
+
+ typedef struct {
+ char Revision;
+ char SubAuthorityCount;
+ SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+ [size_is(SubAuthorityCount)] uint32 SubAuthority[*];
+ } ODJ_SID;
+
+ typedef struct {
+ USHORT Length;
+ USHORT MaximumLength;
+ [size_is(MaximumLength/2), length_is(Length/2)] PWSTR Buffer;
+ } ODJ_UNICODE_STRING;
+#endif
+#define ODJ_SID dom_sid2
+#define ODJ_UNICODE_STRING lsa_StringLarge
+
+#define ODJ_DECLARE_SERIALIZED_PTR(el_name) \
+ typedef [public] struct { \
+ el_name *p; \
+ } el_name ##_ctr; \
+ \
+ typedef [public,gensize] struct { \
+ [subcontext(0xFFFFFC01)] el_name ## _ctr s; \
+ } el_name ## _serialized_ptr;
+
+ typedef struct {
+ ODJ_UNICODE_STRING Name;
+ ODJ_UNICODE_STRING DnsDomainName;
+ ODJ_UNICODE_STRING DnsForestName;
+ GUID DomainGuid;
+ ODJ_SID *Sid;
+ } ODJ_POLICY_DNS_DOMAIN_INFO;
+
+ typedef struct {
+ [string,charset(UTF16)] uint16 *lpDomain;
+ [string,charset(UTF16)] uint16 *lpMachineName;
+ [string,charset(UTF16)] [flag(NDR_SECRET)] uint16 *lpMachinePassword;
+ /*
+ * Not sure whether the following 4 bytes are padding or a
+ * pointer, at least it's value may not be 0 for Windows to accept our
+ * generated win7blobs - gd
+ */
+#if 0
+ [flag(NDR_ALIGN8)] DATA_BLOB _pad;
+#else
+ [value(0xffffffff)] uint32 _pad;
+#endif
+ ODJ_POLICY_DNS_DOMAIN_INFO DnsDomainInfo;
+ netr_DsRGetDCNameInfo DcInfo;
+ DWORD Options;
+ } ODJ_WIN7BLOB;
+
+ typedef ODJ_WIN7BLOB *PODJ_WIN7BLOB;
+
+ typedef struct {
+ DWORD dwFlags;
+ [string,charset(UTF16)] uint16 *lpNetbiosName;
+ [string,charset(UTF16)] uint16 *lpSiteName;
+ [string,charset(UTF16)] uint16 *lpPrimaryDNSDomain;
+ DWORD dwReserved;
+ [string,charset(UTF16)] uint16 *lpReserved;
+ } OP_JOINPROV2_PART;
+
+ typedef struct {
+ DWORD Rid;
+ [string,charset(UTF16)] uint16 *lpSid;
+ } OP_JOINPROV3_PART;
+
+ typedef struct {
+ [string,charset(UTF16)] uint16 *pKeyPath;
+ [string,charset(UTF16)] uint16 *pValueName;
+ winreg_Type ulValueType;
+ uint32 cbValueData;
+ [size_is(cbValueData),flag(LIBNDR_PRINT_ARRAY_HEX)] uint8 *pValueData;
+ } OP_POLICY_ELEMENT;
+
+ typedef struct {
+ [string,charset(UTF16)] uint16 *pSource;
+ uint32 ulRootKeyId;
+ uint32 cElements;
+ [size_is(cElements)] OP_POLICY_ELEMENT *pElements;
+ } OP_POLICY_ELEMENT_LIST;
+
+ typedef struct {
+ uint32 cElementLists;
+ [size_is(cElementLists)]
+ OP_POLICY_ELEMENT_LIST *pElementLists;
+ OP_BLOB Extension;
+ } OP_POLICY_PART;
+
+ typedef struct {
+ [string,charset(UTF16)] uint16 *pTemplateName;
+ uint32 ulPrivateKeyExportPolicy;
+ [string,charset(UTF16)] uint16 *pPolicyServerUrl;
+ uint32 ulPolicyServerUrlFlags;
+ [string,charset(UTF16)] uint16 *pPolicyServerId;
+ uint32 cbPfx;
+ [size_is(cbPfx)] uint8 *pPfx;
+ } OP_CERT_PFX_STORE;
+
+ typedef struct {
+ uint32 StoreLocation;
+ [string,charset(UTF16)] uint16 *pStoreName;
+ uint32 cbSst;
+ [size_is(cbSst)] uint8 *pSst;
+ } OP_CERT_SST_STORE;
+
+ typedef struct {
+ uint32 cPfxStores;
+ [size_is(cPfxStores)] OP_CERT_PFX_STORE *pPfxStores;
+ uint32 cSstStores;
+ [size_is(cSstStores)] OP_CERT_SST_STORE *pSstStores;
+ OP_BLOB Extension;
+ } OP_CERT_PART;
+
+ ODJ_DECLARE_SERIALIZED_PTR(ODJ_WIN7BLOB)
+ ODJ_DECLARE_SERIALIZED_PTR(OP_JOINPROV2_PART)
+ ODJ_DECLARE_SERIALIZED_PTR(OP_JOINPROV3_PART)
+ ODJ_DECLARE_SERIALIZED_PTR(OP_POLICY_PART)
+ ODJ_DECLARE_SERIALIZED_PTR(OP_CERT_PART)
+
+ typedef [public,nodiscriminant,gensize] union {
+ [case(1)] [subcontext(0xFFFFFC01)] ODJ_WIN7BLOB win7blob;
+ [case(2)] [subcontext(0xFFFFFC01)] OP_JOINPROV2_PART_ctr join_prov2;
+ [case(3)] [subcontext(0xFFFFFC01)] OP_JOINPROV3_PART_ctr join_prov3;
+ [case(4)] [subcontext(0xFFFFFC01)] OP_CERT_PART_ctr cert_part;
+ [case(5)] [subcontext(0xFFFFFC01)] OP_POLICY_PART_ctr policy_part;
+ [default];
+ } OP_PACKAGE_PART_u;
+
+ typedef [public,bitmap32bit] bitmap {
+ OPSPI_PACKAGE_PART_ESSENTIAL = 0x00000001
+ } ODJ_PackageFlags;
+
+ typedef struct {
+ GUID PartType;
+ uint32 ulFlags;
+#if 1
+ [value(ndr_size_OP_PACKAGE_PART_u(Part, odj_switch_level_from_guid(&PartType), 0))] uint32 part_len;
+ [subcontext(4),subcontext_size(part_len),switch_is(odj_switch_level_from_guid(&PartType))] OP_PACKAGE_PART_u *Part;
+#else
+ OP_BLOB Part;
+#endif
+ OP_BLOB Extension;
+ } OP_PACKAGE_PART;
+
+ ODJ_DECLARE_SERIALIZED_PTR(OP_PACKAGE_PART)
+
+ typedef struct {
+ uint32 cParts;
+ [size_is(cParts)] OP_PACKAGE_PART *pParts;
+ OP_BLOB Extension;
+ } OP_PACKAGE_PART_COLLECTION;
+
+ ODJ_DECLARE_SERIALIZED_PTR(OP_PACKAGE_PART_COLLECTION)
+
+ typedef struct {
+ [value(ndr_size_OP_PACKAGE_PART_COLLECTION_serialized_ptr(w, 0))] uint32 cbBlob;
+ [subcontext(4), subcontext_size(cbBlob)] OP_PACKAGE_PART_COLLECTION_serialized_ptr *w;
+ } OP_PACKAGE_PART_COLLECTION_blob;
+
+ typedef struct {
+ GUID EncryptionType;
+ OP_BLOB EncryptionContext;
+#if 1
+ OP_PACKAGE_PART_COLLECTION_blob WrappedPartCollection;
+#else
+ OP_BLOB WrappedPartCollection;
+#endif
+ uint32 cbDecryptedPartCollection;
+ OP_BLOB Extension;
+ } OP_PACKAGE;
+
+ ODJ_DECLARE_SERIALIZED_PTR(OP_PACKAGE)
+
+ typedef [v1_enum,public] enum {
+ ODJ_WIN7_FORMAT = 0x00000001, /* blob is ODJ_WIN7BLOB */
+ ODJ_WIN8_FORMAT = 0x00000002 /* blob is OP_PACKAGE */
+ } ODJFormat;
+
+ typedef [public,nodiscriminant,gensize] union {
+ [case(ODJ_WIN7_FORMAT)] [subcontext(0xFFFFFC01)] ODJ_WIN7BLOB odj_win7blob;
+ [case(ODJ_WIN8_FORMAT)] [subcontext(0xFFFFFC01)] OP_PACKAGE_ctr op_package;
+ [default] [subcontext(0xFFFFFC01)] [flag(LIBNDR_FLAG_REMAINING)] DATA_BLOB blob;
+ } ODJ_BLOB_u;
+
+ typedef struct {
+ ODJFormat ulODJFormat;
+ [value(ndr_size_ODJ_BLOB_u(pBlob, ulODJFormat, 0))] uint32 cbBlob;
+#if 1
+ [switch_is(ulODJFormat), subcontext(4), subcontext_size(cbBlob)] ODJ_BLOB_u *pBlob;
+#else
+ [size_is(cbBlob),flag(LIBNDR_PRINT_ARRAY_HEX)] uint8 *pBlob;
+#endif
+ } ODJ_BLOB;
+
+ typedef [public] struct {
+ [value(1)] uint32 ulVersion;
+ uint32 ulcBlobs;
+ [size_is(ulcBlobs)] ODJ_BLOB *pBlobs;
+ } ODJ_PROVISION_DATA;
+
+ ODJ_DECLARE_SERIALIZED_PTR(ODJ_PROVISION_DATA)
+}