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 FIXME("LsaCreateTrustedDomainEx(%p %p %p 0x%08lx %p) stub\n",
320 PolicyHandle
, TrustedDomainInformation
, AuthenticationInformation
,
321 DesiredAccess
, TrustedDomainHandle
);
322 return STATUS_SUCCESS
;
331 LsaDelete(IN LSA_HANDLE ObjectHandle
)
335 TRACE("LsaDelete(%p)\n", ObjectHandle
);
339 Status
= LsarDelete((LSAPR_HANDLE
)ObjectHandle
);
341 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
343 Status
= I_RpcMapWin32Status(RpcExceptionCode());
356 LsaDeleteTrustedDomain(IN LSA_HANDLE PolicyHandle
,
357 IN PSID TrustedDomainSid
)
361 TRACE("LsaDeleteTrustedDomain(%p %p)\n",
362 PolicyHandle
, TrustedDomainSid
);
366 Status
= LsarDeleteTrustedDomain((LSAPR_HANDLE
)PolicyHandle
,
369 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
371 Status
= I_RpcMapWin32Status(RpcExceptionCode());
384 LsaEnumerateAccountRights(IN LSA_HANDLE PolicyHandle
,
386 OUT PLSA_UNICODE_STRING
*UserRights
,
387 OUT PULONG CountOfRights
)
389 LSAPR_USER_RIGHT_SET UserRightsSet
;
392 TRACE("LsaEnumerateAccountRights(%p %p %p %p)\n",
393 PolicyHandle
, AccountSid
, UserRights
, CountOfRights
);
395 UserRightsSet
.Entries
= 0;
396 UserRightsSet
.UserRights
= NULL
;
400 Status
= LsarEnmuerateAccountRights((LSAPR_HANDLE
)PolicyHandle
,
404 *CountOfRights
= UserRightsSet
.Entries
;
405 *UserRights
= (PUNICODE_STRING
)UserRightsSet
.UserRights
;
407 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
409 Status
= I_RpcMapWin32Status(RpcExceptionCode());
411 if (UserRightsSet
.UserRights
!= NULL
)
413 MIDL_user_free(UserRightsSet
.UserRights
);
427 LsaEnumerateAccountsWithUserRight(IN LSA_HANDLE PolicyHandle
,
428 IN PLSA_UNICODE_STRING UserRight OPTIONAL
,
430 OUT PULONG CountReturned
)
432 FIXME("LsaEnumerateAccountsWithUserRight(%p %p %p %p) stub\n",
433 PolicyHandle
, UserRight
, Buffer
, CountReturned
);
434 return STATUS_NO_MORE_ENTRIES
;
443 LsaEnumeratePrivilegesOfAccount(IN LSA_HANDLE AccountHandle
,
444 OUT PPRIVILEGE_SET
*Privileges
)
448 TRACE("LsaEnumeratePrivilegesOfAccount(%p %p)\n",
449 AccountHandle
, Privileges
);
453 Status
= LsarEnumeratePrivilegesAccount((LSAPR_HANDLE
)AccountHandle
,
454 (LSAPR_PRIVILEGE_SET
**)Privileges
);
456 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
458 Status
= I_RpcMapWin32Status(RpcExceptionCode());
471 LsaEnumerateTrustedDomains(IN LSA_HANDLE PolicyHandle
,
472 IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext
,
474 IN ULONG PreferedMaximumLength
,
475 OUT PULONG CountReturned
)
477 FIXME("LsaEnumerateTrustedDomains(%p %p %p %lu %p) stub\n",
478 PolicyHandle
, EnumerationContext
, Buffer
,
479 PreferedMaximumLength
, CountReturned
);
481 if (CountReturned
) *CountReturned
= 0;
482 return STATUS_SUCCESS
;
490 LsaEnumerateTrustedDomainsEx(IN LSA_HANDLE PolicyHandle
,
491 IN OUT PLSA_ENUMERATION_HANDLE EnumerationContext
,
493 IN ULONG PreferedMaximumLength
,
494 OUT PULONG CountReturned
)
496 FIXME("LsaEnumerateTrustedDomainsEx(%p %p %p %lu %p) stub\n",
497 PolicyHandle
, EnumerationContext
, Buffer
,
498 PreferedMaximumLength
, CountReturned
);
500 if (CountReturned
) *CountReturned
= 0;
501 return STATUS_SUCCESS
;
510 LsaFreeMemory(IN PVOID Buffer
)
512 TRACE("LsaFreeMemory(%p)\n", Buffer
);
513 return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer
);
522 LsaGetSystemAccessAccount(IN LSA_HANDLE AccountHandle
,
523 OUT PULONG SystemAccess
)
527 TRACE("LsaGetSystemAccessAccount(%p %p)\n",
528 AccountHandle
, SystemAccess
);
532 Status
= LsarGetSystemAccessAccount((LSAPR_HANDLE
)AccountHandle
,
533 (ACCESS_MASK
*)SystemAccess
);
535 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
537 Status
= I_RpcMapWin32Status(RpcExceptionCode());
550 LsaGetUserName(OUT PUNICODE_STRING
*UserName
,
551 OUT PUNICODE_STRING
*DomainName OPTIONAL
)
553 PRPC_UNICODE_STRING UserNameString
= NULL
;
554 PRPC_UNICODE_STRING DomainNameString
= NULL
;
557 TRACE("LsaGetUserName(%p %p)\n",
558 UserName
, DomainName
);
562 Status
= LsarGetUserName(NULL
,
564 (DomainName
!= NULL
) ? &DomainNameString
: NULL
);
566 *UserName
= (PUNICODE_STRING
)UserNameString
;
568 if (DomainName
!= NULL
)
569 *DomainName
= (PUNICODE_STRING
)DomainNameString
;
571 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
573 if (UserNameString
!= NULL
)
574 MIDL_user_free(UserNameString
);
576 if (DomainNameString
!= NULL
)
577 MIDL_user_free(DomainNameString
);
579 Status
= I_RpcMapWin32Status(RpcExceptionCode());
592 LsaLookupNames(IN LSA_HANDLE PolicyHandle
,
594 IN PLSA_UNICODE_STRING Names
,
595 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
596 OUT PLSA_TRANSLATED_SID
*Sids
)
598 LSAPR_TRANSLATED_SIDS TranslatedSids
= {0, NULL
};
599 ULONG MappedCount
= 0;
602 TRACE("LsaLookupNames(%p %lu %p %p %p)\n",
603 PolicyHandle
, Count
, Names
, ReferencedDomains
, Sids
);
605 if (ReferencedDomains
== NULL
|| Sids
== NULL
)
606 return STATUS_INVALID_PARAMETER
;
610 *ReferencedDomains
= NULL
;
613 TranslatedSids
.Entries
= Count
;
615 Status
= LsarLookupNames((LSAPR_HANDLE
)PolicyHandle
,
617 (PRPC_UNICODE_STRING
)Names
,
618 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
623 *Sids
= (PLSA_TRANSLATED_SID
)TranslatedSids
.Sids
;
625 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
627 if (TranslatedSids
.Sids
!= NULL
)
628 MIDL_user_free(TranslatedSids
.Sids
);
630 Status
= I_RpcMapWin32Status(RpcExceptionCode());
643 LsaLookupNames2(IN LSA_HANDLE PolicyHandle
,
646 IN PLSA_UNICODE_STRING Names
,
647 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
648 OUT PLSA_TRANSLATED_SID2
*Sids
)
650 LSAPR_TRANSLATED_SIDS_EX2 TranslatedSids
= {0, NULL
};
651 ULONG MappedCount
= 0;
654 TRACE("LsaLookupNames2(%p 0x%08x %lu %p %p %p)\n",
655 PolicyHandle
, Flags
, Count
, Names
, ReferencedDomains
, Sids
);
657 if (ReferencedDomains
== NULL
|| Sids
== NULL
)
658 return STATUS_INVALID_PARAMETER
;
662 *ReferencedDomains
= NULL
;
665 TranslatedSids
.Entries
= Count
;
667 Status
= LsarLookupNames3((LSAPR_HANDLE
)PolicyHandle
,
669 (PRPC_UNICODE_STRING
)Names
,
670 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
677 *Sids
= (PLSA_TRANSLATED_SID2
)TranslatedSids
.Sids
;
679 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
681 if (TranslatedSids
.Sids
!= NULL
)
682 MIDL_user_free(TranslatedSids
.Sids
);
684 Status
= I_RpcMapWin32Status(RpcExceptionCode());
697 LsaLookupPrivilegeName(IN LSA_HANDLE PolicyHandle
,
699 OUT PUNICODE_STRING
*Name
)
701 PRPC_UNICODE_STRING NameBuffer
= NULL
;
704 TRACE("LsaLookupPrivilegeName(%p %p %p)\n",
705 PolicyHandle
, Value
, Name
);
709 Status
= LsarLookupPrivilegeName(PolicyHandle
,
713 *Name
= (PUNICODE_STRING
)NameBuffer
;
715 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
717 if (NameBuffer
!= NULL
)
718 MIDL_user_free(NameBuffer
);
720 Status
= I_RpcMapWin32Status(RpcExceptionCode());
733 LsaLookupPrivilegeValue(IN LSA_HANDLE PolicyHandle
,
734 IN PLSA_UNICODE_STRING Name
,
740 TRACE("LsaLookupPrivilegeValue(%p %p %p)\n",
741 PolicyHandle
, Name
, Value
);
745 Status
= LsarLookupPrivilegeValue(PolicyHandle
,
746 (PRPC_UNICODE_STRING
)Name
,
748 if (Status
== STATUS_SUCCESS
)
751 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
753 Status
= I_RpcMapWin32Status(RpcExceptionCode());
766 LsaLookupSids(IN LSA_HANDLE PolicyHandle
,
769 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
770 OUT PLSA_TRANSLATED_NAME
*Names
)
772 LSAPR_SID_ENUM_BUFFER SidEnumBuffer
;
773 LSAPR_TRANSLATED_NAMES TranslatedNames
;
774 ULONG MappedCount
= 0;
777 TRACE("LsaLookupSids(%p %lu %p %p %p)\n",
778 PolicyHandle
, Count
, Sids
, ReferencedDomains
, Names
);
781 return STATUS_INVALID_PARAMETER
;
783 SidEnumBuffer
.Entries
= Count
;
784 SidEnumBuffer
.SidInfo
= (PLSAPR_SID_INFORMATION
)Sids
;
788 *ReferencedDomains
= NULL
;
791 TranslatedNames
.Entries
= 0;
792 TranslatedNames
.Names
= NULL
;
794 Status
= LsarLookupSids((LSAPR_HANDLE
)PolicyHandle
,
796 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
801 *Names
= (PLSA_TRANSLATED_NAME
)TranslatedNames
.Names
;
803 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
805 if (TranslatedNames
.Names
!= NULL
)
807 MIDL_user_free(TranslatedNames
.Names
);
810 Status
= I_RpcMapWin32Status(RpcExceptionCode());
818 /******************************************************************************
819 * LsaNtStatusToWinError
828 LsaNtStatusToWinError(IN NTSTATUS Status
)
830 TRACE("LsaNtStatusToWinError(0x%lx)\n", Status
);
831 return RtlNtStatusToDosError(Status
);
840 LsaOpenAccount(IN LSA_HANDLE PolicyHandle
,
842 IN ACCESS_MASK DesiredAccess
,
843 OUT PLSA_HANDLE AccountHandle
)
847 TRACE("LsaOpenAccount(%p %p 0x%08lx %p)\n",
848 PolicyHandle
, AccountSid
, DesiredAccess
, AccountHandle
);
852 Status
= LsarOpenAccount((LSAPR_HANDLE
)PolicyHandle
,
857 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
859 Status
= I_RpcMapWin32Status(RpcExceptionCode());
867 /******************************************************************************
880 LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName OPTIONAL
,
881 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
882 IN ACCESS_MASK DesiredAccess
,
883 OUT PLSA_HANDLE PolicyHandle
)
887 TRACE("LsaOpenPolicy(%s %p 0x%08lx %p)\n",
888 SystemName
? debugstr_w(SystemName
->Buffer
) : "(null)",
889 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
891 /* FIXME: RPC should take care of this */
892 if (!LsapIsLocalComputer(SystemName
))
893 return RPC_NT_SERVER_UNAVAILABLE
;
897 *PolicyHandle
= NULL
;
899 Status
= LsarOpenPolicy(SystemName
? SystemName
->Buffer
: NULL
,
900 (PLSAPR_OBJECT_ATTRIBUTES
)ObjectAttributes
,
904 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
906 Status
= I_RpcMapWin32Status(RpcExceptionCode());
910 TRACE("LsaOpenPolicy() done (Status: 0x%08lx)\n", Status
);
918 LsaOpenSecret(IN LSA_HANDLE PolicyHandle
,
919 IN PLSA_UNICODE_STRING SecretName
,
920 IN ACCESS_MASK DesiredAccess
,
921 OUT PLSA_HANDLE SecretHandle
)
925 TRACE("LsaOpenSecret(%p %p 0x%08lx %p)\n",
926 PolicyHandle
, SecretName
, DesiredAccess
, SecretHandle
);
930 *SecretHandle
= NULL
;
932 Status
= LsarOpenSecret((LSAPR_HANDLE
)PolicyHandle
,
933 (PRPC_UNICODE_STRING
)SecretName
,
937 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
939 Status
= I_RpcMapWin32Status(RpcExceptionCode());
943 TRACE("LsaOpenSecret() done (Status: 0x%08lx)\n", Status
);
954 LsaOpenTrustedDomain(IN LSA_HANDLE PolicyHandle
,
955 IN PSID TrustedDomainSid
,
956 IN ACCESS_MASK DesiredAccess
,
957 OUT PLSA_HANDLE TrustedDomainHandle
)
961 TRACE("LsaOpenTrustedDomain(%p %p 0x%08lx %p)\n",
962 PolicyHandle
, TrustedDomainSid
, DesiredAccess
, TrustedDomainHandle
);
966 Status
= LsarOpenTrustedDomain((LSAPR_HANDLE
)PolicyHandle
,
967 (PRPC_SID
)TrustedDomainSid
,
969 (PLSAPR_HANDLE
)TrustedDomainHandle
);
971 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
973 Status
= I_RpcMapWin32Status(RpcExceptionCode());
986 LsaOpenTrustedDomainByName(IN LSA_HANDLE PolicyHandle
,
987 IN PLSA_UNICODE_STRING TrustedDomainName
,
988 IN ACCESS_MASK DesiredAccess
,
989 OUT PLSA_HANDLE TrustedDomainHandle
)
993 TRACE("LsaOpenTrustedDomainByName(%p %p 0x%08lx %p)\n",
994 PolicyHandle
, TrustedDomainName
, DesiredAccess
, TrustedDomainHandle
);
998 Status
= LsarOpenTrustedDomainByName((LSAPR_HANDLE
)PolicyHandle
,
999 (PRPC_UNICODE_STRING
)TrustedDomainName
,
1001 TrustedDomainHandle
);
1003 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1005 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1018 LsaQueryDomainInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1019 IN POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
1022 FIXME("LsaQueryDomainInformationPolicy(%p %lu %p) stub\n",
1023 PolicyHandle
, InformationClass
, Buffer
);
1024 return STATUS_NOT_IMPLEMENTED
;
1033 LsaQueryForestTrustInformation(IN LSA_HANDLE PolicyHandle
,
1034 IN PLSA_UNICODE_STRING TrustedDomainName
,
1035 OUT PLSA_FOREST_TRUST_INFORMATION
*ForestTrustInfo
)
1037 FIXME("LsaQueryForestTrustInformation(%p %p %p) stub\n",
1038 PolicyHandle
, TrustedDomainName
, ForestTrustInfo
);
1039 return STATUS_NOT_IMPLEMENTED
;
1048 LsaQueryInfoTrustedDomain(IN LSA_HANDLE TrustedDomainHandle
,
1049 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1052 FIXME("LsaQueryInfoTrustedDomain(%p %d %p) stub\n",
1053 TrustedDomainHandle
, InformationClass
, Buffer
);
1054 return STATUS_NOT_IMPLEMENTED
;
1063 LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1064 IN POLICY_INFORMATION_CLASS InformationClass
,
1067 PLSAPR_POLICY_INFORMATION PolicyInformation
= NULL
;
1070 TRACE("LsaQueryInformationPolicy(%p %d %p)\n",
1071 PolicyHandle
, InformationClass
, Buffer
);
1075 Status
= LsarQueryInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1077 &PolicyInformation
);
1078 *Buffer
= PolicyInformation
;
1080 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1082 if (PolicyInformation
!= NULL
)
1083 MIDL_user_free(PolicyInformation
);
1085 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1089 TRACE("Done (Status: 0x%08x)\n", Status
);
1100 LsaQuerySecret(IN LSA_HANDLE SecretHandle
,
1101 OUT PLSA_UNICODE_STRING
*CurrentValue OPTIONAL
,
1102 OUT PLARGE_INTEGER CurrentValueSetTime OPTIONAL
,
1103 OUT PLSA_UNICODE_STRING
*OldValue OPTIONAL
,
1104 OUT PLARGE_INTEGER OldValueSetTime OPTIONAL
)
1106 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
= NULL
;
1107 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
= NULL
;
1108 PLSA_UNICODE_STRING DecryptedCurrentValue
= NULL
;
1109 PLSA_UNICODE_STRING DecryptedOldValue
= NULL
;
1113 TRACE("LsaQuerySecret(%p %p %p %p %p)\n",
1114 SecretHandle
, CurrentValue
, CurrentValueSetTime
,
1115 OldValue
, OldValueSetTime
);
1119 Status
= LsarQuerySecret((PLSAPR_HANDLE
)SecretHandle
,
1120 &EncryptedCurrentValue
,
1121 CurrentValueSetTime
,
1125 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1127 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1131 if (!NT_SUCCESS(Status
))
1134 /* Decrypt the current value */
1135 if (CurrentValue
!= NULL
)
1137 if (EncryptedCurrentValue
== NULL
)
1139 *CurrentValue
= NULL
;
1143 /* FIXME: Decrypt the current value */
1144 BufferSize
= sizeof(LSA_UNICODE_STRING
) + EncryptedCurrentValue
->MaximumLength
;
1145 DecryptedCurrentValue
= midl_user_allocate(BufferSize
);
1146 if (DecryptedCurrentValue
== NULL
)
1148 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1152 DecryptedCurrentValue
->Length
= (USHORT
)EncryptedCurrentValue
->Length
;
1153 DecryptedCurrentValue
->MaximumLength
= (USHORT
)EncryptedCurrentValue
->MaximumLength
;
1154 DecryptedCurrentValue
->Buffer
= (PWSTR
)(DecryptedCurrentValue
+ 1);
1155 RtlCopyMemory(DecryptedCurrentValue
->Buffer
,
1156 EncryptedCurrentValue
->Buffer
,
1157 EncryptedCurrentValue
->Length
);
1159 *CurrentValue
= DecryptedCurrentValue
;
1163 /* Decrypt the old value */
1164 if (OldValue
!= NULL
)
1166 if (EncryptedOldValue
== NULL
)
1172 /* FIXME: Decrypt the old value */
1173 BufferSize
= sizeof(LSA_UNICODE_STRING
) + EncryptedOldValue
->MaximumLength
;
1174 DecryptedOldValue
= midl_user_allocate(BufferSize
);
1175 if (DecryptedOldValue
== NULL
)
1177 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1181 DecryptedOldValue
->Length
= (USHORT
)EncryptedOldValue
->Length
;
1182 DecryptedOldValue
->MaximumLength
= (USHORT
)EncryptedOldValue
->MaximumLength
;
1183 DecryptedOldValue
->Buffer
= (PWSTR
)(DecryptedOldValue
+ 1);
1184 RtlCopyMemory(DecryptedOldValue
->Buffer
,
1185 EncryptedOldValue
->Buffer
,
1186 EncryptedOldValue
->Length
);
1188 *OldValue
= DecryptedOldValue
;
1193 if (!NT_SUCCESS(Status
))
1195 if (DecryptedCurrentValue
!= NULL
)
1196 midl_user_free(DecryptedCurrentValue
);
1198 if (DecryptedOldValue
!= NULL
)
1199 midl_user_free(DecryptedOldValue
);
1201 if (CurrentValue
!= NULL
)
1202 *CurrentValue
= NULL
;
1204 if (OldValue
!= NULL
)
1208 if (EncryptedCurrentValue
!= NULL
)
1209 midl_user_free(EncryptedCurrentValue
);
1211 if (EncryptedOldValue
!= NULL
)
1212 midl_user_free(EncryptedOldValue
);
1223 LsaQueryTrustedDomainInfo(IN LSA_HANDLE PolicyHandle
,
1224 IN PSID TrustedDomainSid
,
1225 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1228 FIXME("LsaQueryTrustedDomainInfo(%p %p %d %p) stub\n",
1229 PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
1230 return STATUS_OBJECT_NAME_NOT_FOUND
;
1239 LsaQueryTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle
,
1240 IN PLSA_UNICODE_STRING TrustedDomainName
,
1241 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1246 TRACE("LsaQueryTrustedDomainInfoByName(%p %p %d %p)\n",
1247 PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
1249 if (InformationClass
== TrustedDomainAuthInformationInternal
||
1250 InformationClass
== TrustedDomainFullInformationInternal
)
1251 return STATUS_INVALID_INFO_CLASS
;
1255 Status
= LsarQueryTrustedDomainInfoByName((LSAPR_HANDLE
)PolicyHandle
,
1256 (PRPC_UNICODE_STRING
)TrustedDomainName
,
1258 (unsigned long *)Buffer
); // Shuld be: (PLSAPR_POLICY_INFORMATION *)Buffer
1260 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1262 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1275 LsaRegisterPolicyChangeNotification(IN POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass
,
1276 IN HANDLE NotificationEventHandle
)
1278 FIXME("LsaRegisterPolicyChangeNotification(%d %p) stub\n",
1279 InformationClass
, NotificationEventHandle
);
1280 return STATUS_UNSUCCESSFUL
;
1289 LsaRemoveAccountRights(IN LSA_HANDLE PolicyHandle
,
1291 IN BOOLEAN AllRights
,
1292 IN PLSA_UNICODE_STRING UserRights
,
1293 IN ULONG CountOfRights
)
1295 LSAPR_USER_RIGHT_SET UserRightSet
;
1297 TRACE("LsaRemoveAccountRights(%p %p %d %p %lu)\n",
1298 PolicyHandle
, AccountSid
, AllRights
, UserRights
, CountOfRights
);
1300 UserRightSet
.Entries
= CountOfRights
;
1301 UserRightSet
.UserRights
= (PRPC_UNICODE_STRING
)UserRights
;
1305 LsarRemoveAccountRights((LSAPR_HANDLE
)PolicyHandle
,
1306 (PRPC_SID
)AccountSid
,
1310 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1312 I_RpcMapWin32Status(RpcExceptionCode());
1316 return STATUS_SUCCESS
;
1325 LsaRetrievePrivateData(IN LSA_HANDLE PolicyHandle
,
1326 IN PLSA_UNICODE_STRING KeyName
,
1327 OUT PLSA_UNICODE_STRING
*PrivateData
)
1329 FIXME("LsaRetrievePrivateData(%p %p %p) stub\n",
1330 PolicyHandle
, KeyName
, PrivateData
);
1331 return STATUS_OBJECT_NAME_NOT_FOUND
;
1340 LsaSetDomainInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1341 IN POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
1342 IN PVOID Buffer OPTIONAL
)
1344 FIXME("LsaSetDomainInformationPolicy(%p %d %p) stub\n",
1345 PolicyHandle
, InformationClass
, Buffer
);
1346 return STATUS_UNSUCCESSFUL
;
1355 LsaSetForestTrustInformation(IN LSA_HANDLE PolicyHandle
,
1356 IN PLSA_UNICODE_STRING TrustedDomainName
,
1357 IN PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
1359 OUT PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
1361 FIXME("LsaSetForestTrustInformation(%p %p %p %d %p) stub\n",
1362 PolicyHandle
, TrustedDomainName
, ForestTrustInfo
, CheckOnly
, CollisionInfo
);
1363 return STATUS_NOT_IMPLEMENTED
;
1372 LsaSetInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1373 IN POLICY_INFORMATION_CLASS InformationClass
,
1378 TRACE("LsaSetInformationPolicy(%p %d %p)\n",
1379 PolicyHandle
, InformationClass
, Buffer
);
1383 Status
= LsarSetInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1385 (PLSAPR_POLICY_INFORMATION
)Buffer
);
1387 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1389 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1402 LsaSetSecret(IN LSA_HANDLE SecretHandle
,
1403 IN PLSA_UNICODE_STRING CurrentValue OPTIONAL
,
1404 IN PLSA_UNICODE_STRING OldValue OPTIONAL
)
1406 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
= NULL
;
1407 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
= NULL
;
1411 TRACE("LsaSetSecret(%p %p %p)\n",
1412 SecretHandle
, EncryptedCurrentValue
, EncryptedOldValue
);
1414 if (CurrentValue
!= NULL
)
1416 BufferSize
= sizeof(LSAPR_CR_CIPHER_VALUE
) + CurrentValue
->MaximumLength
;
1417 EncryptedCurrentValue
= midl_user_allocate(BufferSize
);
1418 if (EncryptedCurrentValue
== NULL
)
1420 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1424 EncryptedCurrentValue
->Length
= CurrentValue
->Length
;
1425 EncryptedCurrentValue
->MaximumLength
= CurrentValue
->MaximumLength
;
1426 EncryptedCurrentValue
->Buffer
= (BYTE
*)(EncryptedCurrentValue
+ 1);
1427 if (EncryptedCurrentValue
->Buffer
!= NULL
)
1428 memcpy(EncryptedCurrentValue
->Buffer
, CurrentValue
->Buffer
, CurrentValue
->Length
);
1431 if (OldValue
!= NULL
)
1433 BufferSize
= sizeof(LSAPR_CR_CIPHER_VALUE
) + OldValue
->MaximumLength
;
1434 EncryptedOldValue
= midl_user_allocate(BufferSize
);
1435 if (EncryptedOldValue
== NULL
)
1437 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1441 EncryptedOldValue
->Length
= OldValue
->Length
;
1442 EncryptedOldValue
->MaximumLength
= OldValue
->MaximumLength
;
1443 EncryptedOldValue
->Buffer
= (BYTE
*)(EncryptedOldValue
+ 1);
1444 if (EncryptedOldValue
->Buffer
!= NULL
)
1445 memcpy(EncryptedOldValue
->Buffer
, OldValue
->Buffer
, OldValue
->Length
);
1450 Status
= LsarSetSecret((LSAPR_HANDLE
)SecretHandle
,
1451 EncryptedCurrentValue
,
1454 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1456 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1461 if (EncryptedCurrentValue
!= NULL
)
1462 midl_user_free(EncryptedCurrentValue
);
1464 if (EncryptedOldValue
!= NULL
)
1465 midl_user_free(EncryptedOldValue
);
1476 LsaSetSystemAccessAccount(IN LSA_HANDLE AccountHandle
,
1477 IN ULONG SystemAccess
)
1481 TRACE("LsaSetSystemAccessAccount(%p 0x%lx)\n",
1482 AccountHandle
, SystemAccess
);
1486 Status
= LsarSetSystemAccessAccount((LSAPR_HANDLE
)AccountHandle
,
1489 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1491 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1504 LsaSetTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle
,
1505 IN PLSA_UNICODE_STRING TrustedDomainName
,
1506 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1509 FIXME("LsaSetTrustedDomainInfoByName(%p %p %d %p) stub\n",
1510 PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
1511 return STATUS_SUCCESS
;
1520 LsaSetTrustedDomainInformation(IN LSA_HANDLE PolicyHandle
,
1521 IN PSID TrustedDomainSid
,
1522 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1525 FIXME("LsaSetTrustedDomainInformation(%p %p %d %p) stub\n",
1526 PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
1527 return STATUS_SUCCESS
;
1536 LsaStorePrivateData(IN LSA_HANDLE PolicyHandle
,
1537 IN PLSA_UNICODE_STRING KeyName
,
1538 IN PLSA_UNICODE_STRING PrivateData OPTIONAL
)
1540 FIXME("LsaStorePrivateData(%p %p %p) stub\n",
1541 PolicyHandle
, KeyName
, PrivateData
);
1542 return STATUS_OBJECT_NAME_NOT_FOUND
;
1551 LsaUnregisterPolicyChangeNotification(IN POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass
,
1552 IN HANDLE NotificationEventHandle
)
1554 FIXME("(%d %p) stub\n",
1555 InformationClass
, NotificationEventHandle
);
1556 return STATUS_SUCCESS
;