advapi32: Add stub implementations for a bunch of documented Lsa APIs.
diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec
index 8fb6592..2fdd9ca 100644
--- a/dlls/advapi32/advapi32.spec
+++ b/dlls/advapi32/advapi32.spec
@@ -341,23 +341,23 @@
 @ stdcall LookupPrivilegeValueW(ptr ptr ptr)
 # @ stub LookupSecurityDescriptorPartsA
 # @ stub LookupSecurityDescriptorPartsW
-# @ stub LsaAddAccountRights
+@ stdcall LsaAddAccountRights(ptr ptr ptr long)
 @ stub LsaAddPrivilegesToAccount
 # @ stub LsaClearAuditLog
 @ stdcall LsaClose(ptr)
 @ stub LsaCreateAccount
 @ stub LsaCreateSecret
 @ stub LsaCreateTrustedDomain
-# @ stub LsaCreateTrustedDomainEx
+@ stdcall LsaCreateTrustedDomainEx(ptr ptr ptr long ptr)
 @ stub LsaDelete
-# @ stub LsaDeleteTrustedDomain
-# @ stub LsaEnumerateAccountRights
+@ stdcall LsaDeleteTrustedDomain(ptr ptr)
+@ stdcall LsaEnumerateAccountRights(ptr ptr long ptr long)
 @ stub LsaEnumerateAccounts
-# @ stub LsaEnumerateAccountsWithUserRight
+@ stdcall LsaEnumerateAccountsWithUserRight(ptr ptr ptr ptr)
 @ stub LsaEnumeratePrivileges
 @ stub LsaEnumeratePrivilegesOfAccount
-@ stdcall LsaEnumerateTrustedDomains(long ptr ptr long ptr)
-# @ stub LsaEnumerateTrustedDomainsEx
+@ stdcall LsaEnumerateTrustedDomains(ptr ptr ptr long ptr)
+@ stdcall LsaEnumerateTrustedDomainsEx(ptr ptr ptr long ptr)
 @ stdcall LsaFreeMemory(ptr)
 # @ stub LsaGetQuotasForAccount
 # @ stub LsaGetRemoteUserName
@@ -367,7 +367,7 @@
 # @ stub LsaICLookupNamesWithCreds
 @ stub LsaICLookupSids
 # @ stub LsaICLookupSidsWithCreds
-# @ stub LsaLookupNames2
+@ stdcall LsaLookupNames2(ptr long long ptr ptr ptr)
 @ stdcall LsaLookupNames(long long ptr ptr ptr)
 @ stub LsaLookupPrivilegeDisplayName
 # @ stub LsaLookupPrivilegeName
@@ -379,16 +379,17 @@
 # @ stub LsaOpenPolicySce
 @ stub LsaOpenSecret
 @ stub LsaOpenTrustedDomain
-# @ stub LsaOpenTrustedDomainByName
+@ stdcall LsaOpenTrustedDomainByName(ptr ptr long ptr)
 # @ stub LsaQueryDomainInformationPolicy
 # @ stub LsaQueryForestTrustInformation
 @ stub LsaQueryInfoTrustedDomain
 @ stdcall LsaQueryInformationPolicy(ptr long ptr)
 @ stub LsaQuerySecret
 # @ stub LsaQuerySecurityObject
-# @ stub LsaQueryTrustedDomainInfo
-# @ stub LsaQueryTrustedDomainInfoByName
-# @ stub LsaRemoveAccountRights
+@ stdcall LsaQueryTrustedDomainInfo(ptr ptr long ptr)
+@ stdcall LsaQueryTrustedDomainInfoByName(ptr ptr long ptr)
+@ stdcall LsaRegisterPolicyChangeNotification(long long)
+@ stdcall LsaRemoveAccountRights(ptr ptr long ptr long)
 @ stub LsaRemovePrivilegesFromAccount
 @ stdcall LsaRetrievePrivateData(ptr ptr ptr)
 # @ stub LsaSetDomainInformationPolicy
@@ -399,9 +400,10 @@
 @ stub LsaSetSecret
 # @ stub LsaSetSecurityObject
 @ stub LsaSetSystemAccessAccount
