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
18 WINE_DEFAULT_DEBUG_CHANNEL(advapi
);
22 LsapIsLocalComputer(PLSA_UNICODE_STRING ServerName
)
24 DWORD dwSize
= MAX_COMPUTERNAME_LENGTH
+ 1;
28 if (ServerName
== NULL
|| ServerName
->Length
== 0 || ServerName
->Buffer
== NULL
)
31 buf
= HeapAlloc(GetProcessHeap(), 0, dwSize
* sizeof(WCHAR
));
32 Result
= GetComputerNameW(buf
, &dwSize
);
33 if (Result
&& (ServerName
->Buffer
[0] == '\\') && (ServerName
->Buffer
[1] == '\\'))
35 Result
= Result
&& !lstrcmpW(ServerName
->Buffer
, buf
);
36 HeapFree(GetProcessHeap(), 0, buf
);
44 PLSAPR_SERVER_NAME_bind(PLSAPR_SERVER_NAME pszSystemName
)
46 handle_t hBinding
= NULL
;
47 LPWSTR pszStringBinding
;
50 TRACE("PLSAPR_SERVER_NAME_bind() called\n");
52 status
= RpcStringBindingComposeW(NULL
,
60 TRACE("RpcStringBindingCompose returned 0x%x\n", status
);
64 /* Set the binding handle that will be used to bind to the server. */
65 status
= RpcBindingFromStringBindingW(pszStringBinding
,
69 TRACE("RpcBindingFromStringBinding returned 0x%x\n", status
);
72 status
= RpcStringFreeW(&pszStringBinding
);
75 TRACE("RpcStringFree returned 0x%x\n", status
);
84 PLSAPR_SERVER_NAME_unbind(PLSAPR_SERVER_NAME pszSystemName
,
89 TRACE("PLSAPR_SERVER_NAME_unbind() called\n");
91 status
= RpcBindingFree(&hBinding
);
94 TRACE("RpcBindingFree returned 0x%x\n", status
);
104 LsaAddAccountRights(IN LSA_HANDLE PolicyHandle
,
106 IN PLSA_UNICODE_STRING UserRights
,
107 IN ULONG CountOfRights
)
109 LSAPR_USER_RIGHT_SET UserRightSet
;
112 TRACE("LsaAddAccountRights(%p %p %p 0x%08x)\n",
113 PolicyHandle
, AccountSid
, UserRights
, CountOfRights
);
115 UserRightSet
.Entries
= CountOfRights
;
116 UserRightSet
.UserRights
= (PRPC_UNICODE_STRING
)UserRights
;
120 Status
= LsarAddAccountRights((LSAPR_HANDLE
)PolicyHandle
,
121 (PRPC_SID
)AccountSid
,
125 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
127 Status
= I_RpcMapWin32Status(RpcExceptionCode());
140 LsaAddPrivilegesToAccount(IN LSA_HANDLE AccountHandle
,
141 IN PPRIVILEGE_SET PrivilegeSet
)
145 TRACE("LsaAddPrivilegesToAccount(%p %p)\n",
146 AccountHandle
, PrivilegeSet
);
150 Status
= LsarAddPrivilegesToAccount((LSAPR_HANDLE
)AccountHandle
,
151 (PLSAPR_PRIVILEGE_SET
)PrivilegeSet
);
153 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
155 Status
= I_RpcMapWin32Status(RpcExceptionCode());
168 LsaClearAuditLog(IN LSA_HANDLE PolicyHandle
)
172 TRACE("LsaClearAuditLog(%p)\n", PolicyHandle
);
176 Status
= LsarClearAuditLog((LSAPR_HANDLE
)PolicyHandle
);
178 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
180 Status
= I_RpcMapWin32Status(RpcExceptionCode());
193 LsaClose(IN LSA_HANDLE ObjectHandle
)
197 TRACE("LsaClose(%p) called\n", ObjectHandle
);
201 Status
= LsarClose((PLSAPR_HANDLE
)&ObjectHandle
);
203 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
205 Status
= I_RpcMapWin32Status(RpcExceptionCode());
218 LsaCreateAccount(IN LSA_HANDLE PolicyHandle
,
220 IN ACCESS_MASK DesiredAccess
,
221 OUT PLSA_HANDLE AccountHandle
)
225 TRACE("LsaCreateAccount(%p %p 0x%08lx %p)\n",
226 PolicyHandle
, AccountSid
, DesiredAccess
, AccountHandle
);
230 Status
= LsarCreateAccount((LSAPR_HANDLE
)PolicyHandle
,
235 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
237 Status
= I_RpcMapWin32Status(RpcExceptionCode());
250 LsaCreateSecret(IN LSA_HANDLE PolicyHandle
,
251 IN PLSA_UNICODE_STRING SecretName
,
252 IN ACCESS_MASK DesiredAccess
,
253 OUT PLSA_HANDLE SecretHandle
)
257 TRACE("LsaCreateSecret(%p %p 0x%08lx %p)\n",
258 PolicyHandle
, SecretName
, DesiredAccess
, SecretHandle
);
262 Status
= LsarCreateSecret((LSAPR_HANDLE
)PolicyHandle
,
263 (PRPC_UNICODE_STRING
)SecretName
,
267 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
269 Status
= I_RpcMapWin32Status(RpcExceptionCode());
282 LsaCreateTrustedDomain(IN LSA_HANDLE PolicyHandle
,
283 IN PLSA_TRUST_INFORMATION TrustedDomainInformation
,
284 IN ACCESS_MASK DesiredAccess
,
285 OUT PLSA_HANDLE TrustedDomainHandle
)
289 TRACE("LsaCreateTrustedDomain(%p %p 0x%08lx %p)\n",
290 PolicyHandle
, TrustedDomainInformation
, DesiredAccess
, TrustedDomainHandle
);
294 Status
= LsarCreateTrustedDomain((LSAPR_HANDLE
)PolicyHandle
,
295 (PLSAPR_TRUST_INFORMATION
)TrustedDomainInformation
,
297 (PLSAPR_HANDLE
)TrustedDomainHandle
);
299 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
301 Status
= I_RpcMapWin32Status(RpcExceptionCode());
314 LsaCreateTrustedDomainEx(IN LSA_HANDLE PolicyHandle
,
315 IN PTRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation
,
316 IN PTRUSTED_DOMAIN_AUTH_INFORMATION AuthenticationInformation
,
317 IN ACCESS_MASK DesiredAccess
,
318 OUT PLSA_HANDLE TrustedDomainHandle
)
320 PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL EncryptedAuthInfo
= NULL
;
323 TRACE("LsaCreateTrustedDomainEx(%p %p %p 0x%08lx %p) stub\n",
324 PolicyHandle
, TrustedDomainInformation
, AuthenticationInformation
,
325 DesiredAccess
, TrustedDomainHandle
);
329 /* FIXME: Encrypt AuthenticationInformation */
331 Status
= LsarCreateTrustedDomainEx2((LSAPR_HANDLE
)PolicyHandle
,
332 (PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX
)TrustedDomainInformation
,
335 (PLSAPR_HANDLE
)TrustedDomainHandle
);
337 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
339 Status
= I_RpcMapWin32Status(RpcExceptionCode());
352 LsaDelete(IN LSA_HANDLE ObjectHandle
)
356 TRACE("LsaDelete(%p)\n", ObjectHandle
);
360 Status
= LsarDelete((LSAPR_HANDLE
)ObjectHandle
);
362 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
364 Status
= I_RpcMapWin32Status(RpcExceptionCode());
377 LsaDeleteTrustedDomain(IN LSA_HANDLE PolicyHandle
,
378 IN PSID TrustedDomainSid
)
382 TRACE("LsaDeleteTrustedDomain(%p %p)\n",
383 PolicyHandle
, TrustedDomainSid
);
387 Status
= LsarDeleteTrustedDomain((LSAPR_HANDLE
)PolicyHandle
,
390 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
392 Status
= I_RpcMapWin32Status(RpcExceptionCode());
405 LsaEnumerateAccountRights(IN LSA_HANDLE PolicyHandle
,
407 OUT PLSA_UNICODE_STRING
*UserRights
,
408 OUT PULONG CountOfRights
)
410 LSAPR_USER_RIGHT_SET UserRightsSet
;
413 TRACE("LsaEnumerateAccountRights(%p %p %p %p)\n",
414 PolicyHandle
, AccountSid
, UserRights
, CountOfRights
);
416 UserRightsSet
.Entries
= 0;
417 UserRightsSet
.UserRights
= NULL
;
421 Status
= LsarEnumerateAccountRights((LSAPR_HANDLE
)PolicyHandle
,
425 *UserRights
= (PUNICODE_STRING
)UserRightsSet
.UserRights
;
426 *CountOfRights
= UserRightsSet
.Entries
;
428 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
430 Status
= I_RpcMapWin32Status(RpcExceptionCode());
432 if (UserRightsSet
.UserRights
!= NULL
)
433 MIDL_user_free(UserRightsSet
.UserRights
);
446 LsaEnumerateAccounts(IN LSA_HANDLE PolicyHandle
,
447 IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext
,
449 IN ULONG PreferedMaximumLength
,
450 OUT PULONG CountReturned
)
452 LSAPR_ACCOUNT_ENUM_BUFFER AccountEnumBuffer
;
455 TRACE("LsaEnumerateAccounts(%p %p %p %lu %p)\n",
456 PolicyHandle
, EnumerationContext
, Buffer
,
457 PreferedMaximumLength
, CountReturned
);
459 AccountEnumBuffer
.EntriesRead
= 0;
460 AccountEnumBuffer
.Information
= NULL
;
464 Status
= LsarEnumerateAccounts((LSAPR_HANDLE
)PolicyHandle
,
467 PreferedMaximumLength
);
469 *Buffer
= AccountEnumBuffer
.Information
;
470 *CountReturned
= AccountEnumBuffer
.EntriesRead
;
472 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
474 if (AccountEnumBuffer
.Information
!= NULL
)
475 MIDL_user_free(AccountEnumBuffer
.Information
);
477 Status
= I_RpcMapWin32Status(RpcExceptionCode());
490 LsaEnumerateAccountsWithUserRight(IN LSA_HANDLE PolicyHandle
,
491 IN PLSA_UNICODE_STRING UserRight OPTIONAL
,
493 OUT PULONG CountReturned
)
495 LSAPR_ACCOUNT_ENUM_BUFFER AccountEnumBuffer
;
498 TRACE("LsaEnumerateAccountsWithUserRight(%p %p %p %p) stub\n",
499 PolicyHandle
, UserRight
, Buffer
, CountReturned
);
501 AccountEnumBuffer
.EntriesRead
= 0;
502 AccountEnumBuffer
.Information
= NULL
;
506 Status
= LsarEnumerateAccountsWithUserRight((LSAPR_HANDLE
)PolicyHandle
,
507 (PRPC_UNICODE_STRING
)UserRight
,
510 *Buffer
= AccountEnumBuffer
.Information
;
511 *CountReturned
= AccountEnumBuffer
.EntriesRead
;
513 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
515 if (AccountEnumBuffer
.Information
!= NULL
)
516 MIDL_user_free(AccountEnumBuffer
.Information
);
518 Status
= I_RpcMapWin32Status(RpcExceptionCode());
531 LsaEnumeratePrivileges(IN LSA_HANDLE PolicyHandle
,
532 IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext
,
534 IN ULONG PreferedMaximumLength
,
535 OUT PULONG CountReturned
)
537 LSAPR_PRIVILEGE_ENUM_BUFFER PrivilegeEnumBuffer
;
540 TRACE("LsaEnumeratePrivileges(%p %p %p %lu %p)\n",
541 PolicyHandle
, EnumerationContext
, Buffer
,
542 PreferedMaximumLength
, CountReturned
);
544 PrivilegeEnumBuffer
.Entries
= 0;
545 PrivilegeEnumBuffer
.Privileges
= NULL
;
549 Status
= LsarEnumeratePrivileges((LSAPR_HANDLE
)PolicyHandle
,
551 &PrivilegeEnumBuffer
,
552 PreferedMaximumLength
);
554 *Buffer
= PrivilegeEnumBuffer
.Privileges
;
555 *CountReturned
= PrivilegeEnumBuffer
.Entries
;
558 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
560 if (PrivilegeEnumBuffer
.Privileges
!= NULL
)
561 MIDL_user_free(PrivilegeEnumBuffer
.Privileges
);
563 Status
= I_RpcMapWin32Status(RpcExceptionCode());
576 LsaEnumeratePrivilegesOfAccount(IN LSA_HANDLE AccountHandle
,
577 OUT PPRIVILEGE_SET
*Privileges
)
581 TRACE("LsaEnumeratePrivilegesOfAccount(%p %p)\n",
582 AccountHandle
, Privileges
);
586 Status
= LsarEnumeratePrivilegesAccount((LSAPR_HANDLE
)AccountHandle
,
587 (LSAPR_PRIVILEGE_SET
**)Privileges
);
589 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
591 Status
= I_RpcMapWin32Status(RpcExceptionCode());
604 LsaEnumerateTrustedDomains(IN LSA_HANDLE PolicyHandle
,
605 IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext
,
607 IN ULONG PreferedMaximumLength
,
608 OUT PULONG CountReturned
)
610 FIXME("LsaEnumerateTrustedDomains(%p %p %p %lu %p) stub\n",
611 PolicyHandle
, EnumerationContext
, Buffer
,
612 PreferedMaximumLength
, CountReturned
);
617 return STATUS_SUCCESS
;
626 LsaEnumerateTrustedDomainsEx(IN LSA_HANDLE PolicyHandle
,
627 IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext
,
629 IN ULONG PreferedMaximumLength
,
630 OUT PULONG CountReturned
)
632 FIXME("LsaEnumerateTrustedDomainsEx(%p %p %p %lu %p) stub\n",
633 PolicyHandle
, EnumerationContext
, Buffer
,
634 PreferedMaximumLength
, CountReturned
);
639 return STATUS_SUCCESS
;
648 LsaFreeMemory(IN PVOID Buffer
)
650 TRACE("LsaFreeMemory(%p)\n", Buffer
);
651 return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer
);
660 LsaGetQuotasForAccount(IN LSA_HANDLE AccountHandle
,
661 OUT PQUOTA_LIMITS QuotaLimits
)
665 TRACE("LsaGetQuotasForAccount(%p %p)\n",
666 AccountHandle
, QuotaLimits
);
670 Status
= LsarGetQuotasForAccount((LSAPR_HANDLE
)AccountHandle
,
673 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
675 Status
= I_RpcMapWin32Status(RpcExceptionCode());
688 LsaGetRemoteUserName(IN PLSA_UNICODE_STRING SystemName OPTIONAL
,
689 OUT PLSA_UNICODE_STRING
*UserName
,
690 OUT PLSA_UNICODE_STRING
*DomainName OPTIONAL
)
692 PRPC_UNICODE_STRING UserNameString
= NULL
;
693 PRPC_UNICODE_STRING DomainNameString
= NULL
;
696 TRACE("LsaGetRemoteUserName(%s %p %p)\n",
697 SystemName
? debugstr_w(SystemName
->Buffer
) : "(null)",
698 UserName
, DomainName
);
702 Status
= LsarGetUserName((PLSAPR_SERVER_NAME
)SystemName
,
704 (DomainName
!= NULL
) ? &DomainNameString
: NULL
);
706 *UserName
= (PLSA_UNICODE_STRING
)UserNameString
;
708 if (DomainName
!= NULL
)
709 *DomainName
= (PLSA_UNICODE_STRING
)DomainNameString
;
711 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
713 if (UserNameString
!= NULL
)
714 MIDL_user_free(UserNameString
);
716 if (DomainNameString
!= NULL
)
717 MIDL_user_free(DomainNameString
);
719 Status
= I_RpcMapWin32Status(RpcExceptionCode());
732 LsaGetSystemAccessAccount(IN LSA_HANDLE AccountHandle
,
733 OUT PULONG SystemAccess
)
737 TRACE("LsaGetSystemAccessAccount(%p %p)\n",
738 AccountHandle
, SystemAccess
);
742 Status
= LsarGetSystemAccessAccount((LSAPR_HANDLE
)AccountHandle
,
743 (ACCESS_MASK
*)SystemAccess
);
745 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
747 Status
= I_RpcMapWin32Status(RpcExceptionCode());
760 LsaGetUserName(OUT PUNICODE_STRING
*UserName
,
761 OUT PUNICODE_STRING
*DomainName OPTIONAL
)
763 PRPC_UNICODE_STRING UserNameString
= NULL
;
764 PRPC_UNICODE_STRING DomainNameString
= NULL
;
767 TRACE("LsaGetUserName(%p %p)\n",
768 UserName
, DomainName
);
772 Status
= LsarGetUserName(NULL
,
774 (DomainName
!= NULL
) ? &DomainNameString
: NULL
);
776 *UserName
= (PUNICODE_STRING
)UserNameString
;
778 if (DomainName
!= NULL
)
779 *DomainName
= (PUNICODE_STRING
)DomainNameString
;
781 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
783 if (UserNameString
!= NULL
)
784 MIDL_user_free(UserNameString
);
786 if (DomainNameString
!= NULL
)
787 MIDL_user_free(DomainNameString
);
789 Status
= I_RpcMapWin32Status(RpcExceptionCode());
802 LsaLookupNames(IN LSA_HANDLE PolicyHandle
,
804 IN PLSA_UNICODE_STRING Names
,
805 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
806 OUT PLSA_TRANSLATED_SID
*Sids
)
808 LSAPR_TRANSLATED_SIDS TranslatedSids
= {0, NULL
};
809 ULONG MappedCount
= 0;
812 TRACE("LsaLookupNames(%p %lu %p %p %p)\n",
813 PolicyHandle
, Count
, Names
, ReferencedDomains
, Sids
);
815 if (ReferencedDomains
== NULL
|| Sids
== NULL
)
816 return STATUS_INVALID_PARAMETER
;
820 *ReferencedDomains
= NULL
;
823 TranslatedSids
.Entries
= Count
;
825 Status
= LsarLookupNames((LSAPR_HANDLE
)PolicyHandle
,
827 (PRPC_UNICODE_STRING
)Names
,
828 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
833 *Sids
= (PLSA_TRANSLATED_SID
)TranslatedSids
.Sids
;
835 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
837 if (TranslatedSids
.Sids
!= NULL
)
838 MIDL_user_free(TranslatedSids
.Sids
);
840 Status
= I_RpcMapWin32Status(RpcExceptionCode());
853 LsaLookupNames2(IN LSA_HANDLE PolicyHandle
,
856 IN PLSA_UNICODE_STRING Names
,
857 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
858 OUT PLSA_TRANSLATED_SID2
*Sids
)
860 LSAPR_TRANSLATED_SIDS_EX2 TranslatedSids
= {0, NULL
};
861 ULONG MappedCount
= 0;
864 TRACE("LsaLookupNames2(%p 0x%08x %lu %p %p %p)\n",
865 PolicyHandle
, Flags
, Count
, Names
, ReferencedDomains
, Sids
);
867 if (ReferencedDomains
== NULL
|| Sids
== NULL
)
868 return STATUS_INVALID_PARAMETER
;
872 *ReferencedDomains
= NULL
;
875 TranslatedSids
.Entries
= Count
;
877 Status
= LsarLookupNames3((LSAPR_HANDLE
)PolicyHandle
,
879 (PRPC_UNICODE_STRING
)Names
,
880 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
887 *Sids
= (PLSA_TRANSLATED_SID2
)TranslatedSids
.Sids
;
889 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
891 if (TranslatedSids
.Sids
!= NULL
)
892 MIDL_user_free(TranslatedSids
.Sids
);
894 Status
= I_RpcMapWin32Status(RpcExceptionCode());
907 LsaLookupPrivilegeDisplayName(IN LSA_HANDLE PolicyHandle
,
908 IN PLSA_UNICODE_STRING Name
,
909 OUT PLSA_UNICODE_STRING
*DisplayName
,
910 OUT PSHORT LanguageReturned
)
912 FIXME("LsaLookupPrivilegeDisplayName(%p %p %p %p)\n",
913 PolicyHandle
, Name
, DisplayName
, LanguageReturned
);
914 return STATUS_NOT_IMPLEMENTED
;
923 LsaLookupPrivilegeName(IN LSA_HANDLE PolicyHandle
,
925 OUT PUNICODE_STRING
*Name
)
927 PRPC_UNICODE_STRING NameBuffer
= NULL
;
930 TRACE("LsaLookupPrivilegeName(%p %p %p)\n",
931 PolicyHandle
, Value
, Name
);
935 Status
= LsarLookupPrivilegeName(PolicyHandle
,
939 *Name
= (PUNICODE_STRING
)NameBuffer
;
941 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
943 if (NameBuffer
!= NULL
)
944 MIDL_user_free(NameBuffer
);
946 Status
= I_RpcMapWin32Status(RpcExceptionCode());
959 LsaLookupPrivilegeValue(IN LSA_HANDLE PolicyHandle
,
960 IN PLSA_UNICODE_STRING Name
,
966 TRACE("LsaLookupPrivilegeValue(%p %p %p)\n",
967 PolicyHandle
, Name
, Value
);
971 Status
= LsarLookupPrivilegeValue(PolicyHandle
,
972 (PRPC_UNICODE_STRING
)Name
,
974 if (Status
== STATUS_SUCCESS
)
977 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
979 Status
= I_RpcMapWin32Status(RpcExceptionCode());
992 LsaLookupSids(IN LSA_HANDLE PolicyHandle
,
995 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
996 OUT PLSA_TRANSLATED_NAME
*Names
)
998 LSAPR_SID_ENUM_BUFFER SidEnumBuffer
;
999 LSAPR_TRANSLATED_NAMES TranslatedNames
;
1000 ULONG MappedCount
= 0;
1003 TRACE("LsaLookupSids(%p %lu %p %p %p)\n",
1004 PolicyHandle
, Count
, Sids
, ReferencedDomains
, Names
);
1007 return STATUS_INVALID_PARAMETER
;
1009 SidEnumBuffer
.Entries
= Count
;
1010 SidEnumBuffer
.SidInfo
= (PLSAPR_SID_INFORMATION
)Sids
;
1014 *ReferencedDomains
= NULL
;
1017 TranslatedNames
.Entries
= 0;
1018 TranslatedNames
.Names
= NULL
;
1020 Status
= LsarLookupSids((LSAPR_HANDLE
)PolicyHandle
,
1022 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
1027 *Names
= (PLSA_TRANSLATED_NAME
)TranslatedNames
.Names
;
1029 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1031 if (TranslatedNames
.Names
!= NULL
)
1033 MIDL_user_free(TranslatedNames
.Names
);
1036 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1044 /******************************************************************************
1045 * LsaNtStatusToWinError
1054 LsaNtStatusToWinError(IN NTSTATUS Status
)
1056 TRACE("LsaNtStatusToWinError(0x%lx)\n", Status
);
1057 return RtlNtStatusToDosError(Status
);
1066 LsaOpenAccount(IN LSA_HANDLE PolicyHandle
,
1068 IN ACCESS_MASK DesiredAccess
,
1069 OUT PLSA_HANDLE AccountHandle
)
1073 TRACE("LsaOpenAccount(%p %p 0x%08lx %p)\n",
1074 PolicyHandle
, AccountSid
, DesiredAccess
, AccountHandle
);
1078 Status
= LsarOpenAccount((LSAPR_HANDLE
)PolicyHandle
,
1083 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1085 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1093 /******************************************************************************
1106 LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName OPTIONAL
,
1107 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
1108 IN ACCESS_MASK DesiredAccess
,
1109 OUT PLSA_HANDLE PolicyHandle
)
1113 TRACE("LsaOpenPolicy(%s %p 0x%08lx %p)\n",
1114 SystemName
? debugstr_w(SystemName
->Buffer
) : "(null)",
1115 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
1117 /* FIXME: RPC should take care of this */
1118 if (!LsapIsLocalComputer(SystemName
))
1119 return RPC_NT_SERVER_UNAVAILABLE
;
1123 *PolicyHandle
= NULL
;
1125 Status
= LsarOpenPolicy(SystemName
? SystemName
->Buffer
: NULL
,
1126 (PLSAPR_OBJECT_ATTRIBUTES
)ObjectAttributes
,
1130 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1132 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1136 TRACE("LsaOpenPolicy() done (Status: 0x%08lx)\n", Status
);
1147 LsaOpenPolicySce(IN PLSA_UNICODE_STRING SystemName OPTIONAL
,
1148 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
1149 IN ACCESS_MASK DesiredAccess
,
1150 OUT PLSA_HANDLE PolicyHandle
)
1152 FIXME("LsaOpenPolicySce(%s %p 0x%08lx %p)\n",
1153 SystemName
? debugstr_w(SystemName
->Buffer
) : "(null)",
1154 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
1155 return STATUS_NOT_IMPLEMENTED
;
1164 LsaOpenSecret(IN LSA_HANDLE PolicyHandle
,
1165 IN PLSA_UNICODE_STRING SecretName
,
1166 IN ACCESS_MASK DesiredAccess
,
1167 OUT PLSA_HANDLE SecretHandle
)
1171 TRACE("LsaOpenSecret(%p %p 0x%08lx %p)\n",
1172 PolicyHandle
, SecretName
, DesiredAccess
, SecretHandle
);
1176 *SecretHandle
= NULL
;
1178 Status
= LsarOpenSecret((LSAPR_HANDLE
)PolicyHandle
,
1179 (PRPC_UNICODE_STRING
)SecretName
,
1183 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1185 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1189 TRACE("LsaOpenSecret() done (Status: 0x%08lx)\n", Status
);
1200 LsaOpenTrustedDomain(IN LSA_HANDLE PolicyHandle
,
1201 IN PSID TrustedDomainSid
,
1202 IN ACCESS_MASK DesiredAccess
,
1203 OUT PLSA_HANDLE TrustedDomainHandle
)
1207 TRACE("LsaOpenTrustedDomain(%p %p 0x%08lx %p)\n",
1208 PolicyHandle
, TrustedDomainSid
, DesiredAccess
, TrustedDomainHandle
);
1212 Status
= LsarOpenTrustedDomain((LSAPR_HANDLE
)PolicyHandle
,
1213 (PRPC_SID
)TrustedDomainSid
,
1215 (PLSAPR_HANDLE
)TrustedDomainHandle
);
1217 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1219 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1232 LsaOpenTrustedDomainByName(IN LSA_HANDLE PolicyHandle
,
1233 IN PLSA_UNICODE_STRING TrustedDomainName
,
1234 IN ACCESS_MASK DesiredAccess
,
1235 OUT PLSA_HANDLE TrustedDomainHandle
)
1239 TRACE("LsaOpenTrustedDomainByName(%p %p 0x%08lx %p)\n",
1240 PolicyHandle
, TrustedDomainName
, DesiredAccess
, TrustedDomainHandle
);
1244 Status
= LsarOpenTrustedDomainByName((LSAPR_HANDLE
)PolicyHandle
,
1245 (PRPC_UNICODE_STRING
)TrustedDomainName
,
1247 TrustedDomainHandle
);
1249 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1251 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1264 LsaQueryDomainInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1265 IN POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
1268 PLSAPR_POLICY_DOMAIN_INFORMATION PolicyInformation
= NULL
;
1271 TRACE("LsaQueryDomainInformationPolicy(%p %lu %p)\n",
1272 PolicyHandle
, InformationClass
, Buffer
);
1276 Status
= LsarQueryDomainInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1278 &PolicyInformation
);
1280 *Buffer
= PolicyInformation
;
1282 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1284 if (PolicyInformation
!= NULL
)
1285 MIDL_user_free(PolicyInformation
);
1287 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1300 LsaQueryForestTrustInformation(IN LSA_HANDLE PolicyHandle
,
1301 IN PLSA_UNICODE_STRING TrustedDomainName
,
1302 OUT PLSA_FOREST_TRUST_INFORMATION
*ForestTrustInfo
)
1306 TRACE("LsaQueryForestTrustInformation(%p %p %p)\n",
1307 PolicyHandle
, TrustedDomainName
, ForestTrustInfo
);
1311 Status
= LsarQueryForestTrustInformation((LSAPR_HANDLE
)PolicyHandle
,
1313 ForestTrustDomainInfo
,
1316 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1318 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1331 LsaQueryInfoTrustedDomain(IN LSA_HANDLE TrustedDomainHandle
,
1332 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1335 FIXME("LsaQueryInfoTrustedDomain(%p %d %p) stub\n",
1336 TrustedDomainHandle
, InformationClass
, Buffer
);
1337 return STATUS_NOT_IMPLEMENTED
;
1346 LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1347 IN POLICY_INFORMATION_CLASS InformationClass
,
1350 PLSAPR_POLICY_INFORMATION PolicyInformation
= NULL
;
1353 TRACE("LsaQueryInformationPolicy(%p %d %p)\n",
1354 PolicyHandle
, InformationClass
, Buffer
);
1358 Status
= LsarQueryInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1360 &PolicyInformation
);
1361 *Buffer
= PolicyInformation
;
1363 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1365 if (PolicyInformation
!= NULL
)
1366 MIDL_user_free(PolicyInformation
);
1368 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1372 TRACE("Done (Status: 0x%08x)\n", Status
);
1383 LsaQuerySecret(IN LSA_HANDLE SecretHandle
,
1384 OUT PLSA_UNICODE_STRING
*CurrentValue OPTIONAL
,
1385 OUT PLARGE_INTEGER CurrentValueSetTime OPTIONAL
,
1386 OUT PLSA_UNICODE_STRING
*OldValue OPTIONAL
,
1387 OUT PLARGE_INTEGER OldValueSetTime OPTIONAL
)
1389 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
= NULL
;
1390 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
= NULL
;
1391 PLSA_UNICODE_STRING DecryptedCurrentValue
= NULL
;
1392 PLSA_UNICODE_STRING DecryptedOldValue
= NULL
;
1396 TRACE("LsaQuerySecret(%p %p %p %p %p)\n",
1397 SecretHandle
, CurrentValue
, CurrentValueSetTime
,
1398 OldValue
, OldValueSetTime
);
1402 Status
= LsarQuerySecret((PLSAPR_HANDLE
)SecretHandle
,
1403 &EncryptedCurrentValue
,
1404 CurrentValueSetTime
,
1408 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1410 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1414 if (!NT_SUCCESS(Status
))
1417 /* Decrypt the current value */
1418 if (CurrentValue
!= NULL
)
1420 if (EncryptedCurrentValue
== NULL
)
1422 *CurrentValue
= NULL
;
1426 /* FIXME: Decrypt the current value */
1427 BufferSize
= sizeof(LSA_UNICODE_STRING
) + EncryptedCurrentValue
->MaximumLength
;
1428 DecryptedCurrentValue
= midl_user_allocate(BufferSize
);
1429 if (DecryptedCurrentValue
== NULL
)
1431 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1435 DecryptedCurrentValue
->Length
= (USHORT
)EncryptedCurrentValue
->Length
;
1436 DecryptedCurrentValue
->MaximumLength
= (USHORT
)EncryptedCurrentValue
->MaximumLength
;
1437 DecryptedCurrentValue
->Buffer
= (PWSTR
)(DecryptedCurrentValue
+ 1);
1438 RtlCopyMemory(DecryptedCurrentValue
->Buffer
,
1439 EncryptedCurrentValue
->Buffer
,
1440 EncryptedCurrentValue
->Length
);
1442 *CurrentValue
= DecryptedCurrentValue
;
1446 /* Decrypt the old value */
1447 if (OldValue
!= NULL
)
1449 if (EncryptedOldValue
== NULL
)
1455 /* FIXME: Decrypt the old value */
1456 BufferSize
= sizeof(LSA_UNICODE_STRING
) + EncryptedOldValue
->MaximumLength
;
1457 DecryptedOldValue
= midl_user_allocate(BufferSize
);
1458 if (DecryptedOldValue
== NULL
)
1460 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1464 DecryptedOldValue
->Length
= (USHORT
)EncryptedOldValue
->Length
;
1465 DecryptedOldValue
->MaximumLength
= (USHORT
)EncryptedOldValue
->MaximumLength
;
1466 DecryptedOldValue
->Buffer
= (PWSTR
)(DecryptedOldValue
+ 1);
1467 RtlCopyMemory(DecryptedOldValue
->Buffer
,
1468 EncryptedOldValue
->Buffer
,
1469 EncryptedOldValue
->Length
);
1471 *OldValue
= DecryptedOldValue
;
1476 if (!NT_SUCCESS(Status
))
1478 if (DecryptedCurrentValue
!= NULL
)
1479 midl_user_free(DecryptedCurrentValue
);
1481 if (DecryptedOldValue
!= NULL
)
1482 midl_user_free(DecryptedOldValue
);
1484 if (CurrentValue
!= NULL
)
1485 *CurrentValue
= NULL
;
1487 if (OldValue
!= NULL
)
1491 if (EncryptedCurrentValue
!= NULL
)
1492 midl_user_free(EncryptedCurrentValue
);
1494 if (EncryptedOldValue
!= NULL
)
1495 midl_user_free(EncryptedOldValue
);
1506 LsaQuerySecurityObject(IN LSA_HANDLE ObjectHandle
,
1507 IN SECURITY_INFORMATION SecurityInformation
,
1508 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
)
1510 LSAPR_SR_SECURITY_DESCRIPTOR SdBuffer
;
1511 PLSAPR_SR_SECURITY_DESCRIPTOR SdPointer
;
1514 TRACE("LsaQuerySecurityObject(%p %lx %p)\n",
1515 ObjectHandle
, SecurityInformation
, SecurityDescriptor
);
1517 SdBuffer
.Length
= 0;
1518 SdBuffer
.SecurityDescriptor
= NULL
;
1520 SdPointer
= &SdBuffer
;
1524 Status
= LsarQuerySecurityObject((LSAPR_HANDLE
)ObjectHandle
,
1525 SecurityInformation
,
1527 if (NT_SUCCESS(Status
))
1529 *SecurityDescriptor
= SdBuffer
.SecurityDescriptor
;
1533 *SecurityDescriptor
= NULL
;
1536 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1538 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1551 LsaQueryTrustedDomainInfo(IN LSA_HANDLE PolicyHandle
,
1552 IN PSID TrustedDomainSid
,
1553 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1556 FIXME("LsaQueryTrustedDomainInfo(%p %p %d %p) stub\n",
1557 PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
1558 return STATUS_OBJECT_NAME_NOT_FOUND
;
1567 LsaQueryTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle
,
1568 IN PLSA_UNICODE_STRING TrustedDomainName
,
1569 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1574 TRACE("LsaQueryTrustedDomainInfoByName(%p %p %d %p)\n",
1575 PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
1577 if (InformationClass
== TrustedDomainAuthInformationInternal
||
1578 InformationClass
== TrustedDomainFullInformationInternal
)
1579 return STATUS_INVALID_INFO_CLASS
;
1583 Status
= LsarQueryTrustedDomainInfoByName((LSAPR_HANDLE
)PolicyHandle
,
1584 (PRPC_UNICODE_STRING
)TrustedDomainName
,
1586 (PLSAPR_TRUSTED_DOMAIN_INFO
*)Buffer
);
1588 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1590 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1603 LsaRemoveAccountRights(IN LSA_HANDLE PolicyHandle
,
1605 IN BOOLEAN AllRights
,
1606 IN PLSA_UNICODE_STRING UserRights
,
1607 IN ULONG CountOfRights
)
1609 LSAPR_USER_RIGHT_SET UserRightSet
;
1611 TRACE("LsaRemoveAccountRights(%p %p %d %p %lu)\n",
1612 PolicyHandle
, AccountSid
, AllRights
, UserRights
, CountOfRights
);
1614 UserRightSet
.Entries
= CountOfRights
;
1615 UserRightSet
.UserRights
= (PRPC_UNICODE_STRING
)UserRights
;
1619 LsarRemoveAccountRights((LSAPR_HANDLE
)PolicyHandle
,
1620 (PRPC_SID
)AccountSid
,
1624 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1626 I_RpcMapWin32Status(RpcExceptionCode());
1630 return STATUS_SUCCESS
;
1639 LsaRemovePrivilegesFromAccount(IN LSA_HANDLE AccountHandle
,
1640 IN BOOLEAN AllPrivileges
,
1641 IN PPRIVILEGE_SET Privileges OPTIONAL
)
1647 Status
= LsarRemovePrivilegesFromAccount((LSAPR_HANDLE
)AccountHandle
,
1649 (PLSAPR_PRIVILEGE_SET
)Privileges
);
1651 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1653 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1666 LsaRetrievePrivateData(IN LSA_HANDLE PolicyHandle
,
1667 IN PLSA_UNICODE_STRING KeyName
,
1668 OUT PLSA_UNICODE_STRING
*PrivateData
)
1670 FIXME("LsaRetrievePrivateData(%p %p %p) stub\n",
1671 PolicyHandle
, KeyName
, PrivateData
);
1672 return STATUS_OBJECT_NAME_NOT_FOUND
;
1681 LsaSetDomainInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1682 IN POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
1683 IN PVOID Buffer OPTIONAL
)
1687 TRACE("LsaSetDomainInformationPolicy(%p %d %p)\n",
1688 PolicyHandle
, InformationClass
, Buffer
);
1692 Status
= LsarSetDomainInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1694 (PLSAPR_POLICY_DOMAIN_INFORMATION
)Buffer
);
1696 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1698 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1711 LsaSetForestTrustInformation(IN LSA_HANDLE PolicyHandle
,
1712 IN PLSA_UNICODE_STRING TrustedDomainName
,
1713 IN PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
1715 OUT PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
1719 TRACE("LsaSetForestTrustInformation(%p %p %p %d %p)\n",
1720 PolicyHandle
, TrustedDomainName
, ForestTrustInfo
, CheckOnly
, CollisionInfo
);
1724 Status
= LsarSetForestTrustInformation((LSAPR_HANDLE
)PolicyHandle
,
1726 ForestTrustDomainInfo
,
1731 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1733 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1746 LsaSetInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1747 IN POLICY_INFORMATION_CLASS InformationClass
,
1752 TRACE("LsaSetInformationPolicy(%p %d %p)\n",
1753 PolicyHandle
, InformationClass
, Buffer
);
1757 Status
= LsarSetInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1759 (PLSAPR_POLICY_INFORMATION
)Buffer
);
1761 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1763 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1776 LsaSetInformationTrustedDomain(IN LSA_HANDLE TrustedDomainHandle
,
1777 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1780 FIXME("LsaSetInformationTrustedDomain(%p %d %p)\n",
1781 TrustedDomainHandle
, InformationClass
, Buffer
);
1782 return STATUS_NOT_IMPLEMENTED
;
1791 LsaSetQuotasForAccount(IN LSA_HANDLE AccountHandle
,
1792 IN PQUOTA_LIMITS QuotaLimits
)
1796 TRACE("LsaSetQuotasForAccount(%p %p)\n",
1797 AccountHandle
, QuotaLimits
);
1801 Status
= LsarSetQuotasForAccount((LSAPR_HANDLE
)AccountHandle
,
1804 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1806 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1819 LsaSetSecret(IN LSA_HANDLE SecretHandle
,
1820 IN PLSA_UNICODE_STRING CurrentValue OPTIONAL
,
1821 IN PLSA_UNICODE_STRING OldValue OPTIONAL
)
1823 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
= NULL
;
1824 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
= NULL
;
1828 TRACE("LsaSetSecret(%p %p %p)\n",
1829 SecretHandle
, EncryptedCurrentValue
, EncryptedOldValue
);
1831 if (CurrentValue
!= NULL
)
1833 BufferSize
= sizeof(LSAPR_CR_CIPHER_VALUE
) + CurrentValue
->MaximumLength
;
1834 EncryptedCurrentValue
= midl_user_allocate(BufferSize
);
1835 if (EncryptedCurrentValue
== NULL
)
1837 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1841 EncryptedCurrentValue
->Length
= CurrentValue
->Length
;
1842 EncryptedCurrentValue
->MaximumLength
= CurrentValue
->MaximumLength
;
1843 EncryptedCurrentValue
->Buffer
= (BYTE
*)(EncryptedCurrentValue
+ 1);
1844 if (EncryptedCurrentValue
->Buffer
!= NULL
)
1845 memcpy(EncryptedCurrentValue
->Buffer
, CurrentValue
->Buffer
, CurrentValue
->Length
);
1848 if (OldValue
!= NULL
)
1850 BufferSize
= sizeof(LSAPR_CR_CIPHER_VALUE
) + OldValue
->MaximumLength
;
1851 EncryptedOldValue
= midl_user_allocate(BufferSize
);
1852 if (EncryptedOldValue
== NULL
)
1854 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1858 EncryptedOldValue
->Length
= OldValue
->Length
;
1859 EncryptedOldValue
->MaximumLength
= OldValue
->MaximumLength
;
1860 EncryptedOldValue
->Buffer
= (BYTE
*)(EncryptedOldValue
+ 1);
1861 if (EncryptedOldValue
->Buffer
!= NULL
)
1862 memcpy(EncryptedOldValue
->Buffer
, OldValue
->Buffer
, OldValue
->Length
);
1867 Status
= LsarSetSecret((LSAPR_HANDLE
)SecretHandle
,
1868 EncryptedCurrentValue
,
1871 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1873 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1878 if (EncryptedCurrentValue
!= NULL
)
1879 midl_user_free(EncryptedCurrentValue
);
1881 if (EncryptedOldValue
!= NULL
)
1882 midl_user_free(EncryptedOldValue
);
1893 LsaSetSecurityObject(IN LSA_HANDLE ObjectHandle
,
1894 IN SECURITY_INFORMATION SecurityInformation
,
1895 IN PSECURITY_DESCRIPTOR SecurityDescriptor
)
1897 LSAPR_SR_SECURITY_DESCRIPTOR SdBuffer
= {0, NULL
};
1901 TRACE("LsaSetSecurityObject(%p %lx %p)\n",
1902 ObjectHandle
, SecurityInformation
, SecurityDescriptor
);
1904 Status
= RtlMakeSelfRelativeSD(SecurityDescriptor
,
1907 if (Status
!= STATUS_BUFFER_TOO_SMALL
)
1908 return STATUS_INVALID_PARAMETER
;
1910 SdBuffer
.SecurityDescriptor
= MIDL_user_allocate(SdLength
);
1911 if (SdBuffer
.SecurityDescriptor
== NULL
)
1912 return STATUS_INSUFFICIENT_RESOURCES
;
1914 Status
= RtlMakeSelfRelativeSD(SecurityDescriptor
,
1915 (PSECURITY_DESCRIPTOR
)SdBuffer
.SecurityDescriptor
,
1917 if (!NT_SUCCESS(Status
))
1920 SdBuffer
.Length
= SdLength
;
1924 Status
= LsarSetSecurityObject((LSAPR_HANDLE
)ObjectHandle
,
1925 SecurityInformation
,
1928 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1930 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1935 if (SdBuffer
.SecurityDescriptor
!= NULL
)
1936 MIDL_user_free(SdBuffer
.SecurityDescriptor
);
1947 LsaSetSystemAccessAccount(IN LSA_HANDLE AccountHandle
,
1948 IN ULONG SystemAccess
)
1952 TRACE("LsaSetSystemAccessAccount(%p 0x%lx)\n",
1953 AccountHandle
, SystemAccess
);
1957 Status
= LsarSetSystemAccessAccount((LSAPR_HANDLE
)AccountHandle
,
1960 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1962 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1975 LsaSetTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle
,
1976 IN PLSA_UNICODE_STRING TrustedDomainName
,
1977 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1980 FIXME("LsaSetTrustedDomainInfoByName(%p %p %d %p) stub\n",
1981 PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
1982 return STATUS_SUCCESS
;
1991 LsaSetTrustedDomainInformation(IN LSA_HANDLE PolicyHandle
,
1992 IN PSID TrustedDomainSid
,
1993 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1996 FIXME("LsaSetTrustedDomainInformation(%p %p %d %p) stub\n",
1997 PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
1998 return STATUS_SUCCESS
;
2007 LsaStorePrivateData(IN LSA_HANDLE PolicyHandle
,
2008 IN PLSA_UNICODE_STRING KeyName
,
2009 IN PLSA_UNICODE_STRING PrivateData OPTIONAL
)
2011 FIXME("LsaStorePrivateData(%p %p %p) stub\n",
2012 PolicyHandle
, KeyName
, PrivateData
);
2013 return STATUS_OBJECT_NAME_NOT_FOUND
;