2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: dll/win32/advapi32/sec/lsa.c
5 * PURPOSE: Local security authority functions
6 * PROGRAMMER: Emanuele Aliberti
10 * 20030202 KJK compressed stubs
17 WINE_DEFAULT_DEBUG_CHANNEL(advapi
);
21 LsapIsLocalComputer(PLSA_UNICODE_STRING ServerName
)
23 DWORD dwSize
= MAX_COMPUTERNAME_LENGTH
+ 1;
27 if (ServerName
== NULL
|| ServerName
->Length
== 0 || ServerName
->Buffer
== NULL
)
30 buf
= HeapAlloc(GetProcessHeap(), 0, dwSize
* sizeof(WCHAR
));
31 Result
= GetComputerNameW(buf
, &dwSize
);
32 if (Result
&& (ServerName
->Buffer
[0] == '\\') && (ServerName
->Buffer
[1] == '\\'))
34 Result
= Result
&& !lstrcmpW(ServerName
->Buffer
, buf
);
35 HeapFree(GetProcessHeap(), 0, buf
);
43 PLSAPR_SERVER_NAME_bind(PLSAPR_SERVER_NAME pszSystemName
)
45 handle_t hBinding
= NULL
;
46 LPWSTR pszStringBinding
;
49 TRACE("PLSAPR_SERVER_NAME_bind() called\n");
51 status
= RpcStringBindingComposeW(NULL
,
59 TRACE("RpcStringBindingCompose returned 0x%x\n", status
);
63 /* Set the binding handle that will be used to bind to the server. */
64 status
= RpcBindingFromStringBindingW(pszStringBinding
,
68 TRACE("RpcBindingFromStringBinding returned 0x%x\n", status
);
71 status
= RpcStringFreeW(&pszStringBinding
);
74 TRACE("RpcStringFree returned 0x%x\n", status
);
83 PLSAPR_SERVER_NAME_unbind(PLSAPR_SERVER_NAME pszSystemName
,
88 TRACE("PLSAPR_SERVER_NAME_unbind() called\n");
90 status
= RpcBindingFree(&hBinding
);
93 TRACE("RpcBindingFree returned 0x%x\n", status
);
103 LsaAddAccountRights(IN LSA_HANDLE PolicyHandle
,
105 IN PLSA_UNICODE_STRING UserRights
,
106 IN ULONG CountOfRights
)
108 LSAPR_USER_RIGHT_SET UserRightSet
;
111 TRACE("LsaAddAccountRights(%p %p %p 0x%08x)\n",
112 PolicyHandle
, AccountSid
, UserRights
, CountOfRights
);
114 UserRightSet
.Entries
= CountOfRights
;
115 UserRightSet
.UserRights
= (PRPC_UNICODE_STRING
)UserRights
;
119 Status
= LsarAddAccountRights((LSAPR_HANDLE
)PolicyHandle
,
120 (PRPC_SID
)AccountSid
,
124 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
126 Status
= I_RpcMapWin32Status(RpcExceptionCode());
139 LsaAddPrivilegesToAccount(IN LSA_HANDLE AccountHandle
,
140 IN PPRIVILEGE_SET PrivilegeSet
)
144 TRACE("LsaAddPrivilegesToAccount(%p %p)\n",
145 AccountHandle
, PrivilegeSet
);
149 Status
= LsarAddPrivilegesToAccount((LSAPR_HANDLE
)AccountHandle
,
150 (PLSAPR_PRIVILEGE_SET
)PrivilegeSet
);
152 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
154 Status
= I_RpcMapWin32Status(RpcExceptionCode());
167 LsaClearAuditLog(IN LSA_HANDLE PolicyHandle
)
171 TRACE("LsaClearAuditLog(%p)\n", PolicyHandle
);
175 Status
= LsarClearAuditLog((LSAPR_HANDLE
)PolicyHandle
);
177 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
179 Status
= I_RpcMapWin32Status(RpcExceptionCode());
192 LsaClose(IN LSA_HANDLE ObjectHandle
)
196 TRACE("LsaClose(%p) called\n", ObjectHandle
);
200 Status
= LsarClose((PLSAPR_HANDLE
)&ObjectHandle
);
202 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
204 Status
= I_RpcMapWin32Status(RpcExceptionCode());
217 LsaCreateAccount(IN LSA_HANDLE PolicyHandle
,
219 IN ACCESS_MASK DesiredAccess
,
220 OUT PLSA_HANDLE AccountHandle
)
224 TRACE("LsaCreateAccount(%p %p 0x%08lx %p)\n",
225 PolicyHandle
, AccountSid
, DesiredAccess
, AccountHandle
);
229 Status
= LsarCreateAccount((LSAPR_HANDLE
)PolicyHandle
,
234 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
236 Status
= I_RpcMapWin32Status(RpcExceptionCode());
249 LsaCreateSecret(IN LSA_HANDLE PolicyHandle
,
250 IN PLSA_UNICODE_STRING SecretName
,
251 IN ACCESS_MASK DesiredAccess
,
252 OUT PLSA_HANDLE SecretHandle
)
256 TRACE("LsaCreateSecret(%p %p 0x%08lx %p)\n",
257 PolicyHandle
, SecretName
, DesiredAccess
, SecretHandle
);
261 Status
= LsarCreateSecret((LSAPR_HANDLE
)PolicyHandle
,
262 (PRPC_UNICODE_STRING
)SecretName
,
266 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
268 Status
= I_RpcMapWin32Status(RpcExceptionCode());
281 LsaCreateTrustedDomain(IN LSA_HANDLE PolicyHandle
,
282 IN PLSA_TRUST_INFORMATION TrustedDomainInformation
,
283 IN ACCESS_MASK DesiredAccess
,
284 OUT PLSA_HANDLE TrustedDomainHandle
)
288 TRACE("LsaCreateTrustedDomain(%p %p 0x%08lx %p)\n",
289 PolicyHandle
, TrustedDomainInformation
, DesiredAccess
, TrustedDomainHandle
);
293 Status
= LsarCreateTrustedDomain((LSAPR_HANDLE
)PolicyHandle
,
294 (PLSAPR_TRUST_INFORMATION
)TrustedDomainInformation
,
296 (PLSAPR_HANDLE
)TrustedDomainHandle
);
298 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
300 Status
= I_RpcMapWin32Status(RpcExceptionCode());
313 LsaCreateTrustedDomainEx(IN LSA_HANDLE PolicyHandle
,
314 IN PTRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation
,
315 IN PTRUSTED_DOMAIN_AUTH_INFORMATION AuthenticationInformation
,
316 IN ACCESS_MASK DesiredAccess
,
317 OUT PLSA_HANDLE TrustedDomainHandle
)
319 PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL EncryptedAuthInfo
= NULL
;
322 TRACE("LsaCreateTrustedDomainEx(%p %p %p 0x%08lx %p) stub\n",
323 PolicyHandle
, TrustedDomainInformation
, AuthenticationInformation
,
324 DesiredAccess
, TrustedDomainHandle
);
328 /* FIXME: Encrypt AuthenticationInformation */
330 Status
= LsarCreateTrustedDomainEx2((LSAPR_HANDLE
)PolicyHandle
,
331 (PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX
)TrustedDomainInformation
,
334 (PLSAPR_HANDLE
)TrustedDomainHandle
);
336 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
338 Status
= I_RpcMapWin32Status(RpcExceptionCode());
351 LsaDelete(IN LSA_HANDLE ObjectHandle
)
355 TRACE("LsaDelete(%p)\n", ObjectHandle
);
359 Status
= LsarDelete((LSAPR_HANDLE
)ObjectHandle
);
361 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
363 Status
= I_RpcMapWin32Status(RpcExceptionCode());
376 LsaDeleteTrustedDomain(IN LSA_HANDLE PolicyHandle
,
377 IN PSID TrustedDomainSid
)
381 TRACE("LsaDeleteTrustedDomain(%p %p)\n",
382 PolicyHandle
, TrustedDomainSid
);
386 Status
= LsarDeleteTrustedDomain((LSAPR_HANDLE
)PolicyHandle
,
389 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
391 Status
= I_RpcMapWin32Status(RpcExceptionCode());
404 LsaEnumerateAccountRights(IN LSA_HANDLE PolicyHandle
,
406 OUT PLSA_UNICODE_STRING
*UserRights
,
407 OUT PULONG CountOfRights
)
409 LSAPR_USER_RIGHT_SET UserRightsSet
;
412 TRACE("LsaEnumerateAccountRights(%p %p %p %p)\n",
413 PolicyHandle
, AccountSid
, UserRights
, CountOfRights
);
415 UserRightsSet
.Entries
= 0;
416 UserRightsSet
.UserRights
= NULL
;
420 Status
= LsarEnumerateAccountRights((LSAPR_HANDLE
)PolicyHandle
,
424 *UserRights
= (PUNICODE_STRING
)UserRightsSet
.UserRights
;
425 *CountOfRights
= UserRightsSet
.Entries
;
427 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
429 Status
= I_RpcMapWin32Status(RpcExceptionCode());
431 if (UserRightsSet
.UserRights
!= NULL
)
432 MIDL_user_free(UserRightsSet
.UserRights
);
445 LsaEnumerateAccounts(IN LSA_HANDLE PolicyHandle
,
446 IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext
,
448 IN ULONG PreferedMaximumLength
,
449 OUT PULONG CountReturned
)
451 LSAPR_ACCOUNT_ENUM_BUFFER AccountEnumBuffer
;
454 TRACE("LsaEnumerateAccounts(%p %p %p %lu %p)\n",
455 PolicyHandle
, EnumerationContext
, Buffer
,
456 PreferedMaximumLength
, CountReturned
);
458 AccountEnumBuffer
.EntriesRead
= 0;
459 AccountEnumBuffer
.Information
= NULL
;
463 Status
= LsarEnumerateAccounts((LSAPR_HANDLE
)PolicyHandle
,
466 PreferedMaximumLength
);
468 *Buffer
= AccountEnumBuffer
.Information
;
469 *CountReturned
= AccountEnumBuffer
.EntriesRead
;
471 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
473 if (AccountEnumBuffer
.Information
!= NULL
)
474 MIDL_user_free(AccountEnumBuffer
.Information
);
476 Status
= I_RpcMapWin32Status(RpcExceptionCode());
489 LsaEnumerateAccountsWithUserRight(IN LSA_HANDLE PolicyHandle
,
490 IN PLSA_UNICODE_STRING UserRight OPTIONAL
,
492 OUT PULONG CountReturned
)
494 LSAPR_ACCOUNT_ENUM_BUFFER AccountEnumBuffer
;
497 TRACE("LsaEnumerateAccountsWithUserRight(%p %p %p %p) stub\n",
498 PolicyHandle
, UserRight
, Buffer
, CountReturned
);
500 AccountEnumBuffer
.EntriesRead
= 0;
501 AccountEnumBuffer
.Information
= NULL
;
505 Status
= LsarEnumerateAccountsWithUserRight((LSAPR_HANDLE
)PolicyHandle
,
506 (PRPC_UNICODE_STRING
)UserRight
,
509 *Buffer
= AccountEnumBuffer
.Information
;
510 *CountReturned
= AccountEnumBuffer
.EntriesRead
;
512 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
514 if (AccountEnumBuffer
.Information
!= NULL
)
515 MIDL_user_free(AccountEnumBuffer
.Information
);
517 Status
= I_RpcMapWin32Status(RpcExceptionCode());
530 LsaEnumeratePrivileges(IN LSA_HANDLE PolicyHandle
,
531 IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext
,
533 IN ULONG PreferedMaximumLength
,
534 OUT PULONG CountReturned
)
536 LSAPR_PRIVILEGE_ENUM_BUFFER PrivilegeEnumBuffer
;
539 TRACE("LsaEnumeratePrivileges(%p %p %p %lu %p)\n",
540 PolicyHandle
, EnumerationContext
, Buffer
,
541 PreferedMaximumLength
, CountReturned
);
543 PrivilegeEnumBuffer
.Entries
= 0;
544 PrivilegeEnumBuffer
.Privileges
= NULL
;
548 Status
= LsarEnumeratePrivileges((LSAPR_HANDLE
)PolicyHandle
,
550 &PrivilegeEnumBuffer
,
551 PreferedMaximumLength
);
553 *Buffer
= PrivilegeEnumBuffer
.Privileges
;
554 *CountReturned
= PrivilegeEnumBuffer
.Entries
;
557 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
559 if (PrivilegeEnumBuffer
.Privileges
!= NULL
)
560 MIDL_user_free(PrivilegeEnumBuffer
.Privileges
);
562 Status
= I_RpcMapWin32Status(RpcExceptionCode());
575 LsaEnumeratePrivilegesOfAccount(IN LSA_HANDLE AccountHandle
,
576 OUT PPRIVILEGE_SET
*Privileges
)
580 TRACE("LsaEnumeratePrivilegesOfAccount(%p %p)\n",
581 AccountHandle
, Privileges
);
585 Status
= LsarEnumeratePrivilegesAccount((LSAPR_HANDLE
)AccountHandle
,
586 (LSAPR_PRIVILEGE_SET
**)Privileges
);
588 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
590 Status
= I_RpcMapWin32Status(RpcExceptionCode());
603 LsaEnumerateTrustedDomains(IN LSA_HANDLE PolicyHandle
,
604 IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext
,
606 IN ULONG PreferedMaximumLength
,
607 OUT PULONG CountReturned
)
609 LSAPR_TRUSTED_ENUM_BUFFER TrustedEnumBuffer
;
612 TRACE("LsaEnumerateTrustedDomains(%p %p %p %lu %p)\n",
613 PolicyHandle
, EnumerationContext
, Buffer
,
614 PreferedMaximumLength
, CountReturned
);
617 return STATUS_INVALID_PARAMETER
;
619 TrustedEnumBuffer
.EntriesRead
= 0;
620 TrustedEnumBuffer
.Information
= NULL
;
624 Status
= LsarEnumerateTrustedDomains((LSAPR_HANDLE
)PolicyHandle
,
627 PreferedMaximumLength
);
629 *Buffer
= TrustedEnumBuffer
.Information
;
630 *CountReturned
= TrustedEnumBuffer
.EntriesRead
;
633 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
635 if (TrustedEnumBuffer
.Information
!= NULL
)
636 MIDL_user_free(TrustedEnumBuffer
.Information
);
638 Status
= I_RpcMapWin32Status(RpcExceptionCode());
651 LsaEnumerateTrustedDomainsEx(IN LSA_HANDLE PolicyHandle
,
652 IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext
,
654 IN ULONG PreferedMaximumLength
,
655 OUT PULONG CountReturned
)
657 LSAPR_TRUSTED_ENUM_BUFFER_EX TrustedEnumBuffer
;
660 TRACE("LsaEnumerateTrustedDomainsEx(%p %p %p %lu %p)\n",
661 PolicyHandle
, EnumerationContext
, Buffer
,
662 PreferedMaximumLength
, CountReturned
);
665 return STATUS_INVALID_PARAMETER
;
667 TrustedEnumBuffer
.EntriesRead
= 0;
668 TrustedEnumBuffer
.EnumerationBuffer
= NULL
;
672 Status
= LsarEnumerateTrustedDomainsEx((LSAPR_HANDLE
)PolicyHandle
,
675 PreferedMaximumLength
);
677 *Buffer
= TrustedEnumBuffer
.EnumerationBuffer
;
678 *CountReturned
= TrustedEnumBuffer
.EntriesRead
;
681 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
683 if (TrustedEnumBuffer
.EnumerationBuffer
!= NULL
)
684 MIDL_user_free(TrustedEnumBuffer
.EnumerationBuffer
);
686 Status
= I_RpcMapWin32Status(RpcExceptionCode());
699 LsaFreeMemory(IN PVOID Buffer
)
701 TRACE("LsaFreeMemory(%p)\n", Buffer
);
702 return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer
);
711 LsaGetQuotasForAccount(IN LSA_HANDLE AccountHandle
,
712 OUT PQUOTA_LIMITS QuotaLimits
)
716 TRACE("LsaGetQuotasForAccount(%p %p)\n",
717 AccountHandle
, QuotaLimits
);
721 Status
= LsarGetQuotasForAccount((LSAPR_HANDLE
)AccountHandle
,
724 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
726 Status
= I_RpcMapWin32Status(RpcExceptionCode());
739 LsaGetRemoteUserName(IN PLSA_UNICODE_STRING SystemName OPTIONAL
,
740 OUT PLSA_UNICODE_STRING
*UserName
,
741 OUT PLSA_UNICODE_STRING
*DomainName OPTIONAL
)
743 PRPC_UNICODE_STRING UserNameString
= NULL
;
744 PRPC_UNICODE_STRING DomainNameString
= NULL
;
747 TRACE("LsaGetRemoteUserName(%s %p %p)\n",
748 SystemName
? debugstr_w(SystemName
->Buffer
) : "(null)",
749 UserName
, DomainName
);
753 Status
= LsarGetUserName((PLSAPR_SERVER_NAME
)SystemName
,
755 (DomainName
!= NULL
) ? &DomainNameString
: NULL
);
757 *UserName
= (PLSA_UNICODE_STRING
)UserNameString
;
759 if (DomainName
!= NULL
)
760 *DomainName
= (PLSA_UNICODE_STRING
)DomainNameString
;
762 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
764 if (UserNameString
!= NULL
)
765 MIDL_user_free(UserNameString
);
767 if (DomainNameString
!= NULL
)
768 MIDL_user_free(DomainNameString
);
770 Status
= I_RpcMapWin32Status(RpcExceptionCode());
783 LsaGetSystemAccessAccount(IN LSA_HANDLE AccountHandle
,
784 OUT PULONG SystemAccess
)
788 TRACE("LsaGetSystemAccessAccount(%p %p)\n",
789 AccountHandle
, SystemAccess
);
793 Status
= LsarGetSystemAccessAccount((LSAPR_HANDLE
)AccountHandle
,
794 (ACCESS_MASK
*)SystemAccess
);
796 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
798 Status
= I_RpcMapWin32Status(RpcExceptionCode());
811 LsaGetUserName(OUT PUNICODE_STRING
*UserName
,
812 OUT PUNICODE_STRING
*DomainName OPTIONAL
)
814 PRPC_UNICODE_STRING UserNameString
= NULL
;
815 PRPC_UNICODE_STRING DomainNameString
= NULL
;
818 TRACE("LsaGetUserName(%p %p)\n",
819 UserName
, DomainName
);
823 Status
= LsarGetUserName(NULL
,
825 (DomainName
!= NULL
) ? &DomainNameString
: NULL
);
827 *UserName
= (PUNICODE_STRING
)UserNameString
;
829 if (DomainName
!= NULL
)
830 *DomainName
= (PUNICODE_STRING
)DomainNameString
;
832 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
834 if (UserNameString
!= NULL
)
835 MIDL_user_free(UserNameString
);
837 if (DomainNameString
!= NULL
)
838 MIDL_user_free(DomainNameString
);
840 Status
= I_RpcMapWin32Status(RpcExceptionCode());
853 LsaLookupNames(IN LSA_HANDLE PolicyHandle
,
855 IN PLSA_UNICODE_STRING Names
,
856 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
857 OUT PLSA_TRANSLATED_SID
*Sids
)
859 LSAPR_TRANSLATED_SIDS TranslatedSids
= {0, NULL
};
860 ULONG MappedCount
= 0;
863 TRACE("LsaLookupNames(%p %lu %p %p %p)\n",
864 PolicyHandle
, Count
, Names
, ReferencedDomains
, Sids
);
866 if (ReferencedDomains
== NULL
|| Sids
== NULL
)
867 return STATUS_INVALID_PARAMETER
;
871 *ReferencedDomains
= NULL
;
874 TranslatedSids
.Entries
= Count
;
876 Status
= LsarLookupNames((LSAPR_HANDLE
)PolicyHandle
,
878 (PRPC_UNICODE_STRING
)Names
,
879 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
884 *Sids
= (PLSA_TRANSLATED_SID
)TranslatedSids
.Sids
;
886 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
888 if (TranslatedSids
.Sids
!= NULL
)
889 MIDL_user_free(TranslatedSids
.Sids
);
891 Status
= I_RpcMapWin32Status(RpcExceptionCode());
904 LsaLookupNames2(IN LSA_HANDLE PolicyHandle
,
907 IN PLSA_UNICODE_STRING Names
,
908 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
909 OUT PLSA_TRANSLATED_SID2
*Sids
)
911 LSAPR_TRANSLATED_SIDS_EX2 TranslatedSids
= {0, NULL
};
912 ULONG MappedCount
= 0;
915 TRACE("LsaLookupNames2(%p 0x%08x %lu %p %p %p)\n",
916 PolicyHandle
, Flags
, Count
, Names
, ReferencedDomains
, Sids
);
918 if (ReferencedDomains
== NULL
|| Sids
== NULL
)
919 return STATUS_INVALID_PARAMETER
;
923 *ReferencedDomains
= NULL
;
926 TranslatedSids
.Entries
= Count
;
928 Status
= LsarLookupNames3((LSAPR_HANDLE
)PolicyHandle
,
930 (PRPC_UNICODE_STRING
)Names
,
931 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
938 *Sids
= (PLSA_TRANSLATED_SID2
)TranslatedSids
.Sids
;
940 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
942 if (TranslatedSids
.Sids
!= NULL
)
943 MIDL_user_free(TranslatedSids
.Sids
);
945 Status
= I_RpcMapWin32Status(RpcExceptionCode());
958 LsaLookupPrivilegeDisplayName(IN LSA_HANDLE PolicyHandle
,
959 IN PLSA_UNICODE_STRING Name
,
960 OUT PLSA_UNICODE_STRING
*DisplayName
,
961 OUT PUSHORT LanguageReturned
)
963 PRPC_UNICODE_STRING DisplayNameBuffer
= NULL
;
966 TRACE("LsaLookupPrivilegeDisplayName(%p %p %p %p)\n",
967 PolicyHandle
, Name
, DisplayName
, LanguageReturned
);
971 Status
= LsarLookupPrivilegeDisplayName(PolicyHandle
,
972 (PRPC_UNICODE_STRING
)Name
,
973 GetUserDefaultUILanguage(),
974 GetSystemDefaultUILanguage(),
978 *DisplayName
= (PUNICODE_STRING
)DisplayNameBuffer
;
980 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
982 if (DisplayNameBuffer
!= NULL
)
983 MIDL_user_free(DisplayNameBuffer
);
985 Status
= I_RpcMapWin32Status(RpcExceptionCode());
998 LsaLookupPrivilegeName(IN LSA_HANDLE PolicyHandle
,
1000 OUT PUNICODE_STRING
*Name
)
1002 PRPC_UNICODE_STRING NameBuffer
= NULL
;
1005 TRACE("LsaLookupPrivilegeName(%p %p %p)\n",
1006 PolicyHandle
, Value
, Name
);
1010 Status
= LsarLookupPrivilegeName(PolicyHandle
,
1014 *Name
= (PUNICODE_STRING
)NameBuffer
;
1016 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1018 if (NameBuffer
!= NULL
)
1019 MIDL_user_free(NameBuffer
);
1021 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1034 LsaLookupPrivilegeValue(IN LSA_HANDLE PolicyHandle
,
1035 IN PLSA_UNICODE_STRING Name
,
1041 TRACE("LsaLookupPrivilegeValue(%p %p %p)\n",
1042 PolicyHandle
, Name
, Value
);
1046 Status
= LsarLookupPrivilegeValue(PolicyHandle
,
1047 (PRPC_UNICODE_STRING
)Name
,
1049 if (Status
== STATUS_SUCCESS
)
1052 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1054 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1067 LsaLookupSids(IN LSA_HANDLE PolicyHandle
,
1070 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
1071 OUT PLSA_TRANSLATED_NAME
*Names
)
1073 LSAPR_SID_ENUM_BUFFER SidEnumBuffer
;
1074 LSAPR_TRANSLATED_NAMES TranslatedNames
;
1075 ULONG MappedCount
= 0;
1078 TRACE("LsaLookupSids(%p %lu %p %p %p)\n",
1079 PolicyHandle
, Count
, Sids
, ReferencedDomains
, Names
);
1082 return STATUS_INVALID_PARAMETER
;
1084 SidEnumBuffer
.Entries
= Count
;
1085 SidEnumBuffer
.SidInfo
= (PLSAPR_SID_INFORMATION
)Sids
;
1089 *ReferencedDomains
= NULL
;
1092 TranslatedNames
.Entries
= 0;
1093 TranslatedNames
.Names
= NULL
;
1095 Status
= LsarLookupSids((LSAPR_HANDLE
)PolicyHandle
,
1097 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
1102 *Names
= (PLSA_TRANSLATED_NAME
)TranslatedNames
.Names
;
1104 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1106 if (TranslatedNames
.Names
!= NULL
)
1108 MIDL_user_free(TranslatedNames
.Names
);
1111 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1119 /******************************************************************************
1120 * LsaNtStatusToWinError
1129 LsaNtStatusToWinError(IN NTSTATUS Status
)
1131 TRACE("LsaNtStatusToWinError(0x%lx)\n", Status
);
1132 return RtlNtStatusToDosError(Status
);
1141 LsaOpenAccount(IN LSA_HANDLE PolicyHandle
,
1143 IN ACCESS_MASK DesiredAccess
,
1144 OUT PLSA_HANDLE AccountHandle
)
1148 TRACE("LsaOpenAccount(%p %p 0x%08lx %p)\n",
1149 PolicyHandle
, AccountSid
, DesiredAccess
, AccountHandle
);
1153 Status
= LsarOpenAccount((LSAPR_HANDLE
)PolicyHandle
,
1158 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1160 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1168 /******************************************************************************
1181 LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName OPTIONAL
,
1182 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
1183 IN ACCESS_MASK DesiredAccess
,
1184 OUT PLSA_HANDLE PolicyHandle
)
1188 TRACE("LsaOpenPolicy(%s %p 0x%08lx %p)\n",
1189 SystemName
? debugstr_w(SystemName
->Buffer
) : "(null)",
1190 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
1192 /* FIXME: RPC should take care of this */
1193 if (!LsapIsLocalComputer(SystemName
))
1194 return RPC_NT_SERVER_UNAVAILABLE
;
1198 *PolicyHandle
= NULL
;
1200 Status
= LsarOpenPolicy(SystemName
? SystemName
->Buffer
: NULL
,
1201 (PLSAPR_OBJECT_ATTRIBUTES
)ObjectAttributes
,
1205 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1207 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1211 TRACE("LsaOpenPolicy() done (Status: 0x%08lx)\n", Status
);
1222 LsaOpenPolicySce(IN PLSA_UNICODE_STRING SystemName OPTIONAL
,
1223 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
1224 IN ACCESS_MASK DesiredAccess
,
1225 OUT PLSA_HANDLE PolicyHandle
)
1229 TRACE("LsaOpenPolicySce(%s %p 0x%08lx %p)\n",
1230 SystemName
? debugstr_w(SystemName
->Buffer
) : "(null)",
1231 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
1233 /* FIXME: RPC should take care of this */
1234 if (!LsapIsLocalComputer(SystemName
))
1235 return RPC_NT_SERVER_UNAVAILABLE
;
1239 *PolicyHandle
= NULL
;
1241 Status
= LsarOpenPolicySce(SystemName
? SystemName
->Buffer
: NULL
,
1242 (PLSAPR_OBJECT_ATTRIBUTES
)ObjectAttributes
,
1246 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1248 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1252 TRACE("LsaOpenPolicySce() done (Status: 0x%08lx)\n", Status
);
1263 LsaOpenSecret(IN LSA_HANDLE PolicyHandle
,
1264 IN PLSA_UNICODE_STRING SecretName
,
1265 IN ACCESS_MASK DesiredAccess
,
1266 OUT PLSA_HANDLE SecretHandle
)
1270 TRACE("LsaOpenSecret(%p %p 0x%08lx %p)\n",
1271 PolicyHandle
, SecretName
, DesiredAccess
, SecretHandle
);
1275 *SecretHandle
= NULL
;
1277 Status
= LsarOpenSecret((LSAPR_HANDLE
)PolicyHandle
,
1278 (PRPC_UNICODE_STRING
)SecretName
,
1282 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1284 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1288 TRACE("LsaOpenSecret() done (Status: 0x%08lx)\n", Status
);
1299 LsaOpenTrustedDomain(IN LSA_HANDLE PolicyHandle
,
1300 IN PSID TrustedDomainSid
,
1301 IN ACCESS_MASK DesiredAccess
,
1302 OUT PLSA_HANDLE TrustedDomainHandle
)
1306 TRACE("LsaOpenTrustedDomain(%p %p 0x%08lx %p)\n",
1307 PolicyHandle
, TrustedDomainSid
, DesiredAccess
, TrustedDomainHandle
);
1311 Status
= LsarOpenTrustedDomain((LSAPR_HANDLE
)PolicyHandle
,
1312 (PRPC_SID
)TrustedDomainSid
,
1314 (PLSAPR_HANDLE
)TrustedDomainHandle
);
1316 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1318 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1331 LsaOpenTrustedDomainByName(IN LSA_HANDLE PolicyHandle
,
1332 IN PLSA_UNICODE_STRING TrustedDomainName
,
1333 IN ACCESS_MASK DesiredAccess
,
1334 OUT PLSA_HANDLE TrustedDomainHandle
)
1338 TRACE("LsaOpenTrustedDomainByName(%p %p 0x%08lx %p)\n",
1339 PolicyHandle
, TrustedDomainName
, DesiredAccess
, TrustedDomainHandle
);
1343 Status
= LsarOpenTrustedDomainByName((LSAPR_HANDLE
)PolicyHandle
,
1344 (PRPC_UNICODE_STRING
)TrustedDomainName
,
1346 TrustedDomainHandle
);
1348 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1350 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1363 LsaQueryDomainInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1364 IN POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
1367 PLSAPR_POLICY_DOMAIN_INFORMATION PolicyInformation
= NULL
;
1370 TRACE("LsaQueryDomainInformationPolicy(%p %lu %p)\n",
1371 PolicyHandle
, InformationClass
, Buffer
);
1375 Status
= LsarQueryDomainInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1377 &PolicyInformation
);
1379 *Buffer
= PolicyInformation
;
1381 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1383 if (PolicyInformation
!= NULL
)
1384 MIDL_user_free(PolicyInformation
);
1386 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1399 LsaQueryForestTrustInformation(IN LSA_HANDLE PolicyHandle
,
1400 IN PLSA_UNICODE_STRING TrustedDomainName
,
1401 OUT PLSA_FOREST_TRUST_INFORMATION
*ForestTrustInfo
)
1405 TRACE("LsaQueryForestTrustInformation(%p %p %p)\n",
1406 PolicyHandle
, TrustedDomainName
, ForestTrustInfo
);
1410 Status
= LsarQueryForestTrustInformation((LSAPR_HANDLE
)PolicyHandle
,
1412 ForestTrustDomainInfo
,
1415 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1417 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1430 LsaQueryInfoTrustedDomain(IN LSA_HANDLE TrustedDomainHandle
,
1431 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1434 PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation
= NULL
;
1437 TRACE("LsaQueryInfoTrustedDomain(%p %d %p) stub\n",
1438 TrustedDomainHandle
, InformationClass
, Buffer
);
1440 if (InformationClass
== TrustedDomainAuthInformationInternal
||
1441 InformationClass
== TrustedDomainFullInformationInternal
)
1442 return STATUS_INVALID_INFO_CLASS
;
1446 Status
= LsarQueryInfoTrustedDomain((LSAPR_HANDLE
)TrustedDomainHandle
,
1448 &TrustedDomainInformation
);
1449 *Buffer
= TrustedDomainInformation
;
1451 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1453 if (TrustedDomainInformation
!= NULL
)
1454 MIDL_user_free(TrustedDomainInformation
);
1456 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1460 TRACE("Done (Status: 0x%08x)\n", Status
);
1471 LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1472 IN POLICY_INFORMATION_CLASS InformationClass
,
1475 PLSAPR_POLICY_INFORMATION PolicyInformation
= NULL
;
1478 TRACE("LsaQueryInformationPolicy(%p %d %p)\n",
1479 PolicyHandle
, InformationClass
, Buffer
);
1483 Status
= LsarQueryInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1485 &PolicyInformation
);
1486 *Buffer
= PolicyInformation
;
1488 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1490 if (PolicyInformation
!= NULL
)
1491 MIDL_user_free(PolicyInformation
);
1493 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1497 TRACE("Done (Status: 0x%08x)\n", Status
);
1508 LsaQuerySecret(IN LSA_HANDLE SecretHandle
,
1509 OUT PLSA_UNICODE_STRING
*CurrentValue OPTIONAL
,
1510 OUT PLARGE_INTEGER CurrentValueSetTime OPTIONAL
,
1511 OUT PLSA_UNICODE_STRING
*OldValue OPTIONAL
,
1512 OUT PLARGE_INTEGER OldValueSetTime OPTIONAL
)
1514 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
= NULL
;
1515 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
= NULL
;
1516 PLSA_UNICODE_STRING DecryptedCurrentValue
= NULL
;
1517 PLSA_UNICODE_STRING DecryptedOldValue
= NULL
;
1521 TRACE("LsaQuerySecret(%p %p %p %p %p)\n",
1522 SecretHandle
, CurrentValue
, CurrentValueSetTime
,
1523 OldValue
, OldValueSetTime
);
1527 Status
= LsarQuerySecret((PLSAPR_HANDLE
)SecretHandle
,
1528 &EncryptedCurrentValue
,
1529 CurrentValueSetTime
,
1533 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1535 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1539 if (!NT_SUCCESS(Status
))
1542 /* Decrypt the current value */
1543 if (CurrentValue
!= NULL
)
1545 if (EncryptedCurrentValue
== NULL
)
1547 *CurrentValue
= NULL
;
1551 /* FIXME: Decrypt the current value */
1552 BufferSize
= sizeof(LSA_UNICODE_STRING
) + EncryptedCurrentValue
->MaximumLength
;
1553 DecryptedCurrentValue
= midl_user_allocate(BufferSize
);
1554 if (DecryptedCurrentValue
== NULL
)
1556 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1560 DecryptedCurrentValue
->Length
= (USHORT
)EncryptedCurrentValue
->Length
;
1561 DecryptedCurrentValue
->MaximumLength
= (USHORT
)EncryptedCurrentValue
->MaximumLength
;
1562 DecryptedCurrentValue
->Buffer
= (PWSTR
)(DecryptedCurrentValue
+ 1);
1563 RtlCopyMemory(DecryptedCurrentValue
->Buffer
,
1564 EncryptedCurrentValue
->Buffer
,
1565 EncryptedCurrentValue
->Length
);
1567 *CurrentValue
= DecryptedCurrentValue
;
1571 /* Decrypt the old value */
1572 if (OldValue
!= NULL
)
1574 if (EncryptedOldValue
== NULL
)
1580 /* FIXME: Decrypt the old value */
1581 BufferSize
= sizeof(LSA_UNICODE_STRING
) + EncryptedOldValue
->MaximumLength
;
1582 DecryptedOldValue
= midl_user_allocate(BufferSize
);
1583 if (DecryptedOldValue
== NULL
)
1585 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1589 DecryptedOldValue
->Length
= (USHORT
)EncryptedOldValue
->Length
;
1590 DecryptedOldValue
->MaximumLength
= (USHORT
)EncryptedOldValue
->MaximumLength
;
1591 DecryptedOldValue
->Buffer
= (PWSTR
)(DecryptedOldValue
+ 1);
1592 RtlCopyMemory(DecryptedOldValue
->Buffer
,
1593 EncryptedOldValue
->Buffer
,
1594 EncryptedOldValue
->Length
);
1596 *OldValue
= DecryptedOldValue
;
1601 if (!NT_SUCCESS(Status
))
1603 if (DecryptedCurrentValue
!= NULL
)
1604 midl_user_free(DecryptedCurrentValue
);
1606 if (DecryptedOldValue
!= NULL
)
1607 midl_user_free(DecryptedOldValue
);
1609 if (CurrentValue
!= NULL
)
1610 *CurrentValue
= NULL
;
1612 if (OldValue
!= NULL
)
1616 if (EncryptedCurrentValue
!= NULL
)
1617 midl_user_free(EncryptedCurrentValue
);
1619 if (EncryptedOldValue
!= NULL
)
1620 midl_user_free(EncryptedOldValue
);
1631 LsaQuerySecurityObject(IN LSA_HANDLE ObjectHandle
,
1632 IN SECURITY_INFORMATION SecurityInformation
,
1633 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
)
1635 LSAPR_SR_SECURITY_DESCRIPTOR SdBuffer
;
1636 PLSAPR_SR_SECURITY_DESCRIPTOR SdPointer
;
1639 TRACE("LsaQuerySecurityObject(%p %lx %p)\n",
1640 ObjectHandle
, SecurityInformation
, SecurityDescriptor
);
1642 SdBuffer
.Length
= 0;
1643 SdBuffer
.SecurityDescriptor
= NULL
;
1645 SdPointer
= &SdBuffer
;
1649 Status
= LsarQuerySecurityObject((LSAPR_HANDLE
)ObjectHandle
,
1650 SecurityInformation
,
1652 if (NT_SUCCESS(Status
))
1654 *SecurityDescriptor
= SdBuffer
.SecurityDescriptor
;
1658 *SecurityDescriptor
= NULL
;
1661 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1663 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1676 LsaQueryTrustedDomainInfo(IN LSA_HANDLE PolicyHandle
,
1677 IN PSID TrustedDomainSid
,
1678 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1683 TRACE("LsaQueryTrustedDomainInfo(%p %p %d %p) stub\n",
1684 PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
1686 if (InformationClass
== TrustedDomainAuthInformationInternal
||
1687 InformationClass
== TrustedDomainFullInformationInternal
)
1688 return STATUS_INVALID_INFO_CLASS
;
1692 Status
= LsarQueryTrustedDomainInfo((LSAPR_HANDLE
)PolicyHandle
,
1693 (PRPC_SID
)TrustedDomainSid
,
1695 (PLSAPR_TRUSTED_DOMAIN_INFO
*)Buffer
);
1697 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1699 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1712 LsaQueryTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle
,
1713 IN PLSA_UNICODE_STRING TrustedDomainName
,
1714 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1719 TRACE("LsaQueryTrustedDomainInfoByName(%p %p %d %p)\n",
1720 PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
1722 if (InformationClass
== TrustedDomainAuthInformationInternal
||
1723 InformationClass
== TrustedDomainFullInformationInternal
)
1724 return STATUS_INVALID_INFO_CLASS
;
1728 Status
= LsarQueryTrustedDomainInfoByName((LSAPR_HANDLE
)PolicyHandle
,
1729 (PRPC_UNICODE_STRING
)TrustedDomainName
,
1731 (PLSAPR_TRUSTED_DOMAIN_INFO
*)Buffer
);
1733 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1735 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1748 LsaRemoveAccountRights(IN LSA_HANDLE PolicyHandle
,
1750 IN BOOLEAN AllRights
,
1751 IN PLSA_UNICODE_STRING UserRights
,
1752 IN ULONG CountOfRights
)
1755 LSAPR_USER_RIGHT_SET UserRightSet
;
1757 TRACE("LsaRemoveAccountRights(%p %p %d %p %lu)\n",
1758 PolicyHandle
, AccountSid
, AllRights
, UserRights
, CountOfRights
);
1760 UserRightSet
.Entries
= CountOfRights
;
1761 UserRightSet
.UserRights
= (PRPC_UNICODE_STRING
)UserRights
;
1765 Status
= LsarRemoveAccountRights((LSAPR_HANDLE
)PolicyHandle
,
1766 (PRPC_SID
)AccountSid
,
1770 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1772 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1785 LsaRemovePrivilegesFromAccount(IN LSA_HANDLE AccountHandle
,
1786 IN BOOLEAN AllPrivileges
,
1787 IN PPRIVILEGE_SET Privileges OPTIONAL
)
1793 Status
= LsarRemovePrivilegesFromAccount((LSAPR_HANDLE
)AccountHandle
,
1795 (PLSAPR_PRIVILEGE_SET
)Privileges
);
1797 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1799 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1812 LsaRetrievePrivateData(IN LSA_HANDLE PolicyHandle
,
1813 IN PLSA_UNICODE_STRING KeyName
,
1814 OUT PLSA_UNICODE_STRING
*PrivateData
)
1816 PLSAPR_CR_CIPHER_VALUE EncryptedData
= NULL
;
1817 PLSA_UNICODE_STRING DecryptedData
= NULL
;
1821 TRACE("LsaRetrievePrivateData(%p %p %p)\n",
1822 PolicyHandle
, KeyName
, PrivateData
);
1826 Status
= LsarRetrievePrivateData((LSAPR_HANDLE
)PolicyHandle
,
1827 (PRPC_UNICODE_STRING
)KeyName
,
1830 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1832 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1836 if (EncryptedData
== NULL
)
1838 *PrivateData
= NULL
;
1842 BufferSize
= sizeof(LSA_UNICODE_STRING
) + EncryptedData
->MaximumLength
;
1843 DecryptedData
= midl_user_allocate(BufferSize
);
1844 if (DecryptedData
== NULL
)
1846 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1850 DecryptedData
->Length
= (USHORT
)EncryptedData
->Length
;
1851 DecryptedData
->MaximumLength
= (USHORT
)EncryptedData
->MaximumLength
;
1852 DecryptedData
->Buffer
= (PWSTR
)(DecryptedData
+ 1);
1853 RtlCopyMemory(DecryptedData
->Buffer
,
1854 EncryptedData
->Buffer
,
1855 EncryptedData
->Length
);
1857 *PrivateData
= DecryptedData
;
1861 if (!NT_SUCCESS(Status
))
1863 if (DecryptedData
!= NULL
)
1864 midl_user_free(DecryptedData
);
1866 *PrivateData
= NULL
;
1869 if (EncryptedData
!= NULL
)
1870 midl_user_free(EncryptedData
);
1881 LsaSetDomainInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1882 IN POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
1883 IN PVOID Buffer OPTIONAL
)
1887 TRACE("LsaSetDomainInformationPolicy(%p %d %p)\n",
1888 PolicyHandle
, InformationClass
, Buffer
);
1892 Status
= LsarSetDomainInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1894 (PLSAPR_POLICY_DOMAIN_INFORMATION
)Buffer
);
1896 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1898 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1911 LsaSetForestTrustInformation(IN LSA_HANDLE PolicyHandle
,
1912 IN PLSA_UNICODE_STRING TrustedDomainName
,
1913 IN PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
1914 IN BOOLEAN CheckOnly
,
1915 OUT PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
1919 TRACE("LsaSetForestTrustInformation(%p %p %p %d %p)\n",
1920 PolicyHandle
, TrustedDomainName
, ForestTrustInfo
, CheckOnly
, CollisionInfo
);
1924 Status
= LsarSetForestTrustInformation((LSAPR_HANDLE
)PolicyHandle
,
1926 ForestTrustDomainInfo
,
1931 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1933 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1946 LsaSetInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1947 IN POLICY_INFORMATION_CLASS InformationClass
,
1952 TRACE("LsaSetInformationPolicy(%p %d %p)\n",
1953 PolicyHandle
, InformationClass
, Buffer
);
1957 Status
= LsarSetInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1959 (PLSAPR_POLICY_INFORMATION
)Buffer
);
1961 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1963 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1976 LsaSetInformationTrustedDomain(IN LSA_HANDLE TrustedDomainHandle
,
1977 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1980 FIXME("LsaSetInformationTrustedDomain(%p %d %p)\n",
1981 TrustedDomainHandle
, InformationClass
, Buffer
);
1982 return STATUS_NOT_IMPLEMENTED
;
1991 LsaSetQuotasForAccount(IN LSA_HANDLE AccountHandle
,
1992 IN PQUOTA_LIMITS QuotaLimits
)
1996 TRACE("LsaSetQuotasForAccount(%p %p)\n",
1997 AccountHandle
, QuotaLimits
);
2001 Status
= LsarSetQuotasForAccount((LSAPR_HANDLE
)AccountHandle
,
2004 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
2006 Status
= I_RpcMapWin32Status(RpcExceptionCode());
2019 LsaSetSecret(IN LSA_HANDLE SecretHandle
,
2020 IN PLSA_UNICODE_STRING CurrentValue OPTIONAL
,
2021 IN PLSA_UNICODE_STRING OldValue OPTIONAL
)
2023 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
= NULL
;
2024 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
= NULL
;
2028 TRACE("LsaSetSecret(%p %p %p)\n",
2029 SecretHandle
, EncryptedCurrentValue
, EncryptedOldValue
);
2031 if (CurrentValue
!= NULL
)
2033 BufferSize
= sizeof(LSAPR_CR_CIPHER_VALUE
) + CurrentValue
->MaximumLength
;
2034 EncryptedCurrentValue
= midl_user_allocate(BufferSize
);
2035 if (EncryptedCurrentValue
== NULL
)
2037 Status
= STATUS_INSUFFICIENT_RESOURCES
;
2041 EncryptedCurrentValue
->Length
= CurrentValue
->Length
;
2042 EncryptedCurrentValue
->MaximumLength
= CurrentValue
->MaximumLength
;
2043 EncryptedCurrentValue
->Buffer
= (BYTE
*)(EncryptedCurrentValue
+ 1);
2044 if (EncryptedCurrentValue
->Buffer
!= NULL
)
2045 memcpy(EncryptedCurrentValue
->Buffer
, CurrentValue
->Buffer
, CurrentValue
->Length
);
2048 if (OldValue
!= NULL
)
2050 BufferSize
= sizeof(LSAPR_CR_CIPHER_VALUE
) + OldValue
->MaximumLength
;
2051 EncryptedOldValue
= midl_user_allocate(BufferSize
);
2052 if (EncryptedOldValue
== NULL
)
2054 Status
= STATUS_INSUFFICIENT_RESOURCES
;
2058 EncryptedOldValue
->Length
= OldValue
->Length
;
2059 EncryptedOldValue
->MaximumLength
= OldValue
->MaximumLength
;
2060 EncryptedOldValue
->Buffer
= (BYTE
*)(EncryptedOldValue
+ 1);
2061 if (EncryptedOldValue
->Buffer
!= NULL
)
2062 memcpy(EncryptedOldValue
->Buffer
, OldValue
->Buffer
, OldValue
->Length
);
2067 Status
= LsarSetSecret((LSAPR_HANDLE
)SecretHandle
,
2068 EncryptedCurrentValue
,
2071 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
2073 Status
= I_RpcMapWin32Status(RpcExceptionCode());
2078 if (EncryptedCurrentValue
!= NULL
)
2079 midl_user_free(EncryptedCurrentValue
);
2081 if (EncryptedOldValue
!= NULL
)
2082 midl_user_free(EncryptedOldValue
);
2093 LsaSetSecurityObject(IN LSA_HANDLE ObjectHandle
,
2094 IN SECURITY_INFORMATION SecurityInformation
,
2095 IN PSECURITY_DESCRIPTOR SecurityDescriptor
)
2097 LSAPR_SR_SECURITY_DESCRIPTOR SdBuffer
= {0, NULL
};
2101 TRACE("LsaSetSecurityObject(%p %lx %p)\n",
2102 ObjectHandle
, SecurityInformation
, SecurityDescriptor
);
2104 Status
= RtlMakeSelfRelativeSD(SecurityDescriptor
,
2107 if (Status
!= STATUS_BUFFER_TOO_SMALL
)
2108 return STATUS_INVALID_PARAMETER
;
2110 SdBuffer
.SecurityDescriptor
= MIDL_user_allocate(SdLength
);
2111 if (SdBuffer
.SecurityDescriptor
== NULL
)
2112 return STATUS_INSUFFICIENT_RESOURCES
;
2114 Status
= RtlMakeSelfRelativeSD(SecurityDescriptor
,
2115 (PSECURITY_DESCRIPTOR
)SdBuffer
.SecurityDescriptor
,
2117 if (!NT_SUCCESS(Status
))
2120 SdBuffer
.Length
= SdLength
;
2124 Status
= LsarSetSecurityObject((LSAPR_HANDLE
)ObjectHandle
,
2125 SecurityInformation
,
2128 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
2130 Status
= I_RpcMapWin32Status(RpcExceptionCode());
2135 if (SdBuffer
.SecurityDescriptor
!= NULL
)
2136 MIDL_user_free(SdBuffer
.SecurityDescriptor
);
2147 LsaSetSystemAccessAccount(IN LSA_HANDLE AccountHandle
,
2148 IN ULONG SystemAccess
)
2152 TRACE("LsaSetSystemAccessAccount(%p 0x%lx)\n",
2153 AccountHandle
, SystemAccess
);
2157 Status
= LsarSetSystemAccessAccount((LSAPR_HANDLE
)AccountHandle
,
2160 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
2162 Status
= I_RpcMapWin32Status(RpcExceptionCode());
2175 LsaSetTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle
,
2176 IN PLSA_UNICODE_STRING TrustedDomainName
,
2177 IN TRUSTED_INFORMATION_CLASS InformationClass
,
2180 FIXME("LsaSetTrustedDomainInfoByName(%p %p %d %p) stub\n",
2181 PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
2182 return STATUS_SUCCESS
;
2191 LsaSetTrustedDomainInformation(IN LSA_HANDLE PolicyHandle
,
2192 IN PSID TrustedDomainSid
,
2193 IN TRUSTED_INFORMATION_CLASS InformationClass
,
2196 FIXME("LsaSetTrustedDomainInformation(%p %p %d %p) stub\n",
2197 PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
2198 return STATUS_SUCCESS
;
2207 LsaStorePrivateData(IN LSA_HANDLE PolicyHandle
,
2208 IN PLSA_UNICODE_STRING KeyName
,
2209 IN PLSA_UNICODE_STRING PrivateData OPTIONAL
)
2211 PLSAPR_CR_CIPHER_VALUE EncryptedData
= NULL
;
2215 TRACE("LsaStorePrivateData(%p %p %p)\n",
2216 PolicyHandle
, KeyName
, PrivateData
);
2218 if (PrivateData
!= NULL
)
2220 BufferSize
= sizeof(LSAPR_CR_CIPHER_VALUE
) + PrivateData
->MaximumLength
;
2221 EncryptedData
= midl_user_allocate(BufferSize
);
2222 if (EncryptedData
== NULL
)
2224 Status
= STATUS_INSUFFICIENT_RESOURCES
;
2228 EncryptedData
->Length
= PrivateData
->Length
;
2229 EncryptedData
->MaximumLength
= PrivateData
->MaximumLength
;
2230 EncryptedData
->Buffer
= (BYTE
*)(EncryptedData
+ 1);
2231 if (EncryptedData
->Buffer
!= NULL
)
2232 RtlCopyMemory(EncryptedData
->Buffer
,
2233 PrivateData
->Buffer
,
2234 PrivateData
->Length
);
2239 Status
= LsarStorePrivateData((LSAPR_HANDLE
)PolicyHandle
,
2240 (PRPC_UNICODE_STRING
)KeyName
,
2243 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
2245 Status
= I_RpcMapWin32Status(RpcExceptionCode());
2250 if (EncryptedData
!= NULL
)
2251 midl_user_free(EncryptedData
);