-# @ stub LsaSetTrustedDomainInfoByName
-# @ stub LsaSetTrustedDomainInformation
+@ stdcall LsaSetTrustedDomainInfoByName(ptr ptr long ptr)
+@ stdcall LsaSetTrustedDomainInformation(ptr ptr long ptr)
 @ stdcall LsaStorePrivateData(ptr ptr ptr)
+@ stdcall LsaUnregisterPolicyChangeNotification(long long)
 @ stdcall MD4Final(ptr)
 @ stdcall MD4Init(ptr)
 @ stdcall MD4Update(ptr ptr long)
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
index 4c42960..cf4ad0a 100644
--- a/dlls/advapi32/lsa.c
+++ b/dlls/advapi32/lsa.c
@@ -79,6 +79,20 @@
 }
 
 /******************************************************************************
+ * LsaAddAccountRights [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaAddAccountRights(
+    LSA_HANDLE policy,
+    PSID sid,
+    PLSA_UNICODE_STRING rights,
+    ULONG count)
+{
+    FIXME("(%p,%p,%p,0x%08lx) stub\n", policy, sid, rights, count);
+    return STATUS_OBJECT_NAME_NOT_FOUND;
+}
+
+/******************************************************************************
  * LsaClose [ADVAPI32.@]
  *
  * Closes a handle to a Policy or TrustedDomain.
@@ -97,6 +111,60 @@
 }
 
 /******************************************************************************
+ * LsaCreateTrustedDomainEx [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaCreateTrustedDomainEx(
+    LSA_HANDLE policy,
+    PTRUSTED_DOMAIN_INFORMATION_EX domain_info,
+    PTRUSTED_DOMAIN_AUTH_INFORMATION auth_info,
+    ACCESS_MASK access,
+    PLSA_HANDLE domain)
+{
+    FIXME("(%p,%p,%p,0x%08lx,%p) stub\n", policy, domain_info, auth_info,
+          access, domain);
+    return STATUS_SUCCESS;
+}
+
+/******************************************************************************
+ * LsaDeleteTrustedDomain [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaDeleteTrustedDomain(LSA_HANDLE policy, PSID sid)
+{
+    FIXME("(%p,%p) stub\n", policy, sid);
+    return STATUS_SUCCESS;
+}
+
+/******************************************************************************
+ * LsaEnumerateAccountRights [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaEnumerateAccountRights(
+    LSA_HANDLE policy,
+    PSID sid,
+    PLSA_UNICODE_STRING *rights,
+    PULONG count)
+{
+    FIXME("(%p,%p,%p,%p) stub\n", policy, sid, rights, count);
+    return STATUS_OBJECT_NAME_NOT_FOUND;
+}
+
+/******************************************************************************
+ * LsaEnumerateAccountsWithUserRight [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaEnumerateAccountsWithUserRight(
+    LSA_HANDLE policy,
+    PLSA_UNICODE_STRING rights,
+    PVOID *buffer,
+    PULONG count)
+{
+    FIXME("(%p,%p,%p,%p) stub\n", policy, rights, buffer, count);
+    return STATUS_NO_MORE_ENTRIES;
+}
+
+/******************************************************************************
  * LsaEnumerateTrustedDomains [ADVAPI32.@]
  *
  * Returns the names and SIDs of trusted domains.
@@ -133,6 +201,23 @@
 }
 
 /******************************************************************************
+ * LsaEnumerateTrustedDomainsEx [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaEnumerateTrustedDomainsEx(
+    LSA_HANDLE policy,
+    PLSA_ENUMERATION_HANDLE context,
+    PVOID *buffer,
+    ULONG length,
+    PULONG count)
+{
+    FIXME("(%p,%p,%p,0x%08lx,%p) stub\n", policy, context, buffer, length, count);
+
+    if (count) *count = 0;
+    return STATUS_SUCCESS;
+}
+
+/******************************************************************************
  * LsaFreeMemory [ADVAPI32.@]
  *
  * Frees memory allocated by a LSA function.
@@ -181,6 +266,22 @@
 }
 
 /******************************************************************************
+ * LsaLookupNames2 [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaLookupNames2(
+    LSA_HANDLE policy,
+    ULONG flags,
+    ULONG count,
+    PLSA_UNICODE_STRING names,
+    PLSA_REFERENCED_DOMAIN_LIST *domains,
+    PLSA_TRANSLATED_SID2 *sids)
+{
+    FIXME("(%p,0x%08lx,0x%08lx,%p,%p,%p) stub\n", policy, flags, count, names, domains, sids);
+    return STATUS_NONE_MAPPED;
+}
+
+/******************************************************************************
  * LsaLookupSids [ADVAPI32.@]
  *
  * Looks up the names that correspond to an array of SIDs.
@@ -264,6 +365,20 @@
 }
 
 /******************************************************************************
+ * LsaOpenTrustedDomainByName [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaOpenTrustedDomainByName(
+    LSA_HANDLE policy,
+    PLSA_UNICODE_STRING name,
+    ACCESS_MASK access,
+    PLSA_HANDLE handle)
+{
+    FIXME("(%p,%p,0x%08lx,%p) stub\n", policy, name, access, handle);
+    return STATUS_OBJECT_NAME_NOT_FOUND;
+}
+
+/******************************************************************************
  * LsaQueryInformationPolicy [ADVAPI32.@]
  *
  * Returns information about a Policy object.
@@ -369,6 +484,61 @@
 }
 
 /******************************************************************************
+ * LsaQueryTrustedDomainInfo [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaQueryTrustedDomainInfo(
+    LSA_HANDLE policy,
+    PSID sid,
+    TRUSTED_INFORMATION_CLASS class,
+    PVOID *buffer)
+{
+    FIXME("(%p,%p,%d,%p) stub\n", policy, sid, class, buffer);
+    return STATUS_OBJECT_NAME_NOT_FOUND;
+}
+
+/******************************************************************************
+ * LsaQueryTrustedDomainInfoByName [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaQueryTrustedDomainInfoByName(
+    LSA_HANDLE policy,
+    PLSA_UNICODE_STRING name,
+    TRUSTED_INFORMATION_CLASS class,
+    PVOID *buffer)
+{
+    FIXME("(%p,%p,%d,%p) stub\n", policy, name, class, buffer);
+    return STATUS_OBJECT_NAME_NOT_FOUND;
+}
+
+/******************************************************************************
+ * LsaRegisterPolicyChangeNotification [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaRegisterPolicyChangeNotification(
+    POLICY_NOTIFICATION_INFORMATION_CLASS class,
+    HANDLE event)
+{
+    FIXME("(%d,%p) stub\n", class, event);
+    return STATUS_UNSUCCESSFUL;
+}
+
+/******************************************************************************
+ * LsaRemoveAccountRights [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaRemoveAccountRights(
+    LSA_HANDLE policy,
+    PSID sid,
+    BOOLEAN all,
+    PLSA_UNICODE_STRING rights,
+    ULONG count)
+{
+    FIXME("(%p,%p,%d,%p,0x%08lx) stub\n", policy, sid, all, rights, count);
+    return STATUS_SUCCESS;
+}
+
+/******************************************************************************
  * LsaRetrievePrivateData [ADVAPI32.@]
  *
  * Retrieves data stored by LsaStorePrivateData.
@@ -416,6 +586,34 @@
 }
 
 /******************************************************************************
+ * LsaSetTrustedDomainInfoByName [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaSetTrustedDomainInfoByName(
+    LSA_HANDLE policy,
+    PLSA_UNICODE_STRING name,
+    TRUSTED_INFORMATION_CLASS class,
+    PVOID buffer)
+{
+    FIXME("(%p,%p,%d,%p) stub\n", policy, name, class, buffer);
+    return STATUS_SUCCESS;
+}
+
+/******************************************************************************
+ * LsaSetTrustedDomainInformation [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaSetTrustedDomainInformation(
+    LSA_HANDLE policy,
+    PSID sid,
+    TRUSTED_INFORMATION_CLASS class,
+    PVOID buffer)
+{
+    FIXME("(%p,%p,%d,%p) stub\n", policy, sid, class, buffer);
+    return STATUS_SUCCESS;
+}
+
+/******************************************************************************
  * LsaStorePrivateData [ADVAPI32.@]
  *
  * Stores or deletes a Policy object's data under the specified reg key.
@@ -437,3 +635,15 @@
     FIXME("(%p,%p,%p) stub\n", PolicyHandle, KeyName, PrivateData);
     return STATUS_OBJECT_NAME_NOT_FOUND;
 }
+
+/******************************************************************************
+ * LsaUnregisterPolicyChangeNotification [ADVAPI32.@]
+ *
+ */
+NTSTATUS WINAPI LsaUnregisterPolicyChangeNotification(
+    POLICY_NOTIFICATION_INFORMATION_CLASS class,
+    HANDLE event)
+{
+    FIXME("(%d,%p) stub\n", class, event);
+    return STATUS_SUCCESS;
+}
diff --git a/include/ntsecapi.h b/include/ntsecapi.h
index 1a93014..a775be7 100644
--- a/include/ntsecapi.h
+++ b/include/ntsecapi.h
@@ -205,21 +205,97 @@
     LONG DomainIndex;
 } LSA_TRANSLATED_SID, *PLSA_TRANSLATED_SID;
 
