2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: lib/advapi32/sec/lsa.c
5 * PURPOSE: Local security authority functions
6 * PROGRAMMER: Emanuele Aliberti
10 * 20030202 KJK compressed stubs
15 #include "wine/debug.h"
17 WINE_DEFAULT_DEBUG_CHANNEL(advapi
);
19 static handle_t LSABindingHandle
= NULL
;
22 LSAHandleUnbind(handle_t
*Handle
)
29 status
= RpcBindingFree(Handle
);
32 TRACE("RpcBindingFree returned 0x%x\n", status
);
39 LPWSTR pszStringBinding
;
43 if (LSABindingHandle
!= NULL
)
46 status
= RpcStringBindingComposeW(NULL
,
54 TRACE("RpcStringBindingCompose returned 0x%x\n", status
);
58 /* Set the binding handle that will be used to bind to the server. */
59 status
= RpcBindingFromStringBindingW(pszStringBinding
,
63 TRACE("RpcBindingFromStringBinding returned 0x%x\n", status
);
66 status
= RpcStringFreeW(&pszStringBinding
);
69 TRACE("RpcStringFree returned 0x%x\n", status
);
72 if (InterlockedCompareExchangePointer(&LSABindingHandle
,
76 LSAHandleUnbind(&Handle
);
85 LsaClose(LSA_HANDLE ObjectHandle
)
87 TRACE("LsaClose(0x%p) called\n", ObjectHandle
);
89 /* This is our fake handle, don't go too much long way */
90 if (ObjectHandle
== (LSA_HANDLE
)0xcafe)
91 return STATUS_SUCCESS
;
95 return LsarClose(LSABindingHandle
,
96 (unsigned long)ObjectHandle
);
104 LsaDelete(LSA_HANDLE ObjectHandle
)
106 TRACE("LsaDelete(0x%p) called\n", ObjectHandle
);
110 return LsarDelete(LSABindingHandle
,
111 (unsigned long)ObjectHandle
);
121 LSA_HANDLE PolicyHandle
,
123 PLSA_UNICODE_STRING UserRights
,
126 FIXME("(%p,%p,%p,0x%08x) stub\n", PolicyHandle
, AccountSid
, UserRights
, CountOfRights
);
127 return STATUS_NOT_IMPLEMENTED
;
135 LsaCreateTrustedDomainEx(
136 LSA_HANDLE PolicyHandle
,
137 PTRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation
,
138 PTRUSTED_DOMAIN_AUTH_INFORMATION AuthenticationInformation
,
139 ACCESS_MASK DesiredAccess
,
140 PLSA_HANDLE TrustedDomainHandle
)
142 FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle
, TrustedDomainInformation
, AuthenticationInformation
,
143 DesiredAccess
, TrustedDomainHandle
);
144 return STATUS_NOT_IMPLEMENTED
;
152 LsaDeleteTrustedDomain(
153 LSA_HANDLE PolicyHandle
,
154 PSID TrustedDomainSid
)
156 FIXME("(%p,%p) stub\n", PolicyHandle
, TrustedDomainSid
);
157 return STATUS_NOT_IMPLEMENTED
;
165 LsaEnumerateAccountRights(
166 LSA_HANDLE PolicyHandle
,
168 PLSA_UNICODE_STRING
*UserRights
,
169 PULONG CountOfRights
)
171 FIXME("(%p,%p,%p,%p) stub\n", PolicyHandle
, AccountSid
, UserRights
, CountOfRights
);
172 return STATUS_NOT_IMPLEMENTED
;
180 LsaEnumerateAccountsWithUserRight(
181 LSA_HANDLE PolicyHandle
,
182 OPTIONAL PLSA_UNICODE_STRING UserRights
,
183 PVOID
*EnumerationBuffer
,
184 PULONG CountReturned
)
186 FIXME("(%p,%p,%p,%p) stub\n", PolicyHandle
, UserRights
, EnumerationBuffer
, CountReturned
);
187 return STATUS_NOT_IMPLEMENTED
;
195 LsaEnumerateTrustedDomains(
196 LSA_HANDLE PolicyHandle
,
197 PLSA_ENUMERATION_HANDLE EnumerationContext
,
199 ULONG PreferedMaximumLength
,
200 PULONG CountReturned
)
202 FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle
, EnumerationContext
,
203 Buffer
, PreferedMaximumLength
, CountReturned
);
204 return STATUS_NOT_IMPLEMENTED
;
212 LsaEnumerateTrustedDomainsEx(
213 LSA_HANDLE PolicyHandle
,
214 PLSA_ENUMERATION_HANDLE EnumerationContext
,
216 ULONG PreferedMaximumLength
,
217 PULONG CountReturned
)
219 FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle
, EnumerationContext
, Buffer
,
220 PreferedMaximumLength
, CountReturned
);
221 return STATUS_NOT_IMPLEMENTED
;
228 LsaFreeMemory(PVOID Buffer
)
230 TRACE("(%p)\n", Buffer
);
231 return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer
);
240 LSA_HANDLE PolicyHandle
,
242 PLSA_UNICODE_STRING Names
,
243 PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
244 PLSA_TRANSLATED_SID
*Sids
)
246 PLSA_TRANSLATED_SID2 Sids2
;
247 LSA_TRANSLATED_SID
*TranslatedSids
;
251 TRACE("(%p,0x%08x,%p,%p,%p)\n", PolicyHandle
, Count
, Names
,
252 ReferencedDomains
, Sids
);
254 /* Call LsaLookupNames2, which supersedes this function */
255 Status
= LsaLookupNames2(PolicyHandle
, Count
, 0, Names
, ReferencedDomains
, &Sids2
);
256 if (!NT_SUCCESS(Status
))
259 /* Translate the returned structure */
260 TranslatedSids
= RtlAllocateHeap(RtlGetProcessHeap(), 0, Count
* sizeof(LSA_TRANSLATED_SID
));
263 LsaFreeMemory(Sids2
);
264 return SCESTATUS_NOT_ENOUGH_RESOURCE
;
266 RtlZeroMemory(Sids
, Count
* sizeof(PLSA_TRANSLATED_SID
));
267 for (i
= 0; i
< Count
; i
++)
269 TranslatedSids
[i
].Use
= Sids2
[i
].Use
;
270 if (Sids2
[i
].Use
!= SidTypeInvalid
&& Sids2
[i
].Use
!= SidTypeUnknown
)
272 TranslatedSids
[i
].DomainIndex
= Sids2
[i
].DomainIndex
;
273 if (Sids2
[i
].Use
!= SidTypeDomain
)
274 TranslatedSids
[i
].RelativeId
= *GetSidSubAuthority(Sids2
[i
].Sid
, 0);
277 LsaFreeMemory(Sids2
);
279 *Sids
= TranslatedSids
;
290 LSA_HANDLE PolicyHandle
,
293 PLSA_UNICODE_STRING Names
,
294 PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
295 PLSA_TRANSLATED_SID2
*Sids
)
297 FIXME("(%p,0x%08x,0x%08x,%p,%p,%p) stub\n", PolicyHandle
, Flags
,
298 Count
, Names
, ReferencedDomains
, Sids
);
299 return STATUS_NONE_MAPPED
;
308 LSA_HANDLE PolicyHandle
,
311 PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
312 PLSA_TRANSLATED_NAME
*Names
)
314 static const UNICODE_STRING UserName
= RTL_CONSTANT_STRING(L
"Administrator");
315 PLSA_REFERENCED_DOMAIN_LIST LocalDomains
;
316 PLSA_TRANSLATED_NAME LocalNames
;
318 FIXME("(%p,%u,%p,%p,%p) stub\n", PolicyHandle
, Count
, Sids
,
319 ReferencedDomains
, Names
);
321 WARN("LsaLookupSids(): stub. Always returning 'Administrator'\n");
323 return STATUS_NONE_MAPPED
;
324 LocalDomains
= RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(LSA_TRANSLATED_SID
));
326 return SCESTATUS_NOT_ENOUGH_RESOURCE
;
327 LocalNames
= RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(LSA_TRANSLATED_NAME
) + UserName
.MaximumLength
);
330 LsaFreeMemory(LocalDomains
);
331 return SCESTATUS_NOT_ENOUGH_RESOURCE
;
333 LocalDomains
[0].Entries
= 0;
334 LocalDomains
[0].Domains
= NULL
;
335 LocalNames
[0].Use
= SidTypeWellKnownGroup
;
336 LocalNames
[0].Name
.Buffer
= (LPWSTR
)((ULONG_PTR
)(LocalNames
) + sizeof(LSA_TRANSLATED_NAME
));
337 LocalNames
[0].Name
.Length
= UserName
.Length
;
338 LocalNames
[0].Name
.MaximumLength
= UserName
.MaximumLength
;
339 RtlCopyMemory(LocalNames
[0].Name
.Buffer
, UserName
.Buffer
, UserName
.MaximumLength
);
341 *ReferencedDomains
= LocalDomains
;
343 return STATUS_SUCCESS
;
346 /******************************************************************************
347 * LsaNtStatusToWinError
355 LsaNtStatusToWinError(NTSTATUS Status
)
357 TRACE("(%lx)\n", Status
);
358 return RtlNtStatusToDosError(Status
);
361 /******************************************************************************
375 IN PLSA_UNICODE_STRING SystemName
,
376 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
377 IN ACCESS_MASK DesiredAccess
,
378 IN OUT PLSA_HANDLE PolicyHandle
)
380 FIXME("(%s,%p,0x%08x,%p) stub\n",
381 SystemName
?debugstr_w(SystemName
->Buffer
):"(null)",
382 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
384 if(PolicyHandle
) *PolicyHandle
= (LSA_HANDLE
)0xcafe;
385 return STATUS_SUCCESS
;
393 LsaOpenTrustedDomainByName(
394 LSA_HANDLE PolicyHandle
,
395 PLSA_UNICODE_STRING TrustedDomainName
,
396 ACCESS_MASK DesiredAccess
,
397 PLSA_HANDLE TrustedDomainHandle
)
399 FIXME("(%p,%p,0x%08x,%p) stub\n", PolicyHandle
, TrustedDomainName
, DesiredAccess
, TrustedDomainHandle
);
400 return STATUS_NOT_IMPLEMENTED
;
408 LsaQueryDomainInformationPolicy(
409 LSA_HANDLE PolicyHandle
,
410 POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
413 FIXME("(%p,0x%08x,%p)\n", PolicyHandle
, InformationClass
, Buffer
);
414 return STATUS_NOT_IMPLEMENTED
;
422 LsaQueryForestTrustInformation(
423 LSA_HANDLE PolicyHandle
,
424 PLSA_UNICODE_STRING TrustedDomainName
,
425 PLSA_FOREST_TRUST_INFORMATION
* ForestTrustInfo
)
427 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, TrustedDomainName
, ForestTrustInfo
);
428 return STATUS_NOT_IMPLEMENTED
;
435 LsaQueryInformationPolicy(LSA_HANDLE PolicyHandle
,
436 POLICY_INFORMATION_CLASS pic
,
439 FIXME("(%p,0x%08x,%p) stub\n",
440 PolicyHandle
, pic
, Buffer
);
447 case PolicyAuditEventsInformation
: /* 2 */
449 PPOLICY_AUDIT_EVENTS_INFO p
= RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(POLICY_AUDIT_EVENTS_INFO
));
450 p
->AuditingMode
= FALSE
; /* no auditing */
454 case PolicyPrimaryDomainInformation
: /* 3 */
455 case PolicyAccountDomainInformation
: /* 5 */
458 { POLICY_PRIMARY_DOMAIN_INFO ppdi
;
461 SID_IDENTIFIER_AUTHORITY localSidAuthority
= {SECURITY_NT_AUTHORITY
};
463 struct di
* xdi
= RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(xdi
));
465 BOOL useDefault
= TRUE
;
468 if ((ret
= RegOpenKeyExA(HKEY_LOCAL_MACHINE
,
469 "System\\CurrentControlSet\\Services\\VxD\\VNETSUP", 0,
470 KEY_READ
, &key
)) == ERROR_SUCCESS
)
473 WCHAR wg
[] = { 'W','o','r','k','g','r','o','u','p',0 };
475 ret
= RegQueryValueExW(key
, wg
, NULL
, NULL
, NULL
, &size
);
476 if (ret
== ERROR_MORE_DATA
|| ret
== ERROR_SUCCESS
)
478 xdi
->ppdi
.Name
.Buffer
= RtlAllocateHeap(RtlGetProcessHeap(),
479 HEAP_ZERO_MEMORY
, size
);
480 if ((ret
= RegQueryValueExW(key
, wg
, NULL
, NULL
,
481 (LPBYTE
)xdi
->ppdi
.Name
.Buffer
, &size
)) == ERROR_SUCCESS
)
483 xdi
->ppdi
.Name
.Length
= (USHORT
)size
;
488 RtlFreeHeap(RtlGetProcessHeap(), 0, xdi
->ppdi
.Name
.Buffer
);
489 xdi
->ppdi
.Name
.Buffer
= NULL
;
495 RtlCreateUnicodeStringFromAsciiz(&(xdi
->ppdi
.Name
), "DOMAIN");
496 TRACE("setting domain to \n");
498 xdi
->ppdi
.Sid
= &(xdi
->sid
);
499 xdi
->sid
.Revision
= SID_REVISION
;
500 xdi
->sid
.SubAuthorityCount
= 1;
501 xdi
->sid
.IdentifierAuthority
= localSidAuthority
;
502 xdi
->sid
.SubAuthority
[0] = SECURITY_LOCAL_SYSTEM_RID
;
506 case PolicyAuditLogInformation
:
507 case PolicyPdAccountInformation
:
508 case PolicyLsaServerRoleInformation
:
509 case PolicyReplicaSourceInformation
:
510 case PolicyDefaultQuotaInformation
:
511 case PolicyModificationInformation
:
512 case PolicyAuditFullSetInformation
:
513 case PolicyAuditFullQueryInformation
:
514 case PolicyDnsDomainInformation
:
515 case PolicyEfsInformation
:
517 FIXME("category not implemented\n");
529 LsaQueryTrustedDomainInfoByName(
530 LSA_HANDLE PolicyHandle
,
531 PLSA_UNICODE_STRING TrustedDomainName
,
532 TRUSTED_INFORMATION_CLASS InformationClass
,
535 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
536 return STATUS_NOT_IMPLEMENTED
;
544 LsaQueryTrustedDomainInfo(
545 LSA_HANDLE PolicyHandle
,
546 PSID TrustedDomainSid
,
547 TRUSTED_INFORMATION_CLASS InformationClass
,
550 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
551 return STATUS_NOT_IMPLEMENTED
;
559 LsaRemoveAccountRights(
560 LSA_HANDLE PolicyHandle
,
563 PLSA_UNICODE_STRING UserRights
,
566 FIXME("(%p,%p,%d,%p,0x%08x) stub\n", PolicyHandle
, AccountSid
, AllRights
, UserRights
, CountOfRights
);
567 return STATUS_NOT_IMPLEMENTED
;
575 LsaRetrievePrivateData(
576 LSA_HANDLE PolicyHandle
,
577 PLSA_UNICODE_STRING KeyName
,
578 PLSA_UNICODE_STRING
*PrivateData
)
580 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, KeyName
, PrivateData
);
581 return STATUS_NOT_IMPLEMENTED
;
589 LsaSetDomainInformationPolicy(
590 LSA_HANDLE PolicyHandle
,
591 POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
594 FIXME("(%p,0x%08x,%p) stub\n", PolicyHandle
, InformationClass
, Buffer
);
595 return STATUS_NOT_IMPLEMENTED
;
603 LsaSetInformationPolicy(
604 LSA_HANDLE PolicyHandle
,
605 POLICY_INFORMATION_CLASS InformationClass
,
608 FIXME("(%p,0x%08x,%p) stub\n", PolicyHandle
, InformationClass
, Buffer
);
609 return STATUS_NOT_IMPLEMENTED
;
617 LsaSetForestTrustInformation(
618 LSA_HANDLE PolicyHandle
,
619 PLSA_UNICODE_STRING TrustedDomainName
,
620 PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
622 PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
624 FIXME("(%p,%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, ForestTrustInfo
, CheckOnly
, CollisionInfo
);
625 return STATUS_NOT_IMPLEMENTED
;
633 LsaSetTrustedDomainInfoByName(
634 LSA_HANDLE PolicyHandle
,
635 PLSA_UNICODE_STRING TrustedDomainName
,
636 TRUSTED_INFORMATION_CLASS InformationClass
,
639 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
640 return STATUS_NOT_IMPLEMENTED
;
648 LsaSetTrustedDomainInformation(
649 LSA_HANDLE PolicyHandle
,
650 PSID TrustedDomainSid
,
651 TRUSTED_INFORMATION_CLASS InformationClass
,
654 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
655 return STATUS_NOT_IMPLEMENTED
;
664 LSA_HANDLE PolicyHandle
,
665 PLSA_UNICODE_STRING KeyName
,
666 PLSA_UNICODE_STRING PrivateData
)
668 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, KeyName
, PrivateData
);
669 return STATUS_NOT_IMPLEMENTED
;
678 PUNICODE_STRING
*UserName
,
679 PUNICODE_STRING
*DomainName
)
681 FIXME("(%p,%p) stub\n", UserName
, DomainName
);
682 return STATUS_NOT_IMPLEMENTED
;
690 LsaQueryInfoTrustedDomain (DWORD Unknonw0
,
694 FIXME("(%d,%d,%d) stub\n", Unknonw0
, Unknonw1
, Unknonw2
);
695 return STATUS_NOT_IMPLEMENTED
;