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
);
351 LsaLookupNames(IN LSA_HANDLE PolicyHandle
,
353 IN PLSA_UNICODE_STRING Names
,
354 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
355 OUT PLSA_TRANSLATED_SID
*Sids
)
357 LSAPR_TRANSLATED_SIDS TranslatedSids
;
358 ULONG MappedCount
= 0;
361 TRACE("(%p,0x%08x,%p,%p,%p)\n", PolicyHandle
, Count
, Names
,
362 ReferencedDomains
, Sids
);
366 *ReferencedDomains
= NULL
;
369 TranslatedSids
.Entries
= Count
;
370 TranslatedSids
.Sids
= *Sids
;
372 Status
= LsarLookupNames((LSAPR_HANDLE
)PolicyHandle
,
374 (PRPC_UNICODE_STRING
)Names
,
375 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
380 *Sids
= (PLSA_TRANSLATED_SID
)TranslatedSids
.Sids
;
382 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
384 if (TranslatedSids
.Sids
!= NULL
)
386 MIDL_user_free(TranslatedSids
.Sids
);
389 Status
= I_RpcMapWin32Status(RpcExceptionCode());
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());
490 LsaLookupSids(IN LSA_HANDLE PolicyHandle
,
493 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
494 OUT PLSA_TRANSLATED_NAME
*Names
)
496 LSAPR_SID_ENUM_BUFFER SidEnumBuffer
;
497 LSAPR_TRANSLATED_NAMES TranslatedNames
;
498 ULONG MappedCount
= 0;
501 TRACE("(%p,%u,%p,%p,%p)\n", PolicyHandle
, Count
, Sids
,
502 ReferencedDomains
, Names
);
505 return STATUS_INVALID_PARAMETER
;
507 SidEnumBuffer
.Entries
= Count
;
508 SidEnumBuffer
.SidInfo
= (PLSAPR_SID_INFORMATION
)Sids
;
512 *ReferencedDomains
= NULL
;
515 TranslatedNames
.Entries
= 0;
516 TranslatedNames
.Names
= NULL
;
518 Status
= LsarLookupSids((LSAPR_HANDLE
)PolicyHandle
,
520 (PLSAPR_REFERENCED_DOMAIN_LIST
*)ReferencedDomains
,
525 *Names
= (PLSA_TRANSLATED_NAME
)TranslatedNames
.Names
;
527 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
529 if (TranslatedNames
.Names
!= NULL
)
531 MIDL_user_free(TranslatedNames
.Names
);
534 Status
= I_RpcMapWin32Status(RpcExceptionCode());
541 /******************************************************************************
542 * LsaNtStatusToWinError
550 LsaNtStatusToWinError(NTSTATUS Status
)
552 TRACE("(%lx)\n", Status
);
553 return RtlNtStatusToDosError(Status
);
556 /******************************************************************************
570 IN PLSA_UNICODE_STRING SystemName
,
571 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
572 IN ACCESS_MASK DesiredAccess
,
573 IN OUT PLSA_HANDLE PolicyHandle
)
577 TRACE("LsaOpenPolicy (%s,%p,0x%08x,%p)\n",
578 SystemName
? debugstr_w(SystemName
->Buffer
) : "(null)",
579 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
581 /* FIXME: RPC should take care of this */
582 if (!LsapIsLocalComputer(SystemName
))
583 return RPC_NT_SERVER_UNAVAILABLE
;
587 *PolicyHandle
= NULL
;
589 Status
= LsarOpenPolicy(SystemName
? SystemName
->Buffer
: NULL
,
590 (PLSAPR_OBJECT_ATTRIBUTES
)ObjectAttributes
,
594 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
596 Status
= I_RpcMapWin32Status(RpcExceptionCode());
600 TRACE("LsaOpenPolicy() done (Status: 0x%08lx)\n", Status
);
611 LsaOpenTrustedDomainByName(
612 LSA_HANDLE PolicyHandle
,
613 PLSA_UNICODE_STRING TrustedDomainName
,
614 ACCESS_MASK DesiredAccess
,
615 PLSA_HANDLE TrustedDomainHandle
)
617 FIXME("(%p,%p,0x%08x,%p) stub\n", PolicyHandle
, TrustedDomainName
, DesiredAccess
, TrustedDomainHandle
);
618 return STATUS_OBJECT_NAME_NOT_FOUND
;
626 LsaQueryDomainInformationPolicy(
627 LSA_HANDLE PolicyHandle
,
628 POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
631 FIXME("(%p,0x%08x,%p)\n", PolicyHandle
, InformationClass
, Buffer
);
632 return STATUS_NOT_IMPLEMENTED
;
640 LsaQueryForestTrustInformation(
641 LSA_HANDLE PolicyHandle
,
642 PLSA_UNICODE_STRING TrustedDomainName
,
643 PLSA_FOREST_TRUST_INFORMATION
* ForestTrustInfo
)
645 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, TrustedDomainName
, ForestTrustInfo
);
646 return STATUS_NOT_IMPLEMENTED
;
653 LsaQueryInformationPolicy(LSA_HANDLE PolicyHandle
,
654 POLICY_INFORMATION_CLASS InformationClass
,
657 TRACE("(%p,0x%08x,%p)\n", PolicyHandle
, InformationClass
, Buffer
);
659 if(!Buffer
) return STATUS_INVALID_PARAMETER
;
660 switch (InformationClass
)
662 case PolicyAuditEventsInformation
: /* 2 */
664 PPOLICY_AUDIT_EVENTS_INFO p
= RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY
,
665 sizeof(POLICY_AUDIT_EVENTS_INFO
));
666 p
->AuditingMode
= FALSE
; /* no auditing */
670 case PolicyPrimaryDomainInformation
: /* 3 */
672 /* Only the domain name is valid for the local computer.
673 * All other fields are zero.
675 PPOLICY_PRIMARY_DOMAIN_INFO pinfo
;
677 pinfo
= ADVAPI_GetDomainName(sizeof(*pinfo
), offsetof(POLICY_PRIMARY_DOMAIN_INFO
, Name
));
679 TRACE("setting domain to %s\n", debugstr_w(pinfo
->Name
.Buffer
));
683 case PolicyAccountDomainInformation
: /* 5 */
687 POLICY_ACCOUNT_DOMAIN_INFO info
;
690 WCHAR domain
[MAX_COMPUTERNAME_LENGTH
+ 1];
693 DWORD dwSize
= MAX_COMPUTERNAME_LENGTH
+ 1;
694 struct di
* xdi
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(*xdi
));
696 xdi
->info
.DomainName
.MaximumLength
= dwSize
* sizeof(WCHAR
);
697 xdi
->info
.DomainName
.Buffer
= xdi
->domain
;
698 if (GetComputerNameW(xdi
->info
.DomainName
.Buffer
, &dwSize
))
699 xdi
->info
.DomainName
.Length
= dwSize
* sizeof(WCHAR
);
701 TRACE("setting name to %s\n", debugstr_w(xdi
->info
.DomainName
.Buffer
));
703 xdi
->info
.DomainSid
= &xdi
->sid
;
705 /* read the computer SID from the registry */
706 if (!ADVAPI_GetComputerSid(&xdi
->sid
))
708 HeapFree(GetProcessHeap(), 0, xdi
);
710 WARN("Computer SID not found\n");
712 return STATUS_UNSUCCESSFUL
;
718 case PolicyDnsDomainInformation
: /* 12 (0xc) */
720 /* Only the domain name is valid for the local computer.
721 * All other fields are zero.
723 PPOLICY_DNS_DOMAIN_INFO pinfo
;
725 pinfo
= ADVAPI_GetDomainName(sizeof(*pinfo
), offsetof(POLICY_DNS_DOMAIN_INFO
, Name
));
727 TRACE("setting domain to %s\n", debugstr_w(pinfo
->Name
.Buffer
));
732 case PolicyAuditLogInformation
:
733 case PolicyPdAccountInformation
:
734 case PolicyLsaServerRoleInformation
:
735 case PolicyReplicaSourceInformation
:
736 case PolicyDefaultQuotaInformation
:
737 case PolicyModificationInformation
:
738 case PolicyAuditFullSetInformation
:
739 case PolicyAuditFullQueryInformation
:
740 case PolicyEfsInformation
:
742 FIXME("category not implemented\n");
743 return STATUS_UNSUCCESSFUL
;
746 return STATUS_SUCCESS
;
754 LsaQueryTrustedDomainInfoByName(
755 LSA_HANDLE PolicyHandle
,
756 PLSA_UNICODE_STRING TrustedDomainName
,
757 TRUSTED_INFORMATION_CLASS InformationClass
,
760 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
761 return STATUS_OBJECT_NAME_NOT_FOUND
;
769 LsaQueryTrustedDomainInfo(
770 LSA_HANDLE PolicyHandle
,
771 PSID TrustedDomainSid
,
772 TRUSTED_INFORMATION_CLASS InformationClass
,
775 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
776 return STATUS_OBJECT_NAME_NOT_FOUND
;
784 LsaRemoveAccountRights(
785 LSA_HANDLE PolicyHandle
,
788 PLSA_UNICODE_STRING UserRights
,
791 FIXME("(%p,%p,%d,%p,0x%08x) stub\n", PolicyHandle
, AccountSid
, AllRights
, UserRights
, CountOfRights
);
792 return STATUS_SUCCESS
;
800 LsaRetrievePrivateData(
801 LSA_HANDLE PolicyHandle
,
802 PLSA_UNICODE_STRING KeyName
,
803 PLSA_UNICODE_STRING
*PrivateData
)
805 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, KeyName
, PrivateData
);
806 return STATUS_OBJECT_NAME_NOT_FOUND
;
814 LsaSetDomainInformationPolicy(
815 LSA_HANDLE PolicyHandle
,
816 POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
819 FIXME("(%p,0x%08x,%p) stub\n", PolicyHandle
, InformationClass
, Buffer
);
820 return STATUS_UNSUCCESSFUL
;
828 LsaSetInformationPolicy(
829 LSA_HANDLE PolicyHandle
,
830 POLICY_INFORMATION_CLASS InformationClass
,
833 FIXME("(%p,0x%08x,%p) stub\n", PolicyHandle
, InformationClass
, Buffer
);
834 return STATUS_UNSUCCESSFUL
;
840 NTSTATUS WINAPI
LsaSetSecret(
841 IN LSA_HANDLE SecretHandle
,
842 IN PLSA_UNICODE_STRING EncryptedCurrentValue
,
843 IN PLSA_UNICODE_STRING EncryptedOldValue
)
845 FIXME("(%p,%p,%p) stub\n", SecretHandle
, EncryptedCurrentValue
,
847 return STATUS_SUCCESS
;
855 LsaSetForestTrustInformation(
856 LSA_HANDLE PolicyHandle
,
857 PLSA_UNICODE_STRING TrustedDomainName
,
858 PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
860 PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
862 FIXME("(%p,%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, ForestTrustInfo
, CheckOnly
, CollisionInfo
);
863 return STATUS_NOT_IMPLEMENTED
;
871 LsaSetTrustedDomainInfoByName(
872 LSA_HANDLE PolicyHandle
,
873 PLSA_UNICODE_STRING TrustedDomainName
,
874 TRUSTED_INFORMATION_CLASS InformationClass
,
877 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
878 return STATUS_SUCCESS
;
884 NTSTATUS WINAPI
LsaRegisterPolicyChangeNotification(
885 POLICY_NOTIFICATION_INFORMATION_CLASS
class,
888 FIXME("(%d,%p) stub\n", class, event
);
889 return STATUS_UNSUCCESSFUL
;
897 LsaSetTrustedDomainInformation(
898 LSA_HANDLE PolicyHandle
,
899 PSID TrustedDomainSid
,
900 TRUSTED_INFORMATION_CLASS InformationClass
,
903 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
904 return STATUS_SUCCESS
;
913 LSA_HANDLE PolicyHandle
,
914 PLSA_UNICODE_STRING KeyName
,
915 PLSA_UNICODE_STRING PrivateData
)
917 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, KeyName
, PrivateData
);
918 return STATUS_OBJECT_NAME_NOT_FOUND
;
924 NTSTATUS WINAPI
LsaUnregisterPolicyChangeNotification(
925 POLICY_NOTIFICATION_INFORMATION_CLASS
class,
928 FIXME("(%d,%p) stub\n", class, event
);
929 return STATUS_SUCCESS
;
938 PUNICODE_STRING
*UserName
,
939 PUNICODE_STRING
*DomainName
)
941 FIXME("(%p,%p) stub\n", UserName
, DomainName
);
942 return STATUS_NOT_IMPLEMENTED
;
950 LsaQueryInfoTrustedDomain (DWORD Unknonw0
,
954 FIXME("(%d,%d,%d) stub\n", Unknonw0
, Unknonw1
, Unknonw2
);
955 return STATUS_NOT_IMPLEMENTED
;