import "adts/claims.idl";
import "ms-dtyp.idl";
 
typedef struct _PAC_INFO_BUFFER {
    ULONG ulType;
    ULONG cbBufferSize;
    ULONG64 Offset;
} PAC_INFO_BUFFER, *PPAC_INFO_BUFFER;
 
typedef struct _PACTYPE {
    ULONG cBuffers;
    ULONG Version;
    PAC_INFO_BUFFER Buffers[1];
} PACTYPE, *PPACTYPE;
 
typedef struct _PAC_CREDENTIAL_INFO {
    ULONG Version;
    ULONG EncryptionType;
    UCHAR SerializedData[1];
} PAC_CREDENTIAL_INFO, *PPAC_CREDENTIAL_INFO;
 
typedef struct _SECPKG_SUPPLEMENTAL_CRED {
    RPC_UNICODE_STRING PackageName;
    ULONG CredentialSize;
    [size_is(CredentialSize)]
    PUCHAR Credentials;
} SECPKG_SUPPLEMENTAL_CRED, *PSECPKG_SUPPLEMENTAL_CRED;
 
typedef struct _PAC_CREDENTIAL_DATA {
    ULONG CredentialCount;
    [size_is(CredentialCount)] 
         SECPKG_SUPPLEMENTAL_CRED Credentials[*];
} PAC_CREDENTIAL_DATA,
  *PPAC_CREDENTIAL_DATA;
 
typedef struct _PAC_CLIENT_INFO {
    FILETIME ClientId;
    USHORT NameLength;
    WCHAR Name[1];
} PAC_CLIENT_INFO, *PPAC_CLIENT_INFO;
 
typedef struct _NTLM_SUPPLEMENTAL_CREDENTIAL {
    ULONG Version;
    ULONG Flags;
    UCHAR LmPassword[16];
    UCHAR NtPassword[16];
} NTLM_SUPPLEMENTAL_CREDENTIAL, *PNTLM_SUPPLEMENTAL_CREDENTIAL;
 
typedef /* struct _RPC_SID */ RPC_SID  *PISID; /* defined in ms-dtyp */
 
typedef struct _CYPHER_BLOCK {
    CHAR data[8];
}CYPHER_BLOCK;
 
typedef struct _USER_SESSION_KEY {
    CYPHER_BLOCK data[2];
}USER_SESSION_KEY;
 
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 _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 _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;
