Implement LsaEnumerateAccountRights.
[reactos.git] / reactos / dll / win32 / advapi32 / sec / lsa.c
index 5f3b4db..6cc8701 100644 (file)
@@ -1,63 +1,97 @@
 /*
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS system libraries
- * FILE:            lib/advapi32/sec/lsa.c
+ * FILE:            dll/win32/advapi32/sec/lsa.c
  * PURPOSE:         Local security authority functions
  * PROGRAMMER:      Emanuele Aliberti
  * UPDATE HISTORY:
- *     19990322 EA created
- *     19990515 EA stubs
+ *      19990322 EA created
+ *      19990515 EA stubs
  *      20030202 KJK compressed stubs
  *
  */
-
 #include <advapi32.h>
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(advapi);
 
-static handle_t LSABindingHandle = NULL;
-
-static VOID
-LSAHandleUnbind(handle_t *Handle)
+/* imported from wine 1.1.14 */
+static void* ADVAPI_GetDomainName(unsigned sz, unsigned ofs)
 {
-    RPC_STATUS status;
+    HKEY key;
+    LONG ret;
+    BYTE* ptr = NULL;
+    UNICODE_STRING* ustr;
 
-    if (*Handle == NULL)
-        return;
+    static const WCHAR wVNETSUP[] = {
+        'S','y','s','t','e','m','\\',
+        'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
+        'S','e','r','v','i','c','e','s','\\',
+        'V','x','D','\\','V','N','E','T','S','U','P','\0'};
 
-    status = RpcBindingFree(Handle);
-    if (status)
+    ret = RegOpenKeyExW(HKEY_LOCAL_MACHINE, wVNETSUP, 0, KEY_READ, &key);
+    if (ret == ERROR_SUCCESS)
     {
-        TRACE("RpcBindingFree returned 0x%x\n", status);
+        DWORD size = 0;
+        static const WCHAR wg[] = { 'W','o','r','k','g','r','o','u','p',0 };
+
+        ret = RegQueryValueExW(key, wg, NULL, NULL, NULL, &size);
+        if (ret == ERROR_MORE_DATA || ret == ERROR_SUCCESS)
+        {
+            ptr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sz + size);
+            if (!ptr) return NULL;
+            ustr = (UNICODE_STRING*)(ptr + ofs);
+            ustr->MaximumLength = size;
+            ustr->Buffer = (WCHAR*)(ptr + sz);
+            ret = RegQueryValueExW(key, wg, NULL, NULL, (LPBYTE)ustr->Buffer, &size);
+            if (ret != ERROR_SUCCESS)
+            {
+                HeapFree(GetProcessHeap(), 0, ptr);
+                ptr = NULL;
+            }   
+            else ustr->Length = size - sizeof(WCHAR);
+        }
+        RegCloseKey(key);
     }
+    if (!ptr)
+    {
+        static const WCHAR wDomain[] = {'D','O','M','A','I','N','\0'};
+        ptr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+                        sz + sizeof(wDomain));
+        if (!ptr) return NULL;
+        ustr = (UNICODE_STRING*)(ptr + ofs);
+        ustr->MaximumLength = sizeof(wDomain);
+        ustr->Buffer = (WCHAR*)(ptr + sz);
+        ustr->Length = sizeof(wDomain) - sizeof(WCHAR);
+        memcpy(ustr->Buffer, wDomain, sizeof(wDomain));
+    }
+    return ptr;
 }
 
-static VOID
-LSAHandleBind(VOID)
+handle_t __RPC_USER
+PLSAPR_SERVER_NAME_bind(PLSAPR_SERVER_NAME pszSystemName)
 {
+    handle_t hBinding = NULL;
     LPWSTR pszStringBinding;
     RPC_STATUS status;
-    handle_t Handle;
 
-    if (LSABindingHandle != NULL)
-        return;
+    TRACE("PLSAPR_SERVER_NAME_bind() called\n");
 
     status = RpcStringBindingComposeW(NULL,
                                       L"ncacn_np",
-                                      NULL,
+                                      pszSystemName,
                                       L"\\pipe\\lsarpc",
                                       NULL,
                                       &pszStringBinding);
     if (status)
     {
         TRACE("RpcStringBindingCompose returned 0x%x\n", status);
-        return;
+        return NULL;
     }
 
     /* Set the binding handle that will be used to bind to the server. */
     status = RpcBindingFromStringBindingW(pszStringBinding,
-                                          &Handle);
+                                          &hBinding);
     if (status)
     {
         TRACE("RpcBindingFromStringBinding returned 0x%x\n", status);
@@ -69,11 +103,22 @@ LSAHandleBind(VOID)
         TRACE("RpcStringFree returned 0x%x\n", status);
     }
 
