2.16 Formal MIDL Definition
The Microsoft Interface Definition Language (MIDL) description of the PAC is as follows.
-
import "ms-adts-claims.idl"; typedef struct _RPC_SID *PISID; typedef struct _KERB_SID_AND_ATTRIBUTES{ PISID Sid; ULONG Attributes; } KERB_SID_AND_ATTRIBUTES, *PKERB_SID_AND_ATTRIBUTES; typedef struct _GROUP_MEMBERSHIP { ULONG RelativeId; ULONG Attributes; } GROUP_MEMBERSHIP, *PGROUP_MEMBERSHIP; typedef struct DOMAIN_GROUP_MEMBERSHIP { PISID DomainId; ULONG GroupCount; [size_is(GroupCount)] PGROUP_MEMBERSHIP GroupIds; } DOMAIN_GROUP_MEMBERSHIP, *PDOMAIN_GROUP_MEMBERSHIP; typedef struct _PACTYPE { ULONG cBuffers; ULONG Version; PAC_INFO_BUFFER Buffers[1]; } PACTYPE, *PPACTYPE; typedef struct _PAC_INFO_BUFFER { ULONG ulType; ULONG cbBufferSize; ULONG64 Offset; } PAC_INFO_BUFFER, *PPAC_INFO_BUFFER; typedef struct _CYPHER_BLOCK { CHAR data[8]; }CYPHER_BLOCK; typedef struct _USER_SESSION_KEY { CYPHER_BLOCK data[2]; }USER_SESSION_KEY; typedef struct _KERB_VALIDATION_INFO { FILETIME LogonTime; FILETIME LogoffTime; FILETIME KickOffTime; FILETIME PasswordLastSet; FILETIME PasswordCanChange; FILETIME PasswordMustChange; RPC_UNICODE_STRING EffectiveName; RPC_UNICODE_STRING FullName; RPC_UNICODE_STRING LogonScript; RPC_UNICODE_STRING ProfilePath; RPC_UNICODE_STRING HomeDirectory; RPC_UNICODE_STRING HomeDirectoryDrive; USHORT LogonCount; USHORT BadPasswordCount; ULONG UserId; ULONG PrimaryGroupId; ULONG GroupCount; [size_is(GroupCount)] PGROUP_MEMBERSHIP GroupIds; ULONG UserFlags; USER_SESSION_KEY UserSessionKey; RPC_UNICODE_STRING LogonServer; RPC_UNICODE_STRING LogonDomainName; PISID LogonDomainId; ULONG Reserved1[2]; ULONG UserAccountControl; ULONG Reserved3[7]; ULONG SidCount; [size_is(SidCount)] PKERB_SID_AND_ATTRIBUTES ExtraSids; PISID ResourceGroupDomainSid; ULONG ResourceGroupCount; [size_is(ResourceGroupCount)] PGROUP_MEMBERSHIP ResourceGroupIds; } KERB_VALIDATION_INFO, *PKERB_VALIDATION_INFO; typedef struct _PAC_CREDENTIAL_INFO { ULONG Version; ULONG EncryptionType; UCHAR SerializedData[1]; } PAC_CREDENTIAL_INFO, *PPAC_CREDENTIAL_INFO; typedef struct _PAC_CREDENTIAL_DATA { ULONG CredentialCount; [size_is(CredentialCount)] SECPKG_SUPPLEMENTAL_CRED Credentials[*]; } PAC_CREDENTIAL_DATA, *PPAC_CREDENTIAL_DATA; typedef struct _SECPKG_SUPPLEMENTAL_CRED { RPC_UNICODE_STRING PackageName; ULONG CredentialSize; [size_is(CredentialSize)] PUCHAR Credentials; } SECPKG_SUPPLEMENTAL_CRED, *PSECPKG_SUPPLEMENTAL_CRED; typedef struct _NTLM_SUPPLEMENTAL_CREDENTIAL { ULONG Version; ULONG Flags; UCHAR LmPassword[16]; UCHAR NtPassword[16]; } NTLM_SUPPLEMENTAL_CREDENTIAL, *PNTLM_SUPPLEMENTAL_CREDENTIAL; typedef struct _PAC_CLIENT_INFO { FILETIME ClientId; USHORT NameLength; WCHAR Name[1]; } PAC_CLIENT_INFO, *PPAC_CLIENT_INFO; typedef struct _PAC_SIGNATURE_DATA { ULONG SignatureType; UCHAR Signature[ANYSIZE_ARRAY]; // size is from the PAC_INFO_BUFFER - sizeof(ULONG) } PAC_SIGNATURE_DATA, *PPAC_SIGNATURE_DATA; typedef struct _S4U_DELEGATION_INFO { RPC_UNICODE_STRING S4U2proxyTarget; ULONG TransitedListSize; [size_is( TransitedListSize )] PRPC_UNICODE_STRING S4UTransitedServices; } S4U_DELEGATION_INFO, *PS4U_DELEGATION_INFO; typedef struct _UPN_DNS_INFO { USHORT UpnLength; USHORT UpnOffset; USHORT DnsDomainNameLength; USHORT DnsDomainNameOffset; ULONG Flags; } UPN_DNS_INFO, *PUPN_DNS_INFO; typedef struct _PAC_CLIENT_CLAIMS_INFO { PCLAIMS_SET_METADATA Claims; } PAC_CLIENT_CLAIMS_INFO, *PPAC_CLIENT_CLAIMS_INFO; typedef struct _PAC_DEVICE_INFO { ULONG UserId; ULONG PrimaryGroupId; PISID AccountDomainId; ULONG AccountGroupCount; [size_is(AccountGroupCount)] PGROUP_MEMBERSHIP AccountGroupIds; ULONG SidCount; [size_is(SidCount)] PKERB_SID_AND_ATTRIBUTES ExtraSids; ULONG DomainGroupCount; [size_is(DomainGroupCount)] PDOMAIN_GROUP_MEMBERSHIP DomainGroup; } PAC_DEVICE_INFO, *PPAC_DEVICE_INFO; typedef struct _PAC_DEVICE_CLAIMS_INFO { PCLAIMS_SET_METADATA Claims; } PAC_DEVICE_CLAIMS_INFO, *PPAC_DEVICE_CLAIMS_INFO; typedef struct _PAC_ATTRIBUTES_INFO { ULONG FlagsLength; // specified in bits ULONG Flags[ANYSIZE_ARRAY]; } PAC_ATTRIBUTES_INFO, *PPAC_ATTRIBUTES_INFO;