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
);
21 PLSAPR_SERVER_NAME_bind(PLSAPR_SERVER_NAME pszSystemName
)
23 handle_t hBinding
= NULL
;
24 LPWSTR pszStringBinding
;
27 TRACE("PLSAPR_SERVER_NAME_bind() called\n");
29 status
= RpcStringBindingComposeW(pszSystemName
,
37 TRACE("RpcStringBindingCompose returned 0x%x\n", status
);
41 /* Set the binding handle that will be used to bind to the server. */
42 status
= RpcBindingFromStringBindingW(pszStringBinding
,
46 TRACE("RpcBindingFromStringBinding returned 0x%x\n", status
);
49 status
= RpcStringFreeW(&pszStringBinding
);
52 TRACE("RpcStringFree returned 0x%x\n", status
);
60 PLSAPR_SERVER_NAME_unbind(PLSAPR_SERVER_NAME pszSystemName
,
65 TRACE("PLSAPR_SERVER_NAME_unbind() called\n");
67 status
= RpcBindingFree(&hBinding
);
70 TRACE("RpcBindingFree returned 0x%x\n", status
);
79 LsaClose(LSA_HANDLE ObjectHandle
)
81 TRACE("LsaClose(0x%p) called\n", ObjectHandle
);
83 /* This is our fake handle, don't go too much long way */
84 if (ObjectHandle
== (LSA_HANDLE
)0xcafe)
85 return STATUS_SUCCESS
;
87 return LsarClose((PLSAPR_HANDLE
)&ObjectHandle
);
95 LsaDelete(LSA_HANDLE ObjectHandle
)
97 TRACE("LsaDelete(0x%p) called\n", ObjectHandle
);
99 return LsarDelete((LSAPR_HANDLE
)ObjectHandle
);
109 LSA_HANDLE PolicyHandle
,
111 PLSA_UNICODE_STRING UserRights
,
114 FIXME("(%p,%p,%p,0x%08x) stub\n", PolicyHandle
, AccountSid
, UserRights
, CountOfRights
);
115 return STATUS_NOT_IMPLEMENTED
;
123 LsaCreateTrustedDomainEx(
124 LSA_HANDLE PolicyHandle
,
125 PTRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation
,
126 PTRUSTED_DOMAIN_AUTH_INFORMATION AuthenticationInformation
,
127 ACCESS_MASK DesiredAccess
,
128 PLSA_HANDLE TrustedDomainHandle
)
130 FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle
, TrustedDomainInformation
, AuthenticationInformation
,
131 DesiredAccess
, TrustedDomainHandle
);
132 return STATUS_NOT_IMPLEMENTED
;
140 LsaDeleteTrustedDomain(
141 LSA_HANDLE PolicyHandle
,
142 PSID TrustedDomainSid
)
144 FIXME("(%p,%p) stub\n", PolicyHandle
, TrustedDomainSid
);
145 return STATUS_NOT_IMPLEMENTED
;
153 LsaEnumerateAccountRights(
154 LSA_HANDLE PolicyHandle
,
156 PLSA_UNICODE_STRING
*UserRights
,
157 PULONG CountOfRights
)
159 FIXME("(%p,%p,%p,%p) stub\n", PolicyHandle
, AccountSid
, UserRights
, CountOfRights
);
160 return STATUS_NOT_IMPLEMENTED
;
168 LsaEnumerateAccountsWithUserRight(
169 LSA_HANDLE PolicyHandle
,
170 OPTIONAL PLSA_UNICODE_STRING UserRights
,
171 PVOID
*EnumerationBuffer
,
172 PULONG CountReturned
)
174 FIXME("(%p,%p,%p,%p) stub\n", PolicyHandle
, UserRights
, EnumerationBuffer
, CountReturned
);
175 return STATUS_NOT_IMPLEMENTED
;
183 LsaEnumerateTrustedDomains(
184 LSA_HANDLE PolicyHandle
,
185 PLSA_ENUMERATION_HANDLE EnumerationContext
,
187 ULONG PreferedMaximumLength
,
188 PULONG CountReturned
)
190 FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle
, EnumerationContext
,
191 Buffer
, PreferedMaximumLength
, CountReturned
);
192 return STATUS_NOT_IMPLEMENTED
;
200 LsaEnumerateTrustedDomainsEx(
201 LSA_HANDLE PolicyHandle
,
202 PLSA_ENUMERATION_HANDLE EnumerationContext
,
204 ULONG PreferedMaximumLength
,
205 PULONG CountReturned
)
207 FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle
, EnumerationContext
, Buffer
,
208 PreferedMaximumLength
, CountReturned
);
209 return STATUS_NOT_IMPLEMENTED
;
216 LsaFreeMemory(PVOID Buffer
)
218 TRACE("(%p)\n", Buffer
);
219 return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer
);
228 LSA_HANDLE PolicyHandle
,
230 PLSA_UNICODE_STRING Names
,
231 PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
232 PLSA_TRANSLATED_SID
*Sids
)
234 PLSA_TRANSLATED_SID2 Sids2
;
235 LSA_TRANSLATED_SID
*TranslatedSids
;
239 TRACE("(%p,0x%08x,%p,%p,%p)\n", PolicyHandle
, Count
, Names
,
240 ReferencedDomains
, Sids
);
242 /* Call LsaLookupNames2, which supersedes this function */
243 Status
= LsaLookupNames2(PolicyHandle
, Count
, 0, Names
, ReferencedDomains
, &Sids2
);
244 if (!NT_SUCCESS(Status
))
247 /* Translate the returned structure */
248 TranslatedSids
= RtlAllocateHeap(RtlGetProcessHeap(), 0, Count
* sizeof(LSA_TRANSLATED_SID
));
251 LsaFreeMemory(Sids2
);
252 return SCESTATUS_NOT_ENOUGH_RESOURCE
;
254 RtlZeroMemory(Sids
, Count
* sizeof(PLSA_TRANSLATED_SID
));
255 for (i
= 0; i
< Count
; i
++)
257 TranslatedSids
[i
].Use
= Sids2
[i
].Use
;
258 if (Sids2
[i
].Use
!= SidTypeInvalid
&& Sids2
[i
].Use
!= SidTypeUnknown
)
260 TranslatedSids
[i
].DomainIndex
= Sids2
[i
].DomainIndex
;
261 if (Sids2
[i
].Use
!= SidTypeDomain
)
262 TranslatedSids
[i
].RelativeId
= *GetSidSubAuthority(Sids2
[i
].Sid
, 0);
265 LsaFreeMemory(Sids2
);
267 *Sids
= TranslatedSids
;
278 LSA_HANDLE PolicyHandle
,
281 PLSA_UNICODE_STRING Names
,
282 PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
283 PLSA_TRANSLATED_SID2
*Sids
)
285 FIXME("(%p,0x%08x,0x%08x,%p,%p,%p) stub\n", PolicyHandle
, Flags
,
286 Count
, Names
, ReferencedDomains
, Sids
);
287 return STATUS_NONE_MAPPED
;
296 LSA_HANDLE PolicyHandle
,
299 PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
300 PLSA_TRANSLATED_NAME
*Names
)
302 static const UNICODE_STRING UserName
= RTL_CONSTANT_STRING(L
"Administrator");
303 PLSA_REFERENCED_DOMAIN_LIST LocalDomains
;
304 PLSA_TRANSLATED_NAME LocalNames
;
306 TRACE("(%p,%u,%p,%p,%p) stub\n", PolicyHandle
, Count
, Sids
,
307 ReferencedDomains
, Names
);
309 WARN("LsaLookupSids(): stub. Always returning 'Administrator'\n");
311 return STATUS_NONE_MAPPED
;
312 LocalDomains
= RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(LSA_TRANSLATED_SID
));
314 return SCESTATUS_NOT_ENOUGH_RESOURCE
;
315 LocalNames
= RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(LSA_TRANSLATED_NAME
) + UserName
.MaximumLength
);
318 LsaFreeMemory(LocalDomains
);
319 return SCESTATUS_NOT_ENOUGH_RESOURCE
;
321 LocalDomains
[0].Entries
= 0;
322 LocalDomains
[0].Domains
= NULL
;
323 LocalNames
[0].Use
= SidTypeWellKnownGroup
;
324 LocalNames
[0].Name
.Buffer
= (LPWSTR
)((ULONG_PTR
)(LocalNames
) + sizeof(LSA_TRANSLATED_NAME
));
325 LocalNames
[0].Name
.Length
= UserName
.Length
;
326 LocalNames
[0].Name
.MaximumLength
= UserName
.MaximumLength
;
327 RtlCopyMemory(LocalNames
[0].Name
.Buffer
, UserName
.Buffer
, UserName
.MaximumLength
);
329 *ReferencedDomains
= LocalDomains
;
331 return STATUS_SUCCESS
;
334 /******************************************************************************
335 * LsaNtStatusToWinError
343 LsaNtStatusToWinError(NTSTATUS Status
)
345 TRACE("(%lx)\n", Status
);
346 return RtlNtStatusToDosError(Status
);
349 /******************************************************************************
363 IN PLSA_UNICODE_STRING SystemName
,
364 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
365 IN ACCESS_MASK DesiredAccess
,
366 IN OUT PLSA_HANDLE PolicyHandle
)
368 TRACE("(%s,%p,0x%08x,%p) stub\n",
369 SystemName
?debugstr_w(SystemName
->Buffer
):"(null)",
370 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
372 if(PolicyHandle
) *PolicyHandle
= (LSA_HANDLE
)0xcafe;
373 return STATUS_SUCCESS
;
381 LsaOpenTrustedDomainByName(
382 LSA_HANDLE PolicyHandle
,
383 PLSA_UNICODE_STRING TrustedDomainName
,
384 ACCESS_MASK DesiredAccess
,
385 PLSA_HANDLE TrustedDomainHandle
)
387 FIXME("(%p,%p,0x%08x,%p) stub\n", PolicyHandle
, TrustedDomainName
, DesiredAccess
, TrustedDomainHandle
);
388 return STATUS_NOT_IMPLEMENTED
;
396 LsaQueryDomainInformationPolicy(
397 LSA_HANDLE PolicyHandle
,
398 POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
401 FIXME("(%p,0x%08x,%p)\n", PolicyHandle
, InformationClass
, Buffer
);
402 return STATUS_NOT_IMPLEMENTED
;
410 LsaQueryForestTrustInformation(
411 LSA_HANDLE PolicyHandle
,
412 PLSA_UNICODE_STRING TrustedDomainName
,
413 PLSA_FOREST_TRUST_INFORMATION
* ForestTrustInfo
)
415 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, TrustedDomainName
, ForestTrustInfo
);
416 return STATUS_NOT_IMPLEMENTED
;
423 LsaQueryInformationPolicy(LSA_HANDLE PolicyHandle
,
424 POLICY_INFORMATION_CLASS InformationClass
,
427 TRACE("(%p,0x%08x,%p)\n", PolicyHandle
, InformationClass
, Buffer
);
429 if(!Buffer
) return STATUS_INVALID_PARAMETER
;
430 switch (InformationClass
)
432 case PolicyAuditEventsInformation
: /* 2 */
434 PPOLICY_AUDIT_EVENTS_INFO p
= RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY
,
435 sizeof(POLICY_AUDIT_EVENTS_INFO
));
436 p
->AuditingMode
= FALSE
; /* no auditing */
440 case PolicyPrimaryDomainInformation
: /* 3 */
441 case PolicyAccountDomainInformation
: /* 5 */
445 POLICY_PRIMARY_DOMAIN_INFO ppdi
;
448 SID_IDENTIFIER_AUTHORITY localSidAuthority
= {SECURITY_NT_AUTHORITY
};
450 struct di
* xdi
= RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(*xdi
));
452 BOOL useDefault
= TRUE
;
455 if ((ret
= RegOpenKeyExA(HKEY_LOCAL_MACHINE
,
456 "System\\CurrentControlSet\\Services\\VxD\\VNETSUP", 0,
457 KEY_READ
, &key
)) == ERROR_SUCCESS
)
460 WCHAR wg
[] = { 'W','o','r','k','g','r','o','u','p',0 };
462 ret
= RegQueryValueExW(key
, wg
, NULL
, NULL
, NULL
, &size
);
463 if (ret
== ERROR_MORE_DATA
|| ret
== ERROR_SUCCESS
)
465 xdi
->ppdi
.Name
.Buffer
= RtlAllocateHeap(RtlGetProcessHeap(),
466 HEAP_ZERO_MEMORY
, size
);
467 if ((ret
= RegQueryValueExW(key
, wg
, NULL
, NULL
,
468 (LPBYTE
)xdi
->ppdi
.Name
.Buffer
, &size
)) == ERROR_SUCCESS
)
470 xdi
->ppdi
.Name
.Length
= (USHORT
)size
;
475 RtlFreeHeap(RtlGetProcessHeap(), 0, xdi
->ppdi
.Name
.Buffer
);
476 xdi
->ppdi
.Name
.Buffer
= NULL
;
482 RtlCreateUnicodeStringFromAsciiz(&(xdi
->ppdi
.Name
), "DOMAIN");
483 TRACE("setting domain to \n");
485 xdi
->ppdi
.Sid
= &(xdi
->sid
);
486 xdi
->sid
.Revision
= SID_REVISION
;
487 xdi
->sid
.SubAuthorityCount
= 1;
488 xdi
->sid
.IdentifierAuthority
= localSidAuthority
;
489 xdi
->sid
.SubAuthority
[0] = SECURITY_LOCAL_SYSTEM_RID
;
493 case PolicyAuditLogInformation
:
494 case PolicyPdAccountInformation
:
495 case PolicyLsaServerRoleInformation
:
496 case PolicyReplicaSourceInformation
:
497 case PolicyDefaultQuotaInformation
:
498 case PolicyModificationInformation
:
499 case PolicyAuditFullSetInformation
:
500 case PolicyAuditFullQueryInformation
:
501 case PolicyDnsDomainInformation
:
502 case PolicyEfsInformation
:
504 FIXME("category not implemented\n");
505 return STATUS_UNSUCCESSFUL
;
508 return STATUS_SUCCESS
;
516 LsaQueryTrustedDomainInfoByName(
517 LSA_HANDLE PolicyHandle
,
518 PLSA_UNICODE_STRING TrustedDomainName
,
519 TRUSTED_INFORMATION_CLASS InformationClass
,
522 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
523 return STATUS_NOT_IMPLEMENTED
;
531 LsaQueryTrustedDomainInfo(
532 LSA_HANDLE PolicyHandle
,
533 PSID TrustedDomainSid
,
534 TRUSTED_INFORMATION_CLASS InformationClass
,
537 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
538 return STATUS_NOT_IMPLEMENTED
;
546 LsaRemoveAccountRights(
547 LSA_HANDLE PolicyHandle
,
550 PLSA_UNICODE_STRING UserRights
,
553 FIXME("(%p,%p,%d,%p,0x%08x) stub\n", PolicyHandle
, AccountSid
, AllRights
, UserRights
, CountOfRights
);
554 return STATUS_NOT_IMPLEMENTED
;
562 LsaRetrievePrivateData(
563 LSA_HANDLE PolicyHandle
,
564 PLSA_UNICODE_STRING KeyName
,
565 PLSA_UNICODE_STRING
*PrivateData
)
567 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, KeyName
, PrivateData
);
568 return STATUS_NOT_IMPLEMENTED
;
576 LsaSetDomainInformationPolicy(
577 LSA_HANDLE PolicyHandle
,
578 POLICY_DOMAIN_INFORMATION_CLASS InformationClass
,
581 FIXME("(%p,0x%08x,%p) stub\n", PolicyHandle
, InformationClass
, Buffer
);
582 return STATUS_NOT_IMPLEMENTED
;
590 LsaSetInformationPolicy(
591 LSA_HANDLE PolicyHandle
,
592 POLICY_INFORMATION_CLASS InformationClass
,
595 FIXME("(%p,0x%08x,%p) stub\n", PolicyHandle
, InformationClass
, Buffer
);
596 return STATUS_NOT_IMPLEMENTED
;
604 LsaSetForestTrustInformation(
605 LSA_HANDLE PolicyHandle
,
606 PLSA_UNICODE_STRING TrustedDomainName
,
607 PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
609 PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
611 FIXME("(%p,%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, ForestTrustInfo
, CheckOnly
, CollisionInfo
);
612 return STATUS_NOT_IMPLEMENTED
;
620 LsaSetTrustedDomainInfoByName(
621 LSA_HANDLE PolicyHandle
,
622 PLSA_UNICODE_STRING TrustedDomainName
,
623 TRUSTED_INFORMATION_CLASS InformationClass
,
626 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainName
, InformationClass
, Buffer
);
627 return STATUS_NOT_IMPLEMENTED
;
635 LsaSetTrustedDomainInformation(
636 LSA_HANDLE PolicyHandle
,
637 PSID TrustedDomainSid
,
638 TRUSTED_INFORMATION_CLASS InformationClass
,
641 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle
, TrustedDomainSid
, InformationClass
, Buffer
);
642 return STATUS_NOT_IMPLEMENTED
;
651 LSA_HANDLE PolicyHandle
,
652 PLSA_UNICODE_STRING KeyName
,
653 PLSA_UNICODE_STRING PrivateData
)
655 FIXME("(%p,%p,%p) stub\n", PolicyHandle
, KeyName
, PrivateData
);
656 return STATUS_NOT_IMPLEMENTED
;
665 PUNICODE_STRING
*UserName
,
666 PUNICODE_STRING
*DomainName
)
668 FIXME("(%p,%p) stub\n", UserName
, DomainName
);
669 return STATUS_NOT_IMPLEMENTED
;
677 LsaQueryInfoTrustedDomain (DWORD Unknonw0
,
681 FIXME("(%d,%d,%d) stub\n", Unknonw0
, Unknonw1
, Unknonw2
);
682 return STATUS_NOT_IMPLEMENTED
;