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
14 #include "wine/debug.h"
15 #include "wine/unicode.h"
17 WINE_DEFAULT_DEBUG_CHANNEL(advapi
);
19 /* imported from wine 1.1.14 */
20 static void* ADVAPI_GetDomainName(unsigned sz
, unsigned ofs
)
27 static const WCHAR wVNETSUP
[] = {
28 'S','y','s','t','e','m','\\',
29 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
30 'S','e','r','v','i','c','e','s','\\',
31 'V','x','D','\\','V','N','E','T','S','U','P','\0'};
33 ret
= RegOpenKeyExW(HKEY_LOCAL_MACHINE
, wVNETSUP
, 0, KEY_READ
, &key
);
34 if (ret
== ERROR_SUCCESS
)
37 static const WCHAR wg
[] = { 'W','o','r','k','g','r','o','u','p',0 };
39 ret
= RegQueryValueExW(key
, wg
, NULL
, NULL
, NULL
, &size
);
40 if (ret
== ERROR_MORE_DATA
|| ret
== ERROR_SUCCESS
)
42 ptr
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sz
+ size
);
43 if (!ptr
) return NULL
;
44 ustr
= (UNICODE_STRING
*)(ptr
+ ofs
);
45 ustr
->MaximumLength
= size
;
46 ustr
->Buffer
= (WCHAR
*)(ptr
+ sz
);
47 ret
= RegQueryValueExW(key
, wg
, NULL
, NULL
, (LPBYTE
)ustr
->Buffer
, &size
);
48 if (ret
!= ERROR_SUCCESS
)
50 HeapFree(GetProcessHeap(), 0, ptr
);
53 else ustr
->Length
= size
- sizeof(WCHAR
);
59 static const WCHAR wDomain
[] = {'D','O','M','A','I','N','\0'};
60 ptr
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
,
61 sz
+ sizeof(wDomain
));
62 if (!ptr
) return NULL
;
63 ustr
= (UNICODE_STRING
*)(ptr
+ ofs
);
64 ustr
->MaximumLength
= sizeof(wDomain
);
65 ustr
->Buffer
= (WCHAR
*)(ptr
+ sz
);
66 ustr
->Length
= sizeof(wDomain
) - sizeof(WCHAR
);
67 memcpy(ustr
->Buffer
, wDomain
, sizeof(wDomain
));
73 static BOOL
LsapIsLocalComputer(PLSA_UNICODE_STRING ServerName
)
75 DWORD dwSize
= MAX_COMPUTERNAME_LENGTH
+ 1;
79 if (ServerName
== NULL
|| ServerName
->Length
== 0 || ServerName
->Buffer
== NULL
)
82 buf
= HeapAlloc(GetProcessHeap(), 0, dwSize
* sizeof(WCHAR
));
83 Result
= GetComputerNameW(buf
, &dwSize
);
84 if (Result
&& (ServerName
->Buffer
[0] == '\\') && (ServerName
->Buffer
[1] == '\\'))
86 Result
= Result
&& !lstrcmpW(ServerName
->Buffer
, buf
);
87 HeapFree(GetProcessHeap(), 0, buf
);
94 PLSAPR_SERVER_NAME_bind(PLSAPR_SERVER_NAME pszSystemName
)
96 handle_t hBinding
= NULL
;
97 LPWSTR pszStringBinding
;
100 TRACE("PLSAPR_SERVER_NAME_bind() called\n");
102 status
= RpcStringBindingComposeW(NULL
,
110 TRACE("RpcStringBindingCompose returned 0x%x\n", status
);
114 /* Set the binding handle that will be used to bind to the server. */
115 status
= RpcBindingFromStringBindingW(pszStringBinding
,
119 TRACE("RpcBindingFromStringBinding returned 0x%x\n", status
);
122 status
= RpcStringFreeW(&pszStringBinding
);
125 TRACE("RpcStringFree returned 0x%x\n", status
);
133 PLSAPR_SERVER_NAME_unbind(PLSAPR_SERVER_NAME pszSystemName
,
138 TRACE("PLSAPR_SERVER_NAME_unbind() called\n");
140 status
= RpcBindingFree(&hBinding
);
143 TRACE("RpcBindingFree returned 0x%x\n", status
);
152 LsaClose(LSA_HANDLE ObjectHandle
)
156 TRACE("LsaClose(0x%p) called\n", ObjectHandle
);
160 Status
= LsarClose((PLSAPR_HANDLE
)&ObjectHandle
);
162 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
164 Status
= I_RpcMapWin32Status(RpcExceptionCode());
176 LsaDelete(LSA_HANDLE ObjectHandle
)
180 TRACE("LsaDelete(0x%p) called\n", ObjectHandle
);
184 Status
= LsarDelete((LSAPR_HANDLE
)ObjectHandle
);
186 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
188 Status
= I_RpcMapWin32Status(RpcExceptionCode());
202 LSA_HANDLE PolicyHandle
,
204 PLSA_UNICODE_STRING UserRights
,
207 FIXME("(%p,%p,%p,0x%08x) stub\n", PolicyHandle
, AccountSid
, UserRights
, CountOfRights
);
208 return STATUS_OBJECT_NAME_NOT_FOUND
;
216 LsaCreateTrustedDomainEx(
217 LSA_HANDLE PolicyHandle
,
218 PTRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation
,
219 PTRUSTED_DOMAIN_AUTH_INFORMATION AuthenticationInformation
,
220 ACCESS_MASK DesiredAccess
,
221 PLSA_HANDLE TrustedDomainHandle
)
223 FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle
, TrustedDomainInformation
, AuthenticationInformation
,
224 DesiredAccess
, TrustedDomainHandle
);
225 return STATUS_SUCCESS
;
233 LsaDeleteTrustedDomain(
234 LSA_HANDLE PolicyHandle
,
235 PSID TrustedDomainSid
)
237 FIXME("(%p,%p) stub\n", PolicyHandle
, TrustedDomainSid
);
238 return STATUS_SUCCESS
;
246 LsaEnumerateAccountRights(
247 LSA_HANDLE PolicyHandle
,
249 PLSA_UNICODE_STRING
*UserRights
,
250 PULONG CountOfRights
)
252 LSAPR_USER_RIGHT_SET UserRightsSet
;
255 TRACE("(%p,%p,%p,%p) stub\n", PolicyHandle
, AccountSid
, UserRights
, CountOfRights
);
257 UserRightsSet
.Entries
= 0;
258 UserRightsSet
.UserRights
= NULL
;
262 Status
= LsarEnmuerateAccountRights((LSAPR_HANDLE
)PolicyHandle
,
266 *CountOfRights
= UserRightsSet
.Entries
;
267 *UserRights
= (PUNICODE_STRING
)UserRightsSet
.UserRights
;
269 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
271 Status
= I_RpcMapWin32Status(RpcExceptionCode());
273 if (UserRightsSet
.UserRights
!= NULL
)
275 MIDL_user_free(UserRightsSet
.UserRights
);
288 LsaEnumerateAccountsWithUserRight(
289 LSA_HANDLE PolicyHandle
,
290 OPTIONAL PLSA_UNICODE_STRING UserRights
,
291 PVOID
*EnumerationBuffer
,
292 PULONG CountReturned
)
294 FIXME("(%p,%p,%p,%p) stub\n", PolicyHandle
, UserRights
, EnumerationBuffer
, CountReturned
);
295 return STATUS_NO_MORE_ENTRIES
;
303 LsaEnumerateTrustedDomains(
304 LSA_HANDLE PolicyHandle
,
305 PLSA_ENUMERATION_HANDLE EnumerationContext
,
307 ULONG PreferedMaximumLength
,
308 PULONG CountReturned
)
310 FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle
, EnumerationContext
,
311 Buffer
, PreferedMaximumLength
, CountReturned
);
313 if (CountReturned
) *CountReturned
= 0;
314 return STATUS_SUCCESS
;
322 LsaEnumerateTrustedDomainsEx(
323 LSA_HANDLE PolicyHandle
,
324 PLSA_ENUMERATION_HANDLE EnumerationContext
,
326 ULONG PreferedMaximumLength
,
327 PULONG CountReturned
)
329 FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle
, EnumerationContext
, Buffer
,
330 PreferedMaximumLength
, CountReturned
);
331 if (CountReturned
) *CountReturned
= 0;
332 return STATUS_SUCCESS
;
340 LsaFreeMemory(PVOID Buffer
)
342 TRACE("(%p)\n", Buffer
);
343 return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer
);
352 LSA_HANDLE PolicyHandle
,
354 PLSA_UNICODE_STRING Names
,
355 PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
356 PLSA_TRANSLATED_SID
*Sids
)
358 PLSA_TRANSLATED_SID2 Sids2
;
359 LSA_TRANSLATED_SID
*TranslatedSids
;
363 TRACE("(%p,0x%08x,%p,%p,%p)\n", PolicyHandle
, Count
, Names
,
364 ReferencedDomains
, Sids
);
366 /* Call LsaLookupNames2, which supersedes this function */
367 Status
= LsaLookupNames2(PolicyHandle
, Count
, 0, Names
, ReferencedDomains
, &Sids2
);
368 if (!NT_SUCCESS(Status
))
371 /* Translate the returned structure */
372 TranslatedSids
= RtlAllocateHeap(RtlGetProcessHeap(), 0, Count
* sizeof(LSA_TRANSLATED_SID
));
375 LsaFreeMemory(Sids2
);
376 return SCESTATUS_NOT_ENOUGH_RESOURCE
;
378 RtlZeroMemory(Sids
, Count
* sizeof(PLSA_TRANSLATED_SID
));
379 for (i
= 0; i
< Count
; i
++)
381 TranslatedSids
[i
].Use
= Sids2
[i
].Use
;
382 if (Sids2
[i
].Use
!= SidTypeInvalid
&& Sids2
[i
].Use
!= SidTypeUnknown
)
384 TranslatedSids
[i
].DomainIndex
= Sids2
[i
].DomainIndex
;
385 if (Sids2
[i
].Use
!= SidTypeDomain
)
386 TranslatedSids
[i
].RelativeId
= *GetSidSubAuthority(Sids2
[i
].Sid
, 0);
389 LsaFreeMemory(Sids2
);
391 *Sids
= TranslatedSids
;
402 LSA_HANDLE PolicyHandle
,
405 PLSA_UNICODE_STRING Names
,
406 PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
407 PLSA_TRANSLATED_SID2
*Sids
)
409 FIXME("(%p,0x%08x,0x%08x,%p,%p,%p) stub\n", PolicyHandle
, Flags
,
410 Count
, Names
, ReferencedDomains
, Sids
);
411 if (Names
!= NULL
&& Count
> 0)
413 *ReferencedDomains
= RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(LSA_REFERENCED_DOMAIN_LIST
));
414 *Sids
= RtlAllocateHeap(RtlGetProcessHeap(), 0, Count
* sizeof(LSA_TRANSLATED_SID2
));
415 return STATUS_SOME_NOT_MAPPED
;
417 return STATUS_NONE_MAPPED
;
425 LsaLookupPrivilegeName(IN LSA_HANDLE PolicyHandle
,
427 OUT PUNICODE_STRING
*Name
)
429 PRPC_UNICODE_STRING NameBuffer
= NULL
;
432 TRACE("(%p,%p,%p)\n", PolicyHandle
, Value
, Name
);
436 Status
= LsarLookupPrivilegeName(PolicyHandle
,
440 *Name
= (PUNICODE_STRING
)NameBuffer
;
442 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
444 if (NameBuffer
!= NULL
)
445 MIDL_user_free(NameBuffer
);
447 Status
= I_RpcMapWin32Status(RpcExceptionCode());
459 LsaLookupPrivilegeValue(IN LSA_HANDLE PolicyHandle
,
460 IN PLSA_UNICODE_STRING Name
,
466 TRACE("(%p,%p,%p)\n", PolicyHandle
, Name
, Value
);
470 Status
= LsarLookupPrivilegeValue(PolicyHandle
,
471 (PRPC_UNICODE_STRING
)Name
,
473 if (Status
== STATUS_SUCCESS
)
476 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
478 Status
= I_RpcMapWin32Status(RpcExceptionCode());
491 LSA_HANDLE PolicyHandle
,
494 PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
495 PLSA_TRANSLATED_NAME
*Names
)
497 LSAPR_SID_ENUM_BUFFER SidEnumBuffer
;
498 LSAPR_TRANSLATED_NAMES TranslatedNames
;
499 ULONG MappedCount
= 0;
502 TRACE("(%p,%u,%p,%p,%p)\n", PolicyHandle
, Count
, Sids
,
503 ReferencedDomains
, Names
);
506 return STATUS_INVALID_PARAMETER
;
508 SidEnumBuffer
.Entries
= Count
;
509 SidEnumBuffer
.SidInfo
= (PLSAPR_SID_INFORMATION
)Sids
;
513 *ReferencedDomains
= NULL
;
516 TranslatedNames
.Entries
= 0;
517 TranslatedNames
.Names
= NULL
;
519 Status
= LsarLookupSids((LSAPR_HANDLE
)PolicyHandle
,
521 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
526 *Names
= (PLSA_TRANSLATED_NAME
)TranslatedNames
.Names
;
528 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
530 if (TranslatedNames
.Names
!= NULL
)
532 MIDL_user_free(TranslatedNames
.Names
);
535 Status
= I_RpcMapWin32Status(RpcExceptionCode());
542 /******************************************************************************
543 * LsaNtStatusToWinError
551 LsaNtStatusToWinError(NTSTATUS Status
)
553 TRACE("(%lx)\n", Status
);
554 return RtlNtStatusToDosError(Status
);
557 /******************************************************************************
571 IN PLSA_UNICODE_STRING SystemName
,
572 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
573 IN ACCESS_MASK DesiredAccess
,
574 IN OUT PLSA_HANDLE PolicyHandle
)
578 TRACE("LsaOpenPolicy (%s,%p,0x%08x,%p)\n",
579 SystemName
? debugstr_w(SystemName
->Buffer
) : "(null)",
580 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
582 /* FIXME: RPC should take care of this */
583 if (!LsapIsLocalComputer(SystemName
))
584 return RPC_NT_SERVER_UNAVAILABLE
;
588 *PolicyHandle
= NULL
;
590 Status
= LsarOpenPolicy(SystemName
? SystemName
->Buffer
: NULL
,
591 (PLSAPR_OBJECT_ATTRIBUTES
)ObjectAttributes
,
595 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
597 Status
= I_RpcMapWin32Status(RpcExceptionCode());
601 TRACE("LsaOpenPolicy() done (Status: 0x%08lx)\n", Status
);
612 LsaOpenTrustedDomainByName(
613 LSA_HANDLE PolicyHandle
,
614 PLSA_UNICODE_STRING TrustedDomainName
,
615 ACCESS_MASK DesiredAccess
,
616 PLSA_HANDLE TrustedDomainHandle
)
618 FIXME("(%p,%p,0x%08x,%p) stub\n", PolicyHandle
, TrustedDomainName
, DesiredAccess
, TrustedDomainHandle
);
619 return STATUS_OBJECT_NAME_NOT_FOUND
;
627 LsaQueryDomainInformationPolicy(
628 LSA_HANDLE PolicyHandle
,
629 POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
632 FIXME("(%p,0x%08x,%p)\n", PolicyHandle
, InformationClass
, Buffer
);
633 return STATUS_NOT_IMPLEMENTED
;
641 LsaQueryForestTrustInformation(
642 LSA_HANDLE PolicyHandle
,
643 PLSA_UNICODE_STRING TrustedDomainName
,
644 PLSA_FOREST_TRUST_INFORMATION
* ForestTrustInfo
)
646 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, TrustedDomainName
, ForestTrustInfo
);
647 return STATUS_NOT_IMPLEMENTED
;
654 LsaQueryInformationPolicy(LSA_HANDLE PolicyHandle
,
655 POLICY_INFORMATION_CLASS InformationClass
,
658 TRACE("(%p,0x%08x,%p)\n", PolicyHandle
, InformationClass
, Buffer
);
660 if(!Buffer
) return STATUS_INVALID_PARAMETER
;
661 switch (InformationClass
)
663 case PolicyAuditEventsInformation
: /* 2 */
665 PPOLICY_AUDIT_EVENTS_INFO p
= RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY
,
666 sizeof(POLICY_AUDIT_EVENTS_INFO
));
667 p
->AuditingMode
= FALSE
; /* no auditing */
671 case PolicyPrimaryDomainInformation
: /* 3 */
673 /* Only the domain name is valid for the local computer.
674 * All other fields are zero.
676 PPOLICY_PRIMARY_DOMAIN_INFO pinfo
;
678 pinfo
= ADVAPI_GetDomainName(sizeof(*pinfo
), offsetof(POLICY_PRIMARY_DOMAIN_INFO
, Name
));
680 TRACE("setting domain to %s\n", debugstr_w(pinfo
->Name
.Buffer
));
684 case PolicyAccountDomainInformation
: /* 5 */
688 POLICY_ACCOUNT_DOMAIN_INFO info
;
691 WCHAR domain
[MAX_COMPUTERNAME_LENGTH
+ 1];
694 DWORD dwSize
= MAX_COMPUTERNAME_LENGTH
+ 1;
695 struct di
* xdi
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(*xdi
));
697 xdi
->info
.DomainName
.MaximumLength
= dwSize
* sizeof(WCHAR
);
698 xdi
->info
.DomainName
.Buffer
= xdi
->domain
;
699 if (GetComputerNameW(xdi
->info
.DomainName
.Buffer
, &dwSize
))
700 xdi
->info
.DomainName
.Length
= dwSize
* sizeof(WCHAR
);
702 TRACE("setting name to %s\n", debugstr_w(xdi
->info
.DomainName
.Buffer
));
704 xdi
->info
.DomainSid
= &xdi
->sid
;
706 /* read the computer SID from the registry */
707 if (!ADVAPI_GetComputerSid(&xdi
->sid
))
709 HeapFree(GetProcessHeap(), 0, xdi
);
711 WARN("Computer SID not found\n");
713 return STATUS_UNSUCCESSFUL
;
719 case PolicyDnsDomainInformation
: /* 12 (0xc) */
721 /* Only the domain name is valid for the local computer.
722 * All other fields are zero.
724 PPOLICY_DNS_DOMAIN_INFO pinfo
;
726 pinfo
= ADVAPI_GetDomainName(sizeof(*pinfo
), offsetof(POLICY_DNS_DOMAIN_INFO
, Name
));
728 TRACE("setting domain to %s\n", debugstr_w(pinfo
->Name
.Buffer
));
733 case PolicyAuditLogInformation
:
734 case PolicyPdAccountInformation
:
735 case PolicyLsaServerRoleInformation
:
736 case PolicyReplicaSourceInformation
:
737 case PolicyDefaultQuotaInformation
:
738 case PolicyModificationInformation
:
739 case PolicyAuditFullSetInformation
:
740 case PolicyAuditFullQueryInformation
:
741 case PolicyEfsInformation
:
743 FIXME("category not implemented\n");
744 return STATUS_UNSUCCESSFUL
;
747 return STATUS_SUCCESS
;
755 LsaQueryTrustedDomainInfoByName(
756 LSA_HANDLE PolicyHandle
,
757 PLSA_UNICODE_STRING TrustedDomainName
,
758 TRUSTED_INFORMATION_CLASS InformationClass
,
761 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
762 return STATUS_OBJECT_NAME_NOT_FOUND
;
770 LsaQueryTrustedDomainInfo(
771 LSA_HANDLE PolicyHandle
,
772 PSID TrustedDomainSid
,
773 TRUSTED_INFORMATION_CLASS InformationClass
,
776 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
777 return STATUS_OBJECT_NAME_NOT_FOUND
;
785 LsaRemoveAccountRights(
786 LSA_HANDLE PolicyHandle
,
789 PLSA_UNICODE_STRING UserRights
,
792 FIXME("(%p,%p,%d,%p,0x%08x) stub\n", PolicyHandle
, AccountSid
, AllRights
, UserRights
, CountOfRights
);
793 return STATUS_SUCCESS
;
801 LsaRetrievePrivateData(
802 LSA_HANDLE PolicyHandle
,
803 PLSA_UNICODE_STRING KeyName
,
804 PLSA_UNICODE_STRING
*PrivateData
)
806 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, KeyName
, PrivateData
);
807 return STATUS_OBJECT_NAME_NOT_FOUND
;
815 LsaSetDomainInformationPolicy(
816 LSA_HANDLE PolicyHandle
,
817 POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
820 FIXME("(%p,0x%08x,%p) stub\n", PolicyHandle
, InformationClass
, Buffer
);
821 return STATUS_UNSUCCESSFUL
;
829 LsaSetInformationPolicy(
830 LSA_HANDLE PolicyHandle
,
831 POLICY_INFORMATION_CLASS InformationClass
,
834 FIXME("(%p,0x%08x,%p) stub\n", PolicyHandle
, InformationClass
, Buffer
);
835 return STATUS_UNSUCCESSFUL
;
841 NTSTATUS WINAPI
LsaSetSecret(
842 IN LSA_HANDLE SecretHandle
,
843 IN PLSA_UNICODE_STRING EncryptedCurrentValue
,
844 IN PLSA_UNICODE_STRING EncryptedOldValue
)
846 FIXME("(%p,%p,%p) stub\n", SecretHandle
, EncryptedCurrentValue
,
848 return STATUS_SUCCESS
;
856 LsaSetForestTrustInformation(
857 LSA_HANDLE PolicyHandle
,
858 PLSA_UNICODE_STRING TrustedDomainName
,
859 PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
861 PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
863 FIXME("(%p,%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, ForestTrustInfo
, CheckOnly
, CollisionInfo
);
864 return STATUS_NOT_IMPLEMENTED
;
872 LsaSetTrustedDomainInfoByName(
873 LSA_HANDLE PolicyHandle
,
874 PLSA_UNICODE_STRING TrustedDomainName
,
875 TRUSTED_INFORMATION_CLASS InformationClass
,
878 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
879 return STATUS_SUCCESS
;
885 NTSTATUS WINAPI
LsaRegisterPolicyChangeNotification(
886 POLICY_NOTIFICATION_INFORMATION_CLASS
class,
889 FIXME("(%d,%p) stub\n", class, event
);
890 return STATUS_UNSUCCESSFUL
;
898 LsaSetTrustedDomainInformation(
899 LSA_HANDLE PolicyHandle
,
900 PSID TrustedDomainSid
,
901 TRUSTED_INFORMATION_CLASS InformationClass
,
904 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
905 return STATUS_SUCCESS
;
914 LSA_HANDLE PolicyHandle
,
915 PLSA_UNICODE_STRING KeyName
,
916 PLSA_UNICODE_STRING PrivateData
)
918 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, KeyName
, PrivateData
);
919 return STATUS_OBJECT_NAME_NOT_FOUND
;
925 NTSTATUS WINAPI
LsaUnregisterPolicyChangeNotification(
926 POLICY_NOTIFICATION_INFORMATION_CLASS
class,
929 FIXME("(%d,%p) stub\n", class, event
);
930 return STATUS_SUCCESS
;
939 PUNICODE_STRING
*UserName
,
940 PUNICODE_STRING
*DomainName
)
942 FIXME("(%p,%p) stub\n", UserName
, DomainName
);
943 return STATUS_NOT_IMPLEMENTED
;
951 LsaQueryInfoTrustedDomain (DWORD Unknonw0
,
955 FIXME("(%d,%d,%d) stub\n", Unknonw0
, Unknonw1
, Unknonw2
);
956 return STATUS_NOT_IMPLEMENTED
;