+typedef struct _TRUSTED_DOMAIN_INFORMATION_EX
+{
+    LSA_UNICODE_STRING Name;
+    LSA_UNICODE_STRING FlatName;
+    PSID Sid;
+    ULONG TrustDirection;
+    ULONG TrustType;
+    ULONG TrustAttributes;
+} TRUSTED_DOMAIN_INFORMATION_EX, *PTRUSTED_DOMAIN_INFORMATION_EX;
+
+typedef struct _LSA_AUTH_INFORMATION
+{
+    LARGE_INTEGER LastUpdateTime;
+    ULONG AuthType;
+    ULONG AuthInfoLength;
+    PUCHAR AuthInfo;
+} LSA_AUTH_INFORMATION, *PLSA_AUTH_INFORMATION;
+
+typedef struct _TRUSTED_DOMAIN_AUTH_INFORMATION
+{
+    ULONG IncomingAuthInfos;
+    PLSA_AUTH_INFORMATION IncomingAuthenticationInformation;
+    PLSA_AUTH_INFORMATION IncomingPreviousAuthenticationInformation;
+    ULONG OutgoingAuthInfos;
+    PLSA_AUTH_INFORMATION OutgoingAuthenticationInformation;
+    PLSA_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation;
+} TRUSTED_DOMAIN_AUTH_INFORMATION, *PTRUSTED_DOMAIN_AUTH_INFORMATION;
+
+typedef struct _LSA_TRANSLATED_SID2
+{
+    SID_NAME_USE Use;
+    PSID Sid;
+    LONG DomainIndex;
+    ULONG Flags;
+} LSA_TRANSLATED_SID2, *PLSA_TRANSLATED_SID2;
+
+typedef enum _TRUSTED_INFORMATION_CLASS
+{
+    TrustedDomainNameInformation = 1,
+    TrustedControllersInformation,
+    TrustedPosixOffsetInformation,
+    TrustedPasswordInformation,
+    TrustedDomainInformationBasic,
+    TrustedDomainInformationEx,
+    TrustedDomainAuthInformation,
+    TrustedDomainFullInformation
+} TRUSTED_INFORMATION_CLASS, *PTRUSTED_INFORMATION_CLASS;
+
+typedef enum _POLICY_NOTIFICATION_INFORMATION_CLASS
+{
+    PolicyNotifyAuditEventsInformation = 1,
+    PolicyNotifyAccountDomainInformation,
+    PolicyNotifyServerRoleInformation,
+    PolicyNotifyDnsDomainInformation,
+    PolicyNotifyDomainEfsInformation,
+    PolicyNotifyDomainKerberosTicketInformation,
+    PolicyNotifyMachineAccountPasswordInformation
+} POLICY_NOTIFICATION_INFORMATION_CLASS, *PPOLICY_NOTIFICATION_INFORMATION_CLASS;
+
+NTSTATUS WINAPI LsaAddAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING,ULONG);
 NTSTATUS WINAPI LsaCallAuthenticationPackage(HANDLE,ULONG,PVOID,ULONG,PVOID*,PULONG,PNTSTATUS);
 NTSTATUS WINAPI LsaClose(LSA_HANDLE);
 NTSTATUS WINAPI LsaConnectUntrusted(PHANDLE);
