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
)
101 return STATUS_NOT_SUPPORTED
;
106 NTSTATUS WINAPI
LsarEnumeratePrivileges(
107 LSAPR_HANDLE PolicyHandle
,
108 DWORD
*EnumerationContext
,
109 PLSAPR_PRIVILEGE_ENUM_BUFFER EnumerationBuffer
,
110 DWORD PreferedMaximumLength
)
112 PLSA_DB_OBJECT PolicyObject
;
115 TRACE("LsarEnumeratePrivileges(%p %p %p %lu)\n",
116 PolicyHandle
, EnumerationContext
, EnumerationBuffer
,
117 PreferedMaximumLength
);
119 Status
= LsapValidateDbObject(PolicyHandle
,
121 POLICY_VIEW_LOCAL_INFORMATION
,
123 if (!NT_SUCCESS(Status
))
126 if (EnumerationContext
== NULL
)
127 return STATUS_INVALID_PARAMETER
;
129 return LsarpEnumeratePrivileges(EnumerationContext
,
131 PreferedMaximumLength
);
136 NTSTATUS WINAPI
LsarQuerySecurityObject(
137 LSAPR_HANDLE ObjectHandle
,
138 SECURITY_INFORMATION SecurityInformation
,
139 PLSAPR_SR_SECURITY_DESCRIPTOR
*SecurityDescriptor
)
142 return STATUS_NOT_IMPLEMENTED
;
147 NTSTATUS WINAPI
LsarSetSecurityObject(
148 LSAPR_HANDLE ObjectHandle
,
149 SECURITY_INFORMATION SecurityInformation
,
150 PLSAPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor
)
153 return STATUS_NOT_IMPLEMENTED
;
158 NTSTATUS WINAPI
LsarChangePassword(
160 PRPC_UNICODE_STRING String1
,
161 PRPC_UNICODE_STRING String2
,
162 PRPC_UNICODE_STRING String3
,
163 PRPC_UNICODE_STRING String4
,
164 PRPC_UNICODE_STRING String5
)
167 return STATUS_NOT_IMPLEMENTED
;
172 NTSTATUS WINAPI
LsarOpenPolicy(
174 PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes
,
175 ACCESS_MASK DesiredAccess
,
176 LSAPR_HANDLE
*PolicyHandle
)
178 PLSA_DB_OBJECT PolicyObject
;
181 TRACE("LsarOpenPolicy called!\n");
183 RtlEnterCriticalSection(&PolicyHandleTableLock
);
185 Status
= LsapOpenDbObject(NULL
,
192 RtlLeaveCriticalSection(&PolicyHandleTableLock
);
194 if (NT_SUCCESS(Status
))
195 *PolicyHandle
= (LSAPR_HANDLE
)PolicyObject
;
197 TRACE("LsarOpenPolicy done!\n");
204 NTSTATUS WINAPI
LsarQueryInformationPolicy(
205 LSAPR_HANDLE PolicyHandle
,
206 POLICY_INFORMATION_CLASS InformationClass
,
207 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
209 PLSA_DB_OBJECT DbObject
;
210 ACCESS_MASK DesiredAccess
= 0;
213 TRACE("LsarQueryInformationPolicy(%p,0x%08x,%p)\n",
214 PolicyHandle
, InformationClass
, PolicyInformation
);
216 if (PolicyInformation
)
218 TRACE("*PolicyInformation %p\n", *PolicyInformation
);
221 switch (InformationClass
)
223 case PolicyAuditLogInformation
:
224 case PolicyAuditEventsInformation
:
225 case PolicyAuditFullQueryInformation
:
226 DesiredAccess
= POLICY_VIEW_AUDIT_INFORMATION
;
229 case PolicyPrimaryDomainInformation
:
230 case PolicyAccountDomainInformation
:
231 case PolicyLsaServerRoleInformation
:
232 case PolicyReplicaSourceInformation
:
233 case PolicyDefaultQuotaInformation
:
234 case PolicyModificationInformation
:
235 case PolicyDnsDomainInformation
:
236 case PolicyDnsDomainInformationInt
:
237 case PolicyLocalAccountDomainInformation
:
238 DesiredAccess
= POLICY_VIEW_LOCAL_INFORMATION
;
241 case PolicyPdAccountInformation
:
242 DesiredAccess
= POLICY_GET_PRIVATE_INFORMATION
;
246 ERR("Invalid InformationClass!\n");
247 return STATUS_INVALID_PARAMETER
;
250 Status
= LsapValidateDbObject(PolicyHandle
,
254 if (!NT_SUCCESS(Status
))
257 switch (InformationClass
)
259 case PolicyAuditLogInformation
: /* 1 */
260 Status
= LsarQueryAuditLog(PolicyHandle
,
264 case PolicyAuditEventsInformation
: /* 2 */
265 Status
= LsarQueryAuditEvents(PolicyHandle
,
269 case PolicyPrimaryDomainInformation
: /* 3 */
270 Status
= LsarQueryPrimaryDomain(PolicyHandle
,
274 case PolicyPdAccountInformation
: /* 4 */
275 Status
= LsarQueryPdAccount(PolicyHandle
,
279 case PolicyAccountDomainInformation
: /* 5 */
280 Status
= LsarQueryAccountDomain(PolicyHandle
,
284 case PolicyLsaServerRoleInformation
: /* 6 */
285 Status
= LsarQueryServerRole(PolicyHandle
,
289 case PolicyReplicaSourceInformation
: /* 7 */
290 Status
= LsarQueryReplicaSource(PolicyHandle
,
294 case PolicyDefaultQuotaInformation
: /* 8 */
295 Status
= LsarQueryDefaultQuota(PolicyHandle
,
299 case PolicyModificationInformation
: /* 9 */
300 Status
= LsarQueryModification(PolicyHandle
,
304 case PolicyAuditFullQueryInformation
: /* 11 (0xB) */
305 Status
= LsarQueryAuditFull(PolicyHandle
,
309 case PolicyDnsDomainInformation
: /* 12 (0xC) */
310 Status
= LsarQueryDnsDomain(PolicyHandle
,
314 case PolicyDnsDomainInformationInt
: /* 13 (0xD) */
315 Status
= LsarQueryDnsDomainInt(PolicyHandle
,
319 case PolicyLocalAccountDomainInformation
: /* 14 (0xE) */
320 Status
= LsarQueryLocalAccountDomain(PolicyHandle
,
325 ERR("Invalid InformationClass!\n");
326 Status
= STATUS_INVALID_PARAMETER
;
334 NTSTATUS WINAPI
LsarSetInformationPolicy(
335 LSAPR_HANDLE PolicyHandle
,
336 POLICY_INFORMATION_CLASS InformationClass
,
337 PLSAPR_POLICY_INFORMATION PolicyInformation
)
339 PLSA_DB_OBJECT DbObject
;
340 ACCESS_MASK DesiredAccess
= 0;
343 TRACE("LsarSetInformationPolicy(%p,0x%08x,%p)\n",
344 PolicyHandle
, InformationClass
, PolicyInformation
);
346 if (PolicyInformation
)
348 TRACE("*PolicyInformation %p\n", *PolicyInformation
);
351 switch (InformationClass
)
353 case PolicyAuditLogInformation
:
354 case PolicyAuditFullSetInformation
:
355 DesiredAccess
= POLICY_AUDIT_LOG_ADMIN
;
358 case PolicyAuditEventsInformation
:
359 DesiredAccess
= POLICY_SET_AUDIT_REQUIREMENTS
;
362 case PolicyPrimaryDomainInformation
:
363 case PolicyAccountDomainInformation
:
364 case PolicyDnsDomainInformation
:
365 case PolicyDnsDomainInformationInt
:
366 case PolicyLocalAccountDomainInformation
:
367 DesiredAccess
= POLICY_TRUST_ADMIN
;
370 case PolicyLsaServerRoleInformation
:
371 case PolicyReplicaSourceInformation
:
372 DesiredAccess
= POLICY_SERVER_ADMIN
;
375 case PolicyDefaultQuotaInformation
:
376 DesiredAccess
= POLICY_SET_DEFAULT_QUOTA_LIMITS
;
380 ERR("Invalid InformationClass!\n");
381 return STATUS_INVALID_PARAMETER
;
384 Status
= LsapValidateDbObject(PolicyHandle
,
388 if (!NT_SUCCESS(Status
))
391 switch (InformationClass
)
393 case PolicyAuditEventsInformation
:
394 Status
= STATUS_NOT_IMPLEMENTED
;
397 case PolicyPrimaryDomainInformation
:
398 Status
= LsarSetPrimaryDomain(PolicyHandle
,
399 (PLSAPR_POLICY_PRIMARY_DOM_INFO
)PolicyInformation
);
402 case PolicyAccountDomainInformation
:
403 Status
= LsarSetAccountDomain(PolicyHandle
,
404 (PLSAPR_POLICY_ACCOUNT_DOM_INFO
)PolicyInformation
);
407 case PolicyDnsDomainInformation
:
408 Status
= LsarSetDnsDomain(PolicyHandle
,
409 (PLSAPR_POLICY_DNS_DOMAIN_INFO
)PolicyInformation
);
412 case PolicyLsaServerRoleInformation
:
413 Status
= STATUS_NOT_IMPLEMENTED
;
417 Status
= STATUS_INVALID_PARAMETER
;
426 NTSTATUS WINAPI
LsarClearAuditLog(
427 LSAPR_HANDLE ObjectHandle
)
430 return STATUS_NOT_IMPLEMENTED
;
435 NTSTATUS WINAPI
LsarCreateAccount(
436 LSAPR_HANDLE PolicyHandle
,
438 ACCESS_MASK DesiredAccess
,
439 LSAPR_HANDLE
*AccountHandle
)
441 PLSA_DB_OBJECT PolicyObject
;
442 PLSA_DB_OBJECT AccountObject
= NULL
;
443 LPWSTR SidString
= NULL
;
444 NTSTATUS Status
= STATUS_SUCCESS
;
446 /* Validate the AccountSid */
447 if (!RtlValidSid(AccountSid
))
448 return STATUS_INVALID_PARAMETER
;
450 /* Validate the PolicyHandle */
451 Status
= LsapValidateDbObject(PolicyHandle
,
453 POLICY_CREATE_ACCOUNT
,
455 if (!NT_SUCCESS(Status
))
457 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
461 /* Create SID string */
462 if (!ConvertSidToStringSid((PSID
)AccountSid
,
465 ERR("ConvertSidToStringSid failed\n");
466 Status
= STATUS_INVALID_PARAMETER
;
470 /* Create the Account object */
471 Status
= LsapCreateDbObject(PolicyObject
,
477 if (!NT_SUCCESS(Status
))
479 ERR("LsapCreateDbObject failed (Status 0x%08lx)\n", Status
);
483 /* Set the Sid attribute */
484 Status
= LsapSetObjectAttribute(AccountObject
,
487 GetLengthSid(AccountSid
));
490 if (SidString
!= NULL
)
491 LocalFree(SidString
);
493 if (!NT_SUCCESS(Status
))
495 if (AccountObject
!= NULL
)
496 LsapCloseDbObject(AccountObject
);
500 *AccountHandle
= (LSAPR_HANDLE
)AccountObject
;
503 return STATUS_SUCCESS
;
508 NTSTATUS WINAPI
LsarEnumerateAccounts(
509 LSAPR_HANDLE PolicyHandle
,
510 DWORD
*EnumerationContext
,
511 PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer
,
512 DWORD PreferedMaximumLength
)
515 return STATUS_NOT_IMPLEMENTED
;
520 NTSTATUS WINAPI
LsarCreateTrustedDomain(
521 LSAPR_HANDLE PolicyHandle
,
522 PLSAPR_TRUST_INFORMATION TrustedDomainInformation
,
523 ACCESS_MASK DesiredAccess
,
524 LSAPR_HANDLE
*TrustedDomainHandle
)
527 return STATUS_NOT_IMPLEMENTED
;
532 NTSTATUS WINAPI
LsarEnumerateTrustedDomains(
533 LSAPR_HANDLE PolicyHandle
,
534 DWORD
*EnumerationContext
,
535 PLSAPR_TRUSTED_ENUM_BUFFER EnumerationBuffer
,
536 DWORD PreferedMaximumLength
)
539 return STATUS_NOT_IMPLEMENTED
;
544 NTSTATUS WINAPI
LsarLookupNames(
545 LSAPR_HANDLE PolicyHandle
,
547 PRPC_UNICODE_STRING Names
,
548 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
549 PLSAPR_TRANSLATED_SIDS TranslatedSids
,
550 LSAP_LOOKUP_LEVEL LookupLevel
,
553 LSAPR_TRANSLATED_SIDS_EX2 TranslatedSidsEx2
;
557 TRACE("(%p %lu %p %p %p %d %p)\n",
558 PolicyHandle
, Count
, Names
, ReferencedDomains
, TranslatedSids
,
559 LookupLevel
, MappedCount
);
561 TranslatedSids
->Entries
= 0;
562 TranslatedSids
->Sids
= NULL
;
563 *ReferencedDomains
= NULL
;
566 return STATUS_NONE_MAPPED
;
568 TranslatedSidsEx2
.Entries
= 0;
569 TranslatedSidsEx2
.Sids
= NULL
;
571 Status
= LsapLookupNames(Count
,
579 if (!NT_SUCCESS(Status
))
582 TranslatedSids
->Entries
= TranslatedSidsEx2
.Entries
;
583 TranslatedSids
->Sids
= MIDL_user_allocate(TranslatedSids
->Entries
* sizeof(LSA_TRANSLATED_SID
));
584 if (TranslatedSids
->Sids
== NULL
)
586 MIDL_user_free(TranslatedSidsEx2
.Sids
);
587 MIDL_user_free(*ReferencedDomains
);
588 *ReferencedDomains
= NULL
;
589 return STATUS_INSUFFICIENT_RESOURCES
;
592 for (i
= 0; i
< TranslatedSidsEx2
.Entries
; i
++)
594 TranslatedSids
->Sids
[i
].Use
= TranslatedSidsEx2
.Sids
[i
].Use
;
595 TranslatedSids
->Sids
[i
].RelativeId
= LsapGetRelativeIdFromSid(TranslatedSidsEx2
.Sids
[i
].Sid
);
596 TranslatedSids
->Sids
[i
].DomainIndex
= TranslatedSidsEx2
.Sids
[i
].DomainIndex
;
599 MIDL_user_free(TranslatedSidsEx2
.Sids
);
601 return STATUS_SUCCESS
;
606 NTSTATUS WINAPI
LsarLookupSids(
607 LSAPR_HANDLE PolicyHandle
,
608 PLSAPR_SID_ENUM_BUFFER SidEnumBuffer
,
609 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
610 PLSAPR_TRANSLATED_NAMES TranslatedNames
,
611 LSAP_LOOKUP_LEVEL LookupLevel
,
614 LSAPR_TRANSLATED_NAMES_EX TranslatedNamesEx
;
618 TRACE("(%p %p %p %p %d %p)\n",
619 PolicyHandle
, SidEnumBuffer
, ReferencedDomains
, TranslatedNames
,
620 LookupLevel
, MappedCount
);
622 /* FIXME: Fail, if there is an invalid SID in the SidEnumBuffer */
624 TranslatedNames
->Entries
= SidEnumBuffer
->Entries
;
625 TranslatedNames
->Names
= NULL
;
626 *ReferencedDomains
= NULL
;
628 TranslatedNamesEx
.Entries
= SidEnumBuffer
->Entries
;
629 TranslatedNamesEx
.Names
= NULL
;
631 Status
= LsapLookupSids(SidEnumBuffer
,
638 if (!NT_SUCCESS(Status
))
641 TranslatedNames
->Entries
= SidEnumBuffer
->Entries
;
642 TranslatedNames
->Names
= MIDL_user_allocate(SidEnumBuffer
->Entries
* sizeof(LSAPR_TRANSLATED_NAME
));
643 if (TranslatedNames
->Names
== NULL
)
645 MIDL_user_free(TranslatedNamesEx
.Names
);
646 MIDL_user_free(*ReferencedDomains
);
647 *ReferencedDomains
= NULL
;
648 return STATUS_INSUFFICIENT_RESOURCES
;
651 for (i
= 0; i
< TranslatedNamesEx
.Entries
; i
++)
653 TranslatedNames
->Names
[i
].Use
= TranslatedNamesEx
.Names
[i
].Use
;
654 TranslatedNames
->Names
[i
].Name
.Length
= TranslatedNamesEx
.Names
[i
].Name
.Length
;
655 TranslatedNames
->Names
[i
].Name
.MaximumLength
= TranslatedNamesEx
.Names
[i
].Name
.MaximumLength
;
656 TranslatedNames
->Names
[i
].Name
.Buffer
= TranslatedNamesEx
.Names
[i
].Name
.Buffer
;
657 TranslatedNames
->Names
[i
].DomainIndex
= TranslatedNamesEx
.Names
[i
].DomainIndex
;
660 MIDL_user_free(TranslatedNamesEx
.Names
);
667 NTSTATUS WINAPI
LsarCreateSecret(
668 LSAPR_HANDLE PolicyHandle
,
669 PRPC_UNICODE_STRING SecretName
,
670 ACCESS_MASK DesiredAccess
,
671 LSAPR_HANDLE
*SecretHandle
)
673 PLSA_DB_OBJECT PolicyObject
;
674 PLSA_DB_OBJECT SecretObject
= NULL
;
676 NTSTATUS Status
= STATUS_SUCCESS
;
678 /* Validate the PolicyHandle */
679 Status
= LsapValidateDbObject(PolicyHandle
,
681 POLICY_CREATE_SECRET
,
683 if (!NT_SUCCESS(Status
))
685 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
689 /* Get the current time */
690 Status
= NtQuerySystemTime(&Time
);
691 if (!NT_SUCCESS(Status
))
693 ERR("NtQuerySystemTime failed (Status 0x%08lx)\n", Status
);
697 /* Create the Secret object */
698 Status
= LsapCreateDbObject(PolicyObject
,
704 if (!NT_SUCCESS(Status
))
706 ERR("LsapCreateDbObject failed (Status 0x%08lx)\n", Status
);
710 /* Set the CurrentTime attribute */
711 Status
= LsapSetObjectAttribute(SecretObject
,
714 sizeof(LARGE_INTEGER
));
715 if (!NT_SUCCESS(Status
))
717 ERR("LsapSetObjectAttribute (CurrentTime) failed (Status 0x%08lx)\n", Status
);
721 /* Set the OldTime attribute */
722 Status
= LsapSetObjectAttribute(SecretObject
,
725 sizeof(LARGE_INTEGER
));
728 if (!NT_SUCCESS(Status
))
730 if (SecretObject
!= NULL
)
731 LsapCloseDbObject(SecretObject
);
735 *SecretHandle
= (LSAPR_HANDLE
)SecretObject
;
738 return STATUS_SUCCESS
;
743 NTSTATUS WINAPI
LsarOpenAccount(
744 LSAPR_HANDLE PolicyHandle
,
746 ACCESS_MASK DesiredAccess
,
747 LSAPR_HANDLE
*AccountHandle
)
749 PLSA_DB_OBJECT PolicyObject
;
750 PLSA_DB_OBJECT AccountObject
= NULL
;
751 LPWSTR SidString
= NULL
;
752 NTSTATUS Status
= STATUS_SUCCESS
;
754 /* Validate the AccountSid */
755 if (!RtlValidSid(AccountSid
))
756 return STATUS_INVALID_PARAMETER
;
758 /* Validate the PolicyHandle */
759 Status
= LsapValidateDbObject(PolicyHandle
,
763 if (!NT_SUCCESS(Status
))
765 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
769 /* Create SID string */
770 if (!ConvertSidToStringSid((PSID
)AccountSid
,
773 ERR("ConvertSidToStringSid failed\n");
774 Status
= STATUS_INVALID_PARAMETER
;
778 /* Create the Account object */
779 Status
= LsapOpenDbObject(PolicyObject
,
785 if (!NT_SUCCESS(Status
))
787 ERR("LsapOpenDbObject failed (Status 0x%08lx)\n", Status
);
791 /* Set the Sid attribute */
792 Status
= LsapSetObjectAttribute(AccountObject
,
795 GetLengthSid(AccountSid
));
798 if (SidString
!= NULL
)
799 LocalFree(SidString
);
801 if (!NT_SUCCESS(Status
))
803 if (AccountObject
!= NULL
)
804 LsapCloseDbObject(AccountObject
);
808 *AccountHandle
= (LSAPR_HANDLE
)AccountObject
;
816 NTSTATUS WINAPI
LsarEnumeratePrivilegesAccount(
817 LSAPR_HANDLE AccountHandle
,
818 PLSAPR_PRIVILEGE_SET
*Privileges
)
820 PLSA_DB_OBJECT AccountObject
;
821 ULONG PrivilegeSetSize
= 0;
822 PLSAPR_PRIVILEGE_SET PrivilegeSet
= NULL
;
827 /* Validate the AccountHandle */
828 Status
= LsapValidateDbObject(AccountHandle
,
832 if (!NT_SUCCESS(Status
))
834 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
838 /* Get the size of the privilege set */
839 Status
= LsapGetObjectAttribute(AccountObject
,
843 if (!NT_SUCCESS(Status
))
846 /* Allocate a buffer for the privilege set */
847 PrivilegeSet
= MIDL_user_allocate(PrivilegeSetSize
);
848 if (PrivilegeSet
== NULL
)
849 return STATUS_NO_MEMORY
;
851 /* Get the privilege set */
852 Status
= LsapGetObjectAttribute(AccountObject
,
856 if (!NT_SUCCESS(Status
))
858 MIDL_user_free(PrivilegeSet
);
862 /* Return a pointer to the privilege set */
863 *Privileges
= PrivilegeSet
;
865 return STATUS_SUCCESS
;
870 NTSTATUS WINAPI
LsarAddPrivilegesToAccount(
871 LSAPR_HANDLE AccountHandle
,
872 PLSAPR_PRIVILEGE_SET Privileges
)
874 PLSA_DB_OBJECT AccountObject
;
875 PPRIVILEGE_SET CurrentPrivileges
= NULL
;
876 PPRIVILEGE_SET NewPrivileges
= NULL
;
877 ULONG PrivilegeSetSize
= 0;
878 ULONG PrivilegeCount
;
883 /* Validate the AccountHandle */
884 Status
= LsapValidateDbObject(AccountHandle
,
886 ACCOUNT_ADJUST_PRIVILEGES
,
888 if (!NT_SUCCESS(Status
))
890 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
894 Status
= LsapGetObjectAttribute(AccountObject
,
898 if (!NT_SUCCESS(Status
) || PrivilegeSetSize
== 0)
900 /* The Privilgs attribute does not exist */
902 PrivilegeSetSize
= sizeof(PRIVILEGE_SET
) +
903 (Privileges
->PrivilegeCount
- 1) * sizeof(LUID_AND_ATTRIBUTES
);
904 Status
= LsapSetObjectAttribute(AccountObject
,
911 /* The Privilgs attribute exists */
913 /* Allocate memory for the stored privilege set */
914 CurrentPrivileges
= MIDL_user_allocate(PrivilegeSetSize
);
915 if (CurrentPrivileges
== NULL
)
916 return STATUS_NO_MEMORY
;
918 /* Get the current privilege set */
919 Status
= LsapGetObjectAttribute(AccountObject
,
923 if (!NT_SUCCESS(Status
))
925 TRACE("LsapGetObjectAttribute() failed (Status 0x%08lx)\n", Status
);
929 PrivilegeCount
= CurrentPrivileges
->PrivilegeCount
;
930 TRACE("Current privilege count: %lu\n", PrivilegeCount
);
932 /* Calculate the number privileges in the combined privilege set */
933 for (i
= 0; i
< Privileges
->PrivilegeCount
; i
++)
936 for (j
= 0; j
< CurrentPrivileges
->PrivilegeCount
; j
++)
938 if (RtlEqualLuid(&(Privileges
->Privilege
[i
].Luid
),
939 &(CurrentPrivileges
->Privilege
[i
].Luid
)))
948 TRACE("Found new privilege\n");
952 TRACE("New privilege count: %lu\n", PrivilegeCount
);
954 /* Calculate the size of the new privilege set and allocate it */
955 PrivilegeSetSize
= sizeof(PRIVILEGE_SET
) +
956 (PrivilegeCount
- 1) * sizeof(LUID_AND_ATTRIBUTES
);
957 NewPrivileges
= MIDL_user_allocate(PrivilegeSetSize
);
958 if (NewPrivileges
== NULL
)
960 Status
= STATUS_NO_MEMORY
;
964 /* Initialize the new privilege set */
965 NewPrivileges
->PrivilegeCount
= PrivilegeCount
;
966 NewPrivileges
->Control
= 0;
968 /* Copy all privileges from the current privilege set */
969 RtlCopyLuidAndAttributesArray(CurrentPrivileges
->PrivilegeCount
,
970 &(CurrentPrivileges
->Privilege
[0]),
971 &(NewPrivileges
->Privilege
[0]));
973 /* Add new privileges to the new privilege set */
974 PrivilegeCount
= CurrentPrivileges
->PrivilegeCount
;
975 for (i
= 0; i
< Privileges
->PrivilegeCount
; i
++)
978 for (j
= 0; j
< CurrentPrivileges
->PrivilegeCount
; j
++)
980 if (RtlEqualLuid(&(Privileges
->Privilege
[i
].Luid
),
981 &(CurrentPrivileges
->Privilege
[i
].Luid
)))
983 /* Overwrite attributes if a matching privilege was found */
984 NewPrivileges
->Privilege
[j
].Attributes
= Privileges
->Privilege
[i
].Attributes
;
993 /* Copy the new privilege */
994 RtlCopyLuidAndAttributesArray(1,
995 (PLUID_AND_ATTRIBUTES
)&(Privileges
->Privilege
[i
]),
996 &(NewPrivileges
->Privilege
[PrivilegeCount
]));
1001 /* Set the new priivliege set */
1002 Status
= LsapSetObjectAttribute(AccountObject
,
1009 if (CurrentPrivileges
!= NULL
)
1010 MIDL_user_free(CurrentPrivileges
);
1012 if (NewPrivileges
!= NULL
)
1013 MIDL_user_free(NewPrivileges
);
1020 NTSTATUS WINAPI
LsarRemovePrivilegesFromAccount(
1021 LSAPR_HANDLE AccountHandle
,
1023 PLSAPR_PRIVILEGE_SET Privileges
)
1026 return STATUS_NOT_IMPLEMENTED
;
1031 NTSTATUS WINAPI
LsarGetQuotasForAccount(
1032 LSAPR_HANDLE AccountHandle
,
1033 PQUOTA_LIMITS QuotaLimits
)
1036 return STATUS_NOT_IMPLEMENTED
;
1041 NTSTATUS WINAPI
LsarSetQuotasForAccount(
1042 LSAPR_HANDLE AccountHandle
,
1043 PQUOTA_LIMITS QuotaLimits
)
1046 return STATUS_NOT_IMPLEMENTED
;
1051 NTSTATUS WINAPI
LsarGetSystemAccessAccount(
1052 LSAPR_HANDLE AccountHandle
,
1053 ACCESS_MASK
*SystemAccess
)
1055 PLSA_DB_OBJECT AccountObject
;
1059 /* Validate the account handle */
1060 Status
= LsapValidateDbObject(AccountHandle
,
1064 if (!NT_SUCCESS(Status
))
1066 ERR("Invalid handle (Status %lx)\n", Status
);
1070 /* Get the system access flags */
1071 Status
= LsapGetObjectAttribute(AccountObject
,
1081 NTSTATUS WINAPI
LsarSetSystemAccessAccount(
1082 LSAPR_HANDLE AccountHandle
,
1083 ACCESS_MASK SystemAccess
)
1085 PLSA_DB_OBJECT AccountObject
;
1088 /* Validate the account handle */
1089 Status
= LsapValidateDbObject(AccountHandle
,
1091 ACCOUNT_ADJUST_SYSTEM_ACCESS
,
1093 if (!NT_SUCCESS(Status
))
1095 ERR("Invalid handle (Status %lx)\n", Status
);
1099 /* Set the system access flags */
1100 Status
= LsapSetObjectAttribute(AccountObject
,
1103 sizeof(ACCESS_MASK
));
1110 NTSTATUS WINAPI
LsarOpenTrustedDomain(
1111 LSAPR_HANDLE PolicyHandle
,
1112 PRPC_SID TrustedDomainSid
,
1113 ACCESS_MASK DesiredAccess
,
1114 LSAPR_HANDLE
*TrustedDomainHandle
)
1117 return STATUS_NOT_IMPLEMENTED
;
1122 NTSTATUS WINAPI
LsarQueryInfoTrustedDomain(
1123 LSAPR_HANDLE TrustedDomainHandle
,
1124 TRUSTED_INFORMATION_CLASS InformationClass
,
1125 PLSAPR_TRUSTED_DOMAIN_INFO
*TrustedDomainInformation
)
1128 return STATUS_NOT_IMPLEMENTED
;
1133 NTSTATUS WINAPI
LsarSetInformationTrustedDomain(
1134 LSAPR_HANDLE TrustedDomainHandle
,
1135 TRUSTED_INFORMATION_CLASS InformationClass
,
1136 PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation
)
1139 return STATUS_NOT_IMPLEMENTED
;
1144 NTSTATUS WINAPI
LsarOpenSecret(
1145 LSAPR_HANDLE PolicyHandle
,
1146 PRPC_UNICODE_STRING SecretName
,
1147 ACCESS_MASK DesiredAccess
,
1148 LSAPR_HANDLE
*SecretHandle
)
1150 PLSA_DB_OBJECT PolicyObject
;
1151 PLSA_DB_OBJECT SecretObject
= NULL
;
1152 NTSTATUS Status
= STATUS_SUCCESS
;
1154 /* Validate the PolicyHandle */
1155 Status
= LsapValidateDbObject(PolicyHandle
,
1159 if (!NT_SUCCESS(Status
))
1161 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1165 /* Create the secret object */
1166 Status
= LsapOpenDbObject(PolicyObject
,
1172 if (!NT_SUCCESS(Status
))
1174 ERR("LsapOpenDbObject failed (Status 0x%08lx)\n", Status
);
1179 if (!NT_SUCCESS(Status
))
1181 if (SecretObject
!= NULL
)
1182 LsapCloseDbObject(SecretObject
);
1186 *SecretHandle
= (LSAPR_HANDLE
)SecretObject
;
1194 NTSTATUS WINAPI
LsarSetSecret(
1195 LSAPR_HANDLE SecretHandle
,
1196 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
,
1197 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
)
1199 PLSA_DB_OBJECT SecretObject
;
1200 PBYTE CurrentValue
= NULL
;
1201 PBYTE OldValue
= NULL
;
1202 ULONG CurrentValueLength
= 0;
1203 ULONG OldValueLength
= 0;
1207 TRACE("LsarSetSecret(%p %p %p)\n", SecretHandle
,
1208 EncryptedCurrentValue
, EncryptedOldValue
);
1210 /* Validate the SecretHandle */
1211 Status
= LsapValidateDbObject(SecretHandle
,
1215 if (!NT_SUCCESS(Status
))
1217 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1221 if (EncryptedCurrentValue
!= NULL
)
1223 /* FIXME: Decrypt the current value */
1224 CurrentValue
= EncryptedCurrentValue
->Buffer
;
1225 CurrentValueLength
= EncryptedCurrentValue
->MaximumLength
;
1228 /* Set the current value */
1229 Status
= LsapSetObjectAttribute(SecretObject
,
1232 CurrentValueLength
);
1233 if (!NT_SUCCESS(Status
))
1235 ERR("LsapSetObjectAttribute failed (Status 0x%08lx)\n", Status
);
1239 /* Get the current time */
1240 Status
= NtQuerySystemTime(&Time
);
1241 if (!NT_SUCCESS(Status
))
1243 ERR("NtQuerySystemTime failed (Status 0x%08lx)\n", Status
);
1247 /* Set the current time */
1248 Status
= LsapSetObjectAttribute(SecretObject
,
1251 sizeof(LARGE_INTEGER
));
1252 if (!NT_SUCCESS(Status
))
1254 ERR("LsapSetObjectAttribute failed (Status 0x%08lx)\n", Status
);
1258 if (EncryptedOldValue
!= NULL
)
1260 /* FIXME: Decrypt the old value */
1261 OldValue
= EncryptedOldValue
->Buffer
;
1262 OldValueLength
= EncryptedOldValue
->MaximumLength
;
1265 /* Set the old value */
1266 Status
= LsapSetObjectAttribute(SecretObject
,
1270 if (!NT_SUCCESS(Status
))
1272 ERR("LsapSetObjectAttribute failed (Status 0x%08lx)\n", Status
);
1276 /* Set the old time */
1277 Status
= LsapSetObjectAttribute(SecretObject
,
1280 sizeof(LARGE_INTEGER
));
1281 if (!NT_SUCCESS(Status
))
1283 ERR("LsapSetObjectAttribute failed (Status 0x%08lx)\n", Status
);
1292 NTSTATUS WINAPI
LsarQuerySecret(
1293 LSAPR_HANDLE SecretHandle
,
1294 PLSAPR_CR_CIPHER_VALUE
*EncryptedCurrentValue
,
1295 PLARGE_INTEGER CurrentValueSetTime
,
1296 PLSAPR_CR_CIPHER_VALUE
*EncryptedOldValue
,
1297 PLARGE_INTEGER OldValueSetTime
)
1299 PLSA_DB_OBJECT SecretObject
;
1300 PLSAPR_CR_CIPHER_VALUE EncCurrentValue
= NULL
;
1301 PLSAPR_CR_CIPHER_VALUE EncOldValue
= NULL
;
1302 PBYTE CurrentValue
= NULL
;
1303 PBYTE OldValue
= NULL
;
1304 ULONG CurrentValueLength
= 0;
1305 ULONG OldValueLength
= 0;
1309 TRACE("LsarQuerySecret(%p %p %p %p %p)\n", SecretHandle
,
1310 EncryptedCurrentValue
, CurrentValueSetTime
,
1311 EncryptedOldValue
, OldValueSetTime
);
1313 /* Validate the SecretHandle */
1314 Status
= LsapValidateDbObject(SecretHandle
,
1318 if (!NT_SUCCESS(Status
))
1320 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1324 if (EncryptedCurrentValue
!= NULL
)
1326 CurrentValueLength
= 0;
1328 /* Get the size of the current value */
1329 Status
= LsapGetObjectAttribute(SecretObject
,
1332 &CurrentValueLength
);
1333 if (!NT_SUCCESS(Status
))
1336 /* Allocate a buffer for the current value */
1337 CurrentValue
= midl_user_allocate(CurrentValueLength
);
1338 if (CurrentValue
== NULL
)
1340 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1344 /* Get the current value */
1345 Status
= LsapGetObjectAttribute(SecretObject
,
1348 &CurrentValueLength
);
1349 if (!NT_SUCCESS(Status
))
1352 /* Allocate a buffer for the encrypted current value */
1353 EncCurrentValue
= midl_user_allocate(sizeof(LSAPR_CR_CIPHER_VALUE
));
1354 if (EncCurrentValue
== NULL
)
1356 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1360 /* FIXME: Encrypt the current value */
1361 EncCurrentValue
->Length
= (USHORT
)(CurrentValueLength
- sizeof(WCHAR
));
1362 EncCurrentValue
->MaximumLength
= (USHORT
)CurrentValueLength
;
1363 EncCurrentValue
->Buffer
= (PBYTE
)CurrentValue
;
1366 if (CurrentValueSetTime
!= NULL
)
1368 BufferSize
= sizeof(LARGE_INTEGER
);
1370 /* Get the current value time */
1371 Status
= LsapGetObjectAttribute(SecretObject
,
1373 (PBYTE
)CurrentValueSetTime
,
1375 if (!NT_SUCCESS(Status
))
1379 if (EncryptedOldValue
!= NULL
)
1383 /* Get the size of the old value */
1384 Status
= LsapGetObjectAttribute(SecretObject
,
1388 if (!NT_SUCCESS(Status
))
1391 /* Allocate a buffer for the old value */
1392 OldValue
= midl_user_allocate(OldValueLength
);
1393 if (OldValue
== NULL
)
1395 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1399 /* Get the old value */
1400 Status
= LsapGetObjectAttribute(SecretObject
,
1404 if (!NT_SUCCESS(Status
))
1407 /* Allocate a buffer for the encrypted old value */
1408 EncOldValue
= midl_user_allocate(sizeof(LSAPR_CR_CIPHER_VALUE
) + OldValueLength
);
1409 if (EncOldValue
== NULL
)
1411 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1415 /* FIXME: Encrypt the old value */
1416 EncOldValue
->Length
= (USHORT
)(OldValueLength
- sizeof(WCHAR
));
1417 EncOldValue
->MaximumLength
= (USHORT
)OldValueLength
;
1418 EncOldValue
->Buffer
= (PBYTE
)OldValue
;
1421 if (OldValueSetTime
!= NULL
)
1423 BufferSize
= sizeof(LARGE_INTEGER
);
1425 /* Get the old value time */
1426 Status
= LsapGetObjectAttribute(SecretObject
,
1428 (PBYTE
)OldValueSetTime
,
1430 if (!NT_SUCCESS(Status
))
1436 if (NT_SUCCESS(Status
))
1438 if (EncryptedCurrentValue
!= NULL
)
1439 *EncryptedCurrentValue
= EncCurrentValue
;
1441 if (EncryptedOldValue
!= NULL
)
1442 *EncryptedOldValue
= EncOldValue
;
1446 if (EncryptedCurrentValue
!= NULL
)
1447 *EncryptedCurrentValue
= NULL
;
1449 if (EncryptedOldValue
!= NULL
)
1450 *EncryptedOldValue
= NULL
;
1452 if (EncCurrentValue
!= NULL
)
1453 midl_user_free(EncCurrentValue
);
1455 if (EncOldValue
!= NULL
)
1456 midl_user_free(EncOldValue
);
1458 if (CurrentValue
!= NULL
)
1459 midl_user_free(CurrentValue
);
1461 if (OldValue
!= NULL
)
1462 midl_user_free(OldValue
);
1465 TRACE("LsarQuerySecret done (Status 0x%08lx)\n", Status
);
1472 NTSTATUS WINAPI
LsarLookupPrivilegeValue(
1473 LSAPR_HANDLE PolicyHandle
,
1474 PRPC_UNICODE_STRING Name
,
1479 TRACE("LsarLookupPrivilegeValue(%p, %wZ, %p)\n",
1480 PolicyHandle
, Name
, Value
);
1482 Status
= LsapValidateDbObject(PolicyHandle
,
1484 POLICY_LOOKUP_NAMES
,
1486 if (!NT_SUCCESS(Status
))
1488 ERR("Invalid handle (Status %lx)\n", Status
);
1492 TRACE("Privilege: %wZ\n", Name
);
1494 Status
= LsarpLookupPrivilegeValue((PUNICODE_STRING
)Name
,
1502 NTSTATUS WINAPI
LsarLookupPrivilegeName(
1503 LSAPR_HANDLE PolicyHandle
,
1505 PRPC_UNICODE_STRING
*Name
)
1509 TRACE("LsarLookupPrivilegeName(%p, %p, %p)\n",
1510 PolicyHandle
, Value
, Name
);
1512 Status
= LsapValidateDbObject(PolicyHandle
,
1514 POLICY_LOOKUP_NAMES
,
1516 if (!NT_SUCCESS(Status
))
1518 ERR("Invalid handle\n");
1522 Status
= LsarpLookupPrivilegeName(Value
, (PUNICODE_STRING
*)Name
);
1529 NTSTATUS WINAPI
LsarLookupPrivilegeDisplayName(
1530 LSAPR_HANDLE PolicyHandle
,
1531 PRPC_UNICODE_STRING Name
,
1532 USHORT ClientLanguage
,
1533 USHORT ClientSystemDefaultLanguage
,
1534 PRPC_UNICODE_STRING
*DisplayName
,
1535 USHORT
*LanguageReturned
)
1538 return STATUS_NOT_IMPLEMENTED
;
1543 NTSTATUS WINAPI
LsarDeleteObject(
1544 LSAPR_HANDLE
*ObjectHandle
)
1547 return STATUS_NOT_IMPLEMENTED
;
1552 NTSTATUS WINAPI
LsarEnumerateAccountsWithUserRight(
1553 LSAPR_HANDLE PolicyHandle
,
1554 PRPC_UNICODE_STRING UserRight
,
1555 PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer
)
1558 return STATUS_NOT_IMPLEMENTED
;
1563 NTSTATUS WINAPI
LsarEnumerateAccountRights(
1564 LSAPR_HANDLE PolicyHandle
,
1565 PRPC_SID AccountSid
,
1566 PLSAPR_USER_RIGHT_SET UserRights
)
1568 LSAPR_HANDLE AccountHandle
;
1569 PLSAPR_PRIVILEGE_SET PrivilegeSet
= NULL
;
1570 PRPC_UNICODE_STRING RightsBuffer
= NULL
;
1571 PRPC_UNICODE_STRING PrivilegeString
;
1577 TRACE("LsarEnumerateAccountRights(%p %p %p)\n",
1578 PolicyHandle
, AccountSid
, UserRights
);
1580 /* Open the account */
1581 Status
= LsarOpenAccount(PolicyHandle
,
1585 if (!NT_SUCCESS(Status
))
1587 ERR("LsarOpenAccount returned 0x%08lx\n", Status
);
1591 /* Enumerate the privileges */
1592 Status
= LsarEnumeratePrivilegesAccount(AccountHandle
,
1594 if (!NT_SUCCESS(Status
))
1596 ERR("LsarEnumeratePrivilegesAccount returned 0x%08lx\n", Status
);
1600 /* FIXME: Get account rights */
1603 RightsCount
= PrivilegeSet
->PrivilegeCount
;
1605 /* FIXME: Count account rights */
1608 /* We are done if there are no rights to be enumerated */
1609 if (RightsCount
== 0)
1611 UserRights
->Entries
= 0;
1612 UserRights
->UserRights
= NULL
;
1613 Status
= STATUS_SUCCESS
;
1617 /* Allocate a buffer for the account rights */
1618 RightsBuffer
= MIDL_user_allocate(RightsCount
* sizeof(RPC_UNICODE_STRING
));
1619 if (RightsBuffer
== NULL
)
1621 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1625 /* Copy the privileges into the buffer */
1627 for (PrivIndex
= 0; PrivIndex
< PrivilegeSet
->PrivilegeCount
; PrivIndex
++)
1629 PrivilegeString
= NULL
;
1630 Status
= LsarLookupPrivilegeName(PolicyHandle
,
1631 (PLUID
)&PrivilegeSet
->Privilege
[PrivIndex
].Luid
,
1632 (PRPC_UNICODE_STRING
*)&PrivilegeString
);
1633 if (!NT_SUCCESS(Status
))
1636 RightsBuffer
[RightsIndex
].Length
= PrivilegeString
->Length
;
1637 RightsBuffer
[RightsIndex
].MaximumLength
= PrivilegeString
->MaximumLength
;
1638 RightsBuffer
[RightsIndex
].Buffer
= PrivilegeString
->Buffer
;
1640 MIDL_user_free(PrivilegeString
);
1644 /* FIXME: Copy account rights into the buffer */
1647 UserRights
->Entries
= RightsCount
;
1648 UserRights
->UserRights
= (PRPC_UNICODE_STRING
)RightsBuffer
;
1651 if (!NT_SUCCESS(Status
))
1653 if (RightsBuffer
!= NULL
)
1655 for (RightsIndex
= 0; RightsIndex
< RightsCount
; RightsIndex
++)
1657 if (RightsBuffer
[RightsIndex
].Buffer
!= NULL
)
1658 MIDL_user_free(RightsBuffer
[RightsIndex
].Buffer
);
1661 MIDL_user_free(RightsBuffer
);
1665 if (PrivilegeSet
!= NULL
)
1666 MIDL_user_free(PrivilegeSet
);
1668 LsarClose(&AccountHandle
);
1675 NTSTATUS WINAPI
LsarAddAccountRights(
1676 LSAPR_HANDLE PolicyHandle
,
1677 PRPC_SID AccountSid
,
1678 PLSAPR_USER_RIGHT_SET UserRights
)
1681 return STATUS_NOT_IMPLEMENTED
;
1686 NTSTATUS WINAPI
LsarRemoveAccountRights(
1687 LSAPR_HANDLE PolicyHandle
,
1688 PRPC_SID AccountSid
,
1690 PLSAPR_USER_RIGHT_SET UserRights
)
1693 return STATUS_NOT_IMPLEMENTED
;
1698 NTSTATUS WINAPI
LsarQueryTrustedDomainInfo(
1699 LSAPR_HANDLE PolicyHandle
,
1700 PRPC_SID TrustedDomainSid
,
1701 TRUSTED_INFORMATION_CLASS InformationClass
,
1702 PLSAPR_TRUSTED_DOMAIN_INFO
*TrustedDomainInformation
)
1705 return STATUS_NOT_IMPLEMENTED
;
1710 NTSTATUS WINAPI
LsarSetTrustedDomainInfo(
1711 LSAPR_HANDLE PolicyHandle
,
1712 PRPC_SID TrustedDomainSid
,
1713 TRUSTED_INFORMATION_CLASS InformationClass
,
1714 PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation
)
1717 return STATUS_NOT_IMPLEMENTED
;
1722 NTSTATUS WINAPI
LsarDeleteTrustedDomain(
1723 LSAPR_HANDLE PolicyHandle
,
1724 PRPC_SID TrustedDomainSid
)
1727 return STATUS_NOT_IMPLEMENTED
;
1732 NTSTATUS WINAPI
LsarStorePrivateData(
1733 LSAPR_HANDLE PolicyHandle
,
1734 PRPC_UNICODE_STRING KeyName
,
1735 PLSAPR_CR_CIPHER_VALUE EncryptedData
)
1738 return STATUS_NOT_IMPLEMENTED
;
1743 NTSTATUS WINAPI
LsarRetrievePrivateData(
1744 LSAPR_HANDLE PolicyHandle
,
1745 PRPC_UNICODE_STRING KeyName
,
1746 PLSAPR_CR_CIPHER_VALUE
*EncryptedData
)
1749 return STATUS_NOT_IMPLEMENTED
;
1754 NTSTATUS WINAPI
LsarOpenPolicy2(
1756 PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes
,
1757 ACCESS_MASK DesiredAccess
,
1758 LSAPR_HANDLE
*PolicyHandle
)
1761 return STATUS_NOT_IMPLEMENTED
;
1766 NTSTATUS WINAPI
LsarGetUserName(
1768 PRPC_UNICODE_STRING
*UserName
,
1769 PRPC_UNICODE_STRING
*DomainName
)
1772 return STATUS_NOT_IMPLEMENTED
;
1777 NTSTATUS WINAPI
LsarQueryInformationPolicy2(
1778 LSAPR_HANDLE PolicyHandle
,
1779 POLICY_INFORMATION_CLASS InformationClass
,
1780 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
1782 return LsarQueryInformationPolicy(PolicyHandle
,
1789 NTSTATUS WINAPI
LsarSetInformationPolicy2(
1790 LSAPR_HANDLE PolicyHandle
,
1791 POLICY_INFORMATION_CLASS InformationClass
,
1792 PLSAPR_POLICY_INFORMATION PolicyInformation
)
1794 return LsarSetInformationPolicy(PolicyHandle
,
1801 NTSTATUS WINAPI
LsarQueryTrustedDomainInfoByName(
1802 LSAPR_HANDLE PolicyHandle
,
1803 PRPC_UNICODE_STRING TrustedDomainName
,
1804 POLICY_INFORMATION_CLASS InformationClass
,
1805 PLSAPR_TRUSTED_DOMAIN_INFO
*PolicyInformation
)
1808 return STATUS_NOT_IMPLEMENTED
;
1813 NTSTATUS WINAPI
LsarSetTrustedDomainInfoByName(
1814 LSAPR_HANDLE PolicyHandle
,
1815 PRPC_UNICODE_STRING TrustedDomainName
,
1816 POLICY_INFORMATION_CLASS InformationClass
,
1817 PLSAPR_TRUSTED_DOMAIN_INFO PolicyInformation
)
1820 return STATUS_NOT_IMPLEMENTED
;
1825 NTSTATUS WINAPI
LsarEnumerateTrustedDomainsEx(
1826 LSAPR_HANDLE PolicyHandle
,
1827 DWORD
*EnumerationContext
,
1828 PLSAPR_TRUSTED_ENUM_BUFFER_EX EnumerationBuffer
,
1829 DWORD PreferedMaximumLength
)
1832 return STATUS_NOT_IMPLEMENTED
;
1837 NTSTATUS WINAPI
LsarCreateTrustedDomainEx(
1838 LSAPR_HANDLE PolicyHandle
,
1839 PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation
,
1840 PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthentificationInformation
,
1841 ACCESS_MASK DesiredAccess
,
1842 LSAPR_HANDLE
*TrustedDomainHandle
)
1845 return STATUS_NOT_IMPLEMENTED
;
1850 NTSTATUS WINAPI
LsarSetPolicyReplicationHandle(
1851 PLSAPR_HANDLE PolicyHandle
)
1854 return STATUS_NOT_IMPLEMENTED
;
1859 NTSTATUS WINAPI
LsarQueryDomainInformationPolicy(
1860 LSAPR_HANDLE PolicyHandle
,
1861 POLICY_INFORMATION_CLASS InformationClass
,
1862 PLSAPR_POLICY_DOMAIN_INFORMATION
*PolicyInformation
)
1865 return STATUS_NOT_IMPLEMENTED
;
1870 NTSTATUS WINAPI
LsarSetDomainInformationPolicy(
1871 LSAPR_HANDLE PolicyHandle
,
1872 POLICY_INFORMATION_CLASS InformationClass
,
1873 PLSAPR_POLICY_DOMAIN_INFORMATION PolicyInformation
)
1876 return STATUS_NOT_IMPLEMENTED
;
1881 NTSTATUS WINAPI
LsarOpenTrustedDomainByName(
1882 LSAPR_HANDLE PolicyHandle
,
1883 PRPC_UNICODE_STRING TrustedDomainName
,
1884 ACCESS_MASK DesiredAccess
,
1885 LSAPR_HANDLE
*TrustedDomainHandle
)
1888 return STATUS_NOT_IMPLEMENTED
;
1893 NTSTATUS WINAPI
LsarTestCall(
1897 return STATUS_NOT_IMPLEMENTED
;
1902 NTSTATUS WINAPI
LsarLookupSids2(
1903 LSAPR_HANDLE PolicyHandle
,
1904 PLSAPR_SID_ENUM_BUFFER SidEnumBuffer
,
1905 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
1906 PLSAPR_TRANSLATED_NAMES_EX TranslatedNames
,
1907 LSAP_LOOKUP_LEVEL LookupLevel
,
1909 DWORD LookupOptions
,
1910 DWORD ClientRevision
)
1914 TRACE("(%p %p %p %p %d %p %lu %lu)\n",
1915 PolicyHandle
, SidEnumBuffer
, ReferencedDomains
, TranslatedNames
,
1916 LookupLevel
, MappedCount
, LookupOptions
, ClientRevision
);
1918 TranslatedNames
->Entries
= SidEnumBuffer
->Entries
;
1919 TranslatedNames
->Names
= NULL
;
1920 *ReferencedDomains
= NULL
;
1922 /* FIXME: Fail, if there is an invalid SID in the SidEnumBuffer */
1924 Status
= LsapLookupSids(SidEnumBuffer
,
1937 NTSTATUS WINAPI
LsarLookupNames2(
1938 LSAPR_HANDLE PolicyHandle
,
1940 PRPC_UNICODE_STRING Names
,
1941 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
1942 PLSAPR_TRANSLATED_SIDS_EX TranslatedSids
,
1943 LSAP_LOOKUP_LEVEL LookupLevel
,
1945 DWORD LookupOptions
,
1946 DWORD ClientRevision
)
1948 LSAPR_TRANSLATED_SIDS_EX2 TranslatedSidsEx2
;
1952 TRACE("(%p %lu %p %p %p %d %p %lu %lu)\n",
1953 PolicyHandle
, Count
, Names
, ReferencedDomains
, TranslatedSids
,
1954 LookupLevel
, MappedCount
, LookupOptions
, ClientRevision
);
1956 TranslatedSids
->Entries
= 0;
1957 TranslatedSids
->Sids
= NULL
;
1958 *ReferencedDomains
= NULL
;
1961 return STATUS_NONE_MAPPED
;
1963 TranslatedSidsEx2
.Entries
= 0;
1964 TranslatedSidsEx2
.Sids
= NULL
;
1966 Status
= LsapLookupNames(Count
,
1974 if (!NT_SUCCESS(Status
))
1977 TranslatedSids
->Entries
= TranslatedSidsEx2
.Entries
;
1978 TranslatedSids
->Sids
= MIDL_user_allocate(TranslatedSids
->Entries
* sizeof(LSA_TRANSLATED_SID
));
1979 if (TranslatedSids
->Sids
== NULL
)
1981 MIDL_user_free(TranslatedSidsEx2
.Sids
);
1982 MIDL_user_free(*ReferencedDomains
);
1983 *ReferencedDomains
= NULL
;
1984 return STATUS_INSUFFICIENT_RESOURCES
;
1987 for (i
= 0; i
< TranslatedSidsEx2
.Entries
; i
++)
1989 TranslatedSids
->Sids
[i
].Use
= TranslatedSidsEx2
.Sids
[i
].Use
;
1990 TranslatedSids
->Sids
[i
].RelativeId
= LsapGetRelativeIdFromSid(TranslatedSidsEx2
.Sids
[i
].Sid
);
1991 TranslatedSids
->Sids
[i
].DomainIndex
= TranslatedSidsEx2
.Sids
[i
].DomainIndex
;
1992 TranslatedSids
->Sids
[i
].Flags
= TranslatedSidsEx2
.Sids
[i
].Flags
;
1995 MIDL_user_free(TranslatedSidsEx2
.Sids
);
1997 return STATUS_SUCCESS
;
2002 NTSTATUS WINAPI
LsarCreateTrustedDomainEx2(
2003 LSAPR_HANDLE PolicyHandle
,
2004 PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation
,
2005 PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthentificationInformation
,
2006 ACCESS_MASK DesiredAccess
,
2007 LSAPR_HANDLE
*TrustedDomainHandle
)
2010 return STATUS_NOT_IMPLEMENTED
;
2015 NTSTATUS WINAPI
CredrWrite(
2019 return STATUS_NOT_IMPLEMENTED
;
2024 NTSTATUS WINAPI
CredrRead(
2028 return STATUS_NOT_IMPLEMENTED
;
2033 NTSTATUS WINAPI
CredrEnumerate(
2037 return STATUS_NOT_IMPLEMENTED
;
2042 NTSTATUS WINAPI
CredrWriteDomainCredentials(
2046 return STATUS_NOT_IMPLEMENTED
;
2051 NTSTATUS WINAPI
CredrReadDomainCredentials(
2055 return STATUS_NOT_IMPLEMENTED
;
2060 NTSTATUS WINAPI
CredrDelete(
2064 return STATUS_NOT_IMPLEMENTED
;
2069 NTSTATUS WINAPI
CredrGetTargetInfo(
2073 return STATUS_NOT_IMPLEMENTED
;
2078 NTSTATUS WINAPI
CredrProfileLoaded(
2082 return STATUS_NOT_IMPLEMENTED
;
2087 NTSTATUS WINAPI
LsarLookupNames3(
2088 LSAPR_HANDLE PolicyHandle
,
2090 PRPC_UNICODE_STRING Names
,
2091 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
2092 PLSAPR_TRANSLATED_SIDS_EX2 TranslatedSids
,
2093 LSAP_LOOKUP_LEVEL LookupLevel
,
2095 DWORD LookupOptions
,
2096 DWORD ClientRevision
)
2100 TRACE("(%p %lu %p %p %p %d %p %lu %lu)\n",
2101 PolicyHandle
, Count
, Names
, ReferencedDomains
, TranslatedSids
,
2102 LookupLevel
, MappedCount
, LookupOptions
, ClientRevision
);
2104 TranslatedSids
->Entries
= 0;
2105 TranslatedSids
->Sids
= NULL
;
2106 *ReferencedDomains
= NULL
;
2109 return STATUS_NONE_MAPPED
;
2111 Status
= LsapLookupNames(Count
,
2125 NTSTATUS WINAPI
CredrGetSessionTypes(
2129 return STATUS_NOT_IMPLEMENTED
;
2134 NTSTATUS WINAPI
LsarRegisterAuditEvent(
2138 return STATUS_NOT_IMPLEMENTED
;
2143 NTSTATUS WINAPI
LsarGenAuditEvent(
2147 return STATUS_NOT_IMPLEMENTED
;
2152 NTSTATUS WINAPI
LsarUnregisterAuditEvent(
2156 return STATUS_NOT_IMPLEMENTED
;
2161 NTSTATUS WINAPI
LsarQueryForestTrustInformation(
2162 LSAPR_HANDLE PolicyHandle
,
2163 PLSA_UNICODE_STRING TrustedDomainName
,
2164 LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType
,
2165 PLSA_FOREST_TRUST_INFORMATION
*ForestTrustInfo
)
2168 return STATUS_NOT_IMPLEMENTED
;
2173 NTSTATUS WINAPI
LsarSetForestTrustInformation(
2174 LSAPR_HANDLE PolicyHandle
,
2175 PLSA_UNICODE_STRING TrustedDomainName
,
2176 LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType
,
2177 PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
2179 PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
2182 return STATUS_NOT_IMPLEMENTED
;
2187 NTSTATUS WINAPI
CredrRename(
2191 return STATUS_NOT_IMPLEMENTED
;
2196 NTSTATUS WINAPI
LsarLookupSids3(
2197 LSAPR_HANDLE PolicyHandle
,
2198 PLSAPR_SID_ENUM_BUFFER SidEnumBuffer
,
2199 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
2200 PLSAPR_TRANSLATED_NAMES_EX TranslatedNames
,
2201 LSAP_LOOKUP_LEVEL LookupLevel
,
2203 DWORD LookupOptions
,
2204 DWORD ClientRevision
)
2208 TRACE("(%p %p %p %p %d %p %lu %lu)\n",
2209 PolicyHandle
, SidEnumBuffer
, ReferencedDomains
, TranslatedNames
,
2210 LookupLevel
, MappedCount
, LookupOptions
, ClientRevision
);
2212 TranslatedNames
->Entries
= SidEnumBuffer
->Entries
;
2213 TranslatedNames
->Names
= NULL
;
2214 *ReferencedDomains
= NULL
;
2216 /* FIXME: Fail, if there is an invalid SID in the SidEnumBuffer */
2218 Status
= LsapLookupSids(SidEnumBuffer
,
2231 NTSTATUS WINAPI
LsarLookupNames4(
2234 PRPC_UNICODE_STRING Names
,
2235 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
2236 PLSAPR_TRANSLATED_SIDS_EX2 TranslatedSids
,
2237 LSAP_LOOKUP_LEVEL LookupLevel
,
2239 DWORD LookupOptions
,
2240 DWORD ClientRevision
)
2244 TRACE("(%p %lu %p %p %p %d %p %lu %lu)\n",
2245 RpcHandle
, Count
, Names
, ReferencedDomains
, TranslatedSids
,
2246 LookupLevel
, MappedCount
, LookupOptions
, ClientRevision
);
2248 TranslatedSids
->Entries
= 0;
2249 TranslatedSids
->Sids
= NULL
;
2250 *ReferencedDomains
= NULL
;
2253 return STATUS_NONE_MAPPED
;
2255 Status
= LsapLookupNames(Count
,
2269 NTSTATUS WINAPI
LsarOpenPolicySce(
2273 return STATUS_NOT_IMPLEMENTED
;
2278 NTSTATUS WINAPI
LsarAdtRegisterSecurityEventSource(
2282 return STATUS_NOT_IMPLEMENTED
;
2287 NTSTATUS WINAPI
LsarAdtUnregisterSecurityEventSource(
2291 return STATUS_NOT_IMPLEMENTED
;
2296 NTSTATUS WINAPI
LsarAdtReportSecurityEvent(
2300 return STATUS_NOT_IMPLEMENTED
;
2305 NTSTATUS WINAPI
CredrFindBestCredential(
2309 return STATUS_NOT_IMPLEMENTED
;
2314 NTSTATUS WINAPI
LsarSetAuditPolicy(
2318 return STATUS_NOT_IMPLEMENTED
;
2323 NTSTATUS WINAPI
LsarQueryAuditPolicy(
2327 return STATUS_NOT_IMPLEMENTED
;
2332 NTSTATUS WINAPI
LsarEnumerateAuditPolicy(
2336 return STATUS_NOT_IMPLEMENTED
;
2341 NTSTATUS WINAPI
LsarEnumerateAuditCategories(
2345 return STATUS_NOT_IMPLEMENTED
;
2350 NTSTATUS WINAPI
LsarEnumerateAuditSubCategories(
2354 return STATUS_NOT_IMPLEMENTED
;
2359 NTSTATUS WINAPI
LsarLookupAuditCategoryName(
2363 return STATUS_NOT_IMPLEMENTED
;
2368 NTSTATUS WINAPI
LsarLookupAuditSubCategoryName(
2372 return STATUS_NOT_IMPLEMENTED
;
2377 NTSTATUS WINAPI
LsarSetAuditSecurity(
2381 return STATUS_NOT_IMPLEMENTED
;
2386 NTSTATUS WINAPI
LsarQueryAuditSecurity(
2390 return STATUS_NOT_IMPLEMENTED
;
2395 NTSTATUS WINAPI
CredReadByTokenHandle(
2399 return STATUS_NOT_IMPLEMENTED
;
2404 NTSTATUS WINAPI
CredrRestoreCredentials(
2408 return STATUS_NOT_IMPLEMENTED
;
2413 NTSTATUS WINAPI
CredrBackupCredentials(
2417 return STATUS_NOT_IMPLEMENTED
;