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
16 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
= LsarEnmuerateAccountRights((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 FIXME("LsaEnumerateTrustedDomains(%p %p %p %lu %p) stub\n",
610 PolicyHandle
, EnumerationContext
, Buffer
,
611 PreferedMaximumLength
, CountReturned
);
616 return STATUS_SUCCESS
;
625 LsaEnumerateTrustedDomainsEx(IN LSA_HANDLE PolicyHandle
,
626 IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext
,
628 IN ULONG PreferedMaximumLength
,
629 OUT PULONG CountReturned
)
631 FIXME("LsaEnumerateTrustedDomainsEx(%p %p %p %lu %p) stub\n",
632 PolicyHandle
, EnumerationContext
, Buffer
,
633 PreferedMaximumLength
, CountReturned
);
638 return STATUS_SUCCESS
;
647 LsaFreeMemory(IN PVOID Buffer
)
649 TRACE("LsaFreeMemory(%p)\n", Buffer
);
650 return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer
);
659 LsaGetQuotasForAccount(IN LSA_HANDLE AccountHandle
,
660 OUT PQUOTA_LIMITS QuotaLimits
)
664 TRACE("LsaGetQuotasForAccount(%p %p)\n",
665 AccountHandle
, QuotaLimits
);
669 Status
= LsarGetQuotasForAccount((LSAPR_HANDLE
)AccountHandle
,
672 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
674 Status
= I_RpcMapWin32Status(RpcExceptionCode());
687 LsaGetSystemAccessAccount(IN LSA_HANDLE AccountHandle
,
688 OUT PULONG SystemAccess
)
692 TRACE("LsaGetSystemAccessAccount(%p %p)\n",
693 AccountHandle
, SystemAccess
);
697 Status
= LsarGetSystemAccessAccount((LSAPR_HANDLE
)AccountHandle
,
698 (ACCESS_MASK
*)SystemAccess
);
700 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
702 Status
= I_RpcMapWin32Status(RpcExceptionCode());
715 LsaGetUserName(OUT PUNICODE_STRING
*UserName
,
716 OUT PUNICODE_STRING
*DomainName OPTIONAL
)
718 PRPC_UNICODE_STRING UserNameString
= NULL
;
719 PRPC_UNICODE_STRING DomainNameString
= NULL
;
722 TRACE("LsaGetUserName(%p %p)\n",
723 UserName
, DomainName
);
727 Status
= LsarGetUserName(NULL
,
729 (DomainName
!= NULL
) ? &DomainNameString
: NULL
);
731 *UserName
= (PUNICODE_STRING
)UserNameString
;
733 if (DomainName
!= NULL
)
734 *DomainName
= (PUNICODE_STRING
)DomainNameString
;
736 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
738 if (UserNameString
!= NULL
)
739 MIDL_user_free(UserNameString
);
741 if (DomainNameString
!= NULL
)
742 MIDL_user_free(DomainNameString
);
744 Status
= I_RpcMapWin32Status(RpcExceptionCode());
757 LsaLookupNames(IN LSA_HANDLE PolicyHandle
,
759 IN PLSA_UNICODE_STRING Names
,
760 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
761 OUT PLSA_TRANSLATED_SID
*Sids
)
763 LSAPR_TRANSLATED_SIDS TranslatedSids
= {0, NULL
};
764 ULONG MappedCount
= 0;
767 TRACE("LsaLookupNames(%p %lu %p %p %p)\n",
768 PolicyHandle
, Count
, Names
, ReferencedDomains
, Sids
);
770 if (ReferencedDomains
== NULL
|| Sids
== NULL
)
771 return STATUS_INVALID_PARAMETER
;
775 *ReferencedDomains
= NULL
;
778 TranslatedSids
.Entries
= Count
;
780 Status
= LsarLookupNames((LSAPR_HANDLE
)PolicyHandle
,
782 (PRPC_UNICODE_STRING
)Names
,
783 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
788 *Sids
= (PLSA_TRANSLATED_SID
)TranslatedSids
.Sids
;
790 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
792 if (TranslatedSids
.Sids
!= NULL
)
793 MIDL_user_free(TranslatedSids
.Sids
);
795 Status
= I_RpcMapWin32Status(RpcExceptionCode());
808 LsaLookupNames2(IN LSA_HANDLE PolicyHandle
,
811 IN PLSA_UNICODE_STRING Names
,
812 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
813 OUT PLSA_TRANSLATED_SID2
*Sids
)
815 LSAPR_TRANSLATED_SIDS_EX2 TranslatedSids
= {0, NULL
};
816 ULONG MappedCount
= 0;
819 TRACE("LsaLookupNames2(%p 0x%08x %lu %p %p %p)\n",
820 PolicyHandle
, Flags
, Count
, Names
, ReferencedDomains
, Sids
);
822 if (ReferencedDomains
== NULL
|| Sids
== NULL
)
823 return STATUS_INVALID_PARAMETER
;
827 *ReferencedDomains
= NULL
;
830 TranslatedSids
.Entries
= Count
;
832 Status
= LsarLookupNames3((LSAPR_HANDLE
)PolicyHandle
,
834 (PRPC_UNICODE_STRING
)Names
,
835 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
842 *Sids
= (PLSA_TRANSLATED_SID2
)TranslatedSids
.Sids
;
844 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
846 if (TranslatedSids
.Sids
!= NULL
)
847 MIDL_user_free(TranslatedSids
.Sids
);
849 Status
= I_RpcMapWin32Status(RpcExceptionCode());
862 LsaLookupPrivilegeName(IN LSA_HANDLE PolicyHandle
,
864 OUT PUNICODE_STRING
*Name
)
866 PRPC_UNICODE_STRING NameBuffer
= NULL
;
869 TRACE("LsaLookupPrivilegeName(%p %p %p)\n",
870 PolicyHandle
, Value
, Name
);
874 Status
= LsarLookupPrivilegeName(PolicyHandle
,
878 *Name
= (PUNICODE_STRING
)NameBuffer
;
880 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
882 if (NameBuffer
!= NULL
)
883 MIDL_user_free(NameBuffer
);
885 Status
= I_RpcMapWin32Status(RpcExceptionCode());
898 LsaLookupPrivilegeValue(IN LSA_HANDLE PolicyHandle
,
899 IN PLSA_UNICODE_STRING Name
,
905 TRACE("LsaLookupPrivilegeValue(%p %p %p)\n",
906 PolicyHandle
, Name
, Value
);
910 Status
= LsarLookupPrivilegeValue(PolicyHandle
,
911 (PRPC_UNICODE_STRING
)Name
,
913 if (Status
== STATUS_SUCCESS
)
916 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
918 Status
= I_RpcMapWin32Status(RpcExceptionCode());
931 LsaLookupSids(IN LSA_HANDLE PolicyHandle
,
934 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
935 OUT PLSA_TRANSLATED_NAME
*Names
)
937 LSAPR_SID_ENUM_BUFFER SidEnumBuffer
;
938 LSAPR_TRANSLATED_NAMES TranslatedNames
;
939 ULONG MappedCount
= 0;
942 TRACE("LsaLookupSids(%p %lu %p %p %p)\n",
943 PolicyHandle
, Count
, Sids
, ReferencedDomains
, Names
);
946 return STATUS_INVALID_PARAMETER
;
948 SidEnumBuffer
.Entries
= Count
;
949 SidEnumBuffer
.SidInfo
= (PLSAPR_SID_INFORMATION
)Sids
;
953 *ReferencedDomains
= NULL
;
956 TranslatedNames
.Entries
= 0;
957 TranslatedNames
.Names
= NULL
;
959 Status
= LsarLookupSids((LSAPR_HANDLE
)PolicyHandle
,
961 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
966 *Names
= (PLSA_TRANSLATED_NAME
)TranslatedNames
.Names
;
968 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
970 if (TranslatedNames
.Names
!= NULL
)
972 MIDL_user_free(TranslatedNames
.Names
);
975 Status
= I_RpcMapWin32Status(RpcExceptionCode());
983 /******************************************************************************
984 * LsaNtStatusToWinError
993 LsaNtStatusToWinError(IN NTSTATUS Status
)
995 TRACE("LsaNtStatusToWinError(0x%lx)\n", Status
);
996 return RtlNtStatusToDosError(Status
);
1005 LsaOpenAccount(IN LSA_HANDLE PolicyHandle
,
1007 IN ACCESS_MASK DesiredAccess
,
1008 OUT PLSA_HANDLE AccountHandle
)
1012 TRACE("LsaOpenAccount(%p %p 0x%08lx %p)\n",
1013 PolicyHandle
, AccountSid
, DesiredAccess
, AccountHandle
);
1017 Status
= LsarOpenAccount((LSAPR_HANDLE
)PolicyHandle
,
1022 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1024 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1032 /******************************************************************************
1045 LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName OPTIONAL
,
1046 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
1047 IN ACCESS_MASK DesiredAccess
,
1048 OUT PLSA_HANDLE PolicyHandle
)
1052 TRACE("LsaOpenPolicy(%s %p 0x%08lx %p)\n",
1053 SystemName
? debugstr_w(SystemName
->Buffer
) : "(null)",
1054 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
1056 /* FIXME: RPC should take care of this */
1057 if (!LsapIsLocalComputer(SystemName
))
1058 return RPC_NT_SERVER_UNAVAILABLE
;
1062 *PolicyHandle
= NULL
;
1064 Status
= LsarOpenPolicy(SystemName
? SystemName
->Buffer
: NULL
,
1065 (PLSAPR_OBJECT_ATTRIBUTES
)ObjectAttributes
,
1069 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1071 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1075 TRACE("LsaOpenPolicy() done (Status: 0x%08lx)\n", Status
);
1083 LsaOpenSecret(IN LSA_HANDLE PolicyHandle
,
1084 IN PLSA_UNICODE_STRING SecretName
,
1085 IN ACCESS_MASK DesiredAccess
,
1086 OUT PLSA_HANDLE SecretHandle
)
1090 TRACE("LsaOpenSecret(%p %p 0x%08lx %p)\n",
1091 PolicyHandle
, SecretName
, DesiredAccess
, SecretHandle
);
1095 *SecretHandle
= NULL
;
1097 Status
= LsarOpenSecret((LSAPR_HANDLE
)PolicyHandle
,
1098 (PRPC_UNICODE_STRING
)SecretName
,
1102 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1104 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1108 TRACE("LsaOpenSecret() done (Status: 0x%08lx)\n", Status
);
1119 LsaOpenTrustedDomain(IN LSA_HANDLE PolicyHandle
,
1120 IN PSID TrustedDomainSid
,
1121 IN ACCESS_MASK DesiredAccess
,
1122 OUT PLSA_HANDLE TrustedDomainHandle
)
1126 TRACE("LsaOpenTrustedDomain(%p %p 0x%08lx %p)\n",
1127 PolicyHandle
, TrustedDomainSid
, DesiredAccess
, TrustedDomainHandle
);
1131 Status
= LsarOpenTrustedDomain((LSAPR_HANDLE
)PolicyHandle
,
1132 (PRPC_SID
)TrustedDomainSid
,
1134 (PLSAPR_HANDLE
)TrustedDomainHandle
);
1136 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1138 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1151 LsaOpenTrustedDomainByName(IN LSA_HANDLE PolicyHandle
,
1152 IN PLSA_UNICODE_STRING TrustedDomainName
,
1153 IN ACCESS_MASK DesiredAccess
,
1154 OUT PLSA_HANDLE TrustedDomainHandle
)
1158 TRACE("LsaOpenTrustedDomainByName(%p %p 0x%08lx %p)\n",
1159 PolicyHandle
, TrustedDomainName
, DesiredAccess
, TrustedDomainHandle
);
1163 Status
= LsarOpenTrustedDomainByName((LSAPR_HANDLE
)PolicyHandle
,
1164 (PRPC_UNICODE_STRING
)TrustedDomainName
,
1166 TrustedDomainHandle
);
1168 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1170 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1183 LsaQueryDomainInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1184 IN POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
1187 FIXME("LsaQueryDomainInformationPolicy(%p %lu %p) stub\n",
1188 PolicyHandle
, InformationClass
, Buffer
);
1189 return STATUS_NOT_IMPLEMENTED
;
1198 LsaQueryForestTrustInformation(IN LSA_HANDLE PolicyHandle
,
1199 IN PLSA_UNICODE_STRING TrustedDomainName
,
1200 OUT PLSA_FOREST_TRUST_INFORMATION
*ForestTrustInfo
)
1202 FIXME("LsaQueryForestTrustInformation(%p %p %p) stub\n",
1203 PolicyHandle
, TrustedDomainName
, ForestTrustInfo
);
1204 return STATUS_NOT_IMPLEMENTED
;
1213 LsaQueryInfoTrustedDomain(IN LSA_HANDLE TrustedDomainHandle
,
1214 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1217 FIXME("LsaQueryInfoTrustedDomain(%p %d %p) stub\n",
1218 TrustedDomainHandle
, InformationClass
, Buffer
);
1219 return STATUS_NOT_IMPLEMENTED
;
1228 LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1229 IN POLICY_INFORMATION_CLASS InformationClass
,
1232 PLSAPR_POLICY_INFORMATION PolicyInformation
= NULL
;
1235 TRACE("LsaQueryInformationPolicy(%p %d %p)\n",
1236 PolicyHandle
, InformationClass
, Buffer
);
1240 Status
= LsarQueryInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1242 &PolicyInformation
);
1243 *Buffer
= PolicyInformation
;
1245 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1247 if (PolicyInformation
!= NULL
)
1248 MIDL_user_free(PolicyInformation
);
1250 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1254 TRACE("Done (Status: 0x%08x)\n", Status
);
1265 LsaQuerySecret(IN LSA_HANDLE SecretHandle
,
1266 OUT PLSA_UNICODE_STRING
*CurrentValue OPTIONAL
,
1267 OUT PLARGE_INTEGER CurrentValueSetTime OPTIONAL
,
1268 OUT PLSA_UNICODE_STRING
*OldValue OPTIONAL
,
1269 OUT PLARGE_INTEGER OldValueSetTime OPTIONAL
)
1271 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
= NULL
;
1272 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
= NULL
;
1273 PLSA_UNICODE_STRING DecryptedCurrentValue
= NULL
;
1274 PLSA_UNICODE_STRING DecryptedOldValue
= NULL
;
1278 TRACE("LsaQuerySecret(%p %p %p %p %p)\n",
1279 SecretHandle
, CurrentValue
, CurrentValueSetTime
,
1280 OldValue
, OldValueSetTime
);
1284 Status
= LsarQuerySecret((PLSAPR_HANDLE
)SecretHandle
,
1285 &EncryptedCurrentValue
,
1286 CurrentValueSetTime
,
1290 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1292 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1296 if (!NT_SUCCESS(Status
))
1299 /* Decrypt the current value */
1300 if (CurrentValue
!= NULL
)
1302 if (EncryptedCurrentValue
== NULL
)
1304 *CurrentValue
= NULL
;
1308 /* FIXME: Decrypt the current value */
1309 BufferSize
= sizeof(LSA_UNICODE_STRING
) + EncryptedCurrentValue
->MaximumLength
;
1310 DecryptedCurrentValue
= midl_user_allocate(BufferSize
);
1311 if (DecryptedCurrentValue
== NULL
)
1313 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1317 DecryptedCurrentValue
->Length
= (USHORT
)EncryptedCurrentValue
->Length
;
1318 DecryptedCurrentValue
->MaximumLength
= (USHORT
)EncryptedCurrentValue
->MaximumLength
;
1319 DecryptedCurrentValue
->Buffer
= (PWSTR
)(DecryptedCurrentValue
+ 1);
1320 RtlCopyMemory(DecryptedCurrentValue
->Buffer
,
1321 EncryptedCurrentValue
->Buffer
,
1322 EncryptedCurrentValue
->Length
);
1324 *CurrentValue
= DecryptedCurrentValue
;
1328 /* Decrypt the old value */
1329 if (OldValue
!= NULL
)
1331 if (EncryptedOldValue
== NULL
)
1337 /* FIXME: Decrypt the old value */
1338 BufferSize
= sizeof(LSA_UNICODE_STRING
) + EncryptedOldValue
->MaximumLength
;
1339 DecryptedOldValue
= midl_user_allocate(BufferSize
);
1340 if (DecryptedOldValue
== NULL
)
1342 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1346 DecryptedOldValue
->Length
= (USHORT
)EncryptedOldValue
->Length
;
1347 DecryptedOldValue
->MaximumLength
= (USHORT
)EncryptedOldValue
->MaximumLength
;
1348 DecryptedOldValue
->Buffer
= (PWSTR
)(DecryptedOldValue
+ 1);
1349 RtlCopyMemory(DecryptedOldValue
->Buffer
,
1350 EncryptedOldValue
->Buffer
,
1351 EncryptedOldValue
->Length
);
1353 *OldValue
= DecryptedOldValue
;
1358 if (!NT_SUCCESS(Status
))
1360 if (DecryptedCurrentValue
!= NULL
)
1361 midl_user_free(DecryptedCurrentValue
);
1363 if (DecryptedOldValue
!= NULL
)
1364 midl_user_free(DecryptedOldValue
);
1366 if (CurrentValue
!= NULL
)
1367 *CurrentValue
= NULL
;
1369 if (OldValue
!= NULL
)
1373 if (EncryptedCurrentValue
!= NULL
)
1374 midl_user_free(EncryptedCurrentValue
);
1376 if (EncryptedOldValue
!= NULL
)
1377 midl_user_free(EncryptedOldValue
);
1388 LsaQuerySecurityObject(IN LSA_HANDLE ObjectHandle
,
1389 IN SECURITY_INFORMATION SecurityInformation
,
1390 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
)
1392 LSAPR_SR_SECURITY_DESCRIPTOR SdBuffer
;
1393 PLSAPR_SR_SECURITY_DESCRIPTOR SdPointer
;
1396 TRACE("LsaQuerySecurityObject(%p %lx %p)\n",
1397 ObjectHandle
, SecurityInformation
, SecurityDescriptor
);
1399 SdBuffer
.Length
= 0;
1400 SdBuffer
.SecurityDescriptor
= NULL
;
1402 SdPointer
= &SdBuffer
;
1406 Status
= LsarQuerySecurityObject((LSAPR_HANDLE
)ObjectHandle
,
1407 SecurityInformation
,
1409 if (NT_SUCCESS(Status
))
1411 *SecurityDescriptor
= SdBuffer
.SecurityDescriptor
;
1415 *SecurityDescriptor
= NULL
;
1418 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1420 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1433 LsaQueryTrustedDomainInfo(IN LSA_HANDLE PolicyHandle
,
1434 IN PSID TrustedDomainSid
,
1435 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1438 FIXME("LsaQueryTrustedDomainInfo(%p %p %d %p) stub\n",
1439 PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
1440 return STATUS_OBJECT_NAME_NOT_FOUND
;
1449 LsaQueryTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle
,
1450 IN PLSA_UNICODE_STRING TrustedDomainName
,
1451 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1456 TRACE("LsaQueryTrustedDomainInfoByName(%p %p %d %p)\n",
1457 PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
1459 if (InformationClass
== TrustedDomainAuthInformationInternal
||
1460 InformationClass
== TrustedDomainFullInformationInternal
)
1461 return STATUS_INVALID_INFO_CLASS
;
1465 Status
= LsarQueryTrustedDomainInfoByName((LSAPR_HANDLE
)PolicyHandle
,
1466 (PRPC_UNICODE_STRING
)TrustedDomainName
,
1468 (unsigned long *)Buffer
); // Shuld be: (PLSAPR_POLICY_INFORMATION *)Buffer
1470 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1472 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1485 LsaRegisterPolicyChangeNotification(IN POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass
,
1486 IN HANDLE NotificationEventHandle
)
1488 FIXME("LsaRegisterPolicyChangeNotification(%d %p) stub\n",
1489 InformationClass
, NotificationEventHandle
);
1490 return STATUS_UNSUCCESSFUL
;
1499 LsaRemoveAccountRights(IN LSA_HANDLE PolicyHandle
,
1501 IN BOOLEAN AllRights
,
1502 IN PLSA_UNICODE_STRING UserRights
,
1503 IN ULONG CountOfRights
)
1505 LSAPR_USER_RIGHT_SET UserRightSet
;
1507 TRACE("LsaRemoveAccountRights(%p %p %d %p %lu)\n",
1508 PolicyHandle
, AccountSid
, AllRights
, UserRights
, CountOfRights
);
1510 UserRightSet
.Entries
= CountOfRights
;
1511 UserRightSet
.UserRights
= (PRPC_UNICODE_STRING
)UserRights
;
1515 LsarRemoveAccountRights((LSAPR_HANDLE
)PolicyHandle
,
1516 (PRPC_SID
)AccountSid
,
1520 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1522 I_RpcMapWin32Status(RpcExceptionCode());
1526 return STATUS_SUCCESS
;
1535 LsaRetrievePrivateData(IN LSA_HANDLE PolicyHandle
,
1536 IN PLSA_UNICODE_STRING KeyName
,
1537 OUT PLSA_UNICODE_STRING
*PrivateData
)
1539 FIXME("LsaRetrievePrivateData(%p %p %p) stub\n",
1540 PolicyHandle
, KeyName
, PrivateData
);
1541 return STATUS_OBJECT_NAME_NOT_FOUND
;
1550 LsaSetDomainInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1551 IN POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
1552 IN PVOID Buffer OPTIONAL
)
1554 FIXME("LsaSetDomainInformationPolicy(%p %d %p) stub\n",
1555 PolicyHandle
, InformationClass
, Buffer
);
1556 return STATUS_UNSUCCESSFUL
;
1565 LsaSetForestTrustInformation(IN LSA_HANDLE PolicyHandle
,
1566 IN PLSA_UNICODE_STRING TrustedDomainName
,
1567 IN PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
1569 OUT PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
1571 FIXME("LsaSetForestTrustInformation(%p %p %p %d %p) stub\n",
1572 PolicyHandle
, TrustedDomainName
, ForestTrustInfo
, CheckOnly
, CollisionInfo
);
1573 return STATUS_NOT_IMPLEMENTED
;
1582 LsaSetInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1583 IN POLICY_INFORMATION_CLASS InformationClass
,
1588 TRACE("LsaSetInformationPolicy(%p %d %p)\n",
1589 PolicyHandle
, InformationClass
, Buffer
);
1593 Status
= LsarSetInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1595 (PLSAPR_POLICY_INFORMATION
)Buffer
);
1597 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1599 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1612 LsaSetQuotasForAccount(IN LSA_HANDLE AccountHandle
,
1613 IN PQUOTA_LIMITS QuotaLimits
)
1617 TRACE("LsaSetQuotasForAccount(%p %p)\n",
1618 AccountHandle
, QuotaLimits
);
1622 Status
= LsarSetQuotasForAccount((LSAPR_HANDLE
)AccountHandle
,
1625 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1627 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1640 LsaSetSecret(IN LSA_HANDLE SecretHandle
,
1641 IN PLSA_UNICODE_STRING CurrentValue OPTIONAL
,
1642 IN PLSA_UNICODE_STRING OldValue OPTIONAL
)
1644 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
= NULL
;
1645 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
= NULL
;
1649 TRACE("LsaSetSecret(%p %p %p)\n",
1650 SecretHandle
, EncryptedCurrentValue
, EncryptedOldValue
);
1652 if (CurrentValue
!= NULL
)
1654 BufferSize
= sizeof(LSAPR_CR_CIPHER_VALUE
) + CurrentValue
->MaximumLength
;
1655 EncryptedCurrentValue
= midl_user_allocate(BufferSize
);
1656 if (EncryptedCurrentValue
== NULL
)
1658 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1662 EncryptedCurrentValue
->Length
= CurrentValue
->Length
;
1663 EncryptedCurrentValue
->MaximumLength
= CurrentValue
->MaximumLength
;
1664 EncryptedCurrentValue
->Buffer
= (BYTE
*)(EncryptedCurrentValue
+ 1);
1665 if (EncryptedCurrentValue
->Buffer
!= NULL
)
1666 memcpy(EncryptedCurrentValue
->Buffer
, CurrentValue
->Buffer
, CurrentValue
->Length
);
1669 if (OldValue
!= NULL
)
1671 BufferSize
= sizeof(LSAPR_CR_CIPHER_VALUE
) + OldValue
->MaximumLength
;
1672 EncryptedOldValue
= midl_user_allocate(BufferSize
);
1673 if (EncryptedOldValue
== NULL
)
1675 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1679 EncryptedOldValue
->Length
= OldValue
->Length
;
1680 EncryptedOldValue
->MaximumLength
= OldValue
->MaximumLength
;
1681 EncryptedOldValue
->Buffer
= (BYTE
*)(EncryptedOldValue
+ 1);
1682 if (EncryptedOldValue
->Buffer
!= NULL
)
1683 memcpy(EncryptedOldValue
->Buffer
, OldValue
->Buffer
, OldValue
->Length
);
1688 Status
= LsarSetSecret((LSAPR_HANDLE
)SecretHandle
,
1689 EncryptedCurrentValue
,
1692 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1694 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1699 if (EncryptedCurrentValue
!= NULL
)
1700 midl_user_free(EncryptedCurrentValue
);
1702 if (EncryptedOldValue
!= NULL
)
1703 midl_user_free(EncryptedOldValue
);
1714 LsaSetSecurityObject(IN LSA_HANDLE ObjectHandle
,
1715 IN SECURITY_INFORMATION SecurityInformation
,
1716 IN PSECURITY_DESCRIPTOR SecurityDescriptor
)
1718 LSAPR_SR_SECURITY_DESCRIPTOR SdBuffer
= {0, NULL
};
1722 TRACE("LsaSetSecurityObject(%p %lx %p)\n",
1723 ObjectHandle
, SecurityInformation
, SecurityDescriptor
);
1725 Status
= RtlMakeSelfRelativeSD(SecurityDescriptor
,
1728 if (Status
!= STATUS_BUFFER_TOO_SMALL
)
1729 return STATUS_INVALID_PARAMETER
;
1731 SdBuffer
.SecurityDescriptor
= MIDL_user_allocate(SdLength
);
1732 if (SdBuffer
.SecurityDescriptor
== NULL
)
1733 return STATUS_INSUFFICIENT_RESOURCES
;
1735 Status
= RtlMakeSelfRelativeSD(SecurityDescriptor
,
1736 (PSECURITY_DESCRIPTOR
)SdBuffer
.SecurityDescriptor
,
1738 if (!NT_SUCCESS(Status
))
1741 SdBuffer
.Length
= SdLength
;
1745 Status
= LsarSetSecurityObject((LSAPR_HANDLE
)ObjectHandle
,
1746 SecurityInformation
,
1749 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1751 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1756 if (SdBuffer
.SecurityDescriptor
!= NULL
)
1757 MIDL_user_free(SdBuffer
.SecurityDescriptor
);
1768 LsaSetSystemAccessAccount(IN LSA_HANDLE AccountHandle
,
1769 IN ULONG SystemAccess
)
1773 TRACE("LsaSetSystemAccessAccount(%p 0x%lx)\n",
1774 AccountHandle
, SystemAccess
);
1778 Status
= LsarSetSystemAccessAccount((LSAPR_HANDLE
)AccountHandle
,
1781 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1783 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1796 LsaSetTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle
,
1797 IN PLSA_UNICODE_STRING TrustedDomainName
,
1798 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1801 FIXME("LsaSetTrustedDomainInfoByName(%p %p %d %p) stub\n",
1802 PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
1803 return STATUS_SUCCESS
;
1812 LsaSetTrustedDomainInformation(IN LSA_HANDLE PolicyHandle
,
1813 IN PSID TrustedDomainSid
,
1814 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1817 FIXME("LsaSetTrustedDomainInformation(%p %p %d %p) stub\n",
1818 PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
1819 return STATUS_SUCCESS
;
1828 LsaStorePrivateData(IN LSA_HANDLE PolicyHandle
,
1829 IN PLSA_UNICODE_STRING KeyName
,
1830 IN PLSA_UNICODE_STRING PrivateData OPTIONAL
)
1832 FIXME("LsaStorePrivateData(%p %p %p) stub\n",
1833 PolicyHandle
, KeyName
, PrivateData
);
1834 return STATUS_OBJECT_NAME_NOT_FOUND
;
1843 LsaUnregisterPolicyChangeNotification(IN POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass
,
1844 IN HANDLE NotificationEventHandle
)
1846 FIXME("(%d %p) stub\n",
1847 InformationClass
, NotificationEventHandle
);
1848 return STATUS_SUCCESS
;