From: Eric Kohl Date: Sun, 25 Jun 2017 13:14:06 +0000 (+0000) Subject: [IDL] X-Git-Tag: ReactOS-0.4.6~175 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=41af86faddef00c2555c7817d834d7ab255e410f;ds=sidebyside [IDL] Add the Netlogon service interface definition. svn path=/trunk/; revision=75197 --- diff --git a/reactos/sdk/include/reactos/idl/netlogon.acf b/reactos/sdk/include/reactos/idl/netlogon.acf new file mode 100644 index 00000000000..5d6597308a4 --- /dev/null +++ b/reactos/sdk/include/reactos/idl/netlogon.acf @@ -0,0 +1,6 @@ +[ + explicit_handle +] +interface netlogon +{ +} \ No newline at end of file diff --git a/reactos/sdk/include/reactos/idl/netlogon.idl b/reactos/sdk/include/reactos/idl/netlogon.idl new file mode 100644 index 00000000000..e595024d6ce --- /dev/null +++ b/reactos/sdk/include/reactos/idl/netlogon.idl @@ -0,0 +1,1500 @@ +/* + * Netlogon Service interface definition + */ + +#include + +cpp_quote("#if 0") +typedef ULONG NTSTATUS; + +typedef struct _STRING +{ + USHORT Length; + USHORT MaximumLength; + [size_is(MaximumLength), length_is(Length)] CHAR *Buffer; +} STRING, *PSTRING; +cpp_quote("#endif") + +typedef struct _OLD_LARGE_INTEGER +{ + ULONG LowPart; + LONG HighPart; +} OLD_LARGE_INTEGER, *POLD_LARGE_INTEGER; + +typedef struct _CYPHER_BLOCK +{ + CHAR data[8]; +} CYPHER_BLOCK, *PCYPHER_BLOCK; + +typedef struct _NT_OWF_PASSWORD +{ + CYPHER_BLOCK data[2]; +} NT_OWF_PASSWORD, *PNT_OWF_PASSWORD, ENCRYPTED_NT_OWF_PASSWORD, *PENCRYPTED_NT_OWF_PASSWORD; + +typedef struct _LM_OWF_PASSWORD +{ + CYPHER_BLOCK data[2]; +} LM_OWF_PASSWORD, *PLM_OWF_PASSWORD, ENCRYPTED_LM_OWF_PASSWORD, *PENCRYPTED_LM_OWF_PASSWORD; + +typedef [handle] wchar_t *LOGONSRV_HANDLE; + +typedef struct _NLPR_SID_INFORMATION +{ + PRPC_SID SidPointer; +} NLPR_SID_INFORMATION, *PNLPR_SID_INFORMATION; + +typedef struct _NLPR_SID_ARRAY +{ + ULONG Count; + [size_is(Count)] PNLPR_SID_INFORMATION Sids; +} NLPR_SID_ARRAY, *PNLPR_SID_ARRAY; + +typedef struct _NLPR_CR_CIPHER_VALUE +{ + ULONG Length; + ULONG MaximumLength; + [size_is(MaximumLength), length_is(Length)] UCHAR *Buffer; +} NLPR_CR_CIPHER_VALUE, *PNLPR_CR_CIPHER_VALUE; + +typedef struct _NLPR_LOGON_HOURS +{ + USHORT UnitsPerWeek; + [size_is(1260), length_is((UnitsPerWeek + 7) / 8)] UCHAR *LogonHours; +} NLPR_LOGON_HOURS, *PNLPR_LOGON_HOURS; + +typedef struct _NLPR_USER_PRIVATE_INFO +{ + UCHAR SensitiveData; + ULONG DataLength; + [size_is(DataLength)] UCHAR *Data; +} NLPR_USER_PRIVATE_INFO, *PNLPR_USER_PRIVATE_INFO; + +typedef struct _NLPR_MODIFIED_COUNT +{ + OLD_LARGE_INTEGER ModifiedCount; +} NLPR_MODIFIED_COUNT, *PNLPR_MODIFIED_COUNT; + +typedef struct _NLPR_QUOTA_LIMITS +{ + ULONG PagedPoolLimit; + ULONG NonPagedPoolLimit; + ULONG MinimumWorkingSetSize; + ULONG MaximumWorkingSetSize; + ULONG PagefileLimit; + OLD_LARGE_INTEGER Reserved; +} NLPR_QUOTA_LIMITS, *PNLPR_QUOTA_LIMITS; + +typedef struct _NETLOGON_DELTA_USER +{ + RPC_UNICODE_STRING UserName; + RPC_UNICODE_STRING FullName; + ULONG UserId; + ULONG PrimaryGroupId; + RPC_UNICODE_STRING HomeDirectory; + RPC_UNICODE_STRING HomeDirectoryDrive; + RPC_UNICODE_STRING ScriptPath; + RPC_UNICODE_STRING AdminComment; + RPC_UNICODE_STRING WorkStations; + OLD_LARGE_INTEGER LastLogon; + OLD_LARGE_INTEGER LastLogoff; + NLPR_LOGON_HOURS LogonHours; + USHORT BadPasswordCount; + USHORT LogonCount; + OLD_LARGE_INTEGER PasswordLastSet; + OLD_LARGE_INTEGER AccountExpires; + ULONG UserAccountControl; + ENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword; + ENCRYPTED_LM_OWF_PASSWORD EncryptedLmOwfPassword; + UCHAR NtPasswordPresent; + UCHAR LmPasswordPresent; + UCHAR PasswordExpired; + RPC_UNICODE_STRING UserComment; + RPC_UNICODE_STRING Parameters; + USHORT CountryCode; + USHORT CodePage; + NLPR_USER_PRIVATE_INFO PrivateData; + SECURITY_INFORMATION SecurityInformation; + ULONG SecuritySize; + [size_is(SecuritySize)] UCHAR *SecurityDescriptor; + RPC_UNICODE_STRING ProfilePath; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DELTA_USER, *PNETLOGON_DELTA_USER; + +typedef struct _NETLOGON_DELTA_GROUP +{ + RPC_UNICODE_STRING Name; + ULONG RelativeId; + ULONG Attributes; + RPC_UNICODE_STRING AdminComment; + SECURITY_INFORMATION SecurityInformation; + ULONG SecuritySize; + [size_is(SecuritySize)] UCHAR *SecurityDescriptor; + RPC_UNICODE_STRING DummyString1; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DELTA_GROUP, *PNETLOGON_DELTA_GROUP; + +typedef struct _NETLOGON_DELTA_GROUP_MEMBER +{ + [size_is(MemberCount)] ULONG *Members; + [size_is(MemberCount)] ULONG *Attributes; + ULONG MemberCount; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DELTA_GROUP_MEMBER, *PNETLOGON_DELTA_GROUP_MEMBER; + +typedef struct _NETLOGON_DELTA_ALIAS +{ + RPC_UNICODE_STRING Name; + ULONG RelativeId; + SECURITY_INFORMATION SecurityInformation; + ULONG SecuritySize; + [size_is(SecuritySize)] UCHAR *SecurityDescriptor; + RPC_UNICODE_STRING Comment; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DELTA_ALIAS, *PNETLOGON_DELTA_ALIAS; + +typedef struct _NETLOGON_DELTA_ALIAS_MEMBER +{ + NLPR_SID_ARRAY Members; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DELTA_ALIAS_MEMBER, *PNETLOGON_DELTA_ALIAS_MEMBER; + +typedef struct _NETLOGON_DELTA_DOMAIN +{ + RPC_UNICODE_STRING DomainName; + RPC_UNICODE_STRING OemInformation; + OLD_LARGE_INTEGER ForceLogoff; + USHORT MinPasswordLength; + USHORT PasswordHistoryLength; + OLD_LARGE_INTEGER MaxPasswordAge; + OLD_LARGE_INTEGER MinPasswordAge; + OLD_LARGE_INTEGER DomainModifiedCount; + OLD_LARGE_INTEGER DomainCreationTime; + SECURITY_INFORMATION SecurityInformation; + ULONG SecuritySize; + [size_is(SecuritySize)] UCHAR *SecurityDescriptor; + RPC_UNICODE_STRING DomainLockoutInformation; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG PasswordProperties; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DELTA_DOMAIN, *PNETLOGON_DELTA_DOMAIN; + +typedef struct _NETLOGON_DELTA_RENAME_GROUP +{ + RPC_UNICODE_STRING OldName; + RPC_UNICODE_STRING NewName; + RPC_UNICODE_STRING DummyString1; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_RENAME_GROUP, *PNETLOGON_DELTA_RENAME_GROUP; + +typedef struct _NETLOGON_DELTA_RENAME_USER +{ + RPC_UNICODE_STRING OldName; + RPC_UNICODE_STRING NewName; + RPC_UNICODE_STRING DummyString1; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_RENAME_USER, *PNETLOGON_DELTA_RENAME_USER; + +typedef struct _NETLOGON_DELTA_RENAME_ALIAS +{ + RPC_UNICODE_STRING OldName; + RPC_UNICODE_STRING NewName; + RPC_UNICODE_STRING DummyString1; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_RENAME_ALIAS, *PNETLOGON_DELTA_RENAME_ALIAS; + +typedef struct _NETLOGON_DELTA_POLICY +{ + ULONG MaximumLogSize; + OLD_LARGE_INTEGER AuditRetentionPeriod; + UCHAR AuditingMode; + ULONG MaximumAuditEventCount; + [size_is(MaximumAuditEventCount + 1)] ULONG *EventAuditingOptions; + RPC_UNICODE_STRING PrimaryDomainName; + PRPC_SID PrimaryDomainSid; + NLPR_QUOTA_LIMITS QuotaLimits; + OLD_LARGE_INTEGER ModifiedId; + OLD_LARGE_INTEGER DatabaseCreationTime; + SECURITY_INFORMATION SecurityInformation; + ULONG SecuritySize; + [size_is(SecuritySize)] UCHAR *SecurityDescriptor; + RPC_UNICODE_STRING DummyString1; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DELTA_POLICY, *PNETLOGON_DELTA_POLICY; + +typedef struct _NETLOGON_DELTA_TRUSTED_DOMAINS +{ + RPC_UNICODE_STRING DomainName; + ULONG NumControllerEntries; + [size_is(NumControllerEntries)] PRPC_UNICODE_STRING ControllerNames; + SECURITY_INFORMATION SecurityInformation; + ULONG SecuritySize; + [size_is(SecuritySize)] UCHAR *SecurityDescriptor; + RPC_UNICODE_STRING DummyString1; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG TrustedPosixOffset; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DELTA_TRUSTED_DOMAINS, *PNETLOGON_DELTA_TRUSTED_DOMAINS; + +typedef struct _NETLOGON_DELTA_ACCOUNTS +{ + ULONG PrivilegeEntries; + ULONG PrivilegeControl; + [size_is(PrivilegeEntries)] ULONG *PrivilegeAttributes; + [size_is(PrivilegeEntries)] PRPC_UNICODE_STRING PrivilegeNames; + NLPR_QUOTA_LIMITS QuotaLimits; + ULONG SystemAccessFlags; + SECURITY_INFORMATION SecurityInformation; + ULONG SecuritySize; + [size_is(SecuritySize)] UCHAR *SecurityDescriptor; + RPC_UNICODE_STRING DummyString1; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DELTA_ACCOUNTS, *PNETLOGON_DELTA_ACCOUNTS; + +typedef struct _NETLOGON_DELTA_SECRET +{ + NLPR_CR_CIPHER_VALUE CurrentValue; + OLD_LARGE_INTEGER CurrentValueSetTime; + NLPR_CR_CIPHER_VALUE OldValue; + OLD_LARGE_INTEGER OldValueSetTime; + SECURITY_INFORMATION SecurityInformation; + ULONG SecuritySize; + [size_is(SecuritySize)] UCHAR *SecurityDescriptor; + RPC_UNICODE_STRING DummyString1; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DELTA_SECRET, *PNETLOGON_DELTA_SECRET; + +typedef struct _NETLOGON_DELTA_DELETE_GROUP +{ + [string] wchar_t *AccountName; + RPC_UNICODE_STRING DummyString1; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DELTA_DELETE_GROUP, *PNETLOGON_DELTA_DELETE_GROUP; + +typedef struct _NETLOGON_DELTA_DELETE_USER +{ + [string] wchar_t *AccountName; + RPC_UNICODE_STRING DummyString1; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DELTA_DELETE_USER, *PNETLOGON_DELTA_DELETE_USER; + +typedef enum _NETLOGON_DELTA_TYPE +{ + AddOrChangeDomain = 1, + AddOrChangeGroup = 2, + DeleteGroup = 3, + RenameGroup = 4, + AddOrChangeUser = 5, + DeleteUser = 6, + RenameUser = 7, + ChangeGroupMembership = 8, + AddOrChangeAlias = 9, + DeleteAlias = 10, + RenameAlias = 11, + ChangeAliasMembership = 12, + AddOrChangeLsaPolicy = 13, + AddOrChangeLsaTDomain = 14, + DeleteLsaTDomain = 15, + AddOrChangeLsaAccount = 16, + DeleteLsaAccount = 17, + AddOrChangeLsaSecret = 18, + DeleteLsaSecret = 19, + DeleteGroupByName = 20, + DeleteUserByName = 21, + SerialNumberSkip = 22 +} NETLOGON_DELTA_TYPE; + +typedef [switch_type(NETLOGON_DELTA_TYPE)] union _NETLOGON_DELTA_UNION +{ + [case(AddOrChangeDomain)] PNETLOGON_DELTA_DOMAIN DeltaDomain; + [case(AddOrChangeGroup)] PNETLOGON_DELTA_GROUP DeltaGroup; + [case(RenameGroup)] PNETLOGON_DELTA_RENAME_GROUP DeltaRenameGroup; + [case(AddOrChangeUser)] PNETLOGON_DELTA_USER DeltaUser; + [case(RenameUser)] PNETLOGON_DELTA_RENAME_USER DeltaRenameUser; + [case(ChangeGroupMembership)] PNETLOGON_DELTA_GROUP_MEMBER DeltaGroupMember; + [case(AddOrChangeAlias)] PNETLOGON_DELTA_ALIAS DeltaAlias; + [case(RenameAlias)] PNETLOGON_DELTA_RENAME_ALIAS DeltaRenameAlias; + [case(ChangeAliasMembership)] PNETLOGON_DELTA_ALIAS_MEMBER DeltaAliasMember; + [case(AddOrChangeLsaPolicy)] PNETLOGON_DELTA_POLICY DeltaPolicy; + [case(AddOrChangeLsaTDomain)] PNETLOGON_DELTA_TRUSTED_DOMAINS DeltaTDomains; + [case(AddOrChangeLsaAccount)] PNETLOGON_DELTA_ACCOUNTS DeltaAccounts; + [case(AddOrChangeLsaSecret)] PNETLOGON_DELTA_SECRET DeltaSecret; + [case(DeleteGroupByName)] PNETLOGON_DELTA_DELETE_GROUP DeltaDeleteGroup; + [case(DeleteUserByName)] PNETLOGON_DELTA_DELETE_USER DeltaDeleteUser; + [case(SerialNumberSkip)] PNLPR_MODIFIED_COUNT DeltaSerialNumberSkip; + [default] ; +} NETLOGON_DELTA_UNION, *PNETLOGON_DELTA_UNION; + +typedef [switch_type(NETLOGON_DELTA_TYPE)] union _NETLOGON_DELTA_ID_UNION +{ + [case(AddOrChangeDomain, + AddOrChangeGroup, + DeleteGroup, + RenameGroup, + AddOrChangeUser, + DeleteUser, + RenameUser, + ChangeGroupMembership, + AddOrChangeAlias, + DeleteAlias, + RenameAlias, + ChangeAliasMembership, + DeleteGroupByName, + DeleteUserByName)] ULONG Rid; + [case(AddOrChangeLsaPolicy, + AddOrChangeLsaTDomain, + DeleteLsaTDomain, + AddOrChangeLsaAccount, + DeleteLsaAccount)] PRPC_SID Sid; + [case(AddOrChangeLsaSecret, + DeleteLsaSecret)] [string] wchar_t *Name; + [default] ; +} NETLOGON_DELTA_ID_UNION, *PNETLOGON_DELTA_ID_UNION; + +typedef struct _NETLOGON_DELTA_ENUM +{ + NETLOGON_DELTA_TYPE DeltaType; + [switch_is(DeltaType)] NETLOGON_DELTA_ID_UNION DeltaID; + [switch_is(DeltaType)] NETLOGON_DELTA_UNION DeltaUnion; +} NETLOGON_DELTA_ENUM, *PNETLOGON_DELTA_ENUM; + +typedef struct _NETLOGON_DELTA_ENUM_ARRAY +{ + DWORD CountReturned; + [size_is(CountReturned)] PNETLOGON_DELTA_ENUM Deltas; +} NETLOGON_DELTA_ENUM_ARRAY, *PNETLOGON_DELTA_ENUM_ARRAY; + +typedef struct _NETLOGON_LOGON_IDENTITY_INFO +{ + RPC_UNICODE_STRING LogonDomainName; + ULONG ParameterControl; + OLD_LARGE_INTEGER Reserved; + RPC_UNICODE_STRING UserName; + RPC_UNICODE_STRING Workstation; +} NETLOGON_LOGON_IDENTITY_INFO, *PNETLOGON_LOGON_IDENTITY_INFO; + +typedef struct _NETLOGON_INTERACTIVE_INFO +{ + NETLOGON_LOGON_IDENTITY_INFO Identity; + LM_OWF_PASSWORD LmOwfPassword; + NT_OWF_PASSWORD NtOwfPassword; +} NETLOGON_INTERACTIVE_INFO, *PNETLOGON_INTERACTIVE_INFO; + +typedef enum _NETLOGON_LOGON_INFO_CLASS +{ + NetlogonInteractiveInformation = 1, + NetlogonNetworkInformation = 2, + NetlogonServiceInformation = 3, + NetlogonGenericInformation = 4, + NetlogonInteractiveTransitiveInformation = 5, + NetlogonNetworkTransitiveInformation = 6, + NetlogonServiceTransitiveInformation = 7 +} NETLOGON_LOGON_INFO_CLASS; + +typedef struct _NETLOGON_SERVICE_INFO +{ + NETLOGON_LOGON_IDENTITY_INFO Identity; + LM_OWF_PASSWORD LmOwfPassword; + NT_OWF_PASSWORD NtOwfPassword; +} NETLOGON_SERVICE_INFO, *PNETLOGON_SERVICE_INFO; + +typedef struct +{ + CHAR data[8]; +} LM_CHALLENGE; + +typedef struct _NETLOGON_NETWORK_INFO +{ + NETLOGON_LOGON_IDENTITY_INFO Identity; + LM_CHALLENGE LmChallenge; + STRING NtChallengeResponse; + STRING LmChallengeResponse; +} NETLOGON_NETWORK_INFO, *PNETLOGON_NETWORK_INFO; + +typedef struct _NETLOGON_GENERIC_INFO +{ + NETLOGON_LOGON_IDENTITY_INFO Identity; + RPC_UNICODE_STRING PackageName; + ULONG DataLength; + [size_is(DataLength)] UCHAR *LogonData; +} NETLOGON_GENERIC_INFO, *PNETLOGON_GENERIC_INFO; + +typedef [switch_type(NETLOGON_LOGON_INFO_CLASS)] union _NETLOGON_LEVEL +{ + [case(NetlogonInteractiveInformation)] PNETLOGON_INTERACTIVE_INFO LogonInteractive; + [case(NetlogonInteractiveTransitiveInformation)] PNETLOGON_INTERACTIVE_INFO LogonInteractiveTransitive; + [case(NetlogonServiceInformation)] PNETLOGON_SERVICE_INFO LogonService; + [case(NetlogonServiceTransitiveInformation)] PNETLOGON_SERVICE_INFO LogonServiceTransitive; + [case(NetlogonNetworkInformation)] PNETLOGON_NETWORK_INFO LogonNetwork; + [case(NetlogonNetworkTransitiveInformation)] PNETLOGON_NETWORK_INFO LogonNetworkTransitive; + [case(NetlogonGenericInformation)] PNETLOGON_GENERIC_INFO LogonGeneric; + [default] ; +} NETLOGON_LEVEL, *PNETLOGON_LEVEL; + +typedef enum _NETLOGON_VALIDATION_INFO_CLASS +{ + NetlogonValidationUasInfo = 1, + NetlogonValidationSamInfo = 2, + NetlogonValidationSamInfo2 = 3, + NetlogonValidationGenericInfo = 4, + NetlogonValidationGenericInfo2 = 5, + NetlogonValidationSamInfo4 = 6 +} NETLOGON_VALIDATION_INFO_CLASS; + +cpp_quote("#ifndef _NTSAM_") +typedef struct _GROUP_MEMBERSHIP +{ + ULONG RelativeId; + ULONG Attributes; +} GROUP_MEMBERSHIP, *PGROUP_MEMBERSHIP; +cpp_quote("#endif") + +typedef struct _USER_SESSION_KEY +{ + CYPHER_BLOCK data[2]; +} USER_SESSION_KEY, *PUSER_SESSION_KEY; + +typedef struct _NETLOGON_SID_AND_ATTRIBUTES +{ + PRPC_SID Sid; + ULONG Attributes; +} NETLOGON_SID_AND_ATTRIBUTES, *PNETLOGON_SID_AND_ATTRIBUTES; + +typedef struct _NETLOGON_VALIDATION_SAM_INFO +{ + OLD_LARGE_INTEGER LogonTime; + OLD_LARGE_INTEGER LogoffTime; + OLD_LARGE_INTEGER KickOffTime; + OLD_LARGE_INTEGER PasswordLastSet; + OLD_LARGE_INTEGER PasswordCanChange; + OLD_LARGE_INTEGER 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; + PRPC_SID LogonDomainId; + ULONG ExpansionRoom[10]; +} NETLOGON_VALIDATION_SAM_INFO, *PNETLOGON_VALIDATION_SAM_INFO; + +typedef struct _NETLOGON_VALIDATION_SAM_INFO2 +{ + OLD_LARGE_INTEGER LogonTime; + OLD_LARGE_INTEGER LogoffTime; + OLD_LARGE_INTEGER KickOffTime; + OLD_LARGE_INTEGER PasswordLastSet; + OLD_LARGE_INTEGER PasswordCanChange; + OLD_LARGE_INTEGER 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; + PRPC_SID LogonDomainId; + ULONG ExpansionRoom[10]; + ULONG SidCount; + [size_is(SidCount)] PNETLOGON_SID_AND_ATTRIBUTES ExtraSids; +} NETLOGON_VALIDATION_SAM_INFO2, *PNETLOGON_VALIDATION_SAM_INFO2 ; + +typedef struct _NETLOGON_VALIDATION_GENERIC_INFO2 +{ + ULONG DataLength; + [size_is(DataLength)] UCHAR *ValidationData; +} NETLOGON_VALIDATION_GENERIC_INFO2, *PNETLOGON_VALIDATION_GENERIC_INFO2; + +typedef struct _NETLOGON_VALIDATION_SAM_INFO4 +{ + OLD_LARGE_INTEGER LogonTime; + OLD_LARGE_INTEGER LogoffTime; + OLD_LARGE_INTEGER KickOffTime; + OLD_LARGE_INTEGER PasswordLastSet; + OLD_LARGE_INTEGER PasswordCanChange; + OLD_LARGE_INTEGER 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; + unsigned short LogonCount; + unsigned short BadPasswordCount; + unsigned long UserId; + unsigned long PrimaryGroupId; + unsigned long GroupCount; + [size_is(GroupCount)] PGROUP_MEMBERSHIP GroupIds; + unsigned long UserFlags; + USER_SESSION_KEY UserSessionKey; + RPC_UNICODE_STRING LogonServer; + RPC_UNICODE_STRING LogonDomainName; + PRPC_SID LogonDomainId; + unsigned char LMKey[8]; + ULONG UserAccountControl; + ULONG SubAuthStatus; + OLD_LARGE_INTEGER LastSuccessfulILogon; + OLD_LARGE_INTEGER LastFailedILogon; + ULONG FailedILogonCount; + ULONG Reserved4[1]; + unsigned long SidCount; + [size_is(SidCount)] PNETLOGON_SID_AND_ATTRIBUTES ExtraSids; + RPC_UNICODE_STRING DnsLogonDomainName; + RPC_UNICODE_STRING Upn; + RPC_UNICODE_STRING ExpansionString1; + RPC_UNICODE_STRING ExpansionString2; + RPC_UNICODE_STRING ExpansionString3; + RPC_UNICODE_STRING ExpansionString4; + RPC_UNICODE_STRING ExpansionString5; + RPC_UNICODE_STRING ExpansionString6; + RPC_UNICODE_STRING ExpansionString7; + RPC_UNICODE_STRING ExpansionString8; + RPC_UNICODE_STRING ExpansionString9; + RPC_UNICODE_STRING ExpansionString10; +} NETLOGON_VALIDATION_SAM_INFO4, *PNETLOGON_VALIDATION_SAM_INFO4; + +typedef [switch_type(enum _NETLOGON_VALIDATION_INFO_CLASS)] union _NETLOGON_VALIDATION +{ + [case(NetlogonValidationSamInfo)] PNETLOGON_VALIDATION_SAM_INFO ValidationSam; + [case(NetlogonValidationSamInfo2)] PNETLOGON_VALIDATION_SAM_INFO2 ValidationSam2; + [case(NetlogonValidationGenericInfo2)] PNETLOGON_VALIDATION_GENERIC_INFO2 ValidationGeneric2; + [case(NetlogonValidationSamInfo4)] PNETLOGON_VALIDATION_SAM_INFO4 ValidationSam4; + [default] ; +} NETLOGON_VALIDATION, *PNETLOGON_VALIDATION; + +typedef [switch_type(DWORD)] union _NETLOGON_CONTROL_DATA_INFORMATION +{ + [case(5, 6, 9, 10)] [string] wchar_t *TrustedDomainName; + [case(65534)] DWORD DebugFlag; + [case(8)] [string] wchar_t *UserName; + [default] ; +} NETLOGON_CONTROL_DATA_INFORMATION, *PNETLOGON_CONTROL_DATA_INFORMATION; + +cpp_quote("#ifndef _LMACCESS_H") +typedef struct _NETLOGON_INFO_1 +{ + DWORD netlog1_flags; + NET_API_STATUS netlog1_pdc_connection_status; +} NETLOGON_INFO_1, *PNETLOGON_INFO_1; + +typedef struct _NETLOGON_INFO_2 +{ + DWORD netlog2_flags; + NET_API_STATUS netlog2_pdc_connection_status; + [string] wchar_t *netlog2_trusted_dc_name; + NET_API_STATUS netlog2_tc_connection_status; +} NETLOGON_INFO_2, *PNETLOGON_INFO_2; + +typedef struct _NETLOGON_INFO_3 +{ + DWORD netlog3_flags; + DWORD netlog3_logon_attempts; + DWORD netlog3_reserved1; + DWORD netlog3_reserved2; + DWORD netlog3_reserved3; + DWORD netlog3_reserved4; + DWORD netlog3_reserved5; +} NETLOGON_INFO_3, *PNETLOGON_INFO_3; +cpp_quote("#endif") + +typedef struct _NETLOGON_INFO_4 +{ + [string] wchar_t *netlog4_trusted_dc_name; + [string] wchar_t *netlog4_trusted_domain_name; +} NETLOGON_INFO_4, *PNETLOGON_INFO_4; + +typedef [switch_type(DWORD)] union _NETLOGON_CONTROL_QUERY_INFORMATION +{ + [case(1)] PNETLOGON_INFO_1 NetlogonInfo1; + [case(2)] PNETLOGON_INFO_2 NetlogonInfo2; + [case(3)] PNETLOGON_INFO_3 NetlogonInfo3; + [case(4)] PNETLOGON_INFO_4 NetlogonInfo4; + [default] ; +} NETLOGON_CONTROL_QUERY_INFORMATION, *PNETLOGON_CONTROL_QUERY_INFORMATION; + +typedef enum _SYNC_STATE +{ + NormalState = 0, + DomainState = 1, + GroupState = 2, + UasBuiltInGroupState = 3, + UserState = 4, + GroupMemberState = 5, + AliasState = 6, + AliasMemberState = 7, + SamDoneState = 8 +} SYNC_STATE, *PSYNC_STATE; + +typedef struct _DOMAIN_NAME_BUFFER +{ + ULONG DomainNameByteCount; + [unique, size_is(DomainNameByteCount)] UCHAR *DomainNames; +} DOMAIN_NAME_BUFFER, *PDOMAIN_NAME_BUFFER; + +typedef struct _NETLOGON_LSA_POLICY_INFO +{ + ULONG LsaPolicySize; + [size_is(LsaPolicySize)] UCHAR *LsaPolicy; +} NETLOGON_LSA_POLICY_INFO, *PNETLOGON_LSA_POLICY_INFO; + +typedef struct _NETLOGON_ONE_DOMAIN_INFO +{ + RPC_UNICODE_STRING DomainName; + RPC_UNICODE_STRING DnsDomainName; + RPC_UNICODE_STRING DnsForestName; + GUID DomainGuid; + PRPC_SID DomainSid; + RPC_UNICODE_STRING TrustExtension; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG DummyLong1; + ULONG DummyLong2; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_ONE_DOMAIN_INFO, *PNETLOGON_ONE_DOMAIN_INFO; + +typedef struct _NETLOGON_DOMAIN_INFO +{ + NETLOGON_ONE_DOMAIN_INFO PrimaryDomain; + ULONG TrustedDomainCount; + [size_is(TrustedDomainCount)] PNETLOGON_ONE_DOMAIN_INFO TrustedDomains; + NETLOGON_LSA_POLICY_INFO LsaPolicy; + RPC_UNICODE_STRING DnsHostNameInDs; + RPC_UNICODE_STRING DummyString2; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG WorkstationFlags; + ULONG SupportedEncTypes; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_DOMAIN_INFO, *PNETLOGON_DOMAIN_INFO; + +typedef [switch_type(DWORD)] union _NETLOGON_DOMAIN_INFORMATION +{ + [case(1)] PNETLOGON_DOMAIN_INFO DomainInfo; + [case(2)] PNETLOGON_LSA_POLICY_INFO LsaPolicyInfo; +} NETLOGON_DOMAIN_INFORMATION, *PNETLOGON_DOMAIN_INFORMATION; + +typedef struct _NETLOGON_WORKSTATION_INFO +{ + NETLOGON_LSA_POLICY_INFO LsaPolicy; + [string] wchar_t *DnsHostName; + [string] wchar_t *SiteName; + [string] wchar_t *Dummy1; + [string] wchar_t *Dummy2; + [string] wchar_t *Dummy3; + [string] wchar_t *Dummy4; + RPC_UNICODE_STRING OsVersion; + RPC_UNICODE_STRING OsName; + RPC_UNICODE_STRING DummyString3; + RPC_UNICODE_STRING DummyString4; + ULONG WorkstationFlags; + ULONG KerberosSupportedEncryptionTypes; + ULONG DummyLong3; + ULONG DummyLong4; +} NETLOGON_WORKSTATION_INFO, *PNETLOGON_WORKSTATION_INFO; + +typedef [switch_type(DWORD)] union _NETLOGON_WORKSTATION_INFORMATION +{ + [case(1)] PNETLOGON_WORKSTATION_INFO WorkstationInfo; + [case(2)] PNETLOGON_WORKSTATION_INFO LsaPolicyInfo; +} NETLOGON_WORKSTATION_INFORMATION, *PNETLOGON_WORKSTATION_INFORMATION; + +typedef struct _NL_SOCKET_ADDRESS +{ + [size_is(iSockaddrLength)] UCHAR *lpSockaddr; + ULONG iSockaddrLength; +} NL_SOCKET_ADDRESS, *PNL_SOCKET_ADDRESS; + +typedef struct _NL_SITE_NAME_ARRAY +{ + ULONG EntryCount; + [size_is(EntryCount)] PRPC_UNICODE_STRING SiteNames; +} NL_SITE_NAME_ARRAY, *PNL_SITE_NAME_ARRAY; + +typedef struct _DS_DOMAIN_TRUSTSW +{ + [string] wchar_t *NetbiosDomainName; + [string] wchar_t *DnsDomainName; + ULONG Flags; + ULONG ParentIndex; + ULONG TrustType; + ULONG TrustAttributes; + PRPC_SID DomainSid; + GUID DomainGuid; +} DS_DOMAIN_TRUSTSW, *PDS_DOMAIN_TRUSTSW; + +typedef struct _NETLOGON_TRUSTED_DOMAIN_ARRAY +{ + DWORD DomainCount; + [size_is(DomainCount)] PDS_DOMAIN_TRUSTSW Domains; +} NETLOGON_TRUSTED_DOMAIN_ARRAY, *PNETLOGON_TRUSTED_DOMAIN_ARRAY; + +typedef struct _NL_SITE_NAME_EX_ARRAY +{ + ULONG EntryCount; + [size_is(EntryCount)] PRPC_UNICODE_STRING SiteNames; + [size_is(EntryCount)] PRPC_UNICODE_STRING SubnetNames; +} NL_SITE_NAME_EX_ARRAY, *PNL_SITE_NAME_EX_ARRAY; + +typedef struct _NL_GENERIC_RPC_DATA +{ + ULONG UlongEntryCount; + [size_is(UlongEntryCount)] ULONG *UlongData; + ULONG UnicodeStringEntryCount; + [size_is(UnicodeStringEntryCount)] PRPC_UNICODE_STRING UnicodeStringData; +} NL_GENERIC_RPC_DATA, *PNL_GENERIC_RPC_DATA; + +typedef struct _NETLOGON_VALIDATION_UAS_INFO +{ + [string] wchar_t *usrlog1_eff_name; + DWORD usrlog1_priv; + DWORD usrlog1_auth_flags; + DWORD usrlog1_num_logons; + DWORD usrlog1_bad_pw_count; + DWORD usrlog1_last_logon; + DWORD usrlog1_last_logoff; + DWORD usrlog1_logoff_time; + DWORD usrlog1_kickoff_time; + DWORD usrlog1_password_age; + DWORD usrlog1_pw_can_change; + DWORD usrlog1_pw_must_change; + [string] wchar_t *usrlog1_computer; + [string] wchar_t *usrlog1_domain; + [string] wchar_t *usrlog1_script_path; + DWORD usrlog1_reserved1; +} NETLOGON_VALIDATION_UAS_INFO, *PNETLOGON_VALIDATION_UAS_INFO; + +typedef struct _NETLOGON_LOGOFF_UAS_INFO +{ + DWORD Duration; + USHORT LogonCount; +} NETLOGON_LOGOFF_UAS_INFORMATION, *PNETLOGON_LOGOFF_UAS_INFO; + +typedef [switch_type(DWORD)] union _NETLOGON_CAPABILITIES +{ + [case(1)] ULONG ServerCapabilities; +} NETLOGON_CAPABILITIES, *PNETLOGON_CAPABILITIES; + +typedef struct _NETLOGON_CREDENTIAL +{ + CHAR data[8]; +} NETLOGON_CREDENTIAL, *PNETLOGON_CREDENTIAL; + +typedef struct _NETLOGON_AUTHENTICATOR +{ + NETLOGON_CREDENTIAL Credential; + DWORD Timestamp; +} NETLOGON_AUTHENTICATOR, *PNETLOGON_AUTHENTICATOR; + +typedef enum _NETLOGON_SECURE_CHANNEL_TYPE +{ + NullSecureChannel = 0, + MsvApSecureChannel = 1, + WorkstationSecureChannel = 2, + TrustedDnsDomainSecureChannel = 3, + TrustedDomainSecureChannel = 4, + UasServerSecureChannel = 5, + ServerSecureChannel = 6, + CdcServerSecureChannel = 7 +} NETLOGON_SECURE_CHANNEL_TYPE; + +typedef struct _UAS_INFO_0 +{ + CHAR ComputerName[16]; + ULONG TimeCreated; + ULONG SerialNumber; +} UAS_INFO_0, *PUAS_INFO_0; + +typedef struct _DOMAIN_CONTROLLER_INFOW +{ + [string, unique] wchar_t *DomainControllerName; + [string, unique] wchar_t *DomainControllerAddress; + ULONG DomainControllerAddressType; + GUID DomainGuid; + [string, unique] wchar_t *DomainName; + [string, unique] wchar_t *DnsForestName; + ULONG Flags; + [string, unique] wchar_t *DcSiteName; + [string, unique] wchar_t *ClientSiteName; +} DOMAIN_CONTROLLER_INFOW, *PDOMAIN_CONTROLLER_INFOW; + +typedef struct _NL_TRUST_PASSWORD +{ + WCHAR Buffer[256]; + ULONG Length; +} NL_TRUST_PASSWORD, *PNL_TRUST_PASSWORD; + +typedef struct _NL_PASSWORD_VERSION +{ + ULONG ReservedField; + ULONG PasswordVersionNumber; + ULONG PasswordVersionPresent; +} NL_PASSWORD_VERSION, *PNL_PASSWORD_VERSION; + +cpp_quote("#ifndef _NTSECAPI_H") +typedef enum _LSA_FOREST_TRUST_RECORD_TYPE +{ + ForestTrustTopLevelName = 0, + ForestTrustTopLevelNameEx = 1, + ForestTrustDomainInfo = 2, +} LSA_FOREST_TRUST_RECORD_TYPE; + +typedef RPC_UNICODE_STRING LSA_RPC_UNICODE_STRING, *PLSA_RPC_UNICODE_STRING; + +typedef struct _LSA_FOREST_TRUST_DOMAIN_INFO +{ + PRPC_SID Sid; + LSA_RPC_UNICODE_STRING DnsName; + LSA_RPC_UNICODE_STRING NetbiosName; +} LSA_FOREST_TRUST_DOMAIN_INFO, *PLSA_FOREST_TRUST_DOMAIN_INFO; + +typedef struct _LSA_FOREST_TRUST_BINARY_DATA +{ + [range(0, 131072)] ULONG Length; + [size_is(Length)] UCHAR * Buffer; +} LSA_FOREST_TRUST_BINARY_DATA, *PLSA_FOREST_TRUST_BINARY_DATA; + +typedef struct _LSA_FOREST_TRUST_RECORD +{ + ULONG Flags; + LSA_FOREST_TRUST_RECORD_TYPE ForestTrustType; + LARGE_INTEGER Time; + [switch_type( LSA_FOREST_TRUST_RECORD_TYPE ), switch_is(ForestTrustType)] union + { + [case(ForestTrustTopLevelName, ForestTrustTopLevelNameEx)] LSA_RPC_UNICODE_STRING TopLevelName; + [case(ForestTrustDomainInfo)] LSA_FOREST_TRUST_DOMAIN_INFO DomainInfo; + [default] LSA_FOREST_TRUST_BINARY_DATA Data; + } ForestTrustData; +} LSA_FOREST_TRUST_RECORD, *PLSA_FOREST_TRUST_RECORD; + +typedef struct _LSA_FOREST_TRUST_INFORMATION +{ + [range(0, 4000)] ULONG RecordCount; + [size_is(RecordCount)] PLSA_FOREST_TRUST_RECORD *Entries; +} LSA_FOREST_TRUST_INFORMATION, *PLSA_FOREST_TRUST_INFORMATION; +cpp_quote("#endif") + + +[ + uuid(12345678-1234-ABCD-EF00-01234567CFFB), + version(1.0), +#ifdef __midl + ms_union, +#endif + pointer_default(unique) +#ifndef __midl + ,implicit_handle(handle_t hBinding) +#endif +] +interface logon +{ + /* Function 0 */ + NET_API_STATUS + __stdcall + NetrLogonUasLogon( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in, string] wchar_t *UserName, + [in, string] wchar_t *Workstation, + [out] PNETLOGON_VALIDATION_UAS_INFO *ValidationInformation); + + /* Function 1 */ + NET_API_STATUS + __stdcall + NetrLogonUasLogoff( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in, string] wchar_t *UserName, + [in, string] wchar_t *Workstation, + [out] PNETLOGON_LOGOFF_UAS_INFO LogoffInformation); + + /* Function 2 */ + NTSTATUS + __stdcall + NetrLogonSamLogon( + [in, unique, string] LOGONSRV_HANDLE LogonServer, + [in, string, unique] wchar_t *ComputerName, + [in, unique] PNETLOGON_AUTHENTICATOR Authenticator, + [in, out, unique] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] NETLOGON_LOGON_INFO_CLASS LogonLevel, + [in, switch_is(LogonLevel)] PNETLOGON_LEVEL LogonInformation, + [in] NETLOGON_VALIDATION_INFO_CLASS ValidationLevel, + [out, switch_is(ValidationLevel)] PNETLOGON_VALIDATION ValidationInformation, + [out] UCHAR *Authoritative); + + /* Function 3 */ + NTSTATUS + __stdcall + NetrLogonSamLogoff( + [in, unique, string] LOGONSRV_HANDLE LogonServer, + [in, string, unique] wchar_t *ComputerName, + [in, unique] PNETLOGON_AUTHENTICATOR Authenticator, + [in, out, unique] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] NETLOGON_LOGON_INFO_CLASS LogonLevel, + [in, switch_is(LogonLevel)] PNETLOGON_LEVEL LogonInformation); + + /* Function 4 */ + NTSTATUS + __stdcall + NetrServerReqChallenge( + [in, unique, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_CREDENTIAL ClientChallenge, + [out] PNETLOGON_CREDENTIAL ServerChallenge); + + /* Function 5 */ + NTSTATUS + __stdcall + NetrServerAuthenticate( + [in, unique, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *AccountName, + [in] NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_CREDENTIAL ClientCredential, + [out] PNETLOGON_CREDENTIAL ServerCredential); + + /* Function 6 */ + NTSTATUS + __stdcall + NetrServerPasswordSet( + [in, unique, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *AccountName, + [in] NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] PENCRYPTED_NT_OWF_PASSWORD UasNewPassword); + + /* Function 7 */ + NTSTATUS + __stdcall + NetrDatabaseDeltas( + [in, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [in, out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] DWORD DatabaseID, + [in, out] PNLPR_MODIFIED_COUNT DomainModifiedCount, + [out] PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray, + [in] DWORD PreferredMaximumLength); + + /* Function 8 */ + NTSTATUS + __stdcall + NetrDatabaseSync( + [in, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [in, out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] DWORD DatabaseID, + [in, out] ULONG *SyncContext, + [out] PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray, + [in] DWORD PreferredMaximumLength); + + /* Function 9 */ + NTSTATUS + __stdcall + NetrAccountDeltas( + [in, unique, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t * ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [in, out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] PUAS_INFO_0 RecordId, + [in] DWORD Count, + [in] DWORD Level, + [out, size_is(BufferSize)] UCHAR *Buffer, + [in] DWORD BufferSize, + [out] ULONG *CountReturned, + [out] ULONG *TotalEntries, + [out] PUAS_INFO_0 NextRecordId); + + /* Function 10 */ + NTSTATUS + __stdcall + NetrAccountSync( + [in, unique, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [in, out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] DWORD Reference, + [in] DWORD Level, + [out, size_is(BufferSize)] UCHAR *Buffer, + [in] DWORD BufferSize, + [out] ULONG *CountReturned, + [out] ULONG *TotalEntries, + [out] ULONG *NextReference, + [out] PUAS_INFO_0 LastRecordId); + + /* Function 11 */ + NET_API_STATUS + __stdcall + NetrGetDCName( + [in, string] LOGONSRV_HANDLE ServerName, + [in, unique, string] wchar_t *DomainName, + [out, string] wchar_t **Buffer); + + /* Function 12 */ + NET_API_STATUS + __stdcall + NetrLogonControl( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in] DWORD FunctionCode, + [in] DWORD QueryLevel, + [out, switch_is(QueryLevel)] PNETLOGON_CONTROL_QUERY_INFORMATION Buffer); + + /* Function 13 */ + NET_API_STATUS + __stdcall + NetrGetAnyDCName( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in, unique, string] wchar_t *DomainName, + [out, string] wchar_t **Buffer); + + /* Function 14 */ + NET_API_STATUS + __stdcall + NetrLogonControl2( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in] DWORD FunctionCode, + [in] DWORD QueryLevel, + [in, switch_is(FunctionCode)] PNETLOGON_CONTROL_DATA_INFORMATION Data, + [out, switch_is(QueryLevel)] PNETLOGON_CONTROL_QUERY_INFORMATION Buffer); + + /* Function 15 */ + NTSTATUS + __stdcall + NetrServerAuthenticate2( + [in, unique, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *AccountName, + [in] NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_CREDENTIAL ClientCredential, + [out] PNETLOGON_CREDENTIAL ServerCredential, + [in, out] ULONG *NegotiateFlags); + + /* Function 16 */ + NTSTATUS + __stdcall + NetrDatabaseSync2( + [in, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [in, out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] DWORD DatabaseID, + [in] SYNC_STATE RestartState, + [in, out] ULONG *SyncContext, + [out] PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray, + [in] DWORD PreferredMaximumLength); + + /* Function 17 */ + NTSTATUS + __stdcall + NetrDatabaseRedo( + [in, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [in, out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in, size_is(ChangeLogEntrySize)] UCHAR *ChangeLogEntry, + [in] DWORD ChangeLogEntrySize, + [out] PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray); + + /* Function 18 */ + NET_API_STATUS + __stdcall + NetrLogonControl2Ex( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in] DWORD FunctionCode, + [in] DWORD QueryLevel, + [in, switch_is(FunctionCode)] PNETLOGON_CONTROL_DATA_INFORMATION Data, + [out, switch_is(QueryLevel)] PNETLOGON_CONTROL_QUERY_INFORMATION Buffer); + + /* Function 19 */ + NTSTATUS + __stdcall + NetrEnumerateTrustedDomains( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [out] PDOMAIN_NAME_BUFFER DomainNameBuffer); + + /* Function 20 */ + NET_API_STATUS + __stdcall + DsrGetDcName( + [in, unique, string] LOGONSRV_HANDLE ComputerName, + [in, unique, string] wchar_t *DomainName, + [in, unique] GUID *DomainGuid, + [in, unique] GUID *SiteGuid, + [in] ULONG Flags, + [out] PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo); + + /* Function 21 */ + NTSTATUS + __stdcall + NetrLogonGetCapabilities( + [in, string] LOGONSRV_HANDLE ServerName, + [in, string, unique] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [in, out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] DWORD QueryLevel, + [out, switch_is(QueryLevel)] PNETLOGON_CAPABILITIES ServerCapabilities); + + /* Function 22 */ + NTSTATUS + __stdcall + NetrLogonSetServiceBits( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in] DWORD ServiceBitsOfInterest, + [in] DWORD ServiceBits); + + /* Function 23 */ + NET_API_STATUS + __stdcall + NetrLogonGetTrustRid( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in, string, unique] wchar_t *DomainName, + [out] ULONG *Rid); + + /* Function 24 */ + NET_API_STATUS + __stdcall + NetrLogonComputeServerDigest( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in] ULONG Rid, + [in, size_is(MessageSize)] UCHAR *Message, + [in] ULONG MessageSize, + [out] CHAR NewMessageDigest[16], + [out] CHAR OldMessageDigest[16]); + + /* Function 25 */ + NET_API_STATUS + __stdcall + NetrLogonComputeClientDigest( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in, string, unique] wchar_t *DomainName, + [in, size_is(MessageSize)] UCHAR *Message, + [in] ULONG MessageSize, + [out] CHAR NewMessageDigest[16], + [out] CHAR OldMessageDigest[16]); + + /* Function 26 */ + NTSTATUS + __stdcall + NetrServerAuthenticate3( + [in, unique, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *AccountName, + [in] NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_CREDENTIAL ClientCredential, + [out] PNETLOGON_CREDENTIAL ServerCredential, + [in,out] ULONG *NegotiateFlags, + [out] ULONG *AccountRid); + + /* Function 27 */ + NET_API_STATUS + __stdcall + DsrGetDcNameEx( + [in, unique, string] LOGONSRV_HANDLE ComputerName, + [in, unique, string] wchar_t *DomainName, + [in, unique] GUID *DomainGuid, + [in, unique, string] wchar_t *SiteName, + [in] ULONG Flags, + [out] PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo); + + /* Function 28 */ + NET_API_STATUS + __stdcall + DsrGetSiteName( + [in, unique, string] LOGONSRV_HANDLE ComputerName, + [out, string] wchar_t **SiteName); + + /* Function 29 */ + NTSTATUS + __stdcall + NetrLogonGetDomainInfo( + [in, string] LOGONSRV_HANDLE ServerName, + [in, string, unique] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [in, out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] DWORD Level, + [in, switch_is(Level)] PNETLOGON_WORKSTATION_INFORMATION WkstaBuffer, + [out, switch_is(Level)] PNETLOGON_DOMAIN_INFORMATION DomBuffer); + + /* Function 30 */ + NTSTATUS + __stdcall + NetrServerPasswordSet2( + [in, unique, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *AccountName, + [in] NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] PNL_TRUST_PASSWORD ClearNewPassword); + + /* Function 31 */ + NTSTATUS + __stdcall + NetrServerPasswordGet( + [in, unique, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *AccountName, + [in] NETLOGON_SECURE_CHANNEL_TYPE AccountType, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [out] PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword); + + /* Function 32 */ + NTSTATUS + __stdcall + NetrLogonSendToSam( + [in, unique, string] LOGONSRV_HANDLE PrimaryName, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in, size_is(OpaqueBufferSize)] UCHAR *OpaqueBuffer, + [in] ULONG OpaqueBufferSize); + + /* Function 33 */ + NET_API_STATUS + __stdcall + DsrAddressToSiteNamesW( + [in, unique, string] LOGONSRV_HANDLE ComputerName, + [in, range(0, 32000)] DWORD EntryCount, + [in, size_is(EntryCount)] PNL_SOCKET_ADDRESS SocketAddresses, + [out] PNL_SITE_NAME_ARRAY *SiteNames); + + /* Function 34 */ + NET_API_STATUS + __stdcall + DsrGetDcNameEx2( + [in, unique, string] LOGONSRV_HANDLE ComputerName, + [in, unique, string] wchar_t *AccountName, + [in] ULONG AllowableAccountControlBits, + [in, unique, string] wchar_t *DomainName, + [in, unique] GUID *DomainGuid, + [in, unique, string] wchar_t *SiteName, + [in] ULONG Flags, + [out] PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo); + + /* Function 35 */ + NET_API_STATUS + __stdcall + NetrLogonGetTimeServiceParentDomain( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [out, string] wchar_t **DomainName, + [out] int *PdcSameSite); + + /* Function 36 */ + NET_API_STATUS + __stdcall + NetrEnumerateTrustedDomainsEx( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [out] PNETLOGON_TRUSTED_DOMAIN_ARRAY Domains); + + /* Function 37 */ + NET_API_STATUS + __stdcall + DsrAddressToSiteNamesExW( + [in, unique, string] LOGONSRV_HANDLE ComputerName, + [in, range(0, 32000)] DWORD EntryCount, + [in, size_is(EntryCount)] PNL_SOCKET_ADDRESS SocketAddresses, + [out] PNL_SITE_NAME_EX_ARRAY *SiteNames); + + /* Function 38 */ + NET_API_STATUS + __stdcall + DsrGetDcSiteCoverageW( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [out] PNL_SITE_NAME_ARRAY *SiteNames); + + /* Function 39 */ + NTSTATUS + __stdcall + NetrLogonSamLogonEx( + [in] handle_t ContextHandle, + [in, unique, string] wchar_t *LogonServer, + [in, unique, string] wchar_t *ComputerName, + [in] NETLOGON_LOGON_INFO_CLASS LogonLevel, + [in, switch_is(LogonLevel)] PNETLOGON_LEVEL LogonInformation, + [in] NETLOGON_VALIDATION_INFO_CLASS ValidationLevel, + [out, switch_is(ValidationLevel)] PNETLOGON_VALIDATION ValidationInformation, + [out] UCHAR *Authoritative, + [in,out] ULONG *ExtraFlags); + + /* Function 40 */ + NET_API_STATUS + __stdcall + DsrEnumerateDomainTrusts( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in] ULONG Flags, + [out] PNETLOGON_TRUSTED_DOMAIN_ARRAY Domains); + + /* Function 41 */ + NET_API_STATUS + __stdcall + DsrDeregisterDnsHostRecords ( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in, unique, string] wchar_t *DnsDomainName, + [in, unique] GUID *DomainGuid, + [in, unique] GUID *DsaGuid, + [in, string] wchar_t *DnsHostName); + + /* Function 42 */ + NTSTATUS + __stdcall + NetrServerTrustPasswordsGet( + [in, unique, string] LOGONSRV_HANDLE TrustedDcName, + [in, string] wchar_t *AccountName, + [in] NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [out] PENCRYPTED_NT_OWF_PASSWORD EncryptedNewOwfPassword, + [out] PENCRYPTED_NT_OWF_PASSWORD EncryptedOldOwfPassword); + + /* Function 43 */ + NET_API_STATUS + __stdcall + DsrGetForestTrustInformation( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in, unique, string] wchar_t *TrustedDomainName, + [in] DWORD Flags, + [out] PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo); + + /* Function 44 */ + NTSTATUS + __stdcall + NetrGetForestTrustInformation( + [in, unique, string] LOGONSRV_HANDLE ServerName, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] DWORD Flags, + [out] PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo); + + /* Function 45 */ + NTSTATUS + __stdcall + NetrLogonSamLogonWithFlags( + [in, unique, string] LOGONSRV_HANDLE LogonServer, + [in, string, unique] wchar_t *ComputerName, + [in, unique] PNETLOGON_AUTHENTICATOR Authenticator, + [in, out, unique] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [in] NETLOGON_LOGON_INFO_CLASS LogonLevel, + [in, switch_is(LogonLevel)] PNETLOGON_LEVEL LogonInformation, + [in] NETLOGON_VALIDATION_INFO_CLASS ValidationLevel, + [out, switch_is(ValidationLevel)] PNETLOGON_VALIDATION ValidationInformation, + [out] UCHAR *Authoritative, + [in,out] ULONG *ExtraFlags); + + /* Function 46 */ + NTSTATUS + __stdcall + NetrServerGetTrustInfo( + [in, unique, string] LOGONSRV_HANDLE TrustedDcName, + [in, string] wchar_t *AccountName, + [in] NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + [in, string] wchar_t *ComputerName, + [in] PNETLOGON_AUTHENTICATOR Authenticator, + [out] PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + [out] PENCRYPTED_NT_OWF_PASSWORD EncryptedNewOwfPassword, + [out] PENCRYPTED_NT_OWF_PASSWORD EncryptedOldOwfPassword, + [out] PNL_GENERIC_RPC_DATA *TrustInfo); +}