[ADVAPI32]
authorEric Kohl <eric.kohl@reactos.org>
Sat, 16 Oct 2010 16:26:52 +0000 (16:26 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Sat, 16 Oct 2010 16:26:52 +0000 (16:26 +0000)
Implement LsaAddPrivilegesToAccount(), LsaCreateTrustedDomain(), LsaDeleteTrustedDomain() and LsaOpenTrustedDomainByName().

svn path=/trunk/; revision=49174

reactos/dll/win32/advapi32/advapi32.spec
reactos/dll/win32/advapi32/sec/lsa.c
reactos/include/psdk/ntsecapi.h

index 1963f80..810c1ab 100644 (file)
 @ stub LookupSecurityDescriptorPartsA
 @ stub LookupSecurityDescriptorPartsW
 @ stdcall LsaAddAccountRights(ptr ptr ptr long)
 @ stub LookupSecurityDescriptorPartsA
 @ stub LookupSecurityDescriptorPartsW
 @ stdcall LsaAddAccountRights(ptr ptr ptr long)
-@ stub LsaAddPrivilegesToAccount
+@ stdcall LsaAddPrivilegesToAccount(ptr ptr)
 @ stub LsaClearAuditLog
 @ stdcall LsaClose(ptr)
 @ stdcall LsaCreateAccount(ptr ptr long ptr)
 @ stub LsaCreateSecret
 @ stub LsaClearAuditLog
 @ stdcall LsaClose(ptr)
 @ stdcall LsaCreateAccount(ptr ptr long ptr)
 @ stub LsaCreateSecret
-@ stub LsaCreateTrustedDomain
+@ stdcall LsaCreateTrustedDomain(ptr ptr long ptr)
 @ stdcall LsaCreateTrustedDomainEx(ptr ptr ptr long ptr)
 @ stdcall LsaDelete(ptr)
 @ stdcall LsaDeleteTrustedDomain(ptr ptr)
 @ stdcall LsaCreateTrustedDomainEx(ptr ptr ptr long ptr)
 @ stdcall LsaDelete(ptr)
 @ stdcall LsaDeleteTrustedDomain(ptr ptr)
 @ stdcall LsaRemoveAccountRights(ptr ptr long ptr long)
 @ stub LsaRemovePrivilegesFromAccount
 @ stdcall LsaRetrievePrivateData(ptr ptr ptr)
 @ stdcall LsaRemoveAccountRights(ptr ptr long ptr long)
 @ stub LsaRemovePrivilegesFromAccount
 @ stdcall LsaRetrievePrivateData(ptr ptr ptr)
-# @ stub LsaSetDomainInformationPolicy
-# @ stub LsaSetForestTrustInformation
-@ stdcall LsaSetInformationPolicy(long long ptr)
+@ stdcall LsaSetDomainInformationPolicy(ptr long ptr)
 @ stub LsaSetForestTrustInformation
 @ stub LsaSetForestTrustInformation
+@ stdcall LsaSetInformationPolicy(long long ptr)
 @ stub LsaSetInformationTrustedDomain
 @ stub LsaSetQuotasForAccount
 @ stdcall LsaSetSecret(ptr ptr ptr)
 @ stub LsaSetInformationTrustedDomain
 @ stub LsaSetQuotasForAccount
 @ stdcall LsaSetSecret(ptr ptr ptr)
index e479c3a..604dcb2 100644 (file)
@@ -95,8 +95,9 @@ PLSAPR_SERVER_NAME_unbind(PLSAPR_SERVER_NAME pszSystemName,
 /*
  * @implemented
  */
 /*
  * @implemented
  */
-NTSTATUS WINAPI
-LsaClose(LSA_HANDLE ObjectHandle)
+NTSTATUS
+WINAPI
+LsaClose(IN LSA_HANDLE ObjectHandle)
 {
     NTSTATUS Status;
 
 {
     NTSTATUS Status;
 
@@ -119,8 +120,9 @@ LsaClose(LSA_HANDLE ObjectHandle)
 /*
  * @implemented
  */
 /*
  * @implemented
  */
-NTSTATUS WINAPI
-LsaDelete(LSA_HANDLE ObjectHandle)
+NTSTATUS
+WINAPI
+LsaDelete(IN LSA_HANDLE ObjectHandle)
 {
     NTSTATUS Status;
 
 {
     NTSTATUS Status;
 
@@ -156,6 +158,33 @@ LsaAddAccountRights(
 }
 
 
 }
 
 
+/*
+ * @implemented
+ */
+NTSTATUS
+WINAPI
+LsaAddPrivilegesToAccount(IN LSA_HANDLE AccountHandle,
+                          IN PPRIVILEGE_SET PrivilegeSet)
+{
+    NTSTATUS Status;
+
+    TRACE("(%p,%p) stub\n", AccountHandle, PrivilegeSet);
+
+    RpcTryExcept
+    {
+        Status = LsarAddPrivilegesToAccount((LSAPR_HANDLE)AccountHandle,
+                                            (PLSAPR_PRIVILEGE_SET)PrivilegeSet);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        Status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return Status;
+}
+
+
 /*
  * @implemented
  */
 /*
  * @implemented
  */
@@ -164,7 +193,7 @@ WINAPI
 LsaCreateAccount(IN LSA_HANDLE PolicyHandle,
                  IN PSID AccountSid,
                  IN ULONG Flags,
 LsaCreateAccount(IN LSA_HANDLE PolicyHandle,
                  IN PSID AccountSid,
                  IN ULONG Flags,
-                 IN OUT PLSA_HANDLE AccountHandle)
+                 OUT PLSA_HANDLE AccountHandle)
 {
     NTSTATUS Status;
 
 {
     NTSTATUS Status;
 
@@ -187,6 +216,38 @@ LsaCreateAccount(IN LSA_HANDLE PolicyHandle,
 }
 
 
 }
 
 
+/*
+ * @implemented
+ */
+NTSTATUS
+WINAPI
+LsaCreateTrustedDomain(IN LSA_HANDLE PolicyHandle,
+                       IN PLSA_TRUST_INFORMATION TrustedDomainInformation,
+                       IN ACCESS_MASK DesiredAccess,
+                       OUT PLSA_HANDLE TrustedDomainHandle)
+{
+    NTSTATUS Status;
+
+    TRACE("(%p,%p,0x%08x,%p)\n", PolicyHandle, TrustedDomainInformation,
+          DesiredAccess, TrustedDomainHandle);
+
+    RpcTryExcept
+    {
+        Status = LsarCreateTrustedDomain((LSAPR_HANDLE)PolicyHandle,
+                                         (PLSAPR_TRUST_INFORMATION)TrustedDomainInformation,
+                                         DesiredAccess,
+                                         (PLSAPR_HANDLE)TrustedDomainHandle);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        Status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return Status;
+}
+
+
 /*
  * @unimplemented
  */
 /*
  * @unimplemented
  */
@@ -205,16 +266,29 @@ LsaCreateTrustedDomainEx(
 }
 
 /*
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 NTSTATUS
 WINAPI
  */
 NTSTATUS
 WINAPI
-LsaDeleteTrustedDomain(
-    LSA_HANDLE PolicyHandle,
-    PSID TrustedDomainSid)
+LsaDeleteTrustedDomain(IN LSA_HANDLE PolicyHandle,
+                       IN PSID TrustedDomainSid)
 {
 {
-    FIXME("(%p,%p) stub\n", PolicyHandle, TrustedDomainSid);
-    return STATUS_SUCCESS;
+    NTSTATUS Status;
+
+    TRACE("(%p,%p)\n", PolicyHandle, TrustedDomainSid);
+
+    RpcTryExcept
+    {
+        Status = LsarDeleteTrustedDomain((LSAPR_HANDLE)PolicyHandle,
+                                         TrustedDomainSid);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        Status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return Status;
 }
 
 /*
 }
 
 /*
@@ -526,7 +600,7 @@ LsaLookupSids(IN LSA_HANDLE PolicyHandle,
  * @implemented
  */
 ULONG WINAPI
  * @implemented
  */
 ULONG WINAPI
-LsaNtStatusToWinError(NTSTATUS Status)
+LsaNtStatusToWinError(IN NTSTATUS Status)
 {
     TRACE("(%lx)\n", Status);
     return RtlNtStatusToDosError(Status);
 {
     TRACE("(%lx)\n", Status);
     return RtlNtStatusToDosError(Status);
@@ -541,7 +615,7 @@ WINAPI
 LsaOpenAccount(IN LSA_HANDLE PolicyHandle,
                IN PSID AccountSid,
                IN ULONG Flags,
 LsaOpenAccount(IN LSA_HANDLE PolicyHandle,
                IN PSID AccountSid,
                IN ULONG Flags,
-               IN OUT PLSA_HANDLE AccountHandle)
+               OUT PLSA_HANDLE AccountHandle)
 {
     NTSTATUS Status;
 
 {
     NTSTATUS Status;
 
@@ -573,15 +647,14 @@ LsaOpenAccount(IN LSA_HANDLE PolicyHandle,
  *   x3 []
  *   x4 []
  *
  *   x3 []
  *   x4 []
  *
- * @unimplemented
+ * @implemented
  */
 NTSTATUS
 WINAPI
  */
 NTSTATUS
 WINAPI
-LsaOpenPolicy(
-    IN PLSA_UNICODE_STRING SystemName,
-    IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes,
-    IN ACCESS_MASK DesiredAccess,
-    IN OUT PLSA_HANDLE PolicyHandle)
+LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName,
+              IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes,
+              IN ACCESS_MASK DesiredAccess,
+              OUT PLSA_HANDLE PolicyHandle)
 {
     NTSTATUS Status;
 
 {
     NTSTATUS Status;
 
@@ -615,20 +688,37 @@ LsaOpenPolicy(
 
 
 /*
 
 
 /*
- * @unimplemented
+ * @implemented
  */
 NTSTATUS
 WINAPI
  */
 NTSTATUS
 WINAPI
-LsaOpenTrustedDomainByName(
-    LSA_HANDLE PolicyHandle,
-    PLSA_UNICODE_STRING TrustedDomainName,
-    ACCESS_MASK DesiredAccess,
-    PLSA_HANDLE TrustedDomainHandle)
+LsaOpenTrustedDomainByName(IN LSA_HANDLE PolicyHandle,
+                           IN PLSA_UNICODE_STRING TrustedDomainName,
+                           IN ACCESS_MASK DesiredAccess,
+                           OUT PLSA_HANDLE TrustedDomainHandle)
 {
 {
-    FIXME("(%p,%p,0x%08x,%p) stub\n", PolicyHandle, TrustedDomainName, DesiredAccess, TrustedDomainHandle);
-    return STATUS_OBJECT_NAME_NOT_FOUND;
+    NTSTATUS Status;
+
+    TRACE("(%p,%p,0x%08x,%p)\n", PolicyHandle, TrustedDomainName,
+          DesiredAccess, TrustedDomainHandle);
+
+    RpcTryExcept
+    {
+        Status = LsarOpenTrustedDomainByName((LSAPR_HANDLE)PolicyHandle,
+                                             (PRPC_UNICODE_STRING)TrustedDomainName,
+                                             DesiredAccess,
+                                             TrustedDomainHandle);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        Status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return Status;
 }
 
 }
 
+
 /*
  * @unimplemented
  */
 /*
  * @unimplemented
  */
@@ -660,10 +750,11 @@ LsaQueryForestTrustInformation(
 /*
  * @implemented
  */
 /*
  * @implemented
  */
-NTSTATUS WINAPI
-LsaQueryInformationPolicy(LSA_HANDLE PolicyHandle,
-              POLICY_INFORMATION_CLASS InformationClass,
-              PVOID *Buffer)
+NTSTATUS
+WINAPI
+LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle,
+                          IN POLICY_INFORMATION_CLASS InformationClass,
+                          OUT PVOID *Buffer)
 {
     PLSAPR_POLICY_INFORMATION PolicyInformation = NULL;
     NTSTATUS Status;
 {
     PLSAPR_POLICY_INFORMATION PolicyInformation = NULL;
     NTSTATUS Status;
index b6ae994..7aaf903 100644 (file)
@@ -671,15 +671,16 @@ typedef struct _TRUSTED_DOMAIN_FULL_INFORMATION {
 BOOLEAN WINAPI RtlGenRandom(PVOID,ULONG);
 
 NTSTATUS NTAPI LsaAddAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING,ULONG);
 BOOLEAN WINAPI RtlGenRandom(PVOID,ULONG);
 
 NTSTATUS NTAPI LsaAddAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING,ULONG);
+NTSTATUS NTAPI LsaAddPrivilegesToAccount(LSA_HANDLE, PPRIVILEGE_SET);
 NTSTATUS NTAPI LsaCallAuthenticationPackage(HANDLE,ULONG,PVOID,ULONG,PVOID*,
                             PULONG,PNTSTATUS);
 NTSTATUS NTAPI LsaClose(LSA_HANDLE);
 NTSTATUS NTAPI LsaConnectUntrusted(PHANDLE);
 NTSTATUS NTAPI LsaCreateAccount(LSA_HANDLE, PSID, ULONG, PLSA_HANDLE);
 NTSTATUS NTAPI LsaCallAuthenticationPackage(HANDLE,ULONG,PVOID,ULONG,PVOID*,
                             PULONG,PNTSTATUS);
 NTSTATUS NTAPI LsaClose(LSA_HANDLE);
 NTSTATUS NTAPI LsaConnectUntrusted(PHANDLE);
 NTSTATUS NTAPI LsaCreateAccount(LSA_HANDLE, PSID, ULONG, PLSA_HANDLE);
-NTSTATUS NTAPI LsaCreateTrustedDomainEx(LSA_HANDLE,
-                            PTRUSTED_DOMAIN_INFORMATION_EX,
-                            PTRUSTED_DOMAIN_AUTH_INFORMATION,ACCESS_MASK,
-                            PLSA_HANDLE);
+NTSTATUS NTAPI LsaCreateTrustedDomain(LSA_HANDLE, PLSA_TRUST_INFORMATION,
+                            ACCESS_MASK, PLSA_HANDLE);
+NTSTATUS NTAPI LsaCreateTrustedDomainEx(LSA_HANDLE, PTRUSTED_DOMAIN_INFORMATION_EX,
+                            PTRUSTED_DOMAIN_AUTH_INFORMATION, ACCESS_MASK, PLSA_HANDLE);
 NTSTATUS NTAPI LsaDeleteTrustedDomain(LSA_HANDLE,PSID);
 NTSTATUS NTAPI LsaDeregisterLogonProcess(HANDLE);
 NTSTATUS NTAPI LsaEnumerateAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING*,PULONG);
 NTSTATUS NTAPI LsaDeleteTrustedDomain(LSA_HANDLE,PSID);
 NTSTATUS NTAPI LsaDeregisterLogonProcess(HANDLE);
 NTSTATUS NTAPI LsaEnumerateAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING*,PULONG);
@@ -707,6 +708,8 @@ ULONG NTAPI LsaNtStatusToWinError(NTSTATUS);
 NTSTATUS NTAPI LsaOpenAccount(LSA_HANDLE, PSID, ULONG, PLSA_HANDLE);
 NTSTATUS NTAPI LsaOpenPolicy(PLSA_UNICODE_STRING,PLSA_OBJECT_ATTRIBUTES,
                             ACCESS_MASK,PLSA_HANDLE);
 NTSTATUS NTAPI LsaOpenAccount(LSA_HANDLE, PSID, ULONG, PLSA_HANDLE);
 NTSTATUS NTAPI LsaOpenPolicy(PLSA_UNICODE_STRING,PLSA_OBJECT_ATTRIBUTES,
                             ACCESS_MASK,PLSA_HANDLE);
+NTSTATUS NTAPI LsaOpenTrustedDomainByName(LSA_HANDLE, PLSA_UNICODE_STRING,
+                            ACCESS_MASK, PLSA_HANDLE);
 NTSTATUS NTAPI LsaQueryDomainInformationPolicy(LSA_HANDLE,
                             POLICY_DOMAIN_INFORMATION_CLASS,PVOID*);
 NTSTATUS NTAPI LsaQueryInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID*);
 NTSTATUS NTAPI LsaQueryDomainInformationPolicy(LSA_HANDLE,
                             POLICY_DOMAIN_INFORMATION_CLASS,PVOID*);
 NTSTATUS NTAPI LsaQueryInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID*);