IDL-Definitionen für den Offlinedomänenbeitritt
Beschreibung
ODJ-Datenstrukturen (Offline Domain Join) sind in einer C\C++-Headerdatei nicht definiert. Stattdessen werden die Strukturen im IDL-Format (Interface Definition Language) definiert, das nach der Kompilierung zur Serialisierung und Deserialisierung verwendet wird. Die Serialisierung und Deserialisierung dieser Strukturen auf der Windows-Plattform erfolgt automatisch über die folgenden Win32-APIs:
NetRequestProvisioningPackageInstall
In einigen Situationen, z. B. interoperabilität mit Nicht-Windows-Plattformen, kann es erforderlich sein, manuelle Serialisierung und Deserialisierung durchzuführen. Dieses Thema enthält Definitionen für alle ODJ-Datenstrukturen in einer einzelnen IDL-Kompilierungseinheit und ist zur Vereinfachung enthalten. Außerdem wird eine entsprechende ACF-Definition (Application Configuration File) definiert. Dieser Inhalt wird nicht als Teil eines SDK bereitgestellt. Daher sollte der folgende Inhalt in Ihren Code kopiert und mit einem IDL-Compiler kompiliert werden. Der IDL-Compiler erzeugt die erforderlichen Serialisierungs-\Deserialisierungs-Stubfunktionen, die dann mit Ihrer Anwendung verknüpft sind. Weitere Informationen zur Funktionsweise der Typs serialisierung und Deserialisierung finden Sie unter Type Serialization.
Ausführliche Memberdokumentation finden Sie in den einzelnen Strukturabschnitten.
Wenn Sie den Microsoft MIDL-Compiler verwenden, sollten Sie die folgenden Flags angeben, um die Kompatibilität zu maximieren:
/char unsigned
/ms_ext
/c_ext
ODJ IDL-Datei
include "dsgetdc.h";
interface ODJ
{
typedef struct _ODJ_BLOB
{
ULONG ulODJFormat;
ULONG cbBlob;
[size_is(cbBlob)] PBYTE pBlob;
} ODJ_BLOB, *PODJ_BLOB;
typedef struct _ODJ_PROVISION_DATA
{
ULONG ulVersion;
ULONG ulcBlobs;
[size_is(ulcBlobs)] PODJ_BLOB pBlobs;
} ODJ_PROVISION_DATA;
typedef ODJ_PROVISION_DATA *PODJ_PROVISION_DATA;
typedef struct _OP_BLOB
{
ULONG cbBlob;
[size_is(cbBlob)] PBYTE pBlob;
} OP_BLOB, *POP_BLOB;
typedef struct _OP_PACKAGE_PART
{
GUID PartType;
ULONG ulFlags;
OP_BLOB Part;
OP_BLOB Extension;
} OP_PACKAGE_PART, *POP_PACKAGE_PART;
typedef struct _OP_PACKAGE_PART_COLLECTION
{
ULONG cParts;
[size_is(cParts)] POP_PACKAGE_PART pParts;
OP_BLOB Extension;
} OP_PACKAGE_PART_COLLECTION, *POP_PACKAGE_PART_COLLECTION;
typedef struct _OP_PACKAGE
{
GUID EncryptionType;
OP_BLOB EncryptionContext;
OP_BLOB WrappedPartCollection;
ULONG cbDecryptedPartCollection;
OP_BLOB Extension;
} OP_PACKAGE, *POP_PACKAGE;
typedef struct _SID_IDENTIFIER_AUTHORITY
{
UCHAR Value[6];
} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;
typedef struct _ODJ_SID
{
UCHAR Revision;
UCHAR SubAuthorityCount;
SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
[size_is(SubAuthorityCount)] ULONG SubAuthority[*];
} ODJ_SID, *PODJ_SID;
typedef struct _ODJ_UNICODE_STRING
{
USHORT Length;
USHORT MaximumLength;
[size_is(MaximumLength/2), length_is(Length/2)] PWSTR Buffer;
} ODJ_UNICODE_STRING, *PODJ_UNICODE_STRING;
typedef struct _ODJ_POLICY_DNS_DOMAIN_INFO
{
ODJ_UNICODE_STRING Name;
ODJ_UNICODE_STRING DnsDomainName;
ODJ_UNICODE_STRING DnsForestName;
GUID DomainGuid;
PODJ_SID Sid;
} ODJ_POLICY_DNS_DOMAIN_INFO;
typedef struct _ODJ_WIN7BLOB
{
[string] wchar_t *lpDomain;
[string] wchar_t *lpMachineName;
[string] wchar_t *lpMachinePassword;
ODJ_POLICY_DNS_DOMAIN_INFO DnsDomainInfo;
DOMAIN_CONTROLLER_INFOW DcInfo;
DWORD Options;
} ODJ_WIN7BLOB;
typedef ODJ_WIN7BLOB *PODJ_WIN7BLOB;
cpp_quote("#define OP_JP2_FLAG_PERSISTENTSITE 0x00000001")
typedef struct _OP_JOINPROV2_PART
{
DWORD dwFlags;
[string] wchar_t *lpNetbiosName;
[string] wchar_t *lpSiteName;
[string] wchar_t *lpPrimaryDNSDomain;
DWORD dwReserved;
[string] wchar_t *lpReserved;
} OP_JOINPROV2_PART, *POP_JOINPROV2_PART;
typedef struct _OP_JOINPROV3_PART
{
DWORD Rid;
[string] wchar_t *lpSid;
} OP_JOINPROV3_PART, *POP_JOINPROV3_PART;
typedef struct _OP_JOINPROV4_PART
{
DWORD Rid;
[string] wchar_t *lpSid;
GUID ObjectGuid;
} OP_JOINPROV4_PART, *POP_JOINPROV4_PART;
typedef struct _OP_POLICY_ELEMENT
{
[string] wchar_t *pKeyPath;
[string] wchar_t *pValueName;
ULONG ulValueType;
ULONG cbValueData;
[size_is(cbValueData)] PBYTE pValueData;
} OP_POLICY_ELEMENT, *POP_POLICY_ELEMENT;
typedef struct _OP_POLICY_ELEMENT_LIST
{
[string] wchar_t *pSource;
ULONG ulRootKeyId;
ULONG cElements;
[size_is(cElements)] POP_POLICY_ELEMENT pElements;
} OP_POLICY_ELEMENT_LIST, *POP_POLICY_ELEMENT_LIST;
typedef struct _OP_POLICY_PART
{
ULONG cElementLists;
[size_is(cElementLists)] POP_POLICY_ELEMENT_LIST pElementLists;
OP_BLOB Extension;
} OP_POLICY_PART, *POP_POLICY_PART;
typedef struct _OP_CERT_PFX_STORE
{
[string] wchar_t *pTemplateName;
ULONG ulPrivateKeyExportPolicy;
[string] wchar_t *pPolicyServerUrl;
ULONG ulPolicyServerUrlFlags;
[string] wchar_t *pPolicyServerId;
ULONG cbPfx;
[size_is(cbPfx)] PBYTE pPfx;
} OP_CERT_PFX_STORE, *POP_CERT_PFX_STORE;
typedef struct _OP_CERT_SST_STORE
{
ULONG StoreLocation;
[string] wchar_t *pStoreName;
ULONG cbSst;
[size_is(cbSst)] PBYTE pSst;
} OP_CERT_SST_STORE, *POP_CERT_SST_STORE;
typedef struct _OP_CERT_PART
{
ULONG cPfxStores;
[size_is(cPfxStores)] POP_CERT_PFX_STORE pPfxStores;
ULONG cSstStores;
[size_is(cSstStores)] POP_CERT_SST_STORE pSstStores;
OP_BLOB Extension;
} OP_CERT_PART, *POP_CERT_PART;
}
ODJ ACF-Datei
[
// If necessary for your application, see MIDL documentation for alternatives to explicit_handle
explicit_handle
]
interface ODJ
{
typedef [encode, decode] PODJ_WIN7BLOB;
typedef [encode, decode] POP_JOINPROV2_PART;
typedef [encode, decode] POP_JOINPROV3_PART;
typedef [encode, decode] POP_JOINPROV4_PART;
typedef [encode, decode] PODJ_PROVISION_DATA;
typedef [encode, decode] POP_PACKAGE_PART;
typedef [encode, decode] POP_PACKAGE_PART_COLLECTION;
typedef [encode, decode] POP_PACKAGE;
typedef [encode, decode] POP_POLICY_PART;
typedef [encode, decode] POP_CERT_PART;
}