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
19 static handle_t LSABindingHandle
= NULL
;
22 LSAHandleUnbind(handle_t
*Handle
)
29 status
= RpcBindingFree(Handle
);
32 DPRINT1("RpcBindingFree returned 0x%x\n", status
);
39 LPWSTR pszStringBinding
;
43 if (LSABindingHandle
!= NULL
)
46 status
= RpcStringBindingComposeW(NULL
,
54 DPRINT1("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 DPRINT1("RpcBindingFromStringBinding returned 0x%x\n", status
);
66 status
= RpcStringFreeW(&pszStringBinding
);
69 DPRINT1("RpcStringFree returned 0x%x\n", status
);
72 if (InterlockedCompareExchangePointer(&LSABindingHandle
,
76 LSAHandleUnbind(&Handle
);
85 LsaClose(LSA_HANDLE ObjectHandle
)
87 DPRINT("LsaClose(0x%p) called\n", ObjectHandle
);
91 return LsarClose(LSABindingHandle
,
92 (unsigned long)ObjectHandle
);
100 LsaDelete(LSA_HANDLE ObjectHandle
)
102 DPRINT("LsaDelete(0x%p) called\n", ObjectHandle
);
106 return LsarDelete(LSABindingHandle
,
107 (unsigned long)ObjectHandle
);
117 LSA_HANDLE PolicyHandle
,
119 PLSA_UNICODE_STRING UserRights
,
122 return STATUS_NOT_IMPLEMENTED
;
130 LsaCreateTrustedDomainEx(
131 LSA_HANDLE PolicyHandle
,
132 PTRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation
,
133 PTRUSTED_DOMAIN_AUTH_INFORMATION AuthenticationInformation
,
134 ACCESS_MASK DesiredAccess
,
135 PLSA_HANDLE TrustedDomainHandle
)
137 return STATUS_NOT_IMPLEMENTED
;
145 LsaDeleteTrustedDomain(
146 LSA_HANDLE PolicyHandle
,
147 PSID TrustedDomainSid
)
149 return STATUS_NOT_IMPLEMENTED
;
157 LsaEnumerateAccountRights(
158 LSA_HANDLE PolicyHandle
,
160 PLSA_UNICODE_STRING
*UserRights
,
161 PULONG CountOfRights
)
163 return STATUS_NOT_IMPLEMENTED
;
171 LsaEnumerateAccountsWithUserRight(
172 LSA_HANDLE PolicyHandle
,
173 OPTIONAL PLSA_UNICODE_STRING UserRights
,
174 PVOID
*EnumerationBuffer
,
175 PULONG CountReturned
)
177 return STATUS_NOT_IMPLEMENTED
;
185 LsaEnumerateTrustedDomains(
186 LSA_HANDLE PolicyHandle
,
187 PLSA_ENUMERATION_HANDLE EnumerationContext
,
189 ULONG PreferedMaximumLength
,
190 PULONG CountReturned
)
192 return STATUS_NOT_IMPLEMENTED
;
200 LsaEnumerateTrustedDomainsEx(
201 LSA_HANDLE PolicyHandle
,
202 PLSA_ENUMERATION_HANDLE EnumerationContext
,
204 ULONG PreferedMaximumLength
,
205 PULONG CountReturned
)
207 return STATUS_NOT_IMPLEMENTED
;
214 LsaFreeMemory(PVOID Buffer
)
216 return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer
);
225 LSA_HANDLE PolicyHandle
,
227 PLSA_UNICODE_STRING Names
,
228 PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
229 PLSA_TRANSLATED_SID
*Sids
)
231 PLSA_TRANSLATED_SID2 Sids2
;
232 LSA_TRANSLATED_SID
*TranslatedSids
;
236 /* Call LsaLookupNames2, which supersedes this function */
237 Status
= LsaLookupNames2(PolicyHandle
, Count
, 0, Names
, ReferencedDomains
, &Sids2
);
238 if (!NT_SUCCESS(Status
))
241 /* Translate the returned structure */
242 TranslatedSids
= RtlAllocateHeap(RtlGetProcessHeap(), 0, Count
* sizeof(LSA_TRANSLATED_SID
));
245 LsaFreeMemory(Sids2
);
246 return SCESTATUS_NOT_ENOUGH_RESOURCE
;
248 RtlZeroMemory(Sids
, Count
* sizeof(PLSA_TRANSLATED_SID
));
249 for (i
= 0; i
< Count
; i
++)
251 TranslatedSids
[i
].Use
= Sids2
[i
].Use
;
252 if (Sids2
[i
].Use
!= SidTypeInvalid
&& Sids2
[i
].Use
!= SidTypeUnknown
)
254 TranslatedSids
[i
].DomainIndex
= Sids2
[i
].DomainIndex
;
255 if (Sids2
[i
].Use
!= SidTypeDomain
)
256 TranslatedSids
[i
].RelativeId
= *GetSidSubAuthority(Sids2
[i
].Sid
, 0);
259 LsaFreeMemory(Sids2
);
261 *Sids
= TranslatedSids
;
272 LSA_HANDLE PolicyHandle
,
275 PLSA_UNICODE_STRING Names
,
276 PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
277 PLSA_TRANSLATED_SID2
*Sids
)
279 return STATUS_NOT_IMPLEMENTED
;
288 LSA_HANDLE PolicyHandle
,
291 PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
292 PLSA_TRANSLATED_NAME
*Names
)
294 static const UNICODE_STRING UserName
= RTL_CONSTANT_STRING(L
"Administrator");
295 PLSA_REFERENCED_DOMAIN_LIST LocalDomains
;
296 PLSA_TRANSLATED_NAME LocalNames
;
298 DPRINT("LsaLookupSids(): stub. Always returning 'Administrator'\n");
300 return STATUS_NONE_MAPPED
;
301 LocalDomains
= RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(LSA_TRANSLATED_SID
));
303 return SCESTATUS_NOT_ENOUGH_RESOURCE
;
304 LocalNames
= RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(LSA_TRANSLATED_NAME
) + UserName
.MaximumLength
);
307 LsaFreeMemory(LocalDomains
);
308 return SCESTATUS_NOT_ENOUGH_RESOURCE
;
310 LocalDomains
[0].Entries
= 0;
311 LocalDomains
[0].Domains
= NULL
;
312 LocalNames
[0].Use
= SidTypeWellKnownGroup
;
313 LocalNames
[0].Name
.Buffer
= (LPWSTR
)((ULONG_PTR
)(LocalNames
) + sizeof(LSA_TRANSLATED_NAME
));
314 LocalNames
[0].Name
.Length
= UserName
.Length
;
315 LocalNames
[0].Name
.MaximumLength
= UserName
.MaximumLength
;
316 RtlCopyMemory(LocalNames
[0].Name
.Buffer
, UserName
.Buffer
, UserName
.MaximumLength
);
318 *ReferencedDomains
= LocalDomains
;
320 return STATUS_SUCCESS
;
323 /******************************************************************************
324 * LsaNtStatusToWinError
332 LsaNtStatusToWinError(NTSTATUS Status
)
334 return RtlNtStatusToDosError(Status
);
337 /******************************************************************************
349 LsaOpenPolicy(PLSA_UNICODE_STRING lsaucs
,
350 PLSA_OBJECT_ATTRIBUTES lsaoa
,
352 PLSA_HANDLE PolicyHandle
)
354 static int count
= 0;
357 DPRINT("LsaOpenPolicy - stub\n");
359 return STATUS_SUCCESS
;
367 LsaOpenTrustedDomainByName(
368 LSA_HANDLE PolicyHandle
,
369 PLSA_UNICODE_STRING TrustedDomainName
,
370 ACCESS_MASK DesiredAccess
,
371 PLSA_HANDLE TrustedDomainHandle
)
373 return STATUS_NOT_IMPLEMENTED
;
381 LsaQueryDomainInformationPolicy(
382 LSA_HANDLE PolicyHandle
,
383 POLICY_DOMAIN_INFORMATION_CLASS pic
,
386 return STATUS_NOT_IMPLEMENTED
;
394 LsaQueryForestTrustInformation(
395 LSA_HANDLE PolicyHandle
,
396 PLSA_UNICODE_STRING TrustedDomainName
,
397 PLSA_FOREST_TRUST_INFORMATION
* ForestTrustInfo
)
399 return STATUS_NOT_IMPLEMENTED
;
406 LsaQueryInformationPolicy(LSA_HANDLE PolicyHandle
,
407 POLICY_INFORMATION_CLASS pic
,
410 DPRINT1("(%p,0x%08x,%p):LsaQueryInformationPolicy stub\n",
411 PolicyHandle
, pic
, Buffer
);
418 case PolicyAuditEventsInformation
: /* 2 */
420 PPOLICY_AUDIT_EVENTS_INFO p
= RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(POLICY_AUDIT_EVENTS_INFO
));
421 p
->AuditingMode
= FALSE
; /* no auditing */
425 case PolicyPrimaryDomainInformation
: /* 3 */
426 case PolicyAccountDomainInformation
: /* 5 */
429 { POLICY_PRIMARY_DOMAIN_INFO ppdi
;
432 SID_IDENTIFIER_AUTHORITY localSidAuthority
= {SECURITY_NT_AUTHORITY
};
434 struct di
* xdi
= RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(xdi
));
436 BOOL useDefault
= TRUE
;
439 if ((ret
= RegOpenKeyExA(HKEY_LOCAL_MACHINE
,
440 "System\\CurrentControlSet\\Services\\VxD\\VNETSUP", 0,
441 KEY_READ
, &key
)) == ERROR_SUCCESS
)
444 WCHAR wg
[] = { 'W','o','r','k','g','r','o','u','p',0 };
446 ret
= RegQueryValueExW(key
, wg
, NULL
, NULL
, NULL
, &size
);
447 if (ret
== ERROR_MORE_DATA
|| ret
== ERROR_SUCCESS
)
449 xdi
->ppdi
.Name
.Buffer
= RtlAllocateHeap(RtlGetProcessHeap(),
450 HEAP_ZERO_MEMORY
, size
);
451 if ((ret
= RegQueryValueExW(key
, wg
, NULL
, NULL
,
452 (LPBYTE
)xdi
->ppdi
.Name
.Buffer
, &size
)) == ERROR_SUCCESS
)
454 xdi
->ppdi
.Name
.Length
= (USHORT
)size
;
459 RtlFreeHeap(RtlGetProcessHeap(), 0, xdi
->ppdi
.Name
.Buffer
);
460 xdi
->ppdi
.Name
.Buffer
= NULL
;
466 RtlCreateUnicodeStringFromAsciiz(&(xdi
->ppdi
.Name
), "DOMAIN");
467 DPRINT1("setting domain to \n");
469 xdi
->ppdi
.Sid
= &(xdi
->sid
);
470 xdi
->sid
.Revision
= SID_REVISION
;
471 xdi
->sid
.SubAuthorityCount
= 1;
472 xdi
->sid
.IdentifierAuthority
= localSidAuthority
;
473 xdi
->sid
.SubAuthority
[0] = SECURITY_LOCAL_SYSTEM_RID
;
477 case PolicyAuditLogInformation
:
478 case PolicyPdAccountInformation
:
479 case PolicyLsaServerRoleInformation
:
480 case PolicyReplicaSourceInformation
:
481 case PolicyDefaultQuotaInformation
:
482 case PolicyModificationInformation
:
483 case PolicyAuditFullSetInformation
:
484 case PolicyAuditFullQueryInformation
:
485 case PolicyDnsDomainInformation
:
486 case PolicyEfsInformation
:
488 DPRINT1("category not implemented\n");
500 LsaQueryTrustedDomainInfoByName(
501 LSA_HANDLE PolicyHandle
,
502 PLSA_UNICODE_STRING TrustedDomainName
,
503 TRUSTED_INFORMATION_CLASS pic
,
506 return STATUS_NOT_IMPLEMENTED
;
514 LsaQueryTrustedDomainInfo(
515 LSA_HANDLE PolicyHandle
,
516 PSID TrustedDomainSid
,
517 TRUSTED_INFORMATION_CLASS pic
,
520 return STATUS_NOT_IMPLEMENTED
;
528 LsaRemoveAccountRights(
529 LSA_HANDLE PolicyHandle
,
532 PLSA_UNICODE_STRING UserRights
,
535 return STATUS_NOT_IMPLEMENTED
;
543 LsaRetrievePrivateData(
544 LSA_HANDLE PolicyHandle
,
545 PLSA_UNICODE_STRING KeyName
,
546 PLSA_UNICODE_STRING
*PrivateData
)
548 return STATUS_NOT_IMPLEMENTED
;
556 LsaSetDomainInformationPolicy(
557 LSA_HANDLE PolicyHandle
,
558 POLICY_DOMAIN_INFORMATION_CLASS pic
,
561 return STATUS_NOT_IMPLEMENTED
;
569 LsaSetInformationPolicy(
570 LSA_HANDLE PolicyHandle
,
571 POLICY_INFORMATION_CLASS pic
,
574 return STATUS_NOT_IMPLEMENTED
;
582 LsaSetForestTrustInformation(
583 LSA_HANDLE PolicyHandle
,
584 PLSA_UNICODE_STRING TrustedDomainName
,
585 PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo
,
587 PLSA_FOREST_TRUST_COLLISION_INFORMATION
*CollisionInfo
)
589 return STATUS_NOT_IMPLEMENTED
;
597 LsaSetTrustedDomainInfoByName(
598 LSA_HANDLE PolicyHandle
,
599 PLSA_UNICODE_STRING TrustedDomainName
,
600 TRUSTED_INFORMATION_CLASS pic
,
603 return STATUS_NOT_IMPLEMENTED
;
611 LsaSetTrustedDomainInformation(
612 LSA_HANDLE PolicyHandle
,
613 PSID TrustedDomainSid
,
614 TRUSTED_INFORMATION_CLASS pic
,
617 return STATUS_NOT_IMPLEMENTED
;
626 LSA_HANDLE PolicyHandle
,
627 PLSA_UNICODE_STRING KeyName
,
628 PLSA_UNICODE_STRING PrivateData
)
630 return STATUS_NOT_IMPLEMENTED
;
639 PUNICODE_STRING
*UserName
,
640 PUNICODE_STRING
*DomainName
)
642 DPRINT1("LsaGetUserName not implemented\n");
644 return STATUS_NOT_IMPLEMENTED
;
652 LsaQueryInfoTrustedDomain (DWORD Unknonw0
,
656 DPRINT1("LsaQueryInfoTrustedDomain not implemented\n");
658 return STATUS_NOT_IMPLEMENTED
;