-    if (InterlockedCompareExchangePointer(&LSABindingHandle,
-                                          (PVOID)Handle,
-                                          NULL) != NULL)
+    return hBinding;
+}
+
+
+void __RPC_USER
+PLSAPR_SERVER_NAME_unbind(PLSAPR_SERVER_NAME pszSystemName,
+                          handle_t hBinding)
+{
+    RPC_STATUS status;
+
+    TRACE("PLSAPR_SERVER_NAME_unbind() called\n");
+
+    status = RpcBindingFree(&hBinding);
+    if (status)
     {
-        LSAHandleUnbind(&Handle);
+        TRACE("RpcBindingFree returned 0x%x\n", status);
     }
 }
 
@@ -81,34 +126,48 @@ LSAHandleBind(VOID)
 /*
  * @implemented
  */
-NTSTATUS STDCALL
+NTSTATUS WINAPI
 LsaClose(LSA_HANDLE ObjectHandle)
 {
-    TRACE("LsaClose(0x%p) called\n", ObjectHandle);
+    NTSTATUS Status;
 
-    /* This is our fake handle, don't go too much long way */
-    if (ObjectHandle == (LSA_HANDLE)0xcafe)
-        return STATUS_SUCCESS;
+    TRACE("LsaClose(0x%p) called\n", ObjectHandle);
 
-    LSAHandleBind();
+    RpcTryExcept
+    {
+        Status = LsarClose((PLSAPR_HANDLE)&ObjectHandle);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        Status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
 
-    return LsarClose(LSABindingHandle,
-                     (unsigned long)ObjectHandle);
+    return Status;
 }
 
 
 /*
  * @implemented
  */
-NTSTATUS STDCALL
+NTSTATUS WINAPI
 LsaDelete(LSA_HANDLE ObjectHandle)
 {
+    NTSTATUS Status;
+
     TRACE("LsaDelete(0x%p) called\n", ObjectHandle);
 
-    LSAHandleBind();
+    RpcTryExcept
+    {
+        Status = LsarDelete((LSAPR_HANDLE)ObjectHandle);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        Status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
 
-    return LsarDelete(LSABindingHandle,
-                      (unsigned long)ObjectHandle);
+    return Status;
 }
 
 
@@ -116,7 +175,7 @@ LsaDelete(LSA_HANDLE ObjectHandle)
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaAddAccountRights(
     LSA_HANDLE PolicyHandle,
     PSID AccountSid,
@@ -124,14 +183,14 @@ LsaAddAccountRights(
     ULONG CountOfRights)
 {
     FIXME("(%p,%p,%p,0x%08x) stub\n", PolicyHandle, AccountSid, UserRights, CountOfRights);
-    return STATUS_NOT_IMPLEMENTED;
+    return STATUS_OBJECT_NAME_NOT_FOUND;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaCreateTrustedDomainEx(
     LSA_HANDLE PolicyHandle,
     PTRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation,
@@ -148,35 +207,62 @@ LsaCreateTrustedDomainEx(
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaDeleteTrustedDomain(
     LSA_HANDLE PolicyHandle,
     PSID TrustedDomainSid)
 {
     FIXME("(%p,%p) stub\n", PolicyHandle, TrustedDomainSid);
-    return STATUS_NOT_IMPLEMENTED;
+    return STATUS_SUCCESS;
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaEnumerateAccountRights(
     LSA_HANDLE PolicyHandle,
     PSID AccountSid,
     PLSA_UNICODE_STRING *UserRights,
     PULONG CountOfRights)
 {
-    FIXME("(%p,%p,%p,%p) stub\n", PolicyHandle, AccountSid, UserRights, CountOfRights);
-    return STATUS_NOT_IMPLEMENTED;
+    LSAPR_USER_RIGHT_SET UserRightsSet;
+    NTSTATUS Status;
+
+    TRACE("(%p,%p,%p,%p) stub\n", PolicyHandle, AccountSid, UserRights, CountOfRights);
+
+    UserRightsSet.Entries = 0;
+    UserRightsSet.UserRights = NULL;
+
+    RpcTryExcept
+    {
+        Status = LsarEnmuerateAccountRights((LSAPR_HANDLE)PolicyHandle,
+                                            AccountSid,
+                                            &UserRightsSet);
+
+        *CountOfRights = UserRightsSet.Entries;
+        *UserRights = (PUNICODE_STRING)UserRightsSet.UserRights;
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        Status = I_RpcMapWin32Status(RpcExceptionCode());
+
+        if (UserRightsSet.UserRights != NULL)
+        {
+            MIDL_user_free(UserRightsSet.UserRights);
+        }
+    }
+    RpcEndExcept;
+
+    return Status;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaEnumerateAccountsWithUserRight(
     LSA_HANDLE PolicyHandle,
     OPTIONAL PLSA_UNICODE_STRING UserRights,
@@ -184,14 +270,14 @@ LsaEnumerateAccountsWithUserRight(
     PULONG CountReturned)
 {
     FIXME("(%p,%p,%p,%p) stub\n", PolicyHandle, UserRights, EnumerationBuffer, CountReturned);
-    return STATUS_NOT_IMPLEMENTED;
+    return STATUS_NO_MORE_ENTRIES;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaEnumerateTrustedDomains(
     LSA_HANDLE PolicyHandle,
     PLSA_ENUMERATION_HANDLE EnumerationContext,
@@ -201,14 +287,16 @@ LsaEnumerateTrustedDomains(
 {
     FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle, EnumerationContext,
         Buffer, PreferedMaximumLength, CountReturned);
-    return STATUS_NOT_IMPLEMENTED;
+    
+    if (CountReturned) *CountReturned = 0;
+    return STATUS_SUCCESS;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaEnumerateTrustedDomainsEx(
     LSA_HANDLE PolicyHandle,
     PLSA_ENUMERATION_HANDLE EnumerationContext,
@@ -218,13 +306,15 @@ LsaEnumerateTrustedDomainsEx(
 {
     FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle, EnumerationContext, Buffer,
         PreferedMaximumLength, CountReturned);
-    return STATUS_NOT_IMPLEMENTED;
+    if (CountReturned) *CountReturned = 0;
+    return STATUS_SUCCESS;
 }
 
 /*
  * @implemented
  */
-NTSTATUS STDCALL
+NTSTATUS
+WINAPI
 LsaFreeMemory(PVOID Buffer)
 {
     TRACE("(%p)\n", Buffer);
@@ -285,7 +375,7 @@ LsaLookupNames(
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaLookupNames2(
     LSA_HANDLE PolicyHandle,
     ULONG Flags,
@@ -296,6 +386,12 @@ LsaLookupNames2(
 {
     FIXME("(%p,0x%08x,0x%08x,%p,%p,%p) stub\n", PolicyHandle, Flags,
         Count, Names, ReferencedDomains, Sids);
+    if (Names != NULL && Count > 0)
+    {
+        *ReferencedDomains = RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(LSA_REFERENCED_DOMAIN_LIST));
+        *Sids = RtlAllocateHeap(RtlGetProcessHeap(), 0, Count * sizeof(LSA_TRANSLATED_SID2));
+        return STATUS_SOME_NOT_MAPPED;
+    }
     return STATUS_NONE_MAPPED;
 }
 
@@ -351,7 +447,7 @@ LsaLookupSids(
  *
  * @implemented
  */
-ULONG STDCALL
+ULONG WINAPI
 LsaNtStatusToWinError(NTSTATUS Status)
 {
     TRACE("(%lx)\n", Status);
@@ -370,26 +466,45 @@ LsaNtStatusToWinError(NTSTATUS Status)
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaOpenPolicy(
     IN PLSA_UNICODE_STRING SystemName,
     IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes,
     IN ACCESS_MASK DesiredAccess,
     IN OUT PLSA_HANDLE PolicyHandle)
 {
-    TRACE("(%s,%p,0x%08x,%p) stub\n",
-          SystemName?debugstr_w(SystemName->Buffer):"(null)",
+    NTSTATUS Status;
+
+    TRACE("LsaOpenPolicy (%s,%p,0x%08x,%p)\n",
+          SystemName ? debugstr_w(SystemName->Buffer) : "(null)",
           ObjectAttributes, DesiredAccess, PolicyHandle);
 
-    if(PolicyHandle) *PolicyHandle = (LSA_HANDLE)0xcafe;
-    return STATUS_SUCCESS;
+    RpcTryExcept
+    {
+        *PolicyHandle = NULL;
+
+        Status = LsarOpenPolicy(SystemName ? SystemName->Buffer : NULL,
+                                (PLSAPR_OBJECT_ATTRIBUTES)ObjectAttributes,
+                                DesiredAccess,
+                                PolicyHandle);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        Status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    TRACE("LsaOpenPolicy() done (Status: 0x%08lx)\n", Status);
+
+    return Status;
 }
 
+
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaOpenTrustedDomainByName(
     LSA_HANDLE PolicyHandle,
     PLSA_UNICODE_STRING TrustedDomainName,
@@ -397,14 +512,14 @@ LsaOpenTrustedDomainByName(
     PLSA_HANDLE TrustedDomainHandle)
 {
     FIXME("(%p,%p,0x%08x,%p) stub\n", PolicyHandle, TrustedDomainName, DesiredAccess, TrustedDomainHandle);
-    return STATUS_NOT_IMPLEMENTED;
+    return STATUS_OBJECT_NAME_NOT_FOUND;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaQueryDomainInformationPolicy(
     LSA_HANDLE PolicyHandle,
     POLICY_DOMAIN_INFORMATION_CLASS InformationClass,
@@ -418,7 +533,7 @@ LsaQueryDomainInformationPolicy(
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaQueryForestTrustInformation(
     LSA_HANDLE PolicyHandle,
     PLSA_UNICODE_STRING TrustedDomainName,
@@ -431,101 +546,103 @@ LsaQueryForestTrustInformation(
 /*
  * @unimplemented
  */
-NTSTATUS STDCALL
+NTSTATUS WINAPI
 LsaQueryInformationPolicy(LSA_HANDLE PolicyHandle,
-                         POLICY_INFORMATION_CLASS pic,
-                         PVOID *Buffer)
-{
-  FIXME("(%p,0x%08x,%p) stub\n",
-          PolicyHandle, pic, Buffer);
-
-  if (!Buffer)
-    return FALSE;
-
-       switch (pic)
-       {
-         case PolicyAuditEventsInformation: /* 2 */
-           {
-             PPOLICY_AUDIT_EVENTS_INFO p = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(POLICY_AUDIT_EVENTS_INFO));
-             p->AuditingMode = FALSE; /* no auditing */
-             *Buffer = p;
-           }
-           break;
-         case PolicyPrimaryDomainInformation: /* 3 */
-         case PolicyAccountDomainInformation: /* 5 */
-           {
-             struct di
-             { POLICY_PRIMARY_DOMAIN_INFO ppdi;
-               SID sid;
-             };
-             SID_IDENTIFIER_AUTHORITY localSidAuthority = {SECURITY_NT_AUTHORITY};
-
-             struct di * xdi = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(xdi));
-              HKEY key;
-              BOOL useDefault = TRUE;
-              LONG ret;
-
-              if ((ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
-               "System\\CurrentControlSet\\Services\\VxD\\VNETSUP", 0,
-               KEY_READ, &key)) == ERROR_SUCCESS)
-              {
-                  DWORD size = 0;
-                  WCHAR wg[] = { 'W','o','r','k','g','r','o','u','p',0 };
-
-                  ret = RegQueryValueExW(key, wg, NULL, NULL, NULL, &size);
-                  if (ret == ERROR_MORE_DATA || ret == ERROR_SUCCESS)
-                  {
-                      xdi->ppdi.Name.Buffer = RtlAllocateHeap(RtlGetProcessHeap(),
-                       HEAP_ZERO_MEMORY, size);
-                      if ((ret = RegQueryValueExW(key, wg, NULL, NULL,
-                       (LPBYTE)xdi->ppdi.Name.Buffer, &size)) == ERROR_SUCCESS)
-                      {
-                          xdi->ppdi.Name.Length = (USHORT)size;
-                          useDefault = FALSE;
-                      }
-                      else
-                      {
-                          RtlFreeHeap(RtlGetProcessHeap(), 0, xdi->ppdi.Name.Buffer);
-                          xdi->ppdi.Name.Buffer = NULL;
-                      }
-                  }
-                  RegCloseKey(key);
-              }
-              if (useDefault)
-                  RtlCreateUnicodeStringFromAsciiz(&(xdi->ppdi.Name), "DOMAIN");
-              TRACE("setting domain to \n");
-
-             xdi->ppdi.Sid = &(xdi->sid);
-             xdi->sid.Revision = SID_REVISION;
-             xdi->sid.SubAuthorityCount = 1;
-             xdi->sid.IdentifierAuthority = localSidAuthority;
-             xdi->sid.SubAuthority[0] = SECURITY_LOCAL_SYSTEM_RID;
-             *Buffer = xdi;
-           }
-           break;
-         case PolicyAuditLogInformation:
-         case PolicyPdAccountInformation:
-         case PolicyLsaServerRoleInformation:
-         case PolicyReplicaSourceInformation:
-         case PolicyDefaultQuotaInformation:
-         case PolicyModificationInformation:
-         case PolicyAuditFullSetInformation:
-         case PolicyAuditFullQueryInformation:
-         case PolicyDnsDomainInformation:
-         case PolicyEfsInformation:
-           {
-             FIXME("category not implemented\n");
-             return FALSE;
-           }
-       }
-       return TRUE;
+              POLICY_INFORMATION_CLASS InformationClass,
+              PVOID *Buffer)
+{
+    TRACE("(%p,0x%08x,%p)\n", PolicyHandle, InformationClass, Buffer);
+
+    if(!Buffer) return STATUS_INVALID_PARAMETER;
+    switch (InformationClass)
+    {
+        case PolicyAuditEventsInformation: /* 2 */
+        {
+            PPOLICY_AUDIT_EVENTS_INFO p = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY,
+                                                    sizeof(POLICY_AUDIT_EVENTS_INFO));
+            p->AuditingMode = FALSE; /* no auditing */
+            *Buffer = p;
+        }
+        break;
+        case PolicyPrimaryDomainInformation: /* 3 */
+        {
+            /* Only the domain name is valid for the local computer.
+             * All other fields are zero.
+             */
+            PPOLICY_PRIMARY_DOMAIN_INFO pinfo;
+
+            pinfo = ADVAPI_GetDomainName(sizeof(*pinfo), offsetof(POLICY_PRIMARY_DOMAIN_INFO, Name));
+
+            TRACE("setting domain to %s\n", debugstr_w(pinfo->Name.Buffer));
+
+            *Buffer = pinfo;
+        }
+        case PolicyAccountDomainInformation: /* 5 */
+        {
+            struct di
+            {
+                POLICY_ACCOUNT_DOMAIN_INFO info;
+                SID sid;
+                DWORD padding[3];
+                WCHAR domain[MAX_COMPUTERNAME_LENGTH + 1];
+            };
+            SID_IDENTIFIER_AUTHORITY localSidAuthority = {SECURITY_NT_AUTHORITY};
+
+            DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
+            struct di * xdi = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*xdi));
+
+            xdi->info.DomainName.MaximumLength = dwSize * sizeof(WCHAR);
+            xdi->info.DomainName.Buffer = xdi->domain;
+            if (GetComputerNameW(xdi->info.DomainName.Buffer, &dwSize))
+                xdi->info.DomainName.Length = dwSize * sizeof(WCHAR);
+
+            TRACE("setting name to %s\n", debugstr_w(xdi->info.DomainName.Buffer));
+
+            xdi->info.DomainSid = &xdi->sid;
+            xdi->sid.Revision = SID_REVISION;
+            xdi->sid.SubAuthorityCount = 1;
+            xdi->sid.IdentifierAuthority = localSidAuthority;
+            xdi->sid.SubAuthority[0] = SECURITY_LOCAL_SYSTEM_RID;
+
+            *Buffer = xdi;
+        }
+        break;
+        case  PolicyDnsDomainInformation:      /* 12 (0xc) */
+        {
+            /* Only the domain name is valid for the local computer.
+             * All other fields are zero.
+             */
+            PPOLICY_DNS_DOMAIN_INFO pinfo;
+
+            pinfo = ADVAPI_GetDomainName(sizeof(*pinfo), offsetof(POLICY_DNS_DOMAIN_INFO, Name));
+
+            TRACE("setting domain to %s\n", debugstr_w(pinfo->Name.Buffer));
+
+            *Buffer = pinfo;
+        }
+        break;
+        case PolicyAuditLogInformation:
+        case PolicyPdAccountInformation:
+        case PolicyLsaServerRoleInformation:
+        case PolicyReplicaSourceInformation:
+        case PolicyDefaultQuotaInformation:
+        case PolicyModificationInformation:
+        case PolicyAuditFullSetInformation:
+        case PolicyAuditFullQueryInformation:
+        case PolicyEfsInformation:
+        {
+            FIXME("category not implemented\n");
+            return STATUS_UNSUCCESSFUL;
+        }
+    }
+    return STATUS_SUCCESS;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaQueryTrustedDomainInfoByName(
     LSA_HANDLE PolicyHandle,
     PLSA_UNICODE_STRING TrustedDomainName,
@@ -533,14 +650,14 @@ LsaQueryTrustedDomainInfoByName(
     PVOID *Buffer)
 {
     FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainName, InformationClass, Buffer);
-    return STATUS_NOT_IMPLEMENTED;
+    return STATUS_OBJECT_NAME_NOT_FOUND;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaQueryTrustedDomainInfo(
     LSA_HANDLE PolicyHandle,
     PSID TrustedDomainSid,
@@ -548,14 +665,14 @@ LsaQueryTrustedDomainInfo(
     PVOID *Buffer)
 {
     FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainSid, InformationClass, Buffer);
-    return STATUS_NOT_IMPLEMENTED;
+    return STATUS_OBJECT_NAME_NOT_FOUND;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaRemoveAccountRights(
     LSA_HANDLE PolicyHandle,
     PSID AccountSid,
@@ -564,14 +681,14 @@ LsaRemoveAccountRights(
     ULONG CountOfRights)
 {
     FIXME("(%p,%p,%d,%p,0x%08x) stub\n", PolicyHandle, AccountSid, AllRights, UserRights, CountOfRights);
-    return STATUS_NOT_IMPLEMENTED;
+    return STATUS_SUCCESS;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaRetrievePrivateData(
     LSA_HANDLE PolicyHandle,
     PLSA_UNICODE_STRING KeyName,
@@ -585,7 +702,7 @@ LsaRetrievePrivateData(
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaSetDomainInformationPolicy(
     LSA_HANDLE PolicyHandle,
     POLICY_DOMAIN_INFORMATION_CLASS InformationClass,
@@ -599,21 +716,21 @@ LsaSetDomainInformationPolicy(
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaSetInformationPolicy(
     LSA_HANDLE PolicyHandle,
     POLICY_INFORMATION_CLASS InformationClass,
     PVOID Buffer)
 {
     FIXME("(%p,0x%08x,%p) stub\n", PolicyHandle, InformationClass, Buffer);
-    return STATUS_NOT_IMPLEMENTED;
+    return STATUS_UNSUCCESSFUL;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaSetForestTrustInformation(
     LSA_HANDLE PolicyHandle,
     PLSA_UNICODE_STRING TrustedDomainName,
@@ -629,7 +746,7 @@ LsaSetForestTrustInformation(
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaSetTrustedDomainInfoByName(
     LSA_HANDLE PolicyHandle,
     PLSA_UNICODE_STRING TrustedDomainName,
@@ -637,14 +754,14 @@ LsaSetTrustedDomainInfoByName(
     PVOID Buffer)
 {
     FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainName, InformationClass, Buffer);
-    return STATUS_NOT_IMPLEMENTED;
+    return STATUS_SUCCESS;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaSetTrustedDomainInformation(
     LSA_HANDLE PolicyHandle,
     PSID TrustedDomainSid,
@@ -652,28 +769,28 @@ LsaSetTrustedDomainInformation(
     PVOID Buffer)
 {
     FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainSid, InformationClass, Buffer);
-    return STATUS_NOT_IMPLEMENTED;
+    return STATUS_SUCCESS;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaStorePrivateData(
     LSA_HANDLE PolicyHandle,
     PLSA_UNICODE_STRING KeyName,
     PLSA_UNICODE_STRING PrivateData)
 {
     FIXME("(%p,%p,%p) stub\n", PolicyHandle, KeyName, PrivateData);
-    return STATUS_NOT_IMPLEMENTED;
+    return STATUS_OBJECT_NAME_NOT_FOUND;
 }
 
 /*
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaGetUserName(
     PUNICODE_STRING *UserName,
     PUNICODE_STRING *DomainName)
@@ -686,7 +803,7 @@ LsaGetUserName(
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+WINAPI
 LsaQueryInfoTrustedDomain (DWORD Unknonw0,
                           DWORD Unknonw1,
                           DWORD Unknonw2)