mirror of
https://github.com/reactos/reactos.git
synced 2025-01-02 20:43:18 +00:00
[ADVAPI32/LSASRV]
- Implement LsaEnumeratePrivilegesOfAccount and LsarEnumeratePrivilegesAccount. - Implement parts of LsarAddPrivilegesToAccount. svn path=/trunk/; revision=56527
This commit is contained in:
parent
497e2b9709
commit
686b87d7d2
4 changed files with 115 additions and 6 deletions
|
@ -358,7 +358,7 @@
|
||||||
@ stub LsaEnumerateAccounts
|
@ stub LsaEnumerateAccounts
|
||||||
@ stdcall LsaEnumerateAccountsWithUserRight(ptr ptr ptr ptr)
|
@ stdcall LsaEnumerateAccountsWithUserRight(ptr ptr ptr ptr)
|
||||||
@ stub LsaEnumeratePrivileges
|
@ stub LsaEnumeratePrivileges
|
||||||
@ stub LsaEnumeratePrivilegesOfAccount
|
@ stdcall LsaEnumeratePrivilegesOfAccount(ptr ptr)
|
||||||
@ stdcall LsaEnumerateTrustedDomains(ptr ptr ptr long ptr)
|
@ stdcall LsaEnumerateTrustedDomains(ptr ptr ptr long ptr)
|
||||||
@ stdcall LsaEnumerateTrustedDomainsEx(ptr ptr ptr long ptr)
|
@ stdcall LsaEnumerateTrustedDomainsEx(ptr ptr ptr long ptr)
|
||||||
@ stdcall LsaFreeMemory(ptr)
|
@ stdcall LsaFreeMemory(ptr)
|
||||||
|
|
|
@ -366,6 +366,34 @@ LsaEnumerateAccountsWithUserRight(
|
||||||
return STATUS_NO_MORE_ENTRIES;
|
return STATUS_NO_MORE_ENTRIES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
NTSTATUS
|
||||||
|
WINAPI
|
||||||
|
LsaEnumeratePrivilegesOfAccount(IN LSA_HANDLE AccountHandle,
|
||||||
|
OUT PPRIVILEGE_SET *Privileges)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
TRACE("(%p,%p) stub\n", AccountHandle, Privileges);
|
||||||
|
|
||||||
|
RpcTryExcept
|
||||||
|
{
|
||||||
|
Status = LsarEnumeratePrivilegesAccount((LSAPR_HANDLE)AccountHandle,
|
||||||
|
(LSAPR_PRIVILEGE_SET **)Privileges);
|
||||||
|
}
|
||||||
|
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
|
||||||
|
{
|
||||||
|
Status = I_RpcMapWin32Status(RpcExceptionCode());
|
||||||
|
}
|
||||||
|
RpcEndExcept;
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -380,7 +408,7 @@ LsaEnumerateTrustedDomains(
|
||||||
{
|
{
|
||||||
FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle, EnumerationContext,
|
FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle, EnumerationContext,
|
||||||
Buffer, PreferedMaximumLength, CountReturned);
|
Buffer, PreferedMaximumLength, CountReturned);
|
||||||
|
|
||||||
if (CountReturned) *CountReturned = 0;
|
if (CountReturned) *CountReturned = 0;
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -723,8 +723,52 @@ NTSTATUS WINAPI LsarEnumeratePrivilegesAccount(
|
||||||
LSAPR_HANDLE AccountHandle,
|
LSAPR_HANDLE AccountHandle,
|
||||||
PLSAPR_PRIVILEGE_SET *Privileges)
|
PLSAPR_PRIVILEGE_SET *Privileges)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
PLSA_DB_OBJECT AccountObject;
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
ULONG PrivilegeSetSize = 0;
|
||||||
|
PLSAPR_PRIVILEGE_SET PrivilegeSet = NULL;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
*Privileges = NULL;
|
||||||
|
|
||||||
|
/* Validate the AccountHandle */
|
||||||
|
Status = LsapValidateDbObject(AccountHandle,
|
||||||
|
LsaDbAccountObject,
|
||||||
|
0,
|
||||||
|
&AccountObject);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
ERR("LsapValidateDbObject returned 0x%08lx\n", Status);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the size of the privilege set */
|
||||||
|
Status = LsapGetObjectAttribute(AccountObject,
|
||||||
|
L"Privilgs",
|
||||||
|
NULL,
|
||||||
|
&PrivilegeSetSize);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
return Status;
|
||||||
|
|
||||||
|
/* Allocate a buffer for the privilege set */
|
||||||
|
PrivilegeSet = MIDL_user_allocate(PrivilegeSetSize);
|
||||||
|
if (PrivilegeSet == NULL)
|
||||||
|
return STATUS_NO_MEMORY;
|
||||||
|
|
||||||
|
/* Get the privilege set */
|
||||||
|
Status = LsapGetObjectAttribute(AccountObject,
|
||||||
|
L"Privilgs",
|
||||||
|
PrivilegeSet,
|
||||||
|
&PrivilegeSetSize);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
MIDL_user_free(PrivilegeSet);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return a pointer to the privilege set */
|
||||||
|
*Privileges = PrivilegeSet;
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -733,8 +777,44 @@ NTSTATUS WINAPI LsarAddPrivilegesToAccount(
|
||||||
LSAPR_HANDLE AccountHandle,
|
LSAPR_HANDLE AccountHandle,
|
||||||
PLSAPR_PRIVILEGE_SET Privileges)
|
PLSAPR_PRIVILEGE_SET Privileges)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
PLSA_DB_OBJECT AccountObject;
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
ULONG PrivilegeSetSize = 0;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
/* Validate the AccountHandle */
|
||||||
|
Status = LsapValidateDbObject(AccountHandle,
|
||||||
|
LsaDbAccountObject,
|
||||||
|
0,
|
||||||
|
&AccountObject);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
ERR("LsapValidateDbObject returned 0x%08lx\n", Status);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = LsapGetObjectAttribute(AccountObject,
|
||||||
|
L"Privilgs",
|
||||||
|
NULL,
|
||||||
|
&PrivilegeSetSize);
|
||||||
|
if (!NT_SUCCESS(Status) || PrivilegeSetSize == 0)
|
||||||
|
{
|
||||||
|
/* The Privilgs attribute does not exist */
|
||||||
|
|
||||||
|
PrivilegeSetSize = sizeof(PRIVILEGE_SET) +
|
||||||
|
(Privileges->PrivilegeCount - 1) * sizeof(LUID_AND_ATTRIBUTES);
|
||||||
|
Status = LsapSetObjectAttribute(AccountObject,
|
||||||
|
L"Privilgs",
|
||||||
|
Privileges,
|
||||||
|
PrivilegeSetSize);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* The Privilgs attribute exists */
|
||||||
|
|
||||||
|
Status = STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -688,6 +688,7 @@ NTSTATUS NTAPI LsaDeregisterLogonProcess(HANDLE);
|
||||||
NTSTATUS NTAPI LsaEnumerateAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING*,PULONG);
|
NTSTATUS NTAPI LsaEnumerateAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING*,PULONG);
|
||||||
NTSTATUS NTAPI LsaEnumerateAccountsWithUserRight(LSA_HANDLE,PLSA_UNICODE_STRING,
|
NTSTATUS NTAPI LsaEnumerateAccountsWithUserRight(LSA_HANDLE,PLSA_UNICODE_STRING,
|
||||||
PVOID*,PULONG);
|
PVOID*,PULONG);
|
||||||
|
NTSTATUS NTAPI LsaEnumeratePrivilegesOfAccount(LSA_HANDLE, PPRIVILEGE_SET*);
|
||||||
NTSTATUS NTAPI LsaEnumerateTrustedDomains(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,
|
NTSTATUS NTAPI LsaEnumerateTrustedDomains(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,
|
||||||
PVOID*,ULONG,PULONG);
|
PVOID*,ULONG,PULONG);
|
||||||
NTSTATUS NTAPI LsaEnumerateTrustedDomainsEx(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,
|
NTSTATUS NTAPI LsaEnumerateTrustedDomainsEx(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,
|
||||||
|
|
Loading…
Reference in a new issue