2 * PROJECT: Local Security Authority Server DLL
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/win32/lsasrv/lsasrv.c
6 * COPYRIGHT: Copyright 2006-2009 Eric Kohl
11 /* FUNCTIONS ***************************************************************/
15 LsaIFree_LSAPR_POLICY_INFORMATION(IN POLICY_INFORMATION_CLASS InformationClass
,
16 IN PLSAPR_POLICY_INFORMATION PolicyInformation
)
18 if (PolicyInformation
!= NULL
)
20 switch (InformationClass
)
22 case PolicyAuditLogInformation
: /* 1 */
25 case PolicyAuditEventsInformation
: /* 2 */
26 if (PolicyInformation
->PolicyAuditEventsInfo
.EventAuditingOptions
!= NULL
)
27 midl_user_free(PolicyInformation
->PolicyAuditEventsInfo
.EventAuditingOptions
);
30 case PolicyPrimaryDomainInformation
: /* 3 */
31 if (PolicyInformation
->PolicyPrimaryDomInfo
.Name
.Buffer
!= NULL
)
32 midl_user_free(PolicyInformation
->PolicyPrimaryDomInfo
.Name
.Buffer
);
34 if (PolicyInformation
->PolicyPrimaryDomInfo
.Sid
!= NULL
)
35 midl_user_free(PolicyInformation
->PolicyPrimaryDomInfo
.Sid
);
38 case PolicyPdAccountInformation
: /* 4 */
39 if (PolicyInformation
->PolicyPdAccountInfo
.Name
.Buffer
!= NULL
)
40 midl_user_free(PolicyInformation
->PolicyPdAccountInfo
.Name
.Buffer
);
43 case PolicyAccountDomainInformation
: /* 5 */
44 if (PolicyInformation
->PolicyAccountDomainInfo
.DomainName
.Buffer
!= NULL
)
45 midl_user_free(PolicyInformation
->PolicyAccountDomainInfo
.DomainName
.Buffer
);
47 if (PolicyInformation
->PolicyAccountDomainInfo
.Sid
!= NULL
)
48 midl_user_free(PolicyInformation
->PolicyAccountDomainInfo
.Sid
);
51 case PolicyLsaServerRoleInformation
: /* 6 */
54 case PolicyReplicaSourceInformation
: /* 7 */
55 if (PolicyInformation
->PolicyReplicaSourceInfo
.ReplicaSource
.Buffer
!= NULL
)
56 midl_user_free(PolicyInformation
->PolicyReplicaSourceInfo
.ReplicaSource
.Buffer
);
58 if (PolicyInformation
->PolicyReplicaSourceInfo
.ReplicaAccountName
.Buffer
!= NULL
)
59 midl_user_free(PolicyInformation
->PolicyReplicaSourceInfo
.ReplicaAccountName
.Buffer
);
62 case PolicyDefaultQuotaInformation
: /* 8 */
65 case PolicyModificationInformation
: /* 9 */
68 case PolicyAuditFullSetInformation
: /* 10 (0xA) */
71 case PolicyAuditFullQueryInformation
: /* 11 (0xB) */
74 case PolicyDnsDomainInformation
: /* 12 (0xC) */
75 if (PolicyInformation
->PolicyDnsDomainInfo
.Name
.Buffer
!= NULL
)
76 midl_user_free(PolicyInformation
->PolicyDnsDomainInfo
.Name
.Buffer
);
78 if (PolicyInformation
->PolicyDnsDomainInfo
.DnsDomainName
.Buffer
!= NULL
)
79 midl_user_free(PolicyInformation
->PolicyDnsDomainInfo
.DnsDomainName
.Buffer
);
81 if (PolicyInformation
->PolicyDnsDomainInfo
.DnsForestName
.Buffer
!= NULL
)
82 midl_user_free(PolicyInformation
->PolicyDnsDomainInfo
.DnsForestName
.Buffer
);
84 if (PolicyInformation
->PolicyDnsDomainInfo
.Sid
!= NULL
)
85 midl_user_free(PolicyInformation
->PolicyDnsDomainInfo
.Sid
);
88 case PolicyDnsDomainInformationInt
: /* 13 (0xD) */
89 if (PolicyInformation
->PolicyDnsDomainInfoInt
.Name
.Buffer
!= NULL
)
90 midl_user_free(PolicyInformation
->PolicyDnsDomainInfoInt
.Name
.Buffer
);
92 if (PolicyInformation
->PolicyDnsDomainInfoInt
.DnsDomainName
.Buffer
!= NULL
)
93 midl_user_free(PolicyInformation
->PolicyDnsDomainInfoInt
.DnsDomainName
.Buffer
);
95 if (PolicyInformation
->PolicyDnsDomainInfoInt
.DnsForestName
.Buffer
!= NULL
)
96 midl_user_free(PolicyInformation
->PolicyDnsDomainInfoInt
.DnsForestName
.Buffer
);
98 if (PolicyInformation
->PolicyDnsDomainInfoInt
.Sid
!= NULL
)
99 midl_user_free(PolicyInformation
->PolicyDnsDomainInfoInt
.Sid
);
102 case PolicyLocalAccountDomainInformation
: /* 14 (0xE) */
103 if (PolicyInformation
->PolicyLocalAccountDomainInfo
.DomainName
.Buffer
!= NULL
)
104 midl_user_free(PolicyInformation
->PolicyLocalAccountDomainInfo
.DomainName
.Buffer
);
106 if (PolicyInformation
->PolicyLocalAccountDomainInfo
.Sid
!= NULL
)
107 midl_user_free(PolicyInformation
->PolicyLocalAccountDomainInfo
.Sid
);
111 ERR("Invalid InformationClass: %lu\n", InformationClass
);
115 midl_user_free(PolicyInformation
);
122 LsaIFree_LSAPR_PRIVILEGE_SET(IN PLSAPR_PRIVILEGE_SET Ptr
)
138 TRACE("LsapInitLsa() called\n");
140 /* Initialize the well known SIDs */
143 /* Initialize the LSA database */
146 /* Initialize logon sessions */
147 LsapInitLogonSessions();
149 /* Initialize registered authentication packages */
150 Status
= LsapInitAuthPackages();
151 if (!NT_SUCCESS(Status
))
153 ERR("LsapInitAuthPackages() failed (Status 0x%08lx)\n", Status
);
157 /* Start the authentication port thread */
158 Status
= StartAuthenticationPort();
159 if (!NT_SUCCESS(Status
))
161 ERR("StartAuthenticationPort() failed (Status 0x%08lx)\n", Status
);
165 /* Start the RPC server */
166 LsarStartRpcServer();
168 TRACE("Creating notification event!\n");
169 /* Notify the service manager */
170 hEvent
= CreateEventW(NULL
,
173 L
"LSA_RPC_SERVER_ACTIVE");
176 dwError
= GetLastError();
177 TRACE("Failed to create the notication event (Error %lu)\n", dwError
);
179 if (dwError
== ERROR_ALREADY_EXISTS
)
181 hEvent
= OpenEventW(GENERIC_WRITE
,
183 L
"LSA_RPC_SERVER_ACTIVE");
186 ERR("Could not open the notification event (Error %lu)\n", GetLastError());
187 return STATUS_UNSUCCESSFUL
;
192 TRACE("Set notification event!\n");
195 /* NOTE: Do not close the event handle!!!! */
197 return STATUS_SUCCESS
;
204 TRACE("ServiceInit() called\n");
205 return STATUS_SUCCESS
;
209 void __RPC_FAR
* __RPC_USER
midl_user_allocate(SIZE_T len
)
211 return RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY
, len
);
215 void __RPC_USER
midl_user_free(void __RPC_FAR
* ptr
)
217 RtlFreeHeap(RtlGetProcessHeap(), 0, ptr
);