+NTSTATUS WINAPI LsaCreateTrustedDomainEx(LSA_HANDLE,PTRUSTED_DOMAIN_INFORMATION_EX,
+                                         PTRUSTED_DOMAIN_AUTH_INFORMATION,ACCESS_MASK,PLSA_HANDLE);
+NTSTATUS WINAPI LsaDeleteTrustedDomain(LSA_HANDLE,PSID);
 NTSTATUS WINAPI LsaDeregisterLogonProcess(HANDLE);
+NTSTATUS WINAPI LsaEnumerateAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING*,PULONG);
+NTSTATUS WINAPI LsaEnumerateAccountsWithUserRight(LSA_HANDLE,PLSA_UNICODE_STRING,PVOID*,PULONG);
 NTSTATUS WINAPI LsaEnumerateTrustedDomains(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,PVOID*,ULONG,PULONG);
+NTSTATUS WINAPI LsaEnumerateTrustedDomainsEx(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,PVOID*,ULONG,PULONG);
 NTSTATUS WINAPI LsaFreeMemory(PVOID);
 NTSTATUS WINAPI LsaLookupNames(LSA_HANDLE,ULONG Count,PLSA_UNICODE_STRING,PLSA_REFERENCED_DOMAIN_LIST*,
                                PLSA_TRANSLATED_SID*);
