2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: Local Security Authority (LSA) Server
4 * FILE: reactos/dll/win32/lsasrv/lsarpc.h
5 * PURPOSE: RPC interface functions
7 * PROGRAMMERS: Eric Kohl
10 /* INCLUDES ****************************************************************/
14 WINE_DEFAULT_DEBUG_CHANNEL(lsasrv
);
17 /* GLOBALS *****************************************************************/
19 static RTL_CRITICAL_SECTION PolicyHandleTableLock
;
22 /* FUNCTIONS ***************************************************************/
25 LsarStartRpcServer(VOID
)
29 RtlInitializeCriticalSection(&PolicyHandleTableLock
);
31 TRACE("LsarStartRpcServer() called\n");
33 Status
= RpcServerUseProtseqEpW(L
"ncacn_np",
37 if (Status
!= RPC_S_OK
)
39 WARN("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status
);
43 Status
= RpcServerRegisterIf(lsarpc_v0_0_s_ifspec
,
46 if (Status
!= RPC_S_OK
)
48 WARN("RpcServerRegisterIf() failed (Status %lx)\n", Status
);
52 Status
= RpcServerListen(1, 20, TRUE
);
53 if (Status
!= RPC_S_OK
)
55 WARN("RpcServerListen() failed (Status %lx)\n", Status
);
59 TRACE("LsarStartRpcServer() done\n");
63 void __RPC_USER
LSAPR_HANDLE_rundown(LSAPR_HANDLE hHandle
)
70 NTSTATUS WINAPI
LsarClose(
71 LSAPR_HANDLE
*ObjectHandle
)
73 PLSA_DB_OBJECT DbObject
;
74 NTSTATUS Status
= STATUS_SUCCESS
;
76 TRACE("0x%p\n", ObjectHandle
);
78 // RtlEnterCriticalSection(&PolicyHandleTableLock);
80 Status
= LsapValidateDbObject(*ObjectHandle
,
84 if (Status
== STATUS_SUCCESS
)
86 Status
= LsapCloseDbObject(DbObject
);
90 // RtlLeaveCriticalSection(&PolicyHandleTableLock);
97 NTSTATUS WINAPI
LsarDelete(
98 LSAPR_HANDLE ObjectHandle
)
100 return LsarDeleteObject(&ObjectHandle
);
105 NTSTATUS WINAPI
LsarEnumeratePrivileges(
106 LSAPR_HANDLE PolicyHandle
,
107 DWORD
*EnumerationContext
,
108 PLSAPR_PRIVILEGE_ENUM_BUFFER EnumerationBuffer
,
109 DWORD PreferedMaximumLength
)
111 PLSA_DB_OBJECT PolicyObject
;
114 TRACE("LsarEnumeratePrivileges(%p %p %p %lu)\n",
115 PolicyHandle
, EnumerationContext
, EnumerationBuffer
,
116 PreferedMaximumLength
);
118 Status
= LsapValidateDbObject(PolicyHandle
,
120 POLICY_VIEW_LOCAL_INFORMATION
,
122 if (!NT_SUCCESS(Status
))
125 if (EnumerationContext
== NULL
)
126 return STATUS_INVALID_PARAMETER
;
128 return LsarpEnumeratePrivileges(EnumerationContext
,
130 PreferedMaximumLength
);
135 NTSTATUS WINAPI
LsarQuerySecurityObject(
136 LSAPR_HANDLE ObjectHandle
,
137 SECURITY_INFORMATION SecurityInformation
,
138 PLSAPR_SR_SECURITY_DESCRIPTOR
*SecurityDescriptor
)
140 PLSA_DB_OBJECT DbObject
= NULL
;
141 PSECURITY_DESCRIPTOR RelativeSd
= NULL
;
142 PLSAPR_SR_SECURITY_DESCRIPTOR SdData
= NULL
;
143 ACCESS_MASK DesiredAccess
= 0;
144 ULONG RelativeSdSize
= 0;
147 if (SecurityDescriptor
== NULL
)
148 return STATUS_INVALID_PARAMETER
;
150 if ((SecurityInformation
& OWNER_SECURITY_INFORMATION
) ||
151 (SecurityInformation
& GROUP_SECURITY_INFORMATION
) ||
152 (SecurityInformation
& DACL_SECURITY_INFORMATION
))
153 DesiredAccess
|= READ_CONTROL
;
155 if (SecurityInformation
& SACL_SECURITY_INFORMATION
)
156 DesiredAccess
|= ACCESS_SYSTEM_SECURITY
;
158 /* Validate the ObjectHandle */
159 Status
= LsapValidateDbObject(ObjectHandle
,
163 if (!NT_SUCCESS(Status
))
166 /* Get the size of the SD */
167 Status
= LsapGetObjectAttribute(DbObject
,
171 if (!NT_SUCCESS(Status
))
174 /* Allocate a buffer for the SD */
175 RelativeSd
= MIDL_user_allocate(RelativeSdSize
);
176 if (RelativeSd
== NULL
)
177 return STATUS_INSUFFICIENT_RESOURCES
;
180 Status
= LsapGetObjectAttribute(DbObject
,
184 if (!NT_SUCCESS(Status
))
188 * FIXME: Invalidate the SD information that was not requested.
189 * (see SecurityInformation)
192 /* Allocate the SD data buffer */
193 SdData
= MIDL_user_allocate(sizeof(LSAPR_SR_SECURITY_DESCRIPTOR
));
196 Status
= STATUS_INSUFFICIENT_RESOURCES
;
200 /* Fill the SD data buffer and return it to the caller */
201 SdData
->Length
= RelativeSdSize
;
202 SdData
->SecurityDescriptor
= (PBYTE
)RelativeSd
;
204 *SecurityDescriptor
= SdData
;
207 if (!NT_SUCCESS(Status
))
209 if (RelativeSd
!= NULL
)
210 MIDL_user_free(RelativeSd
);
218 NTSTATUS WINAPI
LsarSetSecurityObject(
219 LSAPR_HANDLE ObjectHandle
,
220 SECURITY_INFORMATION SecurityInformation
,
221 PLSAPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor
)
224 return STATUS_NOT_IMPLEMENTED
;
229 NTSTATUS WINAPI
LsarChangePassword(
231 PRPC_UNICODE_STRING String1
,
232 PRPC_UNICODE_STRING String2
,
233 PRPC_UNICODE_STRING String3
,
234 PRPC_UNICODE_STRING String4
,
235 PRPC_UNICODE_STRING String5
)
238 return STATUS_NOT_IMPLEMENTED
;
243 NTSTATUS WINAPI
LsarOpenPolicy(
245 PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes
,
246 ACCESS_MASK DesiredAccess
,
247 LSAPR_HANDLE
*PolicyHandle
)
249 PLSA_DB_OBJECT PolicyObject
;
252 TRACE("LsarOpenPolicy called!\n");
254 RtlEnterCriticalSection(&PolicyHandleTableLock
);
256 Status
= LsapOpenDbObject(NULL
,
264 RtlLeaveCriticalSection(&PolicyHandleTableLock
);
266 if (NT_SUCCESS(Status
))
267 *PolicyHandle
= (LSAPR_HANDLE
)PolicyObject
;
269 TRACE("LsarOpenPolicy done!\n");
276 NTSTATUS WINAPI
LsarQueryInformationPolicy(
277 LSAPR_HANDLE PolicyHandle
,
278 POLICY_INFORMATION_CLASS InformationClass
,
279 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
281 PLSA_DB_OBJECT PolicyObject
;
282 ACCESS_MASK DesiredAccess
= 0;
285 TRACE("LsarQueryInformationPolicy(%p,0x%08x,%p)\n",
286 PolicyHandle
, InformationClass
, PolicyInformation
);
288 if (PolicyInformation
)
290 TRACE("*PolicyInformation %p\n", *PolicyInformation
);
293 switch (InformationClass
)
295 case PolicyAuditLogInformation
:
296 case PolicyAuditEventsInformation
:
297 case PolicyAuditFullQueryInformation
:
298 DesiredAccess
= POLICY_VIEW_AUDIT_INFORMATION
;
301 case PolicyPrimaryDomainInformation
:
302 case PolicyAccountDomainInformation
:
303 case PolicyLsaServerRoleInformation
:
304 case PolicyReplicaSourceInformation
:
305 case PolicyDefaultQuotaInformation
:
306 case PolicyModificationInformation
:
307 case PolicyDnsDomainInformation
:
308 case PolicyDnsDomainInformationInt
:
309 case PolicyLocalAccountDomainInformation
:
310 DesiredAccess
= POLICY_VIEW_LOCAL_INFORMATION
;
313 case PolicyPdAccountInformation
:
314 DesiredAccess
= POLICY_GET_PRIVATE_INFORMATION
;
318 ERR("Invalid InformationClass!\n");
319 return STATUS_INVALID_PARAMETER
;
322 Status
= LsapValidateDbObject(PolicyHandle
,
326 if (!NT_SUCCESS(Status
))
329 switch (InformationClass
)
331 case PolicyAuditLogInformation
: /* 1 */
332 Status
= LsarQueryAuditLog(PolicyObject
,
336 case PolicyAuditEventsInformation
: /* 2 */
337 Status
= LsarQueryAuditEvents(PolicyObject
,
341 case PolicyPrimaryDomainInformation
: /* 3 */
342 Status
= LsarQueryPrimaryDomain(PolicyObject
,
346 case PolicyPdAccountInformation
: /* 4 */
347 Status
= LsarQueryPdAccount(PolicyObject
,
351 case PolicyAccountDomainInformation
: /* 5 */
352 Status
= LsarQueryAccountDomain(PolicyObject
,
356 case PolicyLsaServerRoleInformation
: /* 6 */
357 Status
= LsarQueryServerRole(PolicyObject
,
361 case PolicyReplicaSourceInformation
: /* 7 */
362 Status
= LsarQueryReplicaSource(PolicyObject
,
366 case PolicyDefaultQuotaInformation
: /* 8 */
367 Status
= LsarQueryDefaultQuota(PolicyObject
,
371 case PolicyModificationInformation
: /* 9 */
372 Status
= LsarQueryModification(PolicyObject
,
376 case PolicyAuditFullQueryInformation
: /* 11 (0xB) */
377 Status
= LsarQueryAuditFull(PolicyObject
,
381 case PolicyDnsDomainInformation
: /* 12 (0xC) */
382 Status
= LsarQueryDnsDomain(PolicyObject
,
386 case PolicyDnsDomainInformationInt
: /* 13 (0xD) */
387 Status
= LsarQueryDnsDomainInt(PolicyObject
,
391 case PolicyLocalAccountDomainInformation
: /* 14 (0xE) */
392 Status
= LsarQueryLocalAccountDomain(PolicyObject
,
397 ERR("Invalid InformationClass!\n");
398 Status
= STATUS_INVALID_PARAMETER
;
406 NTSTATUS WINAPI
LsarSetInformationPolicy(
407 LSAPR_HANDLE PolicyHandle
,
408 POLICY_INFORMATION_CLASS InformationClass
,
409 PLSAPR_POLICY_INFORMATION PolicyInformation
)
411 PLSA_DB_OBJECT PolicyObject
;
412 ACCESS_MASK DesiredAccess
= 0;
415 TRACE("LsarSetInformationPolicy(%p,0x%08x,%p)\n",
416 PolicyHandle
, InformationClass
, PolicyInformation
);
418 if (PolicyInformation
)
420 TRACE("*PolicyInformation %p\n", *PolicyInformation
);
423 switch (InformationClass
)
425 case PolicyAuditLogInformation
:
426 case PolicyAuditFullSetInformation
:
427 DesiredAccess
= POLICY_AUDIT_LOG_ADMIN
;
430 case PolicyAuditEventsInformation
:
431 DesiredAccess
= POLICY_SET_AUDIT_REQUIREMENTS
;
434 case PolicyPrimaryDomainInformation
:
435 case PolicyAccountDomainInformation
:
436 case PolicyDnsDomainInformation
:
437 case PolicyDnsDomainInformationInt
:
438 case PolicyLocalAccountDomainInformation
:
439 DesiredAccess
= POLICY_TRUST_ADMIN
;
442 case PolicyLsaServerRoleInformation
:
443 case PolicyReplicaSourceInformation
:
444 DesiredAccess
= POLICY_SERVER_ADMIN
;
447 case PolicyDefaultQuotaInformation
:
448 DesiredAccess
= POLICY_SET_DEFAULT_QUOTA_LIMITS
;
452 ERR("Invalid InformationClass!\n");
453 return STATUS_INVALID_PARAMETER
;
456 Status
= LsapValidateDbObject(PolicyHandle
,
460 if (!NT_SUCCESS(Status
))
463 switch (InformationClass
)
465 case PolicyAuditLogInformation
: /* 1 */
466 Status
= LsarSetAuditLog(PolicyObject
,
467 (PPOLICY_AUDIT_LOG_INFO
)PolicyInformation
);
470 case PolicyAuditEventsInformation
: /* 2 */
471 Status
= LsarSetAuditEvents(PolicyObject
,
472 (PLSAPR_POLICY_AUDIT_EVENTS_INFO
)PolicyInformation
);
475 case PolicyPrimaryDomainInformation
: /* 3 */
476 Status
= LsarSetPrimaryDomain(PolicyObject
,
477 (PLSAPR_POLICY_PRIMARY_DOM_INFO
)PolicyInformation
);
480 case PolicyAccountDomainInformation
: /* 5 */
481 Status
= LsarSetAccountDomain(PolicyObject
,
482 (PLSAPR_POLICY_ACCOUNT_DOM_INFO
)PolicyInformation
);
485 case PolicyLsaServerRoleInformation
: /* 6 */
486 Status
= LsarSetServerRole(PolicyObject
,
487 (PPOLICY_LSA_SERVER_ROLE_INFO
)PolicyInformation
);
490 case PolicyReplicaSourceInformation
: /* 7 */
491 Status
= LsarSetReplicaSource(PolicyObject
,
492 (PPOLICY_LSA_REPLICA_SRCE_INFO
)PolicyInformation
);
495 case PolicyDefaultQuotaInformation
: /* 8 */
496 Status
= LsarSetDefaultQuota(PolicyObject
,
497 (PPOLICY_DEFAULT_QUOTA_INFO
)PolicyInformation
);
500 case PolicyModificationInformation
: /* 9 */
501 Status
= LsarSetModification(PolicyObject
,
502 (PPOLICY_MODIFICATION_INFO
)PolicyInformation
);
505 case PolicyAuditFullSetInformation
: /* 10 (0xA) */
506 Status
= LsarSetAuditFull(PolicyObject
,
507 (PPOLICY_AUDIT_FULL_QUERY_INFO
)PolicyInformation
);
510 case PolicyDnsDomainInformation
: /* 12 (0xC) */
511 Status
= LsarSetDnsDomain(PolicyObject
,
512 (PLSAPR_POLICY_DNS_DOMAIN_INFO
)PolicyInformation
);
515 case PolicyDnsDomainInformationInt
: /* 13 (0xD) */
516 Status
= LsarSetDnsDomainInt(PolicyObject
,
517 (PLSAPR_POLICY_DNS_DOMAIN_INFO
)PolicyInformation
);
520 case PolicyLocalAccountDomainInformation
: /* 14 (0xE) */
521 Status
= LsarSetLocalAccountDomain(PolicyObject
,
522 (PLSAPR_POLICY_ACCOUNT_DOM_INFO
)PolicyInformation
);
526 Status
= STATUS_INVALID_PARAMETER
;
535 NTSTATUS WINAPI
LsarClearAuditLog(
536 LSAPR_HANDLE ObjectHandle
)
539 return STATUS_NOT_IMPLEMENTED
;
544 NTSTATUS WINAPI
LsarCreateAccount(
545 LSAPR_HANDLE PolicyHandle
,
547 ACCESS_MASK DesiredAccess
,
548 LSAPR_HANDLE
*AccountHandle
)
550 PLSA_DB_OBJECT PolicyObject
;
551 PLSA_DB_OBJECT AccountObject
= NULL
;
552 LPWSTR SidString
= NULL
;
553 PSECURITY_DESCRIPTOR AccountSd
= NULL
;
555 NTSTATUS Status
= STATUS_SUCCESS
;
557 /* Validate the AccountSid */
558 if (!RtlValidSid(AccountSid
))
559 return STATUS_INVALID_PARAMETER
;
561 /* Validate the PolicyHandle */
562 Status
= LsapValidateDbObject(PolicyHandle
,
564 POLICY_CREATE_ACCOUNT
,
566 if (!NT_SUCCESS(Status
))
568 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
572 /* Create SID string */
573 if (!ConvertSidToStringSid((PSID
)AccountSid
,
576 ERR("ConvertSidToStringSid failed\n");
577 Status
= STATUS_INVALID_PARAMETER
;
581 /* Create a security descriptor for the account */
582 Status
= LsapCreateAccountSd(&AccountSd
,
584 if (!NT_SUCCESS(Status
))
586 ERR("LsapCreateAccountSd returned 0x%08lx\n", Status
);
590 /* Create the Account object */
591 Status
= LsapCreateDbObject(PolicyObject
,
596 PolicyObject
->Trusted
,
598 if (!NT_SUCCESS(Status
))
600 ERR("LsapCreateDbObject failed (Status 0x%08lx)\n", Status
);
604 /* Set the Sid attribute */
605 Status
= LsapSetObjectAttribute(AccountObject
,
608 GetLengthSid(AccountSid
));
609 if (!NT_SUCCESS(Status
))
612 /* Set the SecDesc attribute */
613 Status
= LsapSetObjectAttribute(AccountObject
,
619 if (SidString
!= NULL
)
620 LocalFree(SidString
);
622 if (AccountSd
!= NULL
)
623 RtlFreeHeap(RtlGetProcessHeap(), 0, AccountSd
);
625 if (!NT_SUCCESS(Status
))
627 if (AccountObject
!= NULL
)
628 LsapCloseDbObject(AccountObject
);
632 *AccountHandle
= (LSAPR_HANDLE
)AccountObject
;
635 return STATUS_SUCCESS
;
640 NTSTATUS WINAPI
LsarEnumerateAccounts(
641 LSAPR_HANDLE PolicyHandle
,
642 DWORD
*EnumerationContext
,
643 PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer
,
644 DWORD PreferedMaximumLength
)
646 LSAPR_ACCOUNT_ENUM_BUFFER EnumBuffer
= {0, NULL
};
647 PLSA_DB_OBJECT PolicyObject
= NULL
;
648 WCHAR AccountKeyName
[64];
649 HANDLE AccountsKeyHandle
= NULL
;
650 HANDLE AccountKeyHandle
;
654 ULONG RequiredLength
;
657 NTSTATUS Status
= STATUS_SUCCESS
;
659 TRACE("(%p %p %p %lu)\n", PolicyHandle
, EnumerationContext
,
660 EnumerationBuffer
, PreferedMaximumLength
);
662 if (EnumerationContext
== NULL
||
663 EnumerationBuffer
== NULL
)
664 return STATUS_INVALID_PARAMETER
;
666 EnumerationBuffer
->EntriesRead
= 0;
667 EnumerationBuffer
->Information
= NULL
;
669 /* Validate the PolicyHandle */
670 Status
= LsapValidateDbObject(PolicyHandle
,
672 POLICY_VIEW_LOCAL_INFORMATION
,
674 if (!NT_SUCCESS(Status
))
676 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
680 Status
= LsapRegOpenKey(PolicyObject
->KeyHandle
,
684 if (!NT_SUCCESS(Status
))
687 EnumIndex
= *EnumerationContext
;
693 Status
= LsapRegEnumerateSubKey(AccountsKeyHandle
,
697 if (!NT_SUCCESS(Status
))
700 TRACE("EnumIndex: %lu\n", EnumIndex
);
701 TRACE("Account key name: %S\n", AccountKeyName
);
703 Status
= LsapRegOpenKey(AccountsKeyHandle
,
707 TRACE("LsapRegOpenKey returned %08lX\n", Status
);
708 if (NT_SUCCESS(Status
))
710 Status
= LsapRegOpenKey(AccountKeyHandle
,
714 TRACE("LsapRegOpenKey returned %08lX\n", Status
);
715 if (NT_SUCCESS(Status
))
718 Status
= LsapRegQueryValue(SidKeyHandle
,
723 TRACE("LsapRegQueryValue returned %08lX\n", Status
);
724 if (NT_SUCCESS(Status
))
726 TRACE("Data length: %lu\n", DataLength
);
728 if ((RequiredLength
+ DataLength
+ sizeof(LSAPR_ACCOUNT_INFORMATION
)) > PreferedMaximumLength
)
731 RequiredLength
+= (DataLength
+ sizeof(LSAPR_ACCOUNT_INFORMATION
));
735 LsapRegCloseKey(SidKeyHandle
);
738 LsapRegCloseKey(AccountKeyHandle
);
744 TRACE("EnumCount: %lu\n", EnumCount
);
745 TRACE("RequiredLength: %lu\n", RequiredLength
);
747 EnumBuffer
.EntriesRead
= EnumCount
;
748 EnumBuffer
.Information
= midl_user_allocate(EnumCount
* sizeof(LSAPR_ACCOUNT_INFORMATION
));
749 if (EnumBuffer
.Information
== NULL
)
751 Status
= STATUS_INSUFFICIENT_RESOURCES
;
755 EnumIndex
= *EnumerationContext
;
756 for (i
= 0; i
< EnumCount
; i
++, EnumIndex
++)
758 Status
= LsapRegEnumerateSubKey(AccountsKeyHandle
,
762 if (!NT_SUCCESS(Status
))
765 TRACE("EnumIndex: %lu\n", EnumIndex
);
766 TRACE("Account key name: %S\n", AccountKeyName
);
768 Status
= LsapRegOpenKey(AccountsKeyHandle
,
772 TRACE("LsapRegOpenKey returned %08lX\n", Status
);
773 if (NT_SUCCESS(Status
))
775 Status
= LsapRegOpenKey(AccountKeyHandle
,
779 TRACE("LsapRegOpenKey returned %08lX\n", Status
);
780 if (NT_SUCCESS(Status
))
783 Status
= LsapRegQueryValue(SidKeyHandle
,
788 TRACE("LsapRegQueryValue returned %08lX\n", Status
);
789 if (NT_SUCCESS(Status
))
791 EnumBuffer
.Information
[i
].Sid
= midl_user_allocate(DataLength
);
792 if (EnumBuffer
.Information
[i
].Sid
== NULL
)
794 LsapRegCloseKey(AccountKeyHandle
);
795 Status
= STATUS_INSUFFICIENT_RESOURCES
;
799 Status
= LsapRegQueryValue(SidKeyHandle
,
802 EnumBuffer
.Information
[i
].Sid
,
804 TRACE("SampRegQueryValue returned %08lX\n", Status
);
807 LsapRegCloseKey(SidKeyHandle
);
810 LsapRegCloseKey(AccountKeyHandle
);
812 if (!NT_SUCCESS(Status
))
817 if (NT_SUCCESS(Status
))
819 *EnumerationContext
+= EnumCount
;
820 EnumerationBuffer
->EntriesRead
= EnumBuffer
.EntriesRead
;
821 EnumerationBuffer
->Information
= EnumBuffer
.Information
;
825 if (!NT_SUCCESS(Status
))
827 if (EnumBuffer
.Information
)
829 for (i
= 0; i
< EnumBuffer
.EntriesRead
; i
++)
831 if (EnumBuffer
.Information
[i
].Sid
!= NULL
)
832 midl_user_free(EnumBuffer
.Information
[i
].Sid
);
835 midl_user_free(EnumBuffer
.Information
);
839 if (AccountsKeyHandle
!= NULL
)
840 LsapRegCloseKey(AccountsKeyHandle
);
847 NTSTATUS WINAPI
LsarCreateTrustedDomain(
848 LSAPR_HANDLE PolicyHandle
,
849 PLSAPR_TRUST_INFORMATION TrustedDomainInformation
,
850 ACCESS_MASK DesiredAccess
,
851 LSAPR_HANDLE
*TrustedDomainHandle
)
854 return STATUS_NOT_IMPLEMENTED
;
859 NTSTATUS WINAPI
LsarEnumerateTrustedDomains(
860 LSAPR_HANDLE PolicyHandle
,
861 DWORD
*EnumerationContext
,
862 PLSAPR_TRUSTED_ENUM_BUFFER EnumerationBuffer
,
863 DWORD PreferedMaximumLength
)
866 return STATUS_NOT_IMPLEMENTED
;
871 NTSTATUS WINAPI
LsarLookupNames(
872 LSAPR_HANDLE PolicyHandle
,
874 PRPC_UNICODE_STRING Names
,
875 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
876 PLSAPR_TRANSLATED_SIDS TranslatedSids
,
877 LSAP_LOOKUP_LEVEL LookupLevel
,
880 LSAPR_TRANSLATED_SIDS_EX2 TranslatedSidsEx2
;
884 TRACE("(%p %lu %p %p %p %d %p)\n",
885 PolicyHandle
, Count
, Names
, ReferencedDomains
, TranslatedSids
,
886 LookupLevel
, MappedCount
);
888 TranslatedSids
->Entries
= 0;
889 TranslatedSids
->Sids
= NULL
;
890 *ReferencedDomains
= NULL
;
893 return STATUS_NONE_MAPPED
;
895 TranslatedSidsEx2
.Entries
= 0;
896 TranslatedSidsEx2
.Sids
= NULL
;
898 Status
= LsapLookupNames(Count
,
906 if (!NT_SUCCESS(Status
))
909 TranslatedSids
->Entries
= TranslatedSidsEx2
.Entries
;
910 TranslatedSids
->Sids
= MIDL_user_allocate(TranslatedSids
->Entries
* sizeof(LSA_TRANSLATED_SID
));
911 if (TranslatedSids
->Sids
== NULL
)
913 MIDL_user_free(TranslatedSidsEx2
.Sids
);
914 MIDL_user_free(*ReferencedDomains
);
915 *ReferencedDomains
= NULL
;
916 return STATUS_INSUFFICIENT_RESOURCES
;
919 for (i
= 0; i
< TranslatedSidsEx2
.Entries
; i
++)
921 TranslatedSids
->Sids
[i
].Use
= TranslatedSidsEx2
.Sids
[i
].Use
;
922 TranslatedSids
->Sids
[i
].RelativeId
= LsapGetRelativeIdFromSid(TranslatedSidsEx2
.Sids
[i
].Sid
);
923 TranslatedSids
->Sids
[i
].DomainIndex
= TranslatedSidsEx2
.Sids
[i
].DomainIndex
;
926 MIDL_user_free(TranslatedSidsEx2
.Sids
);
928 return STATUS_SUCCESS
;
933 NTSTATUS WINAPI
LsarLookupSids(
934 LSAPR_HANDLE PolicyHandle
,
935 PLSAPR_SID_ENUM_BUFFER SidEnumBuffer
,
936 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
937 PLSAPR_TRANSLATED_NAMES TranslatedNames
,
938 LSAP_LOOKUP_LEVEL LookupLevel
,
941 LSAPR_TRANSLATED_NAMES_EX TranslatedNamesEx
;
945 TRACE("(%p %p %p %p %d %p)\n",
946 PolicyHandle
, SidEnumBuffer
, ReferencedDomains
, TranslatedNames
,
947 LookupLevel
, MappedCount
);
949 /* FIXME: Fail, if there is an invalid SID in the SidEnumBuffer */
951 TranslatedNames
->Entries
= SidEnumBuffer
->Entries
;
952 TranslatedNames
->Names
= NULL
;
953 *ReferencedDomains
= NULL
;
955 TranslatedNamesEx
.Entries
= SidEnumBuffer
->Entries
;
956 TranslatedNamesEx
.Names
= NULL
;
958 Status
= LsapLookupSids(SidEnumBuffer
,
965 if (!NT_SUCCESS(Status
))
968 TranslatedNames
->Entries
= SidEnumBuffer
->Entries
;
969 TranslatedNames
->Names
= MIDL_user_allocate(SidEnumBuffer
->Entries
* sizeof(LSAPR_TRANSLATED_NAME
));
970 if (TranslatedNames
->Names
== NULL
)
972 MIDL_user_free(TranslatedNamesEx
.Names
);
973 MIDL_user_free(*ReferencedDomains
);
974 *ReferencedDomains
= NULL
;
975 return STATUS_INSUFFICIENT_RESOURCES
;
978 for (i
= 0; i
< TranslatedNamesEx
.Entries
; i
++)
980 TranslatedNames
->Names
[i
].Use
= TranslatedNamesEx
.Names
[i
].Use
;
981 TranslatedNames
->Names
[i
].Name
.Length
= TranslatedNamesEx
.Names
[i
].Name
.Length
;
982 TranslatedNames
->Names
[i
].Name
.MaximumLength
= TranslatedNamesEx
.Names
[i
].Name
.MaximumLength
;
983 TranslatedNames
->Names
[i
].Name
.Buffer
= TranslatedNamesEx
.Names
[i
].Name
.Buffer
;
984 TranslatedNames
->Names
[i
].DomainIndex
= TranslatedNamesEx
.Names
[i
].DomainIndex
;
987 MIDL_user_free(TranslatedNamesEx
.Names
);
994 NTSTATUS WINAPI
LsarCreateSecret(
995 LSAPR_HANDLE PolicyHandle
,
996 PRPC_UNICODE_STRING SecretName
,
997 ACCESS_MASK DesiredAccess
,
998 LSAPR_HANDLE
*SecretHandle
)
1000 PLSA_DB_OBJECT PolicyObject
;
1001 PLSA_DB_OBJECT SecretObject
= NULL
;
1003 PSECURITY_DESCRIPTOR SecretSd
= NULL
;
1005 NTSTATUS Status
= STATUS_SUCCESS
;
1007 /* Validate the PolicyHandle */
1008 Status
= LsapValidateDbObject(PolicyHandle
,
1010 POLICY_CREATE_SECRET
,
1012 if (!NT_SUCCESS(Status
))
1014 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1018 /* Get the current time */
1019 Status
= NtQuerySystemTime(&Time
);
1020 if (!NT_SUCCESS(Status
))
1022 ERR("NtQuerySystemTime failed (Status 0x%08lx)\n", Status
);
1026 /* Create a security descriptor for the secret */
1027 Status
= LsapCreateSecretSd(&SecretSd
,
1029 if (!NT_SUCCESS(Status
))
1031 ERR("LsapCreateAccountSd returned 0x%08lx\n", Status
);
1035 /* Create the Secret object */
1036 Status
= LsapCreateDbObject(PolicyObject
,
1041 PolicyObject
->Trusted
,
1043 if (!NT_SUCCESS(Status
))
1045 ERR("LsapCreateDbObject failed (Status 0x%08lx)\n", Status
);
1049 /* Set the CurrentTime attribute */
1050 Status
= LsapSetObjectAttribute(SecretObject
,
1053 sizeof(LARGE_INTEGER
));
1054 if (!NT_SUCCESS(Status
))
1056 ERR("LsapSetObjectAttribute (CurrentTime) failed (Status 0x%08lx)\n", Status
);
1060 /* Set the OldTime attribute */
1061 Status
= LsapSetObjectAttribute(SecretObject
,
1064 sizeof(LARGE_INTEGER
));
1065 if (!NT_SUCCESS(Status
))
1067 ERR("LsapSetObjectAttribute (OldTime) failed (Status 0x%08lx)\n", Status
);
1071 /* Set the SecDesc attribute */
1072 Status
= LsapSetObjectAttribute(SecretObject
,
1078 if (SecretSd
!= NULL
)
1079 RtlFreeHeap(RtlGetProcessHeap(), 0, SecretSd
);
1081 if (!NT_SUCCESS(Status
))
1083 if (SecretObject
!= NULL
)
1084 LsapCloseDbObject(SecretObject
);
1088 *SecretHandle
= (LSAPR_HANDLE
)SecretObject
;
1091 return STATUS_SUCCESS
;
1096 NTSTATUS WINAPI
LsarOpenAccount(
1097 LSAPR_HANDLE PolicyHandle
,
1098 PRPC_SID AccountSid
,
1099 ACCESS_MASK DesiredAccess
,
1100 LSAPR_HANDLE
*AccountHandle
)
1102 PLSA_DB_OBJECT PolicyObject
;
1103 PLSA_DB_OBJECT AccountObject
= NULL
;
1104 LPWSTR SidString
= NULL
;
1105 NTSTATUS Status
= STATUS_SUCCESS
;
1107 /* Validate the AccountSid */
1108 if (!RtlValidSid(AccountSid
))
1109 return STATUS_INVALID_PARAMETER
;
1111 /* Validate the PolicyHandle */
1112 Status
= LsapValidateDbObject(PolicyHandle
,
1116 if (!NT_SUCCESS(Status
))
1118 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1122 /* Create SID string */
1123 if (!ConvertSidToStringSid((PSID
)AccountSid
,
1126 ERR("ConvertSidToStringSid failed\n");
1127 Status
= STATUS_INVALID_PARAMETER
;
1131 /* Create the Account object */
1132 Status
= LsapOpenDbObject(PolicyObject
,
1137 PolicyObject
->Trusted
,
1139 if (!NT_SUCCESS(Status
))
1141 ERR("LsapOpenDbObject failed (Status 0x%08lx)\n", Status
);
1145 /* Set the Sid attribute */
1146 Status
= LsapSetObjectAttribute(AccountObject
,
1149 GetLengthSid(AccountSid
));
1152 if (SidString
!= NULL
)
1153 LocalFree(SidString
);
1155 if (!NT_SUCCESS(Status
))
1157 if (AccountObject
!= NULL
)
1158 LsapCloseDbObject(AccountObject
);
1162 *AccountHandle
= (LSAPR_HANDLE
)AccountObject
;
1170 NTSTATUS WINAPI
LsarEnumeratePrivilegesAccount(
1171 LSAPR_HANDLE AccountHandle
,
1172 PLSAPR_PRIVILEGE_SET
*Privileges
)
1174 PLSA_DB_OBJECT AccountObject
;
1175 ULONG PrivilegeSetSize
= 0;
1176 PLSAPR_PRIVILEGE_SET PrivilegeSet
= NULL
;
1181 /* Validate the AccountHandle */
1182 Status
= LsapValidateDbObject(AccountHandle
,
1186 if (!NT_SUCCESS(Status
))
1188 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1192 /* Get the size of the privilege set */
1193 Status
= LsapGetObjectAttribute(AccountObject
,
1197 if (!NT_SUCCESS(Status
))
1200 /* Allocate a buffer for the privilege set */
1201 PrivilegeSet
= MIDL_user_allocate(PrivilegeSetSize
);
1202 if (PrivilegeSet
== NULL
)
1203 return STATUS_NO_MEMORY
;
1205 /* Get the privilege set */
1206 Status
= LsapGetObjectAttribute(AccountObject
,
1210 if (!NT_SUCCESS(Status
))
1212 MIDL_user_free(PrivilegeSet
);
1216 /* Return a pointer to the privilege set */
1217 *Privileges
= PrivilegeSet
;
1219 return STATUS_SUCCESS
;
1224 NTSTATUS WINAPI
LsarAddPrivilegesToAccount(
1225 LSAPR_HANDLE AccountHandle
,
1226 PLSAPR_PRIVILEGE_SET Privileges
)
1228 PLSA_DB_OBJECT AccountObject
;
1229 PPRIVILEGE_SET CurrentPrivileges
= NULL
;
1230 PPRIVILEGE_SET NewPrivileges
= NULL
;
1231 ULONG PrivilegeSetSize
= 0;
1232 ULONG PrivilegeCount
;
1237 /* Validate the AccountHandle */
1238 Status
= LsapValidateDbObject(AccountHandle
,
1240 ACCOUNT_ADJUST_PRIVILEGES
,
1242 if (!NT_SUCCESS(Status
))
1244 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1248 /* Get the size of the Privilgs attribute */
1249 Status
= LsapGetObjectAttribute(AccountObject
,
1253 if (!NT_SUCCESS(Status
) || PrivilegeSetSize
== 0)
1255 /* The Privilgs attribute does not exist */
1257 PrivilegeSetSize
= sizeof(PRIVILEGE_SET
) +
1258 (Privileges
->PrivilegeCount
- 1) * sizeof(LUID_AND_ATTRIBUTES
);
1259 Status
= LsapSetObjectAttribute(AccountObject
,
1266 /* The Privilgs attribute exists */
1268 /* Allocate memory for the stored privilege set */
1269 CurrentPrivileges
= MIDL_user_allocate(PrivilegeSetSize
);
1270 if (CurrentPrivileges
== NULL
)
1271 return STATUS_NO_MEMORY
;
1273 /* Get the current privilege set */
1274 Status
= LsapGetObjectAttribute(AccountObject
,
1278 if (!NT_SUCCESS(Status
))
1280 TRACE("LsapGetObjectAttribute() failed (Status 0x%08lx)\n", Status
);
1284 PrivilegeCount
= CurrentPrivileges
->PrivilegeCount
;
1285 TRACE("Current privilege count: %lu\n", PrivilegeCount
);
1287 /* Calculate the number privileges in the combined privilege set */
1288 for (i
= 0; i
< Privileges
->PrivilegeCount
; i
++)
1291 for (j
= 0; j
< CurrentPrivileges
->PrivilegeCount
; j
++)
1293 if (RtlEqualLuid(&(Privileges
->Privilege
[i
].Luid
),
1294 &(CurrentPrivileges
->Privilege
[i
].Luid
)))
1301 if (bFound
== FALSE
)
1303 TRACE("Found new privilege\n");
1307 TRACE("New privilege count: %lu\n", PrivilegeCount
);
1309 /* Calculate the size of the new privilege set and allocate it */
1310 PrivilegeSetSize
= sizeof(PRIVILEGE_SET
) +
1311 (PrivilegeCount
- 1) * sizeof(LUID_AND_ATTRIBUTES
);
1312 NewPrivileges
= MIDL_user_allocate(PrivilegeSetSize
);
1313 if (NewPrivileges
== NULL
)
1315 Status
= STATUS_NO_MEMORY
;
1319 /* Initialize the new privilege set */
1320 NewPrivileges
->PrivilegeCount
= PrivilegeCount
;
1321 NewPrivileges
->Control
= 0;
1323 /* Copy all privileges from the current privilege set */
1324 RtlCopyLuidAndAttributesArray(CurrentPrivileges
->PrivilegeCount
,
1325 &(CurrentPrivileges
->Privilege
[0]),
1326 &(NewPrivileges
->Privilege
[0]));
1328 /* Add new privileges to the new privilege set */
1329 PrivilegeCount
= CurrentPrivileges
->PrivilegeCount
;
1330 for (i
= 0; i
< Privileges
->PrivilegeCount
; i
++)
1333 for (j
= 0; j
< CurrentPrivileges
->PrivilegeCount
; j
++)
1335 if (RtlEqualLuid(&(Privileges
->Privilege
[i
].Luid
),
1336 &(CurrentPrivileges
->Privilege
[i
].Luid
)))
1338 /* Overwrite attributes if a matching privilege was found */
1339 NewPrivileges
->Privilege
[j
].Attributes
= Privileges
->Privilege
[i
].Attributes
;
1346 if (bFound
== FALSE
)
1348 /* Copy the new privilege */
1349 RtlCopyLuidAndAttributesArray(1,
1350 (PLUID_AND_ATTRIBUTES
)&(Privileges
->Privilege
[i
]),
1351 &(NewPrivileges
->Privilege
[PrivilegeCount
]));
1356 /* Set the new privilege set */
1357 Status
= LsapSetObjectAttribute(AccountObject
,
1364 if (CurrentPrivileges
!= NULL
)
1365 MIDL_user_free(CurrentPrivileges
);
1367 if (NewPrivileges
!= NULL
)
1368 MIDL_user_free(NewPrivileges
);
1375 NTSTATUS WINAPI
LsarRemovePrivilegesFromAccount(
1376 LSAPR_HANDLE AccountHandle
,
1378 PLSAPR_PRIVILEGE_SET Privileges
)
1380 PLSA_DB_OBJECT AccountObject
;
1381 PPRIVILEGE_SET CurrentPrivileges
= NULL
;
1382 PPRIVILEGE_SET NewPrivileges
= NULL
;
1383 ULONG PrivilegeSetSize
= 0;
1384 ULONG PrivilegeCount
;
1389 TRACE("(%p %u %p)\n", AccountHandle
, AllPrivileges
, Privileges
);
1392 if ((AllPrivileges
== FALSE
&& Privileges
== NULL
) ||
1393 (AllPrivileges
== TRUE
&& Privileges
!= NULL
))
1394 return STATUS_INVALID_PARAMETER
;
1396 /* Validate the AccountHandle */
1397 Status
= LsapValidateDbObject(AccountHandle
,
1399 ACCOUNT_ADJUST_PRIVILEGES
,
1401 if (!NT_SUCCESS(Status
))
1403 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1407 if (AllPrivileges
== TRUE
)
1409 /* Delete the Privilgs attribute */
1410 Status
= LsapDeleteObjectAttribute(AccountObject
,
1412 if (Status
== STATUS_OBJECT_NAME_NOT_FOUND
)
1413 Status
= STATUS_SUCCESS
;
1417 /* Get the size of the Privilgs attribute */
1418 Status
= LsapGetObjectAttribute(AccountObject
,
1422 if (!NT_SUCCESS(Status
))
1425 /* Succeed, if there is no privilege set to remove privileges from */
1426 if (PrivilegeSetSize
== 0)
1428 Status
= STATUS_SUCCESS
;
1432 /* Allocate memory for the stored privilege set */
1433 CurrentPrivileges
= MIDL_user_allocate(PrivilegeSetSize
);
1434 if (CurrentPrivileges
== NULL
)
1435 return STATUS_NO_MEMORY
;
1437 /* Get the current privilege set */
1438 Status
= LsapGetObjectAttribute(AccountObject
,
1442 if (!NT_SUCCESS(Status
))
1444 TRACE("LsapGetObjectAttribute() failed (Status 0x%08lx)\n", Status
);
1448 PrivilegeCount
= CurrentPrivileges
->PrivilegeCount
;
1449 TRACE("Current privilege count: %lu\n", PrivilegeCount
);
1451 /* Calculate the number of privileges in the new privilege set */
1452 for (i
= 0; i
< CurrentPrivileges
->PrivilegeCount
; i
++)
1454 for (j
= 0; j
< Privileges
->PrivilegeCount
; j
++)
1456 if (RtlEqualLuid(&(CurrentPrivileges
->Privilege
[i
].Luid
),
1457 &(Privileges
->Privilege
[j
].Luid
)))
1459 if (PrivilegeCount
> 0)
1464 TRACE("New privilege count: %lu\n", PrivilegeCount
);
1466 if (PrivilegeCount
== 0)
1468 /* Delete the Privilgs attribute */
1469 Status
= LsapDeleteObjectAttribute(AccountObject
,
1471 if (Status
== STATUS_OBJECT_NAME_NOT_FOUND
)
1472 Status
= STATUS_SUCCESS
;
1476 /* Calculate the size of the new privilege set and allocate it */
1477 PrivilegeSetSize
= sizeof(PRIVILEGE_SET
) +
1478 (PrivilegeCount
- 1) * sizeof(LUID_AND_ATTRIBUTES
);
1479 NewPrivileges
= MIDL_user_allocate(PrivilegeSetSize
);
1480 if (NewPrivileges
== NULL
)
1482 Status
= STATUS_NO_MEMORY
;
1486 /* Initialize the new privilege set */
1487 NewPrivileges
->PrivilegeCount
= PrivilegeCount
;
1488 NewPrivileges
->Control
= 0;
1490 /* Copy the privileges which are not to be removed */
1491 for (i
= 0, k
= 0; i
< CurrentPrivileges
->PrivilegeCount
; i
++)
1494 for (j
= 0; j
< Privileges
->PrivilegeCount
; j
++)
1496 if (RtlEqualLuid(&(CurrentPrivileges
->Privilege
[i
].Luid
),
1497 &(Privileges
->Privilege
[j
].Luid
)))
1501 if (bFound
== FALSE
)
1503 /* Copy the privilege */
1504 RtlCopyLuidAndAttributesArray(1,
1505 &(CurrentPrivileges
->Privilege
[i
]),
1506 &(NewPrivileges
->Privilege
[k
]));
1511 /* Set the new privilege set */
1512 Status
= LsapSetObjectAttribute(AccountObject
,
1520 if (CurrentPrivileges
!= NULL
)
1521 MIDL_user_free(CurrentPrivileges
);
1523 if (NewPrivileges
!= NULL
)
1524 MIDL_user_free(NewPrivileges
);
1531 NTSTATUS WINAPI
LsarGetQuotasForAccount(
1532 LSAPR_HANDLE AccountHandle
,
1533 PQUOTA_LIMITS QuotaLimits
)
1535 PLSA_DB_OBJECT AccountObject
;
1539 TRACE("(%p %p)\n", AccountHandle
, QuotaLimits
);
1541 /* Validate the account handle */
1542 Status
= LsapValidateDbObject(AccountHandle
,
1546 if (!NT_SUCCESS(Status
))
1548 ERR("Invalid handle (Status %lx)\n", Status
);
1552 /* Get the quota attribute */
1553 Status
= LsapGetObjectAttribute(AccountObject
,
1563 NTSTATUS WINAPI
LsarSetQuotasForAccount(
1564 LSAPR_HANDLE AccountHandle
,
1565 PQUOTA_LIMITS QuotaLimits
)
1567 PLSA_DB_OBJECT AccountObject
;
1568 QUOTA_LIMITS InternalQuotaLimits
;
1572 TRACE("(%p %p)\n", AccountHandle
, QuotaLimits
);
1574 /* Validate the account handle */
1575 Status
= LsapValidateDbObject(AccountHandle
,
1577 ACCOUNT_ADJUST_QUOTAS
,
1579 if (!NT_SUCCESS(Status
))
1581 ERR("Invalid handle (Status %lx)\n", Status
);
1585 /* Get the quota limits attribute */
1586 Size
= sizeof(QUOTA_LIMITS
);
1587 Status
= LsapGetObjectAttribute(AccountObject
,
1589 &InternalQuotaLimits
,
1591 if (!NT_SUCCESS(Status
))
1593 TRACE("LsapGetObjectAttribute() failed (Status 0x%08lx)\n", Status
);
1597 /* Update the quota limits */
1598 if (QuotaLimits
->PagedPoolLimit
!= 0)
1599 InternalQuotaLimits
.PagedPoolLimit
= QuotaLimits
->PagedPoolLimit
;
1601 if (QuotaLimits
->NonPagedPoolLimit
!= 0)
1602 InternalQuotaLimits
.NonPagedPoolLimit
= QuotaLimits
->NonPagedPoolLimit
;
1604 if (QuotaLimits
->MinimumWorkingSetSize
!= 0)
1605 InternalQuotaLimits
.MinimumWorkingSetSize
= QuotaLimits
->MinimumWorkingSetSize
;
1607 if (QuotaLimits
->MaximumWorkingSetSize
!= 0)
1608 InternalQuotaLimits
.MaximumWorkingSetSize
= QuotaLimits
->MaximumWorkingSetSize
;
1610 if (QuotaLimits
->PagefileLimit
!= 0)
1611 InternalQuotaLimits
.PagefileLimit
= QuotaLimits
->PagefileLimit
;
1613 /* Set the quota limits attribute */
1614 Status
= LsapSetObjectAttribute(AccountObject
,
1616 &InternalQuotaLimits
,
1617 sizeof(QUOTA_LIMITS
));
1624 NTSTATUS WINAPI
LsarGetSystemAccessAccount(
1625 LSAPR_HANDLE AccountHandle
,
1626 ACCESS_MASK
*SystemAccess
)
1628 PLSA_DB_OBJECT AccountObject
;
1632 /* Validate the account handle */
1633 Status
= LsapValidateDbObject(AccountHandle
,
1637 if (!NT_SUCCESS(Status
))
1639 ERR("Invalid handle (Status %lx)\n", Status
);
1643 /* Get the system access flags */
1644 Status
= LsapGetObjectAttribute(AccountObject
,
1654 NTSTATUS WINAPI
LsarSetSystemAccessAccount(
1655 LSAPR_HANDLE AccountHandle
,
1656 ACCESS_MASK SystemAccess
)
1658 PLSA_DB_OBJECT AccountObject
;
1661 /* Validate the account handle */
1662 Status
= LsapValidateDbObject(AccountHandle
,
1664 ACCOUNT_ADJUST_SYSTEM_ACCESS
,
1666 if (!NT_SUCCESS(Status
))
1668 ERR("Invalid handle (Status %lx)\n", Status
);
1672 /* Set the system access flags */
1673 Status
= LsapSetObjectAttribute(AccountObject
,
1676 sizeof(ACCESS_MASK
));
1683 NTSTATUS WINAPI
LsarOpenTrustedDomain(
1684 LSAPR_HANDLE PolicyHandle
,
1685 PRPC_SID TrustedDomainSid
,
1686 ACCESS_MASK DesiredAccess
,
1687 LSAPR_HANDLE
*TrustedDomainHandle
)
1690 return STATUS_NOT_IMPLEMENTED
;
1695 NTSTATUS WINAPI
LsarQueryInfoTrustedDomain(
1696 LSAPR_HANDLE TrustedDomainHandle
,
1697 TRUSTED_INFORMATION_CLASS InformationClass
,
1698 PLSAPR_TRUSTED_DOMAIN_INFO
*TrustedDomainInformation
)
1701 return STATUS_NOT_IMPLEMENTED
;
1706 NTSTATUS WINAPI
LsarSetInformationTrustedDomain(
1707 LSAPR_HANDLE TrustedDomainHandle
,
1708 TRUSTED_INFORMATION_CLASS InformationClass
,
1709 PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation
)
1712 return STATUS_NOT_IMPLEMENTED
;
1717 NTSTATUS WINAPI
LsarOpenSecret(
1718 LSAPR_HANDLE PolicyHandle
,
1719 PRPC_UNICODE_STRING SecretName
,
1720 ACCESS_MASK DesiredAccess
,
1721 LSAPR_HANDLE
*SecretHandle
)
1723 PLSA_DB_OBJECT PolicyObject
;
1724 PLSA_DB_OBJECT SecretObject
= NULL
;
1725 NTSTATUS Status
= STATUS_SUCCESS
;
1727 /* Validate the PolicyHandle */
1728 Status
= LsapValidateDbObject(PolicyHandle
,
1732 if (!NT_SUCCESS(Status
))
1734 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1738 /* Create the secret object */
1739 Status
= LsapOpenDbObject(PolicyObject
,
1744 PolicyObject
->Trusted
,
1746 if (!NT_SUCCESS(Status
))
1748 ERR("LsapOpenDbObject failed (Status 0x%08lx)\n", Status
);
1753 if (!NT_SUCCESS(Status
))
1755 if (SecretObject
!= NULL
)
1756 LsapCloseDbObject(SecretObject
);
1760 *SecretHandle
= (LSAPR_HANDLE
)SecretObject
;
1768 NTSTATUS WINAPI
LsarSetSecret(
1769 LSAPR_HANDLE SecretHandle
,
1770 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
,
1771 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
)
1773 PLSA_DB_OBJECT SecretObject
;
1774 PBYTE CurrentValue
= NULL
;
1775 PBYTE OldValue
= NULL
;
1776 ULONG CurrentValueLength
= 0;
1777 ULONG OldValueLength
= 0;
1781 TRACE("LsarSetSecret(%p %p %p)\n", SecretHandle
,
1782 EncryptedCurrentValue
, EncryptedOldValue
);
1784 /* Validate the SecretHandle */
1785 Status
= LsapValidateDbObject(SecretHandle
,
1789 if (!NT_SUCCESS(Status
))
1791 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1795 if (EncryptedCurrentValue
!= NULL
)
1797 /* FIXME: Decrypt the current value */
1798 CurrentValue
= EncryptedCurrentValue
->Buffer
;
1799 CurrentValueLength
= EncryptedCurrentValue
->MaximumLength
;
1802 /* Set the current value */
1803 Status
= LsapSetObjectAttribute(SecretObject
,
1806 CurrentValueLength
);
1807 if (!NT_SUCCESS(Status
))
1809 ERR("LsapSetObjectAttribute failed (Status 0x%08lx)\n", Status
);
1813 /* Get the current time */
1814 Status
= NtQuerySystemTime(&Time
);
1815 if (!NT_SUCCESS(Status
))
1817 ERR("NtQuerySystemTime failed (Status 0x%08lx)\n", Status
);
1821 /* Set the current time */
1822 Status
= LsapSetObjectAttribute(SecretObject
,
1825 sizeof(LARGE_INTEGER
));
1826 if (!NT_SUCCESS(Status
))
1828 ERR("LsapSetObjectAttribute failed (Status 0x%08lx)\n", Status
);
1832 if (EncryptedOldValue
!= NULL
)
1834 /* FIXME: Decrypt the old value */
1835 OldValue
= EncryptedOldValue
->Buffer
;
1836 OldValueLength
= EncryptedOldValue
->MaximumLength
;
1839 /* Set the old value */
1840 Status
= LsapSetObjectAttribute(SecretObject
,
1844 if (!NT_SUCCESS(Status
))
1846 ERR("LsapSetObjectAttribute failed (Status 0x%08lx)\n", Status
);
1850 /* Set the old time */
1851 Status
= LsapSetObjectAttribute(SecretObject
,
1854 sizeof(LARGE_INTEGER
));
1855 if (!NT_SUCCESS(Status
))
1857 ERR("LsapSetObjectAttribute failed (Status 0x%08lx)\n", Status
);
1866 NTSTATUS WINAPI
LsarQuerySecret(
1867 LSAPR_HANDLE SecretHandle
,
1868 PLSAPR_CR_CIPHER_VALUE
*EncryptedCurrentValue
,
1869 PLARGE_INTEGER CurrentValueSetTime
,
1870 PLSAPR_CR_CIPHER_VALUE
*EncryptedOldValue
,
1871 PLARGE_INTEGER OldValueSetTime
)
1873 PLSA_DB_OBJECT SecretObject
;
1874 PLSAPR_CR_CIPHER_VALUE EncCurrentValue
= NULL
;
1875 PLSAPR_CR_CIPHER_VALUE EncOldValue
= NULL
;
1876 PBYTE CurrentValue
= NULL
;
1877 PBYTE OldValue
= NULL
;
1878 ULONG CurrentValueLength
= 0;
1879 ULONG OldValueLength
= 0;
1883 TRACE("LsarQuerySecret(%p %p %p %p %p)\n", SecretHandle
,
1884 EncryptedCurrentValue
, CurrentValueSetTime
,
1885 EncryptedOldValue
, OldValueSetTime
);
1887 /* Validate the SecretHandle */
1888 Status
= LsapValidateDbObject(SecretHandle
,
1892 if (!NT_SUCCESS(Status
))
1894 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1898 if (EncryptedCurrentValue
!= NULL
)
1900 CurrentValueLength
= 0;
1902 /* Get the size of the current value */
1903 Status
= LsapGetObjectAttribute(SecretObject
,
1906 &CurrentValueLength
);
1907 if (!NT_SUCCESS(Status
))
1910 /* Allocate a buffer for the current value */
1911 CurrentValue
= midl_user_allocate(CurrentValueLength
);
1912 if (CurrentValue
== NULL
)
1914 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1918 /* Get the current value */
1919 Status
= LsapGetObjectAttribute(SecretObject
,
1922 &CurrentValueLength
);
1923 if (!NT_SUCCESS(Status
))
1926 /* Allocate a buffer for the encrypted current value */
1927 EncCurrentValue
= midl_user_allocate(sizeof(LSAPR_CR_CIPHER_VALUE
));
1928 if (EncCurrentValue
== NULL
)
1930 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1934 /* FIXME: Encrypt the current value */
1935 EncCurrentValue
->Length
= (USHORT
)(CurrentValueLength
- sizeof(WCHAR
));
1936 EncCurrentValue
->MaximumLength
= (USHORT
)CurrentValueLength
;
1937 EncCurrentValue
->Buffer
= (PBYTE
)CurrentValue
;
1940 if (CurrentValueSetTime
!= NULL
)
1942 BufferSize
= sizeof(LARGE_INTEGER
);
1944 /* Get the current value time */
1945 Status
= LsapGetObjectAttribute(SecretObject
,
1947 (PBYTE
)CurrentValueSetTime
,
1949 if (!NT_SUCCESS(Status
))
1953 if (EncryptedOldValue
!= NULL
)
1957 /* Get the size of the old value */
1958 Status
= LsapGetObjectAttribute(SecretObject
,
1962 if (!NT_SUCCESS(Status
))
1965 /* Allocate a buffer for the old value */
1966 OldValue
= midl_user_allocate(OldValueLength
);
1967 if (OldValue
== NULL
)
1969 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1973 /* Get the old value */
1974 Status
= LsapGetObjectAttribute(SecretObject
,
1978 if (!NT_SUCCESS(Status
))
1981 /* Allocate a buffer for the encrypted old value */
1982 EncOldValue
= midl_user_allocate(sizeof(LSAPR_CR_CIPHER_VALUE
) + OldValueLength
);
1983 if (EncOldValue
== NULL
)
1985 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1989 /* FIXME: Encrypt the old value */
1990 EncOldValue
->Length
= (USHORT
)(OldValueLength
- sizeof(WCHAR
));
1991 EncOldValue
->MaximumLength
= (USHORT
)OldValueLength
;
1992 EncOldValue
->Buffer
= (PBYTE
)OldValue
;
1995 if (OldValueSetTime
!= NULL
)
1997 BufferSize
= sizeof(LARGE_INTEGER
);
1999 /* Get the old value time */
2000 Status
= LsapGetObjectAttribute(SecretObject
,
2002 (PBYTE
)OldValueSetTime
,
2004 if (!NT_SUCCESS(Status
))
2010 if (NT_SUCCESS(Status
))
2012 if (EncryptedCurrentValue
!= NULL
)
2013 *EncryptedCurrentValue
= EncCurrentValue
;
2015 if (EncryptedOldValue
!= NULL
)
2016 *EncryptedOldValue
= EncOldValue
;
2020 if (EncryptedCurrentValue
!= NULL
)
2021 *EncryptedCurrentValue
= NULL
;
2023 if (EncryptedOldValue
!= NULL
)
2024 *EncryptedOldValue
= NULL
;
2026 if (EncCurrentValue
!= NULL
)
2027 midl_user_free(EncCurrentValue
);
2029 if (EncOldValue
!= NULL
)
2030 midl_user_free(EncOldValue
);
2032 if (CurrentValue
!= NULL
)
2033 midl_user_free(CurrentValue
);
2035 if (OldValue
!= NULL
)
2036 midl_user_free(OldValue
);
2039 TRACE("LsarQuerySecret done (Status 0x%08lx)\n", Status
);
2046 NTSTATUS WINAPI
LsarLookupPrivilegeValue(
2047 LSAPR_HANDLE PolicyHandle
,
2048 PRPC_UNICODE_STRING Name
,
2053 TRACE("LsarLookupPrivilegeValue(%p, %wZ, %p)\n",
2054 PolicyHandle
, Name
, Value
);
2056 Status
= LsapValidateDbObject(PolicyHandle
,
2058 POLICY_LOOKUP_NAMES
,
2060 if (!NT_SUCCESS(Status
))
2062 ERR("Invalid handle (Status %lx)\n", Status
);
2066 TRACE("Privilege: %wZ\n", Name
);
2068 Status
= LsarpLookupPrivilegeValue(Name
,
2076 NTSTATUS WINAPI
LsarLookupPrivilegeName(
2077 LSAPR_HANDLE PolicyHandle
,
2079 PRPC_UNICODE_STRING
*Name
)
2083 TRACE("LsarLookupPrivilegeName(%p, %p, %p)\n",
2084 PolicyHandle
, Value
, Name
);
2086 Status
= LsapValidateDbObject(PolicyHandle
,
2088 POLICY_LOOKUP_NAMES
,
2090 if (!NT_SUCCESS(Status
))
2092 ERR("Invalid handle\n");
2096 Status
= LsarpLookupPrivilegeName(Value
,
2104 NTSTATUS WINAPI
LsarLookupPrivilegeDisplayName(
2105 LSAPR_HANDLE PolicyHandle
,
2106 PRPC_UNICODE_STRING Name
,
2107 USHORT ClientLanguage
,
2108 USHORT ClientSystemDefaultLanguage
,
2109 PRPC_UNICODE_STRING
*DisplayName
,
2110 USHORT
*LanguageReturned
)
2113 return STATUS_NOT_IMPLEMENTED
;
2118 NTSTATUS WINAPI
LsarDeleteObject(
2119 LSAPR_HANDLE
*ObjectHandle
)
2121 PLSA_DB_OBJECT DbObject
;
2124 TRACE("(%p)\n", ObjectHandle
);
2126 if (ObjectHandle
== NULL
)
2127 return STATUS_INVALID_PARAMETER
;
2129 /* Validate the ObjectHandle */
2130 Status
= LsapValidateDbObject(*ObjectHandle
,
2134 if (!NT_SUCCESS(Status
))
2136 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
2140 /* You cannot delete the policy object */
2141 if (DbObject
->ObjectType
== LsaDbPolicyObject
)
2142 return STATUS_INVALID_PARAMETER
;
2144 /* Delete the database object */
2145 Status
= LsapDeleteDbObject(DbObject
);
2146 if (!NT_SUCCESS(Status
))
2148 ERR("LsapDeleteDbObject returned 0x%08lx\n", Status
);
2152 /* Invalidate the object handle */
2153 *ObjectHandle
= NULL
;
2155 return STATUS_SUCCESS
;
2160 NTSTATUS WINAPI
LsarEnumerateAccountsWithUserRight(
2161 LSAPR_HANDLE PolicyHandle
,
2162 PRPC_UNICODE_STRING UserRight
,
2163 PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer
)
2166 return STATUS_NOT_IMPLEMENTED
;
2171 NTSTATUS WINAPI
LsarEnumerateAccountRights(
2172 LSAPR_HANDLE PolicyHandle
,
2173 PRPC_SID AccountSid
,
2174 PLSAPR_USER_RIGHT_SET UserRights
)
2176 LSAPR_HANDLE AccountHandle
;
2177 PLSAPR_PRIVILEGE_SET PrivilegeSet
= NULL
;
2178 PRPC_UNICODE_STRING RightsBuffer
= NULL
;
2179 PRPC_UNICODE_STRING PrivilegeString
;
2180 ACCESS_MASK SystemAccess
;
2181 ULONG RightsCount
= 0;
2186 TRACE("LsarEnumerateAccountRights(%p %p %p)\n",
2187 PolicyHandle
, AccountSid
, UserRights
);
2189 /* Open the account */
2190 Status
= LsarOpenAccount(PolicyHandle
,
2194 if (!NT_SUCCESS(Status
))
2196 ERR("LsarOpenAccount returned 0x%08lx\n", Status
);
2200 /* Enumerate the privileges */
2201 Status
= LsarEnumeratePrivilegesAccount(AccountHandle
,
2203 if (!NT_SUCCESS(Status
))
2205 ERR("LsarEnumeratePrivilegesAccount returned 0x%08lx\n", Status
);
2209 /* Get account rights */
2210 Status
= LsarGetSystemAccessAccount(AccountHandle
,
2212 if (!NT_SUCCESS(Status
))
2214 ERR("LsarGetSystemAccessAccount returned 0x%08lx\n", Status
);
2218 RightsCount
= PrivilegeSet
->PrivilegeCount
;
2220 /* Count account rights */
2221 for (i
= 0; i
< sizeof(ACCESS_MASK
) * 8; i
++)
2223 if (SystemAccess
& (1 << i
))
2227 /* We are done if there are no rights to be enumerated */
2228 if (RightsCount
== 0)
2230 UserRights
->Entries
= 0;
2231 UserRights
->UserRights
= NULL
;
2232 Status
= STATUS_SUCCESS
;
2236 /* Allocate a buffer for the account rights */
2237 RightsBuffer
= MIDL_user_allocate(RightsCount
* sizeof(RPC_UNICODE_STRING
));
2238 if (RightsBuffer
== NULL
)
2240 Status
= STATUS_INSUFFICIENT_RESOURCES
;
2244 /* Copy the privileges into the buffer */
2246 for (i
= 0; i
< PrivilegeSet
->PrivilegeCount
; i
++)
2248 PrivilegeString
= NULL
;
2249 Status
= LsarLookupPrivilegeName(PolicyHandle
,
2250 (PLUID
)&PrivilegeSet
->Privilege
[i
].Luid
,
2252 if (!NT_SUCCESS(Status
))
2255 RightsBuffer
[i
].Length
= PrivilegeString
->Length
;
2256 RightsBuffer
[i
].MaximumLength
= PrivilegeString
->MaximumLength
;
2257 RightsBuffer
[i
].Buffer
= PrivilegeString
->Buffer
;
2259 MIDL_user_free(PrivilegeString
);
2263 /* Copy account rights into the buffer */
2264 for (i
= 0; i
< sizeof(ACCESS_MASK
) * 8; i
++)
2266 if (SystemAccess
& (1 << i
))
2268 Status
= LsapLookupAccountRightName(1 << i
,
2270 if (!NT_SUCCESS(Status
))
2273 RightsBuffer
[i
].Length
= PrivilegeString
->Length
;
2274 RightsBuffer
[i
].MaximumLength
= PrivilegeString
->MaximumLength
;
2275 RightsBuffer
[i
].Buffer
= PrivilegeString
->Buffer
;
2277 MIDL_user_free(PrivilegeString
);
2282 UserRights
->Entries
= RightsCount
;
2283 UserRights
->UserRights
= (PRPC_UNICODE_STRING
)RightsBuffer
;
2286 if (!NT_SUCCESS(Status
))
2288 if (RightsBuffer
!= NULL
)
2290 for (RightsIndex
= 0; RightsIndex
< RightsCount
; RightsIndex
++)
2292 if (RightsBuffer
[RightsIndex
].Buffer
!= NULL
)
2293 MIDL_user_free(RightsBuffer
[RightsIndex
].Buffer
);
2296 MIDL_user_free(RightsBuffer
);
2300 if (PrivilegeSet
!= NULL
)
2301 MIDL_user_free(PrivilegeSet
);
2303 LsarClose(&AccountHandle
);
2310 NTSTATUS WINAPI
LsarAddAccountRights(
2311 LSAPR_HANDLE PolicyHandle
,
2312 PRPC_SID AccountSid
,
2313 PLSAPR_USER_RIGHT_SET UserRights
)
2316 return STATUS_NOT_IMPLEMENTED
;
2321 NTSTATUS WINAPI
LsarRemoveAccountRights(
2322 LSAPR_HANDLE PolicyHandle
,
2323 PRPC_SID AccountSid
,
2325 PLSAPR_USER_RIGHT_SET UserRights
)
2328 return STATUS_NOT_IMPLEMENTED
;
2333 NTSTATUS WINAPI
LsarQueryTrustedDomainInfo(
2334 LSAPR_HANDLE PolicyHandle
,
2335 PRPC_SID TrustedDomainSid
,
2336 TRUSTED_INFORMATION_CLASS InformationClass
,
2337 PLSAPR_TRUSTED_DOMAIN_INFO
*TrustedDomainInformation
)
2340 return STATUS_NOT_IMPLEMENTED
;
2345 NTSTATUS WINAPI
LsarSetTrustedDomainInfo(
2346 LSAPR_HANDLE PolicyHandle
,
2347 PRPC_SID TrustedDomainSid
,
2348 TRUSTED_INFORMATION_CLASS InformationClass
,
2349 PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation
)
2352 return STATUS_NOT_IMPLEMENTED
;
2357 NTSTATUS WINAPI
LsarDeleteTrustedDomain(
2358 LSAPR_HANDLE PolicyHandle
,
2359 PRPC_SID TrustedDomainSid
)
2362 return STATUS_NOT_IMPLEMENTED
;
2367 NTSTATUS WINAPI
LsarStorePrivateData(
2368 LSAPR_HANDLE PolicyHandle
,
2369 PRPC_UNICODE_STRING KeyName
,
2370 PLSAPR_CR_CIPHER_VALUE EncryptedData
)
2373 return STATUS_NOT_IMPLEMENTED
;
2378 NTSTATUS WINAPI
LsarRetrievePrivateData(
2379 LSAPR_HANDLE PolicyHandle
,
2380 PRPC_UNICODE_STRING KeyName
,
2381 PLSAPR_CR_CIPHER_VALUE
*EncryptedData
)
2384 return STATUS_NOT_IMPLEMENTED
;
2389 NTSTATUS WINAPI
LsarOpenPolicy2(
2391 PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes
,
2392 ACCESS_MASK DesiredAccess
,
2393 LSAPR_HANDLE
*PolicyHandle
)
2395 return LsarOpenPolicy(SystemName
,
2403 NTSTATUS WINAPI
LsarGetUserName(
2405 PRPC_UNICODE_STRING
*UserName
,
2406 PRPC_UNICODE_STRING
*DomainName
)
2409 return STATUS_NOT_IMPLEMENTED
;
2414 NTSTATUS WINAPI
LsarQueryInformationPolicy2(
2415 LSAPR_HANDLE PolicyHandle
,
2416 POLICY_INFORMATION_CLASS InformationClass
,
2417 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
2419 return LsarQueryInformationPolicy(PolicyHandle
,
2426 NTSTATUS WINAPI
LsarSetInformationPolicy2(
2427 LSAPR_HANDLE PolicyHandle
,
2428 POLICY_INFORMATION_CLASS InformationClass
,
2429 PLSAPR_POLICY_INFORMATION PolicyInformation
)
2431 return LsarSetInformationPolicy(PolicyHandle
,
2438 NTSTATUS WINAPI
LsarQueryTrustedDomainInfoByName(
2439 LSAPR_HANDLE PolicyHandle
,
2440 PRPC_UNICODE_STRING TrustedDomainName
,
2441 POLICY_INFORMATION_CLASS InformationClass
,
2442 PLSAPR_TRUSTED_DOMAIN_INFO
*PolicyInformation
)
2445 return STATUS_NOT_IMPLEMENTED
;
2450 NTSTATUS WINAPI
LsarSetTrustedDomainInfoByName(
2451 LSAPR_HANDLE PolicyHandle
,
2452 PRPC_UNICODE_STRING TrustedDomainName
,
2453 POLICY_INFORMATION_CLASS InformationClass
,
2454 PLSAPR_TRUSTED_DOMAIN_INFO PolicyInformation
)
2457 return STATUS_NOT_IMPLEMENTED
;
2462 NTSTATUS WINAPI
LsarEnumerateTrustedDomainsEx(
2463 LSAPR_HANDLE PolicyHandle
,
2464 DWORD
*EnumerationContext
,
2465 PLSAPR_TRUSTED_ENUM_BUFFER_EX EnumerationBuffer
,
2466 DWORD PreferedMaximumLength
)
2469 return STATUS_NOT_IMPLEMENTED
;
2474 NTSTATUS WINAPI
LsarCreateTrustedDomainEx(
2475 LSAPR_HANDLE PolicyHandle
,
2476 PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation
,
2477 PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthentificationInformation
,
2478 ACCESS_MASK DesiredAccess
,
2479 LSAPR_HANDLE
*TrustedDomainHandle
)
2482 return STATUS_NOT_IMPLEMENTED
;
2487 NTSTATUS WINAPI
LsarSetPolicyReplicationHandle(
2488 PLSAPR_HANDLE PolicyHandle
)
2491 return STATUS_NOT_IMPLEMENTED
;
2496 NTSTATUS WINAPI
LsarQueryDomainInformationPolicy(
2497 LSAPR_HANDLE PolicyHandle
,
2498 POLICY_INFORMATION_CLASS InformationClass
,
2499 PLSAPR_POLICY_DOMAIN_INFORMATION
*PolicyInformation
)
2502 return STATUS_NOT_IMPLEMENTED
;
2507 NTSTATUS WINAPI
LsarSetDomainInformationPolicy(
2508 LSAPR_HANDLE PolicyHandle
,
2509 POLICY_INFORMATION_CLASS InformationClass
,
2510 PLSAPR_POLICY_DOMAIN_INFORMATION PolicyInformation
)
2513 return STATUS_NOT_IMPLEMENTED
;
2518 NTSTATUS WINAPI
LsarOpenTrustedDomainByName(
2519 LSAPR_HANDLE PolicyHandle
,
2520 PRPC_UNICODE_STRING TrustedDomainName
,
2521 ACCESS_MASK DesiredAccess
,
2522 LSAPR_HANDLE
*TrustedDomainHandle
)
2525 return STATUS_NOT_IMPLEMENTED
;
2530 NTSTATUS WINAPI
LsarTestCall(
2534 return STATUS_NOT_IMPLEMENTED
;
2539 NTSTATUS WINAPI
LsarLookupSids2(
2540 LSAPR_HANDLE PolicyHandle
,
2541 PLSAPR_SID_ENUM_BUFFER SidEnumBuffer
,
2542 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
2543 PLSAPR_TRANSLATED_NAMES_EX TranslatedNames
,
2544 LSAP_LOOKUP_LEVEL LookupLevel
,
2546 DWORD LookupOptions
,
2547 DWORD ClientRevision
)
2551 TRACE("(%p %p %p %p %d %p %lu %lu)\n",
2552 PolicyHandle
, SidEnumBuffer
, ReferencedDomains
, TranslatedNames
,
2553 LookupLevel
, MappedCount
, LookupOptions
, ClientRevision
);
2555 TranslatedNames
->Entries
= SidEnumBuffer
->Entries
;
2556 TranslatedNames
->Names
= NULL
;
2557 *ReferencedDomains
= NULL
;
2559 /* FIXME: Fail, if there is an invalid SID in the SidEnumBuffer */
2561 Status
= LsapLookupSids(SidEnumBuffer
,
2574 NTSTATUS WINAPI
LsarLookupNames2(
2575 LSAPR_HANDLE PolicyHandle
,
2577 PRPC_UNICODE_STRING Names
,
2578 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
2579 PLSAPR_TRANSLATED_SIDS_EX TranslatedSids
,
2580 LSAP_LOOKUP_LEVEL LookupLevel
,
2582 DWORD LookupOptions
,
2583 DWORD ClientRevision
)
2585 LSAPR_TRANSLATED_SIDS_EX2 TranslatedSidsEx2
;
2589 TRACE("(%p %lu %p %p %p %d %p %lu %lu)\n",
2590 PolicyHandle
, Count
, Names
, ReferencedDomains
, TranslatedSids
,
2591 LookupLevel
, MappedCount
, LookupOptions
, ClientRevision
);
2593 TranslatedSids
->Entries
= 0;
2594 TranslatedSids
->Sids
= NULL
;
2595 *ReferencedDomains
= NULL
;
2598 return STATUS_NONE_MAPPED
;
2600 TranslatedSidsEx2
.Entries
= 0;
2601 TranslatedSidsEx2
.Sids
= NULL
;
2603 Status
= LsapLookupNames(Count
,
2611 if (!NT_SUCCESS(Status
))
2614 TranslatedSids
->Entries
= TranslatedSidsEx2
.Entries
;
2615 TranslatedSids
->Sids
= MIDL_user_allocate(TranslatedSids
->Entries
* sizeof(LSA_TRANSLATED_SID
));
2616 if (TranslatedSids
->Sids
== NULL
)
2618 MIDL_user_free(TranslatedSidsEx2
.Sids
);
2619 MIDL_user_free(*ReferencedDomains
);
2620 *ReferencedDomains
= NULL
;
2621 return STATUS_INSUFFICIENT_RESOURCES
;
2624 for (i
= 0; i
< TranslatedSidsEx2
.Entries
; i
++)
2626 TranslatedSids
->Sids
[i
].Use
= TranslatedSidsEx2
.Sids
[i
].Use
;
2627 TranslatedSids
->Sids
[i
].RelativeId
= LsapGetRelativeIdFromSid(TranslatedSidsEx2
.Sids
[i
].Sid
);
2628 TranslatedSids
->Sids
[i
].DomainIndex
= TranslatedSidsEx2
.Sids
[i
].DomainIndex
;
2629 TranslatedSids
->Sids
[i
].Flags
= TranslatedSidsEx2
.Sids
[i
].Flags
;
2632 MIDL_user_free(TranslatedSidsEx2
.Sids
);
2634 return STATUS_SUCCESS
;
2639 NTSTATUS WINAPI
LsarCreateTrustedDomainEx2(
2640 LSAPR_HANDLE PolicyHandle
,
2641 PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation
,
2642 PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthentificationInformation
,
2643 ACCESS_MASK DesiredAccess
,
2644 LSAPR_HANDLE
*TrustedDomainHandle
)
2647 return STATUS_NOT_IMPLEMENTED
;
2652 NTSTATUS WINAPI
CredrWrite(
2656 return STATUS_NOT_IMPLEMENTED
;
2661 NTSTATUS WINAPI
CredrRead(
2665 return STATUS_NOT_IMPLEMENTED
;
2670 NTSTATUS WINAPI
CredrEnumerate(
2674 return STATUS_NOT_IMPLEMENTED
;
2679 NTSTATUS WINAPI
CredrWriteDomainCredentials(
2683 return STATUS_NOT_IMPLEMENTED
;
2688 NTSTATUS WINAPI
CredrReadDomainCredentials(
2692 return STATUS_NOT_IMPLEMENTED
;
2697 NTSTATUS WINAPI
CredrDelete(
2701 return STATUS_NOT_IMPLEMENTED
;
2706 NTSTATUS WINAPI
CredrGetTargetInfo(
2710 return STATUS_NOT_IMPLEMENTED
;
2715 NTSTATUS WINAPI
CredrProfileLoaded(
2719 return STATUS_NOT_IMPLEMENTED
;
2724 NTSTATUS WINAPI
LsarLookupNames3(
2725 LSAPR_HANDLE PolicyHandle
,
2727 PRPC_UNICODE_STRING Names
,
2728 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
2729 PLSAPR_TRANSLATED_SIDS_EX2 TranslatedSids
,
2730 LSAP_LOOKUP_LEVEL LookupLevel
,
2732 DWORD LookupOptions
,
2733 DWORD ClientRevision
)
2737 TRACE("(%p %lu %p %p %p %d %p %lu %lu)\n",
2738 PolicyHandle
, Count
, Names
, ReferencedDomains
, TranslatedSids
,
2739 LookupLevel
, MappedCount
, LookupOptions
, ClientRevision
);
2741 TranslatedSids
->Entries
= 0;
2742 TranslatedSids
->Sids
= NULL
;
2743 *ReferencedDomains
= NULL
;
2746 return STATUS_NONE_MAPPED
;
2748 Status
= LsapLookupNames(Count
,
2762 NTSTATUS WINAPI
CredrGetSessionTypes(
2766 return STATUS_NOT_IMPLEMENTED
;
2771 NTSTATUS WINAPI
LsarRegisterAuditEvent(
2775 return STATUS_NOT_IMPLEMENTED
;
2780 NTSTATUS WINAPI
LsarGenAuditEvent(
2784 return STATUS_NOT_IMPLEMENTED
;
2789 NTSTATUS WINAPI
LsarUnregisterAuditEvent(
2793 return STATUS_NOT_IMPLEMENTED
;
2798 NTSTATUS WINAPI
LsarQueryForestTrustInformation(
2799 LSAPR_HANDLE PolicyHandle
,
2800 PLSA_UNICODE_STRING TrustedDomainName
,
2801 LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType
,
2802 PLSA_FOREST_TRUST_INFORMATION
*ForestTrustInfo
)
2805 return STATUS_NOT_IMPLEMENTED
;
2810 NTSTATUS WINAPI
LsarSetForestTrustInformation(
2811 LSAPR_HANDLE PolicyHandle
,
2812 PLSA_UNICODE_STRING TrustedDomainName
,
2813 LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType
,
2814 PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
2816 PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
2819 return STATUS_NOT_IMPLEMENTED
;
2824 NTSTATUS WINAPI
CredrRename(
2828 return STATUS_NOT_IMPLEMENTED
;
2833 NTSTATUS WINAPI
LsarLookupSids3(
2834 LSAPR_HANDLE PolicyHandle
,
2835 PLSAPR_SID_ENUM_BUFFER SidEnumBuffer
,
2836 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
2837 PLSAPR_TRANSLATED_NAMES_EX TranslatedNames
,
2838 LSAP_LOOKUP_LEVEL LookupLevel
,
2840 DWORD LookupOptions
,
2841 DWORD ClientRevision
)
2845 TRACE("(%p %p %p %p %d %p %lu %lu)\n",
2846 PolicyHandle
, SidEnumBuffer
, ReferencedDomains
, TranslatedNames
,
2847 LookupLevel
, MappedCount
, LookupOptions
, ClientRevision
);
2849 TranslatedNames
->Entries
= SidEnumBuffer
->Entries
;
2850 TranslatedNames
->Names
= NULL
;
2851 *ReferencedDomains
= NULL
;
2853 /* FIXME: Fail, if there is an invalid SID in the SidEnumBuffer */
2855 Status
= LsapLookupSids(SidEnumBuffer
,
2868 NTSTATUS WINAPI
LsarLookupNames4(
2871 PRPC_UNICODE_STRING Names
,
2872 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
2873 PLSAPR_TRANSLATED_SIDS_EX2 TranslatedSids
,
2874 LSAP_LOOKUP_LEVEL LookupLevel
,
2876 DWORD LookupOptions
,
2877 DWORD ClientRevision
)
2881 TRACE("(%p %lu %p %p %p %d %p %lu %lu)\n",
2882 RpcHandle
, Count
, Names
, ReferencedDomains
, TranslatedSids
,
2883 LookupLevel
, MappedCount
, LookupOptions
, ClientRevision
);
2885 TranslatedSids
->Entries
= 0;
2886 TranslatedSids
->Sids
= NULL
;
2887 *ReferencedDomains
= NULL
;
2890 return STATUS_NONE_MAPPED
;
2892 Status
= LsapLookupNames(Count
,
2906 NTSTATUS WINAPI
LsarOpenPolicySce(
2910 return STATUS_NOT_IMPLEMENTED
;
2915 NTSTATUS WINAPI
LsarAdtRegisterSecurityEventSource(
2919 return STATUS_NOT_IMPLEMENTED
;
2924 NTSTATUS WINAPI
LsarAdtUnregisterSecurityEventSource(
2928 return STATUS_NOT_IMPLEMENTED
;
2933 NTSTATUS WINAPI
LsarAdtReportSecurityEvent(
2937 return STATUS_NOT_IMPLEMENTED
;