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 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
= {SECURITY_NT_AUTHORITY
};
554 static const UNICODE_STRING DomainName
= RTL_CONSTANT_STRING(L
"DOMAIN");
555 PLSAPR_REFERENCED_DOMAIN_LIST OutputDomains
= NULL
;
556 PLSA_TRANSLATED_SID OutputSids
= NULL
;
557 ULONG OutputSidsLength
;
563 TRACE("LsarLookupNames(%p, %lu, %p, %p, %p, %d, %p)\n",
564 PolicyHandle
, Count
, Names
, ReferencedDomains
, TranslatedSids
,
565 LookupLevel
, MappedCount
);
567 TranslatedSids
->Entries
= Count
;
568 TranslatedSids
->Sids
= NULL
;
569 *ReferencedDomains
= NULL
;
571 OutputSidsLength
= Count
* sizeof(LSA_TRANSLATED_SID
);
572 OutputSids
= MIDL_user_allocate(OutputSidsLength
);
573 if (OutputSids
== NULL
)
575 return STATUS_INSUFFICIENT_RESOURCES
;
578 RtlZeroMemory(OutputSids
, OutputSidsLength
);
580 OutputDomains
= MIDL_user_allocate(sizeof(LSAPR_REFERENCED_DOMAIN_LIST
));
581 if (OutputDomains
== NULL
)
583 MIDL_user_free(OutputSids
);
584 return STATUS_INSUFFICIENT_RESOURCES
;
587 OutputDomains
->Entries
= Count
;
588 OutputDomains
->Domains
= MIDL_user_allocate(Count
* sizeof(LSA_TRUST_INFORMATION
));
589 if (OutputDomains
->Domains
== NULL
)
591 MIDL_user_free(OutputDomains
);
592 MIDL_user_free(OutputSids
);
593 return STATUS_INSUFFICIENT_RESOURCES
;
596 Status
= RtlAllocateAndInitializeSid(&IdentifierAuthority
,
598 SECURITY_BUILTIN_DOMAIN_RID
,
599 DOMAIN_ALIAS_RID_ADMINS
,
602 if (!NT_SUCCESS(Status
))
604 MIDL_user_free(OutputDomains
->Domains
);
605 MIDL_user_free(OutputDomains
);
606 MIDL_user_free(OutputSids
);
610 SidLength
= RtlLengthSid(Sid
);
612 for (i
= 0; i
< Count
; i
++)
614 OutputDomains
->Domains
[i
].Sid
= MIDL_user_allocate(SidLength
);
615 RtlCopyMemory(OutputDomains
->Domains
[i
].Sid
, Sid
, SidLength
);
617 OutputDomains
->Domains
[i
].Name
.Buffer
= MIDL_user_allocate(DomainName
.MaximumLength
);
618 OutputDomains
->Domains
[i
].Name
.Length
= DomainName
.Length
;
619 OutputDomains
->Domains
[i
].Name
.MaximumLength
= DomainName
.MaximumLength
;
620 RtlCopyMemory(OutputDomains
->Domains
[i
].Name
.Buffer
, DomainName
.Buffer
, DomainName
.MaximumLength
);
623 for (i
= 0; i
< Count
; i
++)
625 OutputSids
[i
].Use
= SidTypeWellKnownGroup
;
626 OutputSids
[i
].RelativeId
= DOMAIN_USER_RID_ADMIN
; //DOMAIN_ALIAS_RID_ADMINS;
627 OutputSids
[i
].DomainIndex
= i
;
630 *ReferencedDomains
= OutputDomains
;
632 *MappedCount
= Count
;
634 TranslatedSids
->Entries
= Count
;
635 TranslatedSids
->Sids
= OutputSids
;
637 return STATUS_SUCCESS
;
642 NTSTATUS WINAPI
LsarLookupSids(
643 LSAPR_HANDLE PolicyHandle
,
644 PLSAPR_SID_ENUM_BUFFER SidEnumBuffer
,
645 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
646 PLSAPR_TRANSLATED_NAMES TranslatedNames
,
647 LSAP_LOOKUP_LEVEL LookupLevel
,
650 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
= {SECURITY_NT_AUTHORITY
};
651 static const UNICODE_STRING DomainName
= RTL_CONSTANT_STRING(L
"DOMAIN");
652 PLSAPR_REFERENCED_DOMAIN_LIST OutputDomains
= NULL
;
653 PLSAPR_TRANSLATED_NAME OutputNames
= NULL
;
654 ULONG OutputNamesLength
;
660 TRACE("LsarLookupSids(%p, %p, %p, %p, %d, %p)\n",
661 PolicyHandle
, SidEnumBuffer
, ReferencedDomains
, TranslatedNames
,
662 LookupLevel
, MappedCount
);
664 TranslatedNames
->Entries
= SidEnumBuffer
->Entries
;
665 TranslatedNames
->Names
= NULL
;
666 *ReferencedDomains
= NULL
;
668 OutputNamesLength
= SidEnumBuffer
->Entries
* sizeof(LSA_TRANSLATED_NAME
);
669 OutputNames
= MIDL_user_allocate(OutputNamesLength
);
670 if (OutputNames
== NULL
)
672 return STATUS_INSUFFICIENT_RESOURCES
;
675 RtlZeroMemory(OutputNames
, OutputNamesLength
);
677 OutputDomains
= MIDL_user_allocate(sizeof(LSAPR_REFERENCED_DOMAIN_LIST
));
678 if (OutputDomains
== NULL
)
680 MIDL_user_free(OutputNames
);
681 return STATUS_INSUFFICIENT_RESOURCES
;
684 OutputDomains
->Entries
= SidEnumBuffer
->Entries
;
685 OutputDomains
->Domains
= MIDL_user_allocate(SidEnumBuffer
->Entries
* sizeof(LSA_TRUST_INFORMATION
));
686 if (OutputDomains
->Domains
== NULL
)
688 MIDL_user_free(OutputDomains
);
689 MIDL_user_free(OutputNames
);
690 return STATUS_INSUFFICIENT_RESOURCES
;
693 Status
= RtlAllocateAndInitializeSid(&IdentifierAuthority
,
695 SECURITY_BUILTIN_DOMAIN_RID
,
696 DOMAIN_ALIAS_RID_ADMINS
,
699 if (!NT_SUCCESS(Status
))
701 MIDL_user_free(OutputDomains
->Domains
);
702 MIDL_user_free(OutputDomains
);
703 MIDL_user_free(OutputNames
);
707 SidLength
= RtlLengthSid(Sid
);
709 for (i
= 0; i
< SidEnumBuffer
->Entries
; i
++)
711 OutputDomains
->Domains
[i
].Sid
= MIDL_user_allocate(SidLength
);
712 RtlCopyMemory(OutputDomains
->Domains
[i
].Sid
, Sid
, SidLength
);
714 OutputDomains
->Domains
[i
].Name
.Buffer
= MIDL_user_allocate(DomainName
.MaximumLength
);
715 OutputDomains
->Domains
[i
].Name
.Length
= DomainName
.Length
;
716 OutputDomains
->Domains
[i
].Name
.MaximumLength
= DomainName
.MaximumLength
;
717 RtlCopyMemory(OutputDomains
->Domains
[i
].Name
.Buffer
, DomainName
.Buffer
, DomainName
.MaximumLength
);
720 Status
= LsapLookupSids(SidEnumBuffer
,
723 *ReferencedDomains
= OutputDomains
;
725 *MappedCount
= SidEnumBuffer
->Entries
;
727 TranslatedNames
->Entries
= SidEnumBuffer
->Entries
;
728 TranslatedNames
->Names
= OutputNames
;
735 NTSTATUS WINAPI
LsarCreateSecret(
736 LSAPR_HANDLE PolicyHandle
,
737 PRPC_UNICODE_STRING SecretName
,
738 ACCESS_MASK DesiredAccess
,
739 LSAPR_HANDLE
*SecretHandle
)
741 PLSA_DB_OBJECT PolicyObject
;
742 PLSA_DB_OBJECT SecretObject
= NULL
;
744 NTSTATUS Status
= STATUS_SUCCESS
;
746 /* Validate the PolicyHandle */
747 Status
= LsapValidateDbObject(PolicyHandle
,
749 POLICY_CREATE_SECRET
,
751 if (!NT_SUCCESS(Status
))
753 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
757 /* Get the current time */
758 Status
= NtQuerySystemTime(&Time
);
759 if (!NT_SUCCESS(Status
))
761 ERR("NtQuerySystemTime failed (Status 0x%08lx)\n", Status
);
765 /* Create the Secret object */
766 Status
= LsapCreateDbObject(PolicyObject
,
772 if (!NT_SUCCESS(Status
))
774 ERR("LsapCreateDbObject failed (Status 0x%08lx)\n", Status
);
778 /* Set the CurrentTime attribute */
779 Status
= LsapSetObjectAttribute(SecretObject
,
782 sizeof(LARGE_INTEGER
));
783 if (!NT_SUCCESS(Status
))
785 ERR("LsapSetObjectAttribute (CurrentTime) failed (Status 0x%08lx)\n", Status
);
789 /* Set the OldTime attribute */
790 Status
= LsapSetObjectAttribute(SecretObject
,
793 sizeof(LARGE_INTEGER
));
796 if (!NT_SUCCESS(Status
))
798 if (SecretObject
!= NULL
)
799 LsapCloseDbObject(SecretObject
);
803 *SecretHandle
= (LSAPR_HANDLE
)SecretObject
;
806 return STATUS_SUCCESS
;
811 NTSTATUS WINAPI
LsarOpenAccount(
812 LSAPR_HANDLE PolicyHandle
,
814 ACCESS_MASK DesiredAccess
,
815 LSAPR_HANDLE
*AccountHandle
)
817 PLSA_DB_OBJECT PolicyObject
;
818 PLSA_DB_OBJECT AccountObject
= NULL
;
819 LPWSTR SidString
= NULL
;
820 NTSTATUS Status
= STATUS_SUCCESS
;
822 /* Validate the AccountSid */
823 if (!RtlValidSid(AccountSid
))
824 return STATUS_INVALID_PARAMETER
;
826 /* Validate the PolicyHandle */
827 Status
= LsapValidateDbObject(PolicyHandle
,
831 if (!NT_SUCCESS(Status
))
833 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
837 /* Create SID string */
838 if (!ConvertSidToStringSid((PSID
)AccountSid
,
841 ERR("ConvertSidToStringSid failed\n");
842 Status
= STATUS_INVALID_PARAMETER
;
846 /* Create the Account object */
847 Status
= LsapOpenDbObject(PolicyObject
,
853 if (!NT_SUCCESS(Status
))
855 ERR("LsapOpenDbObject failed (Status 0x%08lx)\n", Status
);
859 /* Set the Sid attribute */
860 Status
= LsapSetObjectAttribute(AccountObject
,
863 GetLengthSid(AccountSid
));
866 if (SidString
!= NULL
)
867 LocalFree(SidString
);
869 if (!NT_SUCCESS(Status
))
871 if (AccountObject
!= NULL
)
872 LsapCloseDbObject(AccountObject
);
876 *AccountHandle
= (LSAPR_HANDLE
)AccountObject
;
884 NTSTATUS WINAPI
LsarEnumeratePrivilegesAccount(
885 LSAPR_HANDLE AccountHandle
,
886 PLSAPR_PRIVILEGE_SET
*Privileges
)
888 PLSA_DB_OBJECT AccountObject
;
889 ULONG PrivilegeSetSize
= 0;
890 PLSAPR_PRIVILEGE_SET PrivilegeSet
= NULL
;
895 /* Validate the AccountHandle */
896 Status
= LsapValidateDbObject(AccountHandle
,
900 if (!NT_SUCCESS(Status
))
902 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
906 /* Get the size of the privilege set */
907 Status
= LsapGetObjectAttribute(AccountObject
,
911 if (!NT_SUCCESS(Status
))
914 /* Allocate a buffer for the privilege set */
915 PrivilegeSet
= MIDL_user_allocate(PrivilegeSetSize
);
916 if (PrivilegeSet
== NULL
)
917 return STATUS_NO_MEMORY
;
919 /* Get the privilege set */
920 Status
= LsapGetObjectAttribute(AccountObject
,
924 if (!NT_SUCCESS(Status
))
926 MIDL_user_free(PrivilegeSet
);
930 /* Return a pointer to the privilege set */
931 *Privileges
= PrivilegeSet
;
933 return STATUS_SUCCESS
;
938 NTSTATUS WINAPI
LsarAddPrivilegesToAccount(
939 LSAPR_HANDLE AccountHandle
,
940 PLSAPR_PRIVILEGE_SET Privileges
)
942 PLSA_DB_OBJECT AccountObject
;
943 PPRIVILEGE_SET CurrentPrivileges
= NULL
;
944 PPRIVILEGE_SET NewPrivileges
= NULL
;
945 ULONG PrivilegeSetSize
= 0;
946 ULONG PrivilegeCount
;
951 /* Validate the AccountHandle */
952 Status
= LsapValidateDbObject(AccountHandle
,
954 ACCOUNT_ADJUST_PRIVILEGES
,
956 if (!NT_SUCCESS(Status
))
958 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
962 Status
= LsapGetObjectAttribute(AccountObject
,
966 if (!NT_SUCCESS(Status
) || PrivilegeSetSize
== 0)
968 /* The Privilgs attribute does not exist */
970 PrivilegeSetSize
= sizeof(PRIVILEGE_SET
) +
971 (Privileges
->PrivilegeCount
- 1) * sizeof(LUID_AND_ATTRIBUTES
);
972 Status
= LsapSetObjectAttribute(AccountObject
,
979 /* The Privilgs attribute exists */
981 /* Allocate memory for the stored privilege set */
982 CurrentPrivileges
= MIDL_user_allocate(PrivilegeSetSize
);
983 if (CurrentPrivileges
== NULL
)
984 return STATUS_NO_MEMORY
;
986 /* Get the current privilege set */
987 Status
= LsapGetObjectAttribute(AccountObject
,
991 if (!NT_SUCCESS(Status
))
993 TRACE("LsapGetObjectAttribute() failed (Status 0x%08lx)\n", Status
);
997 PrivilegeCount
= CurrentPrivileges
->PrivilegeCount
;
998 TRACE("Current privilege count: %lu\n", PrivilegeCount
);
1000 /* Calculate the number privileges in the combined privilege set */
1001 for (i
= 0; i
< Privileges
->PrivilegeCount
; i
++)
1004 for (j
= 0; j
< CurrentPrivileges
->PrivilegeCount
; j
++)
1006 if (RtlEqualLuid(&(Privileges
->Privilege
[i
].Luid
),
1007 &(CurrentPrivileges
->Privilege
[i
].Luid
)))
1014 if (bFound
== FALSE
)
1016 TRACE("Found new privilege\n");
1020 TRACE("New privilege count: %lu\n", PrivilegeCount
);
1022 /* Calculate the size of the new privilege set and allocate it */
1023 PrivilegeSetSize
= sizeof(PRIVILEGE_SET
) +
1024 (PrivilegeCount
- 1) * sizeof(LUID_AND_ATTRIBUTES
);
1025 NewPrivileges
= MIDL_user_allocate(PrivilegeSetSize
);
1026 if (NewPrivileges
== NULL
)
1028 Status
= STATUS_NO_MEMORY
;
1032 /* Initialize the new privilege set */
1033 NewPrivileges
->PrivilegeCount
= PrivilegeCount
;
1034 NewPrivileges
->Control
= 0;
1036 /* Copy all privileges from the current privilege set */
1037 RtlCopyLuidAndAttributesArray(CurrentPrivileges
->PrivilegeCount
,
1038 &(CurrentPrivileges
->Privilege
[0]),
1039 &(NewPrivileges
->Privilege
[0]));
1041 /* Add new privileges to the new privilege set */
1042 PrivilegeCount
= CurrentPrivileges
->PrivilegeCount
;
1043 for (i
= 0; i
< Privileges
->PrivilegeCount
; i
++)
1046 for (j
= 0; j
< CurrentPrivileges
->PrivilegeCount
; j
++)
1048 if (RtlEqualLuid(&(Privileges
->Privilege
[i
].Luid
),
1049 &(CurrentPrivileges
->Privilege
[i
].Luid
)))
1051 /* Overwrite attributes if a matching privilege was found */
1052 NewPrivileges
->Privilege
[j
].Attributes
= Privileges
->Privilege
[i
].Attributes
;
1059 if (bFound
== FALSE
)
1061 /* Copy the new privilege */
1062 RtlCopyLuidAndAttributesArray(1,
1063 (PLUID_AND_ATTRIBUTES
)&(Privileges
->Privilege
[i
]),
1064 &(NewPrivileges
->Privilege
[PrivilegeCount
]));
1069 /* Set the new priivliege set */
1070 Status
= LsapSetObjectAttribute(AccountObject
,
1077 if (CurrentPrivileges
!= NULL
)
1078 MIDL_user_free(CurrentPrivileges
);
1080 if (NewPrivileges
!= NULL
)
1081 MIDL_user_free(NewPrivileges
);
1088 NTSTATUS WINAPI
LsarRemovePrivilegesFromAccount(
1089 LSAPR_HANDLE AccountHandle
,
1091 PLSAPR_PRIVILEGE_SET Privileges
)
1094 return STATUS_NOT_IMPLEMENTED
;
1099 NTSTATUS WINAPI
LsarGetQuotasForAccount(
1100 LSAPR_HANDLE AccountHandle
,
1101 PQUOTA_LIMITS QuotaLimits
)
1104 return STATUS_NOT_IMPLEMENTED
;
1109 NTSTATUS WINAPI
LsarSetQuotasForAccount(
1110 LSAPR_HANDLE AccountHandle
,
1111 PQUOTA_LIMITS QuotaLimits
)
1114 return STATUS_NOT_IMPLEMENTED
;
1119 NTSTATUS WINAPI
LsarGetSystemAccessAccount(
1120 LSAPR_HANDLE AccountHandle
,
1121 ACCESS_MASK
*SystemAccess
)
1123 PLSA_DB_OBJECT AccountObject
;
1127 /* Validate the account handle */
1128 Status
= LsapValidateDbObject(AccountHandle
,
1132 if (!NT_SUCCESS(Status
))
1134 ERR("Invalid handle (Status %lx)\n", Status
);
1138 /* Get the system access flags */
1139 Status
= LsapGetObjectAttribute(AccountObject
,
1149 NTSTATUS WINAPI
LsarSetSystemAccessAccount(
1150 LSAPR_HANDLE AccountHandle
,
1151 ACCESS_MASK SystemAccess
)
1153 PLSA_DB_OBJECT AccountObject
;
1156 /* Validate the account handle */
1157 Status
= LsapValidateDbObject(AccountHandle
,
1159 ACCOUNT_ADJUST_SYSTEM_ACCESS
,
1161 if (!NT_SUCCESS(Status
))
1163 ERR("Invalid handle (Status %lx)\n", Status
);
1167 /* Set the system access flags */
1168 Status
= LsapSetObjectAttribute(AccountObject
,
1171 sizeof(ACCESS_MASK
));
1178 NTSTATUS WINAPI
LsarOpenTrustedDomain(
1179 LSAPR_HANDLE PolicyHandle
,
1180 PRPC_SID TrustedDomainSid
,
1181 ACCESS_MASK DesiredAccess
,
1182 LSAPR_HANDLE
*TrustedDomainHandle
)
1185 return STATUS_NOT_IMPLEMENTED
;
1190 NTSTATUS WINAPI
LsarQueryInfoTrustedDomain(
1191 LSAPR_HANDLE TrustedDomainHandle
,
1192 TRUSTED_INFORMATION_CLASS InformationClass
,
1193 PLSAPR_TRUSTED_DOMAIN_INFO
*TrustedDomainInformation
)
1196 return STATUS_NOT_IMPLEMENTED
;
1201 NTSTATUS WINAPI
LsarSetInformationTrustedDomain(
1202 LSAPR_HANDLE TrustedDomainHandle
,
1203 TRUSTED_INFORMATION_CLASS InformationClass
,
1204 PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation
)
1207 return STATUS_NOT_IMPLEMENTED
;
1212 NTSTATUS WINAPI
LsarOpenSecret(
1213 LSAPR_HANDLE PolicyHandle
,
1214 PRPC_UNICODE_STRING SecretName
,
1215 ACCESS_MASK DesiredAccess
,
1216 LSAPR_HANDLE
*SecretHandle
)
1218 PLSA_DB_OBJECT PolicyObject
;
1219 PLSA_DB_OBJECT SecretObject
= NULL
;
1220 NTSTATUS Status
= STATUS_SUCCESS
;
1222 /* Validate the PolicyHandle */
1223 Status
= LsapValidateDbObject(PolicyHandle
,
1227 if (!NT_SUCCESS(Status
))
1229 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1233 /* Create the secret object */
1234 Status
= LsapOpenDbObject(PolicyObject
,
1240 if (!NT_SUCCESS(Status
))
1242 ERR("LsapOpenDbObject failed (Status 0x%08lx)\n", Status
);
1247 if (!NT_SUCCESS(Status
))
1249 if (SecretObject
!= NULL
)
1250 LsapCloseDbObject(SecretObject
);
1254 *SecretHandle
= (LSAPR_HANDLE
)SecretObject
;
1262 NTSTATUS WINAPI
LsarSetSecret(
1263 LSAPR_HANDLE SecretHandle
,
1264 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
,
1265 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
)
1267 PLSA_DB_OBJECT SecretObject
;
1268 PBYTE CurrentValue
= NULL
;
1269 PBYTE OldValue
= NULL
;
1270 ULONG CurrentValueLength
= 0;
1271 ULONG OldValueLength
= 0;
1275 TRACE("LsarSetSecret(%p %p %p)\n", SecretHandle
,
1276 EncryptedCurrentValue
, EncryptedOldValue
);
1278 /* Validate the SecretHandle */
1279 Status
= LsapValidateDbObject(SecretHandle
,
1283 if (!NT_SUCCESS(Status
))
1285 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1289 if (EncryptedCurrentValue
!= NULL
)
1291 /* FIXME: Decrypt the current value */
1292 CurrentValue
= EncryptedCurrentValue
->Buffer
;
1293 CurrentValueLength
= EncryptedCurrentValue
->MaximumLength
;
1296 /* Set the current value */
1297 Status
= LsapSetObjectAttribute(SecretObject
,
1300 CurrentValueLength
);
1301 if (!NT_SUCCESS(Status
))
1303 ERR("LsapSetObjectAttribute failed (Status 0x%08lx)\n", Status
);
1307 /* Get the current time */
1308 Status
= NtQuerySystemTime(&Time
);
1309 if (!NT_SUCCESS(Status
))
1311 ERR("NtQuerySystemTime failed (Status 0x%08lx)\n", Status
);
1315 /* Set the current time */
1316 Status
= LsapSetObjectAttribute(SecretObject
,
1319 sizeof(LARGE_INTEGER
));
1320 if (!NT_SUCCESS(Status
))
1322 ERR("LsapSetObjectAttribute failed (Status 0x%08lx)\n", Status
);
1326 if (EncryptedOldValue
!= NULL
)
1328 /* FIXME: Decrypt the old value */
1329 OldValue
= EncryptedOldValue
->Buffer
;
1330 OldValueLength
= EncryptedOldValue
->MaximumLength
;
1333 /* Set the old value */
1334 Status
= LsapSetObjectAttribute(SecretObject
,
1338 if (!NT_SUCCESS(Status
))
1340 ERR("LsapSetObjectAttribute failed (Status 0x%08lx)\n", Status
);
1344 /* Set the old time */
1345 Status
= LsapSetObjectAttribute(SecretObject
,
1348 sizeof(LARGE_INTEGER
));
1349 if (!NT_SUCCESS(Status
))
1351 ERR("LsapSetObjectAttribute failed (Status 0x%08lx)\n", Status
);
1360 NTSTATUS WINAPI
LsarQuerySecret(
1361 LSAPR_HANDLE SecretHandle
,
1362 PLSAPR_CR_CIPHER_VALUE
*EncryptedCurrentValue
,
1363 PLARGE_INTEGER CurrentValueSetTime
,
1364 PLSAPR_CR_CIPHER_VALUE
*EncryptedOldValue
,
1365 PLARGE_INTEGER OldValueSetTime
)
1367 PLSA_DB_OBJECT SecretObject
;
1368 PLSAPR_CR_CIPHER_VALUE EncCurrentValue
= NULL
;
1369 PLSAPR_CR_CIPHER_VALUE EncOldValue
= NULL
;
1370 PBYTE CurrentValue
= NULL
;
1371 PBYTE OldValue
= NULL
;
1372 ULONG CurrentValueLength
= 0;
1373 ULONG OldValueLength
= 0;
1377 TRACE("LsarQuerySecret(%p %p %p %p %p)\n", SecretHandle
,
1378 EncryptedCurrentValue
, CurrentValueSetTime
,
1379 EncryptedOldValue
, OldValueSetTime
);
1381 /* Validate the SecretHandle */
1382 Status
= LsapValidateDbObject(SecretHandle
,
1386 if (!NT_SUCCESS(Status
))
1388 ERR("LsapValidateDbObject returned 0x%08lx\n", Status
);
1392 if (EncryptedCurrentValue
!= NULL
)
1394 CurrentValueLength
= 0;
1396 /* Get the size of the current value */
1397 Status
= LsapGetObjectAttribute(SecretObject
,
1400 &CurrentValueLength
);
1401 if (!NT_SUCCESS(Status
))
1404 /* Allocate a buffer for the current value */
1405 CurrentValue
= midl_user_allocate(CurrentValueLength
);
1406 if (CurrentValue
== NULL
)
1408 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1412 /* Get the current value */
1413 Status
= LsapGetObjectAttribute(SecretObject
,
1416 &CurrentValueLength
);
1417 if (!NT_SUCCESS(Status
))
1420 /* Allocate a buffer for the encrypted current value */
1421 EncCurrentValue
= midl_user_allocate(sizeof(LSAPR_CR_CIPHER_VALUE
));
1422 if (EncCurrentValue
== NULL
)
1424 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1428 /* FIXME: Encrypt the current value */
1429 EncCurrentValue
->Length
= (USHORT
)(CurrentValueLength
- sizeof(WCHAR
));
1430 EncCurrentValue
->MaximumLength
= (USHORT
)CurrentValueLength
;
1431 EncCurrentValue
->Buffer
= (PBYTE
)CurrentValue
;
1434 if (CurrentValueSetTime
!= NULL
)
1436 BufferSize
= sizeof(LARGE_INTEGER
);
1438 /* Get the current value time */
1439 Status
= LsapGetObjectAttribute(SecretObject
,
1441 (PBYTE
)CurrentValueSetTime
,
1443 if (!NT_SUCCESS(Status
))
1447 if (EncryptedOldValue
!= NULL
)
1451 /* Get the size of the old value */
1452 Status
= LsapGetObjectAttribute(SecretObject
,
1456 if (!NT_SUCCESS(Status
))
1459 /* Allocate a buffer for the old value */
1460 OldValue
= midl_user_allocate(OldValueLength
);
1461 if (OldValue
== NULL
)
1463 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1467 /* Get the old value */
1468 Status
= LsapGetObjectAttribute(SecretObject
,
1472 if (!NT_SUCCESS(Status
))
1475 /* Allocate a buffer for the encrypted old value */
1476 EncOldValue
= midl_user_allocate(sizeof(LSAPR_CR_CIPHER_VALUE
) + OldValueLength
);
1477 if (EncOldValue
== NULL
)
1479 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1483 /* FIXME: Encrypt the old value */
1484 EncOldValue
->Length
= (USHORT
)(OldValueLength
- sizeof(WCHAR
));
1485 EncOldValue
->MaximumLength
= (USHORT
)OldValueLength
;
1486 EncOldValue
->Buffer
= (PBYTE
)OldValue
;
1489 if (OldValueSetTime
!= NULL
)
1491 BufferSize
= sizeof(LARGE_INTEGER
);
1493 /* Get the old value time */
1494 Status
= LsapGetObjectAttribute(SecretObject
,
1496 (PBYTE
)OldValueSetTime
,
1498 if (!NT_SUCCESS(Status
))
1504 if (NT_SUCCESS(Status
))
1506 if (EncryptedCurrentValue
!= NULL
)
1507 *EncryptedCurrentValue
= EncCurrentValue
;
1509 if (EncryptedOldValue
!= NULL
)
1510 *EncryptedOldValue
= EncOldValue
;
1514 if (EncryptedCurrentValue
!= NULL
)
1515 *EncryptedCurrentValue
= NULL
;
1517 if (EncryptedOldValue
!= NULL
)
1518 *EncryptedOldValue
= NULL
;
1520 if (EncCurrentValue
!= NULL
)
1521 midl_user_free(EncCurrentValue
);
1523 if (EncOldValue
!= NULL
)
1524 midl_user_free(EncOldValue
);
1526 if (CurrentValue
!= NULL
)
1527 midl_user_free(CurrentValue
);
1529 if (OldValue
!= NULL
)
1530 midl_user_free(OldValue
);
1533 TRACE("LsarQuerySecret done (Status 0x%08lx)\n", Status
);
1540 NTSTATUS WINAPI
LsarLookupPrivilegeValue(
1541 LSAPR_HANDLE PolicyHandle
,
1542 PRPC_UNICODE_STRING Name
,
1547 TRACE("LsarLookupPrivilegeValue(%p, %wZ, %p)\n",
1548 PolicyHandle
, Name
, Value
);
1550 Status
= LsapValidateDbObject(PolicyHandle
,
1552 POLICY_LOOKUP_NAMES
,
1554 if (!NT_SUCCESS(Status
))
1556 ERR("Invalid handle (Status %lx)\n", Status
);
1560 TRACE("Privilege: %wZ\n", Name
);
1562 Status
= LsarpLookupPrivilegeValue((PUNICODE_STRING
)Name
,
1570 NTSTATUS WINAPI
LsarLookupPrivilegeName(
1571 LSAPR_HANDLE PolicyHandle
,
1573 PRPC_UNICODE_STRING
*Name
)
1577 TRACE("LsarLookupPrivilegeName(%p, %p, %p)\n",
1578 PolicyHandle
, Value
, Name
);
1580 Status
= LsapValidateDbObject(PolicyHandle
,
1582 POLICY_LOOKUP_NAMES
,
1584 if (!NT_SUCCESS(Status
))
1586 ERR("Invalid handle\n");
1590 Status
= LsarpLookupPrivilegeName(Value
, (PUNICODE_STRING
*)Name
);
1597 NTSTATUS WINAPI
LsarLookupPrivilegeDisplayName(
1598 LSAPR_HANDLE PolicyHandle
,
1599 PRPC_UNICODE_STRING Name
,
1600 USHORT ClientLanguage
,
1601 USHORT ClientSystemDefaultLanguage
,
1602 PRPC_UNICODE_STRING
*DisplayName
,
1603 USHORT
*LanguageReturned
)
1606 return STATUS_NOT_IMPLEMENTED
;
1611 NTSTATUS WINAPI
LsarDeleteObject(
1612 LSAPR_HANDLE
*ObjectHandle
)
1615 return STATUS_NOT_IMPLEMENTED
;
1620 NTSTATUS WINAPI
LsarEnumerateAccountsWithUserRight(
1621 LSAPR_HANDLE PolicyHandle
,
1622 PRPC_UNICODE_STRING UserRight
,
1623 PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer
)
1626 return STATUS_NOT_IMPLEMENTED
;
1631 NTSTATUS WINAPI
LsarEnumerateAccountRights(
1632 LSAPR_HANDLE PolicyHandle
,
1633 PRPC_SID AccountSid
,
1634 PLSAPR_USER_RIGHT_SET UserRights
)
1636 PLSA_DB_OBJECT PolicyObject
;
1639 TRACE("LsarEnumerateAccountRights(%p %p %p)\n",
1640 PolicyHandle
, AccountSid
, UserRights
);
1642 Status
= LsapValidateDbObject(PolicyHandle
,
1646 if (!NT_SUCCESS(Status
))
1649 UserRights
->Entries
= 0;
1650 UserRights
->UserRights
= NULL
;
1651 return STATUS_OBJECT_NAME_NOT_FOUND
;
1656 NTSTATUS WINAPI
LsarAddAccountRights(
1657 LSAPR_HANDLE PolicyHandle
,
1658 PRPC_SID AccountSid
,
1659 PLSAPR_USER_RIGHT_SET UserRights
)
1662 return STATUS_NOT_IMPLEMENTED
;
1667 NTSTATUS WINAPI
LsarRemoveAccountRights(
1668 LSAPR_HANDLE PolicyHandle
,
1669 PRPC_SID AccountSid
,
1671 PLSAPR_USER_RIGHT_SET UserRights
)
1674 return STATUS_NOT_IMPLEMENTED
;
1679 NTSTATUS WINAPI
LsarQueryTrustedDomainInfo(
1680 LSAPR_HANDLE PolicyHandle
,
1681 PRPC_SID TrustedDomainSid
,
1682 TRUSTED_INFORMATION_CLASS InformationClass
,
1683 PLSAPR_TRUSTED_DOMAIN_INFO
*TrustedDomainInformation
)
1686 return STATUS_NOT_IMPLEMENTED
;
1691 NTSTATUS WINAPI
LsarSetTrustedDomainInfo(
1692 LSAPR_HANDLE PolicyHandle
,
1693 PRPC_SID TrustedDomainSid
,
1694 TRUSTED_INFORMATION_CLASS InformationClass
,
1695 PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation
)
1698 return STATUS_NOT_IMPLEMENTED
;
1703 NTSTATUS WINAPI
LsarDeleteTrustedDomain(
1704 LSAPR_HANDLE PolicyHandle
,
1705 PRPC_SID TrustedDomainSid
)
1708 return STATUS_NOT_IMPLEMENTED
;
1713 NTSTATUS WINAPI
LsarStorePrivateData(
1714 LSAPR_HANDLE PolicyHandle
,
1715 PRPC_UNICODE_STRING KeyName
,
1716 PLSAPR_CR_CIPHER_VALUE EncryptedData
)
1719 return STATUS_NOT_IMPLEMENTED
;
1724 NTSTATUS WINAPI
LsarRetrievePrivateData(
1725 LSAPR_HANDLE PolicyHandle
,
1726 PRPC_UNICODE_STRING KeyName
,
1727 PLSAPR_CR_CIPHER_VALUE
*EncryptedData
)
1730 return STATUS_NOT_IMPLEMENTED
;
1735 NTSTATUS WINAPI
LsarOpenPolicy2(
1737 PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes
,
1738 ACCESS_MASK DesiredAccess
,
1739 LSAPR_HANDLE
*PolicyHandle
)
1742 return STATUS_NOT_IMPLEMENTED
;
1747 NTSTATUS WINAPI
LsarGetUserName(
1749 PRPC_UNICODE_STRING
*UserName
,
1750 PRPC_UNICODE_STRING
*DomainName
)
1753 return STATUS_NOT_IMPLEMENTED
;
1758 NTSTATUS WINAPI
LsarQueryInformationPolicy2(
1759 LSAPR_HANDLE PolicyHandle
,
1760 POLICY_INFORMATION_CLASS InformationClass
,
1761 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
1763 return LsarQueryInformationPolicy(PolicyHandle
,
1770 NTSTATUS WINAPI
LsarSetInformationPolicy2(
1771 LSAPR_HANDLE PolicyHandle
,
1772 POLICY_INFORMATION_CLASS InformationClass
,
1773 PLSAPR_POLICY_INFORMATION PolicyInformation
)
1775 return LsarSetInformationPolicy(PolicyHandle
,
1782 NTSTATUS WINAPI
LsarQueryTrustedDomainInfoByName(
1783 LSAPR_HANDLE PolicyHandle
,
1784 PRPC_UNICODE_STRING TrustedDomainName
,
1785 POLICY_INFORMATION_CLASS InformationClass
,
1786 PLSAPR_TRUSTED_DOMAIN_INFO
*PolicyInformation
)
1789 return STATUS_NOT_IMPLEMENTED
;
1794 NTSTATUS WINAPI
LsarSetTrustedDomainInfoByName(
1795 LSAPR_HANDLE PolicyHandle
,
1796 PRPC_UNICODE_STRING TrustedDomainName
,
1797 POLICY_INFORMATION_CLASS InformationClass
,
1798 PLSAPR_TRUSTED_DOMAIN_INFO PolicyInformation
)
1801 return STATUS_NOT_IMPLEMENTED
;
1806 NTSTATUS WINAPI
LsarEnumerateTrustedDomainsEx(
1807 LSAPR_HANDLE PolicyHandle
,
1808 DWORD
*EnumerationContext
,
1809 PLSAPR_TRUSTED_ENUM_BUFFER_EX EnumerationBuffer
,
1810 DWORD PreferedMaximumLength
)
1813 return STATUS_NOT_IMPLEMENTED
;
1818 NTSTATUS WINAPI
LsarCreateTrustedDomainEx(
1819 LSAPR_HANDLE PolicyHandle
,
1820 PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation
,
1821 PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthentificationInformation
,
1822 ACCESS_MASK DesiredAccess
,
1823 LSAPR_HANDLE
*TrustedDomainHandle
)
1826 return STATUS_NOT_IMPLEMENTED
;
1831 NTSTATUS WINAPI
LsarSetPolicyReplicationHandle(
1832 PLSAPR_HANDLE PolicyHandle
)
1835 return STATUS_NOT_IMPLEMENTED
;
1840 NTSTATUS WINAPI
LsarQueryDomainInformationPolicy(
1841 LSAPR_HANDLE PolicyHandle
,
1842 POLICY_INFORMATION_CLASS InformationClass
,
1843 PLSAPR_POLICY_DOMAIN_INFORMATION
*PolicyInformation
)
1846 return STATUS_NOT_IMPLEMENTED
;
1851 NTSTATUS WINAPI
LsarSetDomainInformationPolicy(
1852 LSAPR_HANDLE PolicyHandle
,
1853 POLICY_INFORMATION_CLASS InformationClass
,
1854 PLSAPR_POLICY_DOMAIN_INFORMATION PolicyInformation
)
1857 return STATUS_NOT_IMPLEMENTED
;
1862 NTSTATUS WINAPI
LsarOpenTrustedDomainByName(
1863 LSAPR_HANDLE PolicyHandle
,
1864 PRPC_UNICODE_STRING TrustedDomainName
,
1865 ACCESS_MASK DesiredAccess
,
1866 LSAPR_HANDLE
*TrustedDomainHandle
)
1869 return STATUS_NOT_IMPLEMENTED
;
1874 NTSTATUS WINAPI
LsarTestCall(
1878 return STATUS_NOT_IMPLEMENTED
;
1883 NTSTATUS WINAPI
LsarLookupSids2(
1884 LSAPR_HANDLE PolicyHandle
,
1885 PLSAPR_SID_ENUM_BUFFER SidEnumBuffer
,
1886 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
1887 PLSAPR_TRANSLATED_NAMES_EX TranslatedNames
,
1888 LSAP_LOOKUP_LEVEL LookupLevel
,
1890 DWORD LookupOptions
,
1891 DWORD ClientRevision
)
1894 return STATUS_NOT_IMPLEMENTED
;
1899 NTSTATUS WINAPI
LsarLookupNames2(
1900 LSAPR_HANDLE PolicyHandle
,
1902 PRPC_UNICODE_STRING Names
,
1903 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
1904 PLSAPR_TRANSLATED_SIDS_EX TranslatedSids
,
1905 LSAP_LOOKUP_LEVEL LookupLevel
,
1907 DWORD LookupOptions
,
1908 DWORD ClientRevision
)
1911 return STATUS_NOT_IMPLEMENTED
;
1916 NTSTATUS WINAPI
LsarCreateTrustedDomainEx2(
1917 LSAPR_HANDLE PolicyHandle
,
1918 PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation
,
1919 PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthentificationInformation
,
1920 ACCESS_MASK DesiredAccess
,
1921 LSAPR_HANDLE
*TrustedDomainHandle
)
1924 return STATUS_NOT_IMPLEMENTED
;
1929 NTSTATUS WINAPI
CredrWrite(
1933 return STATUS_NOT_IMPLEMENTED
;
1938 NTSTATUS WINAPI
CredrRead(
1942 return STATUS_NOT_IMPLEMENTED
;
1947 NTSTATUS WINAPI
CredrEnumerate(
1951 return STATUS_NOT_IMPLEMENTED
;
1956 NTSTATUS WINAPI
CredrWriteDomainCredentials(
1960 return STATUS_NOT_IMPLEMENTED
;
1965 NTSTATUS WINAPI
CredrReadDomainCredentials(
1969 return STATUS_NOT_IMPLEMENTED
;
1974 NTSTATUS WINAPI
CredrDelete(
1978 return STATUS_NOT_IMPLEMENTED
;
1983 NTSTATUS WINAPI
CredrGetTargetInfo(
1987 return STATUS_NOT_IMPLEMENTED
;
1992 NTSTATUS WINAPI
CredrProfileLoaded(
1996 return STATUS_NOT_IMPLEMENTED
;
2001 NTSTATUS WINAPI
LsarLookupNames3(
2002 LSAPR_HANDLE PolicyHandle
,
2004 PRPC_UNICODE_STRING Names
,
2005 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
2006 PLSAPR_TRANSLATED_SIDS_EX2 TranslatedSids
,
2007 LSAP_LOOKUP_LEVEL LookupLevel
,
2009 DWORD LookupOptions
,
2010 DWORD ClientRevision
)
2014 TRACE("LsarLookupNames3(%p, %lu, %p, %p, %p, %d, %p, %lu, %lu)\n",
2015 PolicyHandle
, Count
, Names
, ReferencedDomains
, TranslatedSids
,
2016 LookupLevel
, MappedCount
, LookupOptions
, ClientRevision
);
2018 TranslatedSids
->Entries
= 0;
2019 TranslatedSids
->Sids
= NULL
;
2020 *ReferencedDomains
= NULL
;
2023 return STATUS_NONE_MAPPED
;
2025 Status
= LsapLookupNames(Count
,
2039 NTSTATUS WINAPI
CredrGetSessionTypes(
2043 return STATUS_NOT_IMPLEMENTED
;
2048 NTSTATUS WINAPI
LsarRegisterAuditEvent(
2052 return STATUS_NOT_IMPLEMENTED
;
2057 NTSTATUS WINAPI
LsarGenAuditEvent(
2061 return STATUS_NOT_IMPLEMENTED
;
2066 NTSTATUS WINAPI
LsarUnregisterAuditEvent(
2070 return STATUS_NOT_IMPLEMENTED
;
2075 NTSTATUS WINAPI
LsarQueryForestTrustInformation(
2076 LSAPR_HANDLE PolicyHandle
,
2077 PLSA_UNICODE_STRING TrustedDomainName
,
2078 LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType
,
2079 PLSA_FOREST_TRUST_INFORMATION
*ForestTrustInfo
)
2082 return STATUS_NOT_IMPLEMENTED
;
2087 NTSTATUS WINAPI
LsarSetForestTrustInformation(
2088 LSAPR_HANDLE PolicyHandle
,
2089 PLSA_UNICODE_STRING TrustedDomainName
,
2090 LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType
,
2091 PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
2093 PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
2096 return STATUS_NOT_IMPLEMENTED
;
2101 NTSTATUS WINAPI
CredrRename(
2105 return STATUS_NOT_IMPLEMENTED
;
2110 NTSTATUS WINAPI
LsarLookupSids3(
2111 LSAPR_HANDLE PolicyHandle
,
2112 PLSAPR_SID_ENUM_BUFFER SidEnumBuffer
,
2113 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
2114 PLSAPR_TRANSLATED_NAMES_EX TranslatedNames
,
2115 LSAP_LOOKUP_LEVEL LookupLevel
,
2117 DWORD LookupOptions
,
2118 DWORD ClientRevision
)
2121 return STATUS_NOT_IMPLEMENTED
;
2126 NTSTATUS WINAPI
LsarLookupNames4(
2129 PRPC_UNICODE_STRING Names
,
2130 PLSAPR_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
2131 PLSAPR_TRANSLATED_SIDS_EX2 TranslatedSids
,
2132 LSAP_LOOKUP_LEVEL LookupLevel
,
2134 DWORD LookupOptions
,
2135 DWORD ClientRevision
)
2138 return STATUS_NOT_IMPLEMENTED
;
2143 NTSTATUS WINAPI
LsarOpenPolicySce(
2147 return STATUS_NOT_IMPLEMENTED
;
2152 NTSTATUS WINAPI
LsarAdtRegisterSecurityEventSource(
2156 return STATUS_NOT_IMPLEMENTED
;
2161 NTSTATUS WINAPI
LsarAdtUnregisterSecurityEventSource(
2165 return STATUS_NOT_IMPLEMENTED
;
2170 NTSTATUS WINAPI
LsarAdtReportSecurityEvent(
2174 return STATUS_NOT_IMPLEMENTED
;
2179 NTSTATUS WINAPI
CredrFindBestCredential(
2183 return STATUS_NOT_IMPLEMENTED
;
2188 NTSTATUS WINAPI
LsarSetAuditPolicy(
2192 return STATUS_NOT_IMPLEMENTED
;
2197 NTSTATUS WINAPI
LsarQueryAuditPolicy(
2201 return STATUS_NOT_IMPLEMENTED
;
2206 NTSTATUS WINAPI
LsarEnumerateAuditPolicy(
2210 return STATUS_NOT_IMPLEMENTED
;
2215 NTSTATUS WINAPI
LsarEnumerateAuditCategories(
2219 return STATUS_NOT_IMPLEMENTED
;
2224 NTSTATUS WINAPI
LsarEnumerateAuditSubCategories(
2228 return STATUS_NOT_IMPLEMENTED
;
2233 NTSTATUS WINAPI
LsarLookupAuditCategoryName(
2237 return STATUS_NOT_IMPLEMENTED
;
2242 NTSTATUS WINAPI
LsarLookupAuditSubCategoryName(
2246 return STATUS_NOT_IMPLEMENTED
;
2251 NTSTATUS WINAPI
LsarSetAuditSecurity(
2255 return STATUS_NOT_IMPLEMENTED
;
2260 NTSTATUS WINAPI
LsarQueryAuditSecurity(
2264 return STATUS_NOT_IMPLEMENTED
;
2269 NTSTATUS WINAPI
CredReadByTokenHandle(
2273 return STATUS_NOT_IMPLEMENTED
;
2278 NTSTATUS WINAPI
CredrRestoreCredentials(
2282 return STATUS_NOT_IMPLEMENTED
;
2287 NTSTATUS WINAPI
CredrBackupCredentials(
2291 return STATUS_NOT_IMPLEMENTED
;