+NTSTATUS WINAPI LsaLookupNames2(LSA_HANDLE,ULONG,ULONG,PLSA_UNICODE_STRING,PLSA_REFERENCED_DOMAIN_LIST*,
+                                PLSA_TRANSLATED_SID2*);
 NTSTATUS WINAPI LsaLookupSids(LSA_HANDLE,ULONG,PSID *,PLSA_REFERENCED_DOMAIN_LIST *,PLSA_TRANSLATED_NAME *);
 ULONG WINAPI LsaNtStatusToWinError(NTSTATUS);
 NTSTATUS WINAPI LsaOpenPolicy(PLSA_UNICODE_STRING,PLSA_OBJECT_ATTRIBUTES,ACCESS_MASK,PLSA_HANDLE);
+NTSTATUS WINAPI LsaOpenTrustedDomainByName(LSA_HANDLE,PLSA_UNICODE_STRING,ACCESS_MASK,PLSA_HANDLE);
 NTSTATUS WINAPI LsaQueryInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID*);
+NTSTATUS WINAPI LsaQueryTrustedDomainInfo(LSA_HANDLE,PSID,TRUSTED_INFORMATION_CLASS,PVOID*);
+NTSTATUS WINAPI LsaQueryTrustedDomainInfoByName(LSA_HANDLE,PLSA_UNICODE_STRING,TRUSTED_INFORMATION_CLASS,PVOID*);
+NTSTATUS WINAPI LsaRegisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS,HANDLE);
+NTSTATUS WINAPI LsaRemoveAccountRights(LSA_HANDLE,PSID,BOOLEAN,PLSA_UNICODE_STRING,ULONG);
 NTSTATUS WINAPI LsaRetrievePrivateData(LSA_HANDLE,PLSA_UNICODE_STRING,PLSA_UNICODE_STRING*);
 NTSTATUS WINAPI LsaSetInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID);
+NTSTATUS WINAPI LsaSetTrustedDomainInfoByName(LSA_HANDLE,PLSA_UNICODE_STRING,TRUSTED_INFORMATION_CLASS,PVOID);
+NTSTATUS WINAPI LsaSetTrustedDomainInformation(LSA_HANDLE,PSID,TRUSTED_INFORMATION_CLASS,PVOID);
 NTSTATUS WINAPI LsaStorePrivateData(LSA_HANDLE,PLSA_UNICODE_STRING,PLSA_UNICODE_STRING);
+NTSTATUS WINAPI LsaUnregisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS,HANDLE);
 
 #ifdef __cplusplus
 } /* extern "C" */