[LSASRV][IDL] The first parameter of the Credr* functions is a PLSAPR_SERVER_NAME.
[reactos.git] / dll / win32 / lsasrv / lsarpc.c
index 4b9ef39..925ca45 100644 (file)
@@ -36,10 +36,12 @@ LsapSecretMapping = {SECRET_READ,
 
 /* FUNCTIONS ***************************************************************/
 
-VOID
+NTSTATUS
 LsarStartRpcServer(VOID)
 {
     RPC_STATUS Status;
+    DWORD dwError;
+    HANDLE hEvent;
 
     RtlInitializeCriticalSection(&PolicyHandleTableLock);
 
@@ -52,7 +54,7 @@ LsarStartRpcServer(VOID)
     if (Status != RPC_S_OK)
     {
         WARN("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
-        return;
+        return I_RpcMapWin32Status(Status);
     }
 
     Status = RpcServerRegisterIf(lsarpc_v0_0_s_ifspec,
@@ -61,7 +63,7 @@ LsarStartRpcServer(VOID)
     if (Status != RPC_S_OK)
     {
         WARN("RpcServerRegisterIf() failed (Status %lx)\n", Status);
-        return;
+        return I_RpcMapWin32Status(Status);
     }
 
     DsSetupInit();
@@ -70,10 +72,42 @@ LsarStartRpcServer(VOID)
     if (Status != RPC_S_OK)
     {
         WARN("RpcServerListen() failed (Status %lx)\n", Status);
-        return;
+        return I_RpcMapWin32Status(Status);
+    }
+
+    /* Notify the service manager */
+    TRACE("Creating notification event!\n");
+    hEvent = CreateEventW(NULL,
+                          TRUE,
+                          FALSE,
+                          L"LSA_RPC_SERVER_ACTIVE");
+    if (hEvent == NULL)
+    {
+        dwError = GetLastError();
+        TRACE("Failed to create or open the notification event (Error %lu)\n", dwError);
+#if 0
+        if (dwError == ERROR_ALREADY_EXISTS)
+        {
+            hEvent = OpenEventW(GENERIC_WRITE,
+                                FALSE,
+                                L"LSA_RPC_SERVER_ACTIVE");
+            if (hEvent == NULL)
+            {
+               ERR("Could not open the notification event (Error %lu)\n", GetLastError());
+               return STATUS_UNSUCCESSFUL;
+            }
+        }
+#endif
+        return STATUS_UNSUCCESSFUL;
     }
 
+    TRACE("Set notification event!\n");
+    SetEvent(hEvent);
+
+    /* NOTE: Do not close the event handle, as it must remain alive! */
+
     TRACE("LsarStartRpcServer() done\n");
+    return STATUS_SUCCESS;
 }
 
 
@@ -673,21 +707,29 @@ NTSTATUS WINAPI LsarSetInformationPolicy(
         case PolicyAuditEventsInformation:   /* 2 */
             Status = LsarSetAuditEvents(PolicyObject,
                                         (PLSAPR_POLICY_AUDIT_EVENTS_INFO)PolicyInformation);
+            if (NT_SUCCESS(Status))
+                LsapNotifyPolicyChange(PolicyNotifyAuditEventsInformation);
             break;
 
         case PolicyPrimaryDomainInformation: /* 3 */
             Status = LsarSetPrimaryDomain(PolicyObject,
                                           (PLSAPR_POLICY_PRIMARY_DOM_INFO)PolicyInformation);
+            if (NT_SUCCESS(Status))
+                LsapNotifyPolicyChange(PolicyNotifyDnsDomainInformation);
             break;
 
         case PolicyAccountDomainInformation: /* 5 */
             Status = LsarSetAccountDomain(PolicyObject,
                                           (PLSAPR_POLICY_ACCOUNT_DOM_INFO)PolicyInformation);
+            if (NT_SUCCESS(Status))
+                LsapNotifyPolicyChange(PolicyNotifyAccountDomainInformation);
             break;
 
         case PolicyLsaServerRoleInformation: /* 6 */
             Status = LsarSetServerRole(PolicyObject,
                                        (PPOLICY_LSA_SERVER_ROLE_INFO)PolicyInformation);
+            if (NT_SUCCESS(Status))
+                LsapNotifyPolicyChange(PolicyNotifyServerRoleInformation);
             break;
 
         case PolicyReplicaSourceInformation: /* 7 */
@@ -713,6 +755,8 @@ NTSTATUS WINAPI LsarSetInformationPolicy(
         case PolicyDnsDomainInformation:      /* 12 (0xC) */
             Status = LsarSetDnsDomain(PolicyObject,
                                       (PLSAPR_POLICY_DNS_DOMAIN_INFO)PolicyInformation);
+            if (NT_SUCCESS(Status))
+                LsapNotifyPolicyChange(PolicyNotifyDnsDomainInformation);
             break;
 
         case PolicyDnsDomainInformationInt:   /* 13 (0xD) */
@@ -1365,7 +1409,7 @@ LsarpOpenAccount(
                               AccountObject);
     if (!NT_SUCCESS(Status))
     {
-        ERR("LsapOpenDbObject failed (Status 0x%08lx)\n", Status);
+        ERR("LsapOpenDbObject(Accounts/%S) failed (Status 0x%08lx)\n", SidString, Status);
     }
 
     if (SidString != NULL)
@@ -3830,7 +3874,7 @@ NTSTATUS WINAPI LsarCreateTrustedDomainEx2(
 
 /* Function 60 */
 NTSTATUS WINAPI CredrWrite(
-    handle_t hBinding)
+    PLSAPR_SERVER_NAME SystemName)
 {
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
@@ -3839,7 +3883,7 @@ NTSTATUS WINAPI CredrWrite(
 
 /* Function 61 */
 NTSTATUS WINAPI CredrRead(
-    handle_t hBinding)
+    PLSAPR_SERVER_NAME SystemName)
 {
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
@@ -3848,7 +3892,7 @@ NTSTATUS WINAPI CredrRead(
 
 /* Function 62 */
 NTSTATUS WINAPI CredrEnumerate(
-    handle_t hBinding)
+    PLSAPR_SERVER_NAME SystemName)
 {
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
@@ -3857,7 +3901,7 @@ NTSTATUS WINAPI CredrEnumerate(
 
 /* Function 63 */
 NTSTATUS WINAPI CredrWriteDomainCredentials(
-    handle_t hBinding)
+    PLSAPR_SERVER_NAME SystemName)
 {
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
@@ -3866,7 +3910,7 @@ NTSTATUS WINAPI CredrWriteDomainCredentials(
 
 /* Function 64 */
 NTSTATUS WINAPI CredrReadDomainCredentials(
-    handle_t hBinding)
+    PLSAPR_SERVER_NAME SystemName)
 {
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
@@ -3874,8 +3918,13 @@ NTSTATUS WINAPI CredrReadDomainCredentials(
 
 
 /* Function 65 */
-NTSTATUS WINAPI CredrDelete(
-    handle_t hBinding)
+NTSTATUS
+WINAPI
+CredrDelete(
+    PLSAPR_SERVER_NAME SystemName,
+    LPWSTR TargetName,
+    DWORD Type,
+    DWORD Flags)
 {
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
@@ -3883,8 +3932,13 @@ NTSTATUS WINAPI CredrDelete(
 
 
 /* Function 66 */
-NTSTATUS WINAPI CredrGetTargetInfo(
-    handle_t hBinding)
+NTSTATUS
+WINAPI
+CredrGetTargetInfo(
+    PLSAPR_SERVER_NAME SystemName,
+    LPWSTR TargetName,
+    DWORD Flags,
+    CREDPR_TARGET_INFORMATION *TargetInformation)
 {
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
@@ -3892,8 +3946,10 @@ NTSTATUS WINAPI CredrGetTargetInfo(
 
 
 /* Function 67 */
-NTSTATUS WINAPI CredrProfileLoaded(
-    handle_t hBinding)
+NTSTATUS
+WINAPI
+CredrProfileLoaded(
+    PLSAPR_SERVER_NAME SystemName)
 {
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
@@ -3939,8 +3995,12 @@ NTSTATUS WINAPI LsarLookupNames3(
 
 
 /* Function 69 */
-NTSTATUS WINAPI CredrGetSessionTypes(
-    handle_t hBinding)
+NTSTATUS
+WINAPI
+CredrGetSessionTypes(
+    PLSAPR_SERVER_NAME SystemName,
+    DWORD MaximumPersistCount,
+    DWORD *MaximumPersist)
 {
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
@@ -4001,8 +4061,14 @@ NTSTATUS WINAPI LsarSetForestTrustInformation(
 
 
 /* Function 75 */
-NTSTATUS WINAPI CredrRename(
-    handle_t hBinding)
+NTSTATUS
+WINAPI
+CredrRename(
+    PLSAPR_SERVER_NAME SystemName,
+    LPWSTR OldTargetName,
+    LPWSTR NewTargetName,
+    DWORD Type,
+    DWORD Flags)
 {
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;