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(PUNICODE_STRING
*UserName
,
551 PUNICODE_STRING
*DomainName
)
553 FIXME("LsaGetUserName(%p %p) stub\n",
554 UserName
, DomainName
);
555 return STATUS_NOT_IMPLEMENTED
;
564 LsaLookupNames(IN LSA_HANDLE PolicyHandle
,
566 IN PLSA_UNICODE_STRING Names
,
567 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
568 OUT PLSA_TRANSLATED_SID
*Sids
)
570 LSAPR_TRANSLATED_SIDS TranslatedSids
= {0, NULL
};
571 ULONG MappedCount
= 0;
574 TRACE("LsaLookupNames(%p %lu %p %p %p)\n",
575 PolicyHandle
, Count
, Names
, ReferencedDomains
, Sids
);
577 if (ReferencedDomains
== NULL
|| Sids
== NULL
)
578 return STATUS_INVALID_PARAMETER
;
582 *ReferencedDomains
= NULL
;
585 TranslatedSids
.Entries
= Count
;
587 Status
= LsarLookupNames((LSAPR_HANDLE
)PolicyHandle
,
589 (PRPC_UNICODE_STRING
)Names
,
590 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
595 *Sids
= (PLSA_TRANSLATED_SID
)TranslatedSids
.Sids
;
597 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
599 if (TranslatedSids
.Sids
!= NULL
)
600 MIDL_user_free(TranslatedSids
.Sids
);
602 Status
= I_RpcMapWin32Status(RpcExceptionCode());
615 LsaLookupNames2(IN LSA_HANDLE PolicyHandle
,
618 IN PLSA_UNICODE_STRING Names
,
619 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
620 OUT PLSA_TRANSLATED_SID2
*Sids
)
622 LSAPR_TRANSLATED_SIDS_EX2 TranslatedSids
= {0, NULL
};
623 ULONG MappedCount
= 0;
626 TRACE("LsaLookupNames2(%p 0x%08x %lu %p %p %p)\n",
627 PolicyHandle
, Flags
, Count
, Names
, ReferencedDomains
, Sids
);
629 if (ReferencedDomains
== NULL
|| Sids
== NULL
)
630 return STATUS_INVALID_PARAMETER
;
634 *ReferencedDomains
= NULL
;
637 TranslatedSids
.Entries
= Count
;
639 Status
= LsarLookupNames3((LSAPR_HANDLE
)PolicyHandle
,
641 (PRPC_UNICODE_STRING
)Names
,
642 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
649 *Sids
= (PLSA_TRANSLATED_SID2
)TranslatedSids
.Sids
;
651 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
653 if (TranslatedSids
.Sids
!= NULL
)
654 MIDL_user_free(TranslatedSids
.Sids
);
656 Status
= I_RpcMapWin32Status(RpcExceptionCode());
669 LsaLookupPrivilegeName(IN LSA_HANDLE PolicyHandle
,
671 OUT PUNICODE_STRING
*Name
)
673 PRPC_UNICODE_STRING NameBuffer
= NULL
;
676 TRACE("LsaLookupPrivilegeName(%p %p %p)\n",
677 PolicyHandle
, Value
, Name
);
681 Status
= LsarLookupPrivilegeName(PolicyHandle
,
685 *Name
= (PUNICODE_STRING
)NameBuffer
;
687 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
689 if (NameBuffer
!= NULL
)
690 MIDL_user_free(NameBuffer
);
692 Status
= I_RpcMapWin32Status(RpcExceptionCode());
705 LsaLookupPrivilegeValue(IN LSA_HANDLE PolicyHandle
,
706 IN PLSA_UNICODE_STRING Name
,
712 TRACE("LsaLookupPrivilegeValue(%p %p %p)\n",
713 PolicyHandle
, Name
, Value
);
717 Status
= LsarLookupPrivilegeValue(PolicyHandle
,
718 (PRPC_UNICODE_STRING
)Name
,
720 if (Status
== STATUS_SUCCESS
)
723 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
725 Status
= I_RpcMapWin32Status(RpcExceptionCode());
738 LsaLookupSids(IN LSA_HANDLE PolicyHandle
,
741 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
742 OUT PLSA_TRANSLATED_NAME
*Names
)
744 LSAPR_SID_ENUM_BUFFER SidEnumBuffer
;
745 LSAPR_TRANSLATED_NAMES TranslatedNames
;
746 ULONG MappedCount
= 0;
749 TRACE("LsaLookupSids(%p %lu %p %p %p)\n",
750 PolicyHandle
, Count
, Sids
, ReferencedDomains
, Names
);
753 return STATUS_INVALID_PARAMETER
;
755 SidEnumBuffer
.Entries
= Count
;
756 SidEnumBuffer
.SidInfo
= (PLSAPR_SID_INFORMATION
)Sids
;
760 *ReferencedDomains
= NULL
;
763 TranslatedNames
.Entries
= 0;
764 TranslatedNames
.Names
= NULL
;
766 Status
= LsarLookupSids((LSAPR_HANDLE
)PolicyHandle
,
768 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
773 *Names
= (PLSA_TRANSLATED_NAME
)TranslatedNames
.Names
;
775 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
777 if (TranslatedNames
.Names
!= NULL
)
779 MIDL_user_free(TranslatedNames
.Names
);
782 Status
= I_RpcMapWin32Status(RpcExceptionCode());
790 /******************************************************************************
791 * LsaNtStatusToWinError
800 LsaNtStatusToWinError(IN NTSTATUS Status
)
802 TRACE("LsaNtStatusToWinError(0x%lx)\n", Status
);
803 return RtlNtStatusToDosError(Status
);
812 LsaOpenAccount(IN LSA_HANDLE PolicyHandle
,
814 IN ACCESS_MASK DesiredAccess
,
815 OUT PLSA_HANDLE AccountHandle
)
819 TRACE("LsaOpenAccount(%p %p 0x%08lx %p)\n",
820 PolicyHandle
, AccountSid
, DesiredAccess
, AccountHandle
);
824 Status
= LsarOpenAccount((LSAPR_HANDLE
)PolicyHandle
,
829 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
831 Status
= I_RpcMapWin32Status(RpcExceptionCode());
839 /******************************************************************************
852 LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName OPTIONAL
,
853 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
854 IN ACCESS_MASK DesiredAccess
,
855 OUT PLSA_HANDLE PolicyHandle
)
859 TRACE("LsaOpenPolicy(%s %p 0x%08lx %p)\n",
860 SystemName
? debugstr_w(SystemName
->Buffer
) : "(null)",
861 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
863 /* FIXME: RPC should take care of this */
864 if (!LsapIsLocalComputer(SystemName
))
865 return RPC_NT_SERVER_UNAVAILABLE
;
869 *PolicyHandle
= NULL
;
871 Status
= LsarOpenPolicy(SystemName
? SystemName
->Buffer
: NULL
,
872 (PLSAPR_OBJECT_ATTRIBUTES
)ObjectAttributes
,
876 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
878 Status
= I_RpcMapWin32Status(RpcExceptionCode());
882 TRACE("LsaOpenPolicy() done (Status: 0x%08lx)\n", Status
);
890 LsaOpenSecret(IN LSA_HANDLE PolicyHandle
,
891 IN PLSA_UNICODE_STRING SecretName
,
892 IN ACCESS_MASK DesiredAccess
,
893 OUT PLSA_HANDLE SecretHandle
)
897 TRACE("LsaOpenSecret(%p %p 0x%08lx %p)\n",
898 PolicyHandle
, SecretName
, DesiredAccess
, SecretHandle
);
902 *SecretHandle
= NULL
;
904 Status
= LsarOpenSecret((LSAPR_HANDLE
)PolicyHandle
,
905 (PRPC_UNICODE_STRING
)SecretName
,
909 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
911 Status
= I_RpcMapWin32Status(RpcExceptionCode());
915 TRACE("LsaOpenSecret() done (Status: 0x%08lx)\n", Status
);
926 LsaOpenTrustedDomainByName(IN LSA_HANDLE PolicyHandle
,
927 IN PLSA_UNICODE_STRING TrustedDomainName
,
928 IN ACCESS_MASK DesiredAccess
,
929 OUT PLSA_HANDLE TrustedDomainHandle
)
933 TRACE("LsaOpenTrustedDomainByName(%p %p 0x%08lx %p)\n",
934 PolicyHandle
, TrustedDomainName
, DesiredAccess
, TrustedDomainHandle
);
938 Status
= LsarOpenTrustedDomainByName((LSAPR_HANDLE
)PolicyHandle
,
939 (PRPC_UNICODE_STRING
)TrustedDomainName
,
941 TrustedDomainHandle
);
943 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
945 Status
= I_RpcMapWin32Status(RpcExceptionCode());
958 LsaQueryDomainInformationPolicy(IN LSA_HANDLE PolicyHandle
,
959 IN POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
962 FIXME("LsaQueryDomainInformationPolicy(%p %lu %p) stub\n",
963 PolicyHandle
, InformationClass
, Buffer
);
964 return STATUS_NOT_IMPLEMENTED
;
973 LsaQueryForestTrustInformation(IN LSA_HANDLE PolicyHandle
,
974 IN PLSA_UNICODE_STRING TrustedDomainName
,
975 OUT PLSA_FOREST_TRUST_INFORMATION
*ForestTrustInfo
)
977 FIXME("LsaQueryForestTrustInformation(%p %p %p) stub\n",
978 PolicyHandle
, TrustedDomainName
, ForestTrustInfo
);
979 return STATUS_NOT_IMPLEMENTED
;
988 LsaQueryInfoTrustedDomain(IN LSA_HANDLE TrustedDomainHandle
,
989 IN TRUSTED_INFORMATION_CLASS InformationClass
,
992 FIXME("LsaQueryInfoTrustedDomain(%p %d %p) stub\n",
993 TrustedDomainHandle
, InformationClass
, Buffer
);
994 return STATUS_NOT_IMPLEMENTED
;
1003 LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1004 IN POLICY_INFORMATION_CLASS InformationClass
,
1007 PLSAPR_POLICY_INFORMATION PolicyInformation
= NULL
;
1010 TRACE("LsaQueryInformationPolicy(%p %d %p)\n",
1011 PolicyHandle
, InformationClass
, Buffer
);
1015 Status
= LsarQueryInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1017 &PolicyInformation
);
1018 *Buffer
= PolicyInformation
;
1020 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1022 if (PolicyInformation
!= NULL
)
1023 MIDL_user_free(PolicyInformation
);
1025 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1029 TRACE("Done (Status: 0x%08x)\n", Status
);
1040 LsaQuerySecret(IN LSA_HANDLE SecretHandle
,
1041 OUT PLSA_UNICODE_STRING
*CurrentValue OPTIONAL
,
1042 OUT PLARGE_INTEGER CurrentValueSetTime OPTIONAL
,
1043 OUT PLSA_UNICODE_STRING
*OldValue OPTIONAL
,
1044 OUT PLARGE_INTEGER OldValueSetTime OPTIONAL
)
1046 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
= NULL
;
1047 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
= NULL
;
1048 PLSA_UNICODE_STRING DecryptedCurrentValue
= NULL
;
1049 PLSA_UNICODE_STRING DecryptedOldValue
= NULL
;
1053 TRACE("LsaQuerySecret(%p %p %p %p %p)\n",
1054 SecretHandle
, CurrentValue
, CurrentValueSetTime
,
1055 OldValue
, OldValueSetTime
);
1059 Status
= LsarQuerySecret((PLSAPR_HANDLE
)SecretHandle
,
1060 &EncryptedCurrentValue
,
1061 CurrentValueSetTime
,
1065 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1067 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1071 if (!NT_SUCCESS(Status
))
1074 /* Decrypt the current value */
1075 if (CurrentValue
!= NULL
)
1077 if (EncryptedCurrentValue
== NULL
)
1079 *CurrentValue
= NULL
;
1083 /* FIXME: Decrypt the current value */
1084 BufferSize
= sizeof(LSA_UNICODE_STRING
) + EncryptedCurrentValue
->MaximumLength
;
1085 DecryptedCurrentValue
= midl_user_allocate(BufferSize
);
1086 if (DecryptedCurrentValue
== NULL
)
1088 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1092 DecryptedCurrentValue
->Length
= (USHORT
)EncryptedCurrentValue
->Length
;
1093 DecryptedCurrentValue
->MaximumLength
= (USHORT
)EncryptedCurrentValue
->MaximumLength
;
1094 DecryptedCurrentValue
->Buffer
= (PWSTR
)(DecryptedCurrentValue
+ 1);
1095 RtlCopyMemory(DecryptedCurrentValue
->Buffer
,
1096 EncryptedCurrentValue
->Buffer
,
1097 EncryptedCurrentValue
->Length
);
1099 *CurrentValue
= DecryptedCurrentValue
;
1103 /* Decrypt the old value */
1104 if (OldValue
!= NULL
)
1106 if (EncryptedOldValue
== NULL
)
1112 /* FIXME: Decrypt the old value */
1113 BufferSize
= sizeof(LSA_UNICODE_STRING
) + EncryptedOldValue
->MaximumLength
;
1114 DecryptedOldValue
= midl_user_allocate(BufferSize
);
1115 if (DecryptedOldValue
== NULL
)
1117 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1121 DecryptedOldValue
->Length
= (USHORT
)EncryptedOldValue
->Length
;
1122 DecryptedOldValue
->MaximumLength
= (USHORT
)EncryptedOldValue
->MaximumLength
;
1123 DecryptedOldValue
->Buffer
= (PWSTR
)(DecryptedOldValue
+ 1);
1124 RtlCopyMemory(DecryptedOldValue
->Buffer
,
1125 EncryptedOldValue
->Buffer
,
1126 EncryptedOldValue
->Length
);
1128 *OldValue
= DecryptedOldValue
;
1133 if (!NT_SUCCESS(Status
))
1135 if (DecryptedCurrentValue
!= NULL
)
1136 midl_user_free(DecryptedCurrentValue
);
1138 if (DecryptedOldValue
!= NULL
)
1139 midl_user_free(DecryptedOldValue
);
1141 if (CurrentValue
!= NULL
)
1142 *CurrentValue
= NULL
;
1144 if (OldValue
!= NULL
)
1148 if (EncryptedCurrentValue
!= NULL
)
1149 midl_user_free(EncryptedCurrentValue
);
1151 if (EncryptedOldValue
!= NULL
)
1152 midl_user_free(EncryptedOldValue
);
1163 LsaQueryTrustedDomainInfo(IN LSA_HANDLE PolicyHandle
,
1164 IN PSID TrustedDomainSid
,
1165 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1168 FIXME("LsaQueryTrustedDomainInfo(%p %p %d %p) stub\n",
1169 PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
1170 return STATUS_OBJECT_NAME_NOT_FOUND
;
1179 LsaQueryTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle
,
1180 IN PLSA_UNICODE_STRING TrustedDomainName
,
1181 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1186 TRACE("LsaQueryTrustedDomainInfoByName(%p %p %d %p)\n",
1187 PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
1189 if (InformationClass
== TrustedDomainAuthInformationInternal
||
1190 InformationClass
== TrustedDomainFullInformationInternal
)
1191 return STATUS_INVALID_INFO_CLASS
;
1195 Status
= LsarQueryTrustedDomainInfoByName((LSAPR_HANDLE
)PolicyHandle
,
1196 (PRPC_UNICODE_STRING
)TrustedDomainName
,
1198 (unsigned long *)Buffer
); // Shuld be: (PLSAPR_POLICY_INFORMATION *)Buffer
1200 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1202 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1215 LsaRegisterPolicyChangeNotification(IN POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass
,
1216 IN HANDLE NotificationEventHandle
)
1218 FIXME("LsaRegisterPolicyChangeNotification(%d %p) stub\n",
1219 InformationClass
, NotificationEventHandle
);
1220 return STATUS_UNSUCCESSFUL
;
1229 LsaRemoveAccountRights(IN LSA_HANDLE PolicyHandle
,
1231 IN BOOLEAN AllRights
,
1232 IN PLSA_UNICODE_STRING UserRights
,
1233 IN ULONG CountOfRights
)
1235 LSAPR_USER_RIGHT_SET UserRightSet
;
1237 TRACE("LsaRemoveAccountRights(%p %p %d %p %lu)\n",
1238 PolicyHandle
, AccountSid
, AllRights
, UserRights
, CountOfRights
);
1240 UserRightSet
.Entries
= CountOfRights
;
1241 UserRightSet
.UserRights
= (PRPC_UNICODE_STRING
)UserRights
;
1245 LsarRemoveAccountRights((LSAPR_HANDLE
)PolicyHandle
,
1246 (PRPC_SID
)AccountSid
,
1250 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1252 I_RpcMapWin32Status(RpcExceptionCode());
1256 return STATUS_SUCCESS
;
1265 LsaRetrievePrivateData(IN LSA_HANDLE PolicyHandle
,
1266 IN PLSA_UNICODE_STRING KeyName
,
1267 OUT PLSA_UNICODE_STRING
*PrivateData
)
1269 FIXME("LsaRetrievePrivateData(%p %p %p) stub\n",
1270 PolicyHandle
, KeyName
, PrivateData
);
1271 return STATUS_OBJECT_NAME_NOT_FOUND
;
1280 LsaSetDomainInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1281 IN POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
1282 IN PVOID Buffer OPTIONAL
)
1284 FIXME("LsaSetDomainInformationPolicy(%p %d %p) stub\n",
1285 PolicyHandle
, InformationClass
, Buffer
);
1286 return STATUS_UNSUCCESSFUL
;
1295 LsaSetForestTrustInformation(IN LSA_HANDLE PolicyHandle
,
1296 IN PLSA_UNICODE_STRING TrustedDomainName
,
1297 IN PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
1299 OUT PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
1301 FIXME("LsaSetForestTrustInformation(%p %p %p %d %p) stub\n",
1302 PolicyHandle
, TrustedDomainName
, ForestTrustInfo
, CheckOnly
, CollisionInfo
);
1303 return STATUS_NOT_IMPLEMENTED
;
1312 LsaSetInformationPolicy(IN LSA_HANDLE PolicyHandle
,
1313 IN POLICY_INFORMATION_CLASS InformationClass
,
1318 TRACE("LsaSetInformationPolicy(%p %d %p)\n",
1319 PolicyHandle
, InformationClass
, Buffer
);
1323 Status
= LsarSetInformationPolicy((LSAPR_HANDLE
)PolicyHandle
,
1325 (PLSAPR_POLICY_INFORMATION
)Buffer
);
1327 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1329 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1342 LsaSetSecret(IN LSA_HANDLE SecretHandle
,
1343 IN PLSA_UNICODE_STRING CurrentValue OPTIONAL
,
1344 IN PLSA_UNICODE_STRING OldValue OPTIONAL
)
1346 PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue
= NULL
;
1347 PLSAPR_CR_CIPHER_VALUE EncryptedOldValue
= NULL
;
1351 TRACE("LsaSetSecret(%p %p %p)\n",
1352 SecretHandle
, EncryptedCurrentValue
, EncryptedOldValue
);
1354 if (CurrentValue
!= NULL
)
1356 BufferSize
= sizeof(LSAPR_CR_CIPHER_VALUE
) + CurrentValue
->MaximumLength
;
1357 EncryptedCurrentValue
= midl_user_allocate(BufferSize
);
1358 if (EncryptedCurrentValue
== NULL
)
1360 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1364 EncryptedCurrentValue
->Length
= CurrentValue
->Length
;
1365 EncryptedCurrentValue
->MaximumLength
= CurrentValue
->MaximumLength
;
1366 EncryptedCurrentValue
->Buffer
= (BYTE
*)(EncryptedCurrentValue
+ 1);
1367 if (EncryptedCurrentValue
->Buffer
!= NULL
)
1368 memcpy(EncryptedCurrentValue
->Buffer
, CurrentValue
->Buffer
, CurrentValue
->Length
);
1371 if (OldValue
!= NULL
)
1373 BufferSize
= sizeof(LSAPR_CR_CIPHER_VALUE
) + OldValue
->MaximumLength
;
1374 EncryptedOldValue
= midl_user_allocate(BufferSize
);
1375 if (EncryptedOldValue
== NULL
)
1377 Status
= STATUS_INSUFFICIENT_RESOURCES
;
1381 EncryptedOldValue
->Length
= OldValue
->Length
;
1382 EncryptedOldValue
->MaximumLength
= OldValue
->MaximumLength
;
1383 EncryptedOldValue
->Buffer
= (BYTE
*)(EncryptedOldValue
+ 1);
1384 if (EncryptedOldValue
->Buffer
!= NULL
)
1385 memcpy(EncryptedOldValue
->Buffer
, OldValue
->Buffer
, OldValue
->Length
);
1390 Status
= LsarSetSecret((LSAPR_HANDLE
)SecretHandle
,
1391 EncryptedCurrentValue
,
1394 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1396 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1401 if (EncryptedCurrentValue
!= NULL
)
1402 midl_user_free(EncryptedCurrentValue
);
1404 if (EncryptedOldValue
!= NULL
)
1405 midl_user_free(EncryptedOldValue
);
1416 LsaSetSystemAccessAccount(IN LSA_HANDLE AccountHandle
,
1417 IN ULONG SystemAccess
)
1421 TRACE("LsaSetSystemAccessAccount(%p 0x%lx)\n",
1422 AccountHandle
, SystemAccess
);
1426 Status
= LsarSetSystemAccessAccount((LSAPR_HANDLE
)AccountHandle
,
1429 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
1431 Status
= I_RpcMapWin32Status(RpcExceptionCode());
1444 LsaSetTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle
,
1445 IN PLSA_UNICODE_STRING TrustedDomainName
,
1446 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1449 FIXME("LsaSetTrustedDomainInfoByName(%p %p %d %p) stub\n",
1450 PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
1451 return STATUS_SUCCESS
;
1460 LsaSetTrustedDomainInformation(IN LSA_HANDLE PolicyHandle
,
1461 IN PSID TrustedDomainSid
,
1462 IN TRUSTED_INFORMATION_CLASS InformationClass
,
1465 FIXME("LsaSetTrustedDomainInformation(%p %p %d %p) stub\n",
1466 PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
1467 return STATUS_SUCCESS
;
1476 LsaStorePrivateData(IN LSA_HANDLE PolicyHandle
,
1477 IN PLSA_UNICODE_STRING KeyName
,
1478 IN PLSA_UNICODE_STRING PrivateData OPTIONAL
)
1480 FIXME("LsaStorePrivateData(%p %p %p) stub\n",
1481 PolicyHandle
, KeyName
, PrivateData
);
1482 return STATUS_OBJECT_NAME_NOT_FOUND
;
1491 LsaUnregisterPolicyChangeNotification(IN POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass
,
1492 IN HANDLE NotificationEventHandle
)
1494 FIXME("(%d %p) stub\n",
1495 InformationClass
, NotificationEventHandle
);
1496 return STATUS_SUCCESS
;