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) stub\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) stub\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 static const UNICODE_STRING UserName
= RTL_CONSTANT_STRING(L
"Administrator");
498 PLSA_REFERENCED_DOMAIN_LIST LocalDomains
;
499 PLSA_TRANSLATED_NAME LocalNames
;
501 TRACE("(%p,%u,%p,%p,%p) stub\n", PolicyHandle
, Count
, Sids
,
502 ReferencedDomains
, Names
);
504 WARN("LsaLookupSids(): stub. Always returning 'Administrator'\n");
506 return STATUS_NONE_MAPPED
;
507 LocalDomains
= RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(LSA_TRANSLATED_SID
));
509 return SCESTATUS_NOT_ENOUGH_RESOURCE
;
510 LocalNames
= RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(LSA_TRANSLATED_NAME
) + UserName
.MaximumLength
);
513 LsaFreeMemory(LocalDomains
);
514 return SCESTATUS_NOT_ENOUGH_RESOURCE
;
516 LocalDomains
[0].Entries
= 0;
517 LocalDomains
[0].Domains
= NULL
;
518 LocalNames
[0].Use
= SidTypeWellKnownGroup
;
519 LocalNames
[0].Name
.Buffer
= (LPWSTR
)((ULONG_PTR
)(LocalNames
) + sizeof(LSA_TRANSLATED_NAME
));
520 LocalNames
[0].Name
.Length
= UserName
.Length
;
521 LocalNames
[0].Name
.MaximumLength
= UserName
.MaximumLength
;
522 RtlCopyMemory(LocalNames
[0].Name
.Buffer
, UserName
.Buffer
, UserName
.MaximumLength
);
524 *ReferencedDomains
= LocalDomains
;
526 return STATUS_SUCCESS
;
529 /******************************************************************************
530 * LsaNtStatusToWinError
538 LsaNtStatusToWinError(NTSTATUS Status
)
540 TRACE("(%lx)\n", Status
);
541 return RtlNtStatusToDosError(Status
);
544 /******************************************************************************
558 IN PLSA_UNICODE_STRING SystemName
,
559 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
560 IN ACCESS_MASK DesiredAccess
,
561 IN OUT PLSA_HANDLE PolicyHandle
)
565 TRACE("LsaOpenPolicy (%s,%p,0x%08x,%p)\n",
566 SystemName
? debugstr_w(SystemName
->Buffer
) : "(null)",
567 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
569 /* FIXME: RPC should take care of this */
570 if (!LsapIsLocalComputer(SystemName
))
571 return RPC_NT_SERVER_UNAVAILABLE
;
575 *PolicyHandle
= NULL
;
577 Status
= LsarOpenPolicy(SystemName
? SystemName
->Buffer
: NULL
,
578 (PLSAPR_OBJECT_ATTRIBUTES
)ObjectAttributes
,
582 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
584 Status
= I_RpcMapWin32Status(RpcExceptionCode());
588 TRACE("LsaOpenPolicy() done (Status: 0x%08lx)\n", Status
);
599 LsaOpenTrustedDomainByName(
600 LSA_HANDLE PolicyHandle
,
601 PLSA_UNICODE_STRING TrustedDomainName
,
602 ACCESS_MASK DesiredAccess
,
603 PLSA_HANDLE TrustedDomainHandle
)
605 FIXME("(%p,%p,0x%08x,%p) stub\n", PolicyHandle
, TrustedDomainName
, DesiredAccess
, TrustedDomainHandle
);
606 return STATUS_OBJECT_NAME_NOT_FOUND
;
614 LsaQueryDomainInformationPolicy(
615 LSA_HANDLE PolicyHandle
,
616 POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
619 FIXME("(%p,0x%08x,%p)\n", PolicyHandle
, InformationClass
, Buffer
);
620 return STATUS_NOT_IMPLEMENTED
;
628 LsaQueryForestTrustInformation(
629 LSA_HANDLE PolicyHandle
,
630 PLSA_UNICODE_STRING TrustedDomainName
,
631 PLSA_FOREST_TRUST_INFORMATION
* ForestTrustInfo
)
633 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, TrustedDomainName
, ForestTrustInfo
);
634 return STATUS_NOT_IMPLEMENTED
;
641 LsaQueryInformationPolicy(LSA_HANDLE PolicyHandle
,
642 POLICY_INFORMATION_CLASS InformationClass
,
645 TRACE("(%p,0x%08x,%p)\n", PolicyHandle
, InformationClass
, Buffer
);
647 if(!Buffer
) return STATUS_INVALID_PARAMETER
;
648 switch (InformationClass
)
650 case PolicyAuditEventsInformation
: /* 2 */
652 PPOLICY_AUDIT_EVENTS_INFO p
= RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY
,
653 sizeof(POLICY_AUDIT_EVENTS_INFO
));
654 p
->AuditingMode
= FALSE
; /* no auditing */
658 case PolicyPrimaryDomainInformation
: /* 3 */
660 /* Only the domain name is valid for the local computer.
661 * All other fields are zero.
663 PPOLICY_PRIMARY_DOMAIN_INFO pinfo
;
665 pinfo
= ADVAPI_GetDomainName(sizeof(*pinfo
), offsetof(POLICY_PRIMARY_DOMAIN_INFO
, Name
));
667 TRACE("setting domain to %s\n", debugstr_w(pinfo
->Name
.Buffer
));
671 case PolicyAccountDomainInformation
: /* 5 */
675 POLICY_ACCOUNT_DOMAIN_INFO info
;
678 WCHAR domain
[MAX_COMPUTERNAME_LENGTH
+ 1];
681 DWORD dwSize
= MAX_COMPUTERNAME_LENGTH
+ 1;
682 struct di
* xdi
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(*xdi
));
684 xdi
->info
.DomainName
.MaximumLength
= dwSize
* sizeof(WCHAR
);
685 xdi
->info
.DomainName
.Buffer
= xdi
->domain
;
686 if (GetComputerNameW(xdi
->info
.DomainName
.Buffer
, &dwSize
))
687 xdi
->info
.DomainName
.Length
= dwSize
* sizeof(WCHAR
);
689 TRACE("setting name to %s\n", debugstr_w(xdi
->info
.DomainName
.Buffer
));
691 xdi
->info
.DomainSid
= &xdi
->sid
;
693 /* read the computer SID from the registry */
694 if (!ADVAPI_GetComputerSid(&xdi
->sid
))
696 HeapFree(GetProcessHeap(), 0, xdi
);
698 WARN("Computer SID not found\n");
700 return STATUS_UNSUCCESSFUL
;
706 case PolicyDnsDomainInformation
: /* 12 (0xc) */
708 /* Only the domain name is valid for the local computer.
709 * All other fields are zero.
711 PPOLICY_DNS_DOMAIN_INFO pinfo
;
713 pinfo
= ADVAPI_GetDomainName(sizeof(*pinfo
), offsetof(POLICY_DNS_DOMAIN_INFO
, Name
));
715 TRACE("setting domain to %s\n", debugstr_w(pinfo
->Name
.Buffer
));
720 case PolicyAuditLogInformation
:
721 case PolicyPdAccountInformation
:
722 case PolicyLsaServerRoleInformation
:
723 case PolicyReplicaSourceInformation
:
724 case PolicyDefaultQuotaInformation
:
725 case PolicyModificationInformation
:
726 case PolicyAuditFullSetInformation
:
727 case PolicyAuditFullQueryInformation
:
728 case PolicyEfsInformation
:
730 FIXME("category not implemented\n");
731 return STATUS_UNSUCCESSFUL
;
734 return STATUS_SUCCESS
;
742 LsaQueryTrustedDomainInfoByName(
743 LSA_HANDLE PolicyHandle
,
744 PLSA_UNICODE_STRING TrustedDomainName
,
745 TRUSTED_INFORMATION_CLASS InformationClass
,
748 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
749 return STATUS_OBJECT_NAME_NOT_FOUND
;
757 LsaQueryTrustedDomainInfo(
758 LSA_HANDLE PolicyHandle
,
759 PSID TrustedDomainSid
,
760 TRUSTED_INFORMATION_CLASS InformationClass
,
763 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
764 return STATUS_OBJECT_NAME_NOT_FOUND
;
772 LsaRemoveAccountRights(
773 LSA_HANDLE PolicyHandle
,
776 PLSA_UNICODE_STRING UserRights
,
779 FIXME("(%p,%p,%d,%p,0x%08x) stub\n", PolicyHandle
, AccountSid
, AllRights
, UserRights
, CountOfRights
);
780 return STATUS_SUCCESS
;
788 LsaRetrievePrivateData(
789 LSA_HANDLE PolicyHandle
,
790 PLSA_UNICODE_STRING KeyName
,
791 PLSA_UNICODE_STRING
*PrivateData
)
793 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, KeyName
, PrivateData
);
794 return STATUS_OBJECT_NAME_NOT_FOUND
;
802 LsaSetDomainInformationPolicy(
803 LSA_HANDLE PolicyHandle
,
804 POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
807 FIXME("(%p,0x%08x,%p) stub\n", PolicyHandle
, InformationClass
, Buffer
);
808 return STATUS_UNSUCCESSFUL
;
816 LsaSetInformationPolicy(
817 LSA_HANDLE PolicyHandle
,
818 POLICY_INFORMATION_CLASS InformationClass
,
821 FIXME("(%p,0x%08x,%p) stub\n", PolicyHandle
, InformationClass
, Buffer
);
822 return STATUS_UNSUCCESSFUL
;
828 NTSTATUS WINAPI
LsaSetSecret(
829 IN LSA_HANDLE SecretHandle
,
830 IN PLSA_UNICODE_STRING EncryptedCurrentValue
,
831 IN PLSA_UNICODE_STRING EncryptedOldValue
)
833 FIXME("(%p,%p,%p) stub\n", SecretHandle
, EncryptedCurrentValue
,
835 return STATUS_SUCCESS
;
843 LsaSetForestTrustInformation(
844 LSA_HANDLE PolicyHandle
,
845 PLSA_UNICODE_STRING TrustedDomainName
,
846 PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
848 PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
850 FIXME("(%p,%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, ForestTrustInfo
, CheckOnly
, CollisionInfo
);
851 return STATUS_NOT_IMPLEMENTED
;
859 LsaSetTrustedDomainInfoByName(
860 LSA_HANDLE PolicyHandle
,
861 PLSA_UNICODE_STRING TrustedDomainName
,
862 TRUSTED_INFORMATION_CLASS InformationClass
,
865 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
866 return STATUS_SUCCESS
;
872 NTSTATUS WINAPI
LsaRegisterPolicyChangeNotification(
873 POLICY_NOTIFICATION_INFORMATION_CLASS
class,
876 FIXME("(%d,%p) stub\n", class, event
);
877 return STATUS_UNSUCCESSFUL
;
885 LsaSetTrustedDomainInformation(
886 LSA_HANDLE PolicyHandle
,
887 PSID TrustedDomainSid
,
888 TRUSTED_INFORMATION_CLASS InformationClass
,
891 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
892 return STATUS_SUCCESS
;
901 LSA_HANDLE PolicyHandle
,
902 PLSA_UNICODE_STRING KeyName
,
903 PLSA_UNICODE_STRING PrivateData
)
905 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, KeyName
, PrivateData
);
906 return STATUS_OBJECT_NAME_NOT_FOUND
;
912 NTSTATUS WINAPI
LsaUnregisterPolicyChangeNotification(
913 POLICY_NOTIFICATION_INFORMATION_CLASS
class,
916 FIXME("(%d,%p) stub\n", class, event
);
917 return STATUS_SUCCESS
;
926 PUNICODE_STRING
*UserName
,
927 PUNICODE_STRING
*DomainName
)
929 FIXME("(%p,%p) stub\n", UserName
, DomainName
);
930 return STATUS_NOT_IMPLEMENTED
;
938 LsaQueryInfoTrustedDomain (DWORD Unknonw0
,
942 FIXME("(%d,%d,%d) stub\n", Unknonw0
, Unknonw1
, Unknonw2
);
943 return STATUS_NOT_IMPLEMENTED
;