脱机域加入 IDL 定义
脱机域加入(ODJ)数据结构未在 C\C++ 头文件中定义。 相反,这些结构采用接口定义语言(IDL)格式进行定义,编译后用于序列化和反序列化。 在 Windows 平台上,这些结构的序列化和反序列化由以下 Win32 API 自动处理:
NetRequestProvisioningPackageInstall
在某些情况下,例如与非 Windows 平台互操作,可能需要执行手动序列化和反序列化。 本主题包含单个 IDL 编译单元中所有 ODJ 数据结构的定义,为方便起见, 还定义了匹配的应用程序配置文件(ACF)定义。 此内容未作为任何 SDK 的一部分提供。 因此,应将以下内容复制到代码中,并使用 IDL 编译器进行编译。 IDL 编译器将生成必要的序列化\反序列化存根函数,这些函数随后会链接到应用程序。 有关类型序列化和反序列化工作原理的更多详细信息,请参阅 类型序列化。
有关详细成员文档,请参阅各个结构部分。
如果使用 Microsoft MIDL 编译器,则应指定以下标志以最大程度地提高兼容性:
/char unsigned
/ms_ext
/c_ext
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;
}
[
// 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;
}