Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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;