* @implemented
*/
NTSTATUS
-NTAPI
+WINAPI
LsaClearAuditLog(IN LSA_HANDLE PolicyHandle)
{
NTSTATUS Status;
}
+/*
+ * @unimplemented
+ */
+NTSTATUS
+WINAPI
+LsaGetRemoteUserName(IN PLSA_UNICODE_STRING SystemName OPTIONAL,
+ OUT PLSA_UNICODE_STRING *UserName,
+ OUT PLSA_UNICODE_STRING *DomainName OPTIONAL)
+{
+ PRPC_UNICODE_STRING UserNameString = NULL;
+ PRPC_UNICODE_STRING DomainNameString = NULL;
+ NTSTATUS Status;
+
+ TRACE("LsaGetRemoteUserName(%s %p %p)\n",
+ SystemName ? debugstr_w(SystemName->Buffer) : "(null)",
+ UserName, DomainName);
+
+ RpcTryExcept
+ {
+ Status = LsarGetUserName((PLSAPR_SERVER_NAME)SystemName,
+ &UserNameString,
+ (DomainName != NULL) ? &DomainNameString : NULL);
+
+ *UserName = (PLSA_UNICODE_STRING)UserNameString;
+
+ if (DomainName != NULL)
+ *DomainName = (PLSA_UNICODE_STRING)DomainNameString;
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ if (UserNameString != NULL)
+ MIDL_user_free(UserNameString);
+
+ if (DomainNameString != NULL)
+ MIDL_user_free(DomainNameString);
+
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return Status;
+}
+
+
/*
* @implemented
*/
}
+/*
+ * @unimplemented
+ */
+NTSTATUS
+WINAPI
+LsaLookupPrivilegeDisplayName(IN LSA_HANDLE PolicyHandle,
+ IN PLSA_UNICODE_STRING Name,
+ OUT PLSA_UNICODE_STRING *DisplayName,
+ OUT PSHORT LanguageReturned)
+{
+ FIXME("LsaLookupPrivilegeDisplayName(%p %p %p %p)\n",
+ PolicyHandle, Name, DisplayName, LanguageReturned);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
/*
* @implemented
*/
}
+/*
+ * @unimplemented
+ */
+NTSTATUS
+WINAPI
+LsaOpenPolicySce(IN PLSA_UNICODE_STRING SystemName OPTIONAL,
+ IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes,
+ IN ACCESS_MASK DesiredAccess,
+ OUT PLSA_HANDLE PolicyHandle)
+{
+ FIXME("LsaOpenPolicySce(%s %p 0x%08lx %p)\n",
+ SystemName ? debugstr_w(SystemName->Buffer) : "(null)",
+ ObjectAttributes, DesiredAccess, PolicyHandle);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/*
+ * @implemented
+ */
NTSTATUS
WINAPI
LsaOpenSecret(IN LSA_HANDLE PolicyHandle,
/*
- * @unimplemented
+ * @implemented
*/
NTSTATUS
WINAPI
IN POLICY_DOMAIN_INFORMATION_CLASS InformationClass,
OUT PVOID *Buffer)
{
- FIXME("LsaQueryDomainInformationPolicy(%p %lu %p) stub\n",
+ PLSAPR_POLICY_DOMAIN_INFORMATION PolicyInformation = NULL;
+ NTSTATUS Status;
+
+ TRACE("LsaQueryDomainInformationPolicy(%p %lu %p)\n",
PolicyHandle, InformationClass, Buffer);
- return STATUS_NOT_IMPLEMENTED;
+
+ RpcTryExcept
+ {
+ Status = LsarQueryDomainInformationPolicy((LSAPR_HANDLE)PolicyHandle,
+ InformationClass,
+ &PolicyInformation);
+
+ *Buffer = PolicyInformation;
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ if (PolicyInformation != NULL)
+ MIDL_user_free(PolicyInformation);
+
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return Status;
}
}
+/*
+ * @implemented
+ */
+NTSTATUS
+WINAPI
+LsaQuerySecurityObject(IN LSA_HANDLE ObjectHandle,
+ IN SECURITY_INFORMATION SecurityInformation,
+ OUT PSECURITY_DESCRIPTOR *SecurityDescriptor)
+{
+ LSAPR_SR_SECURITY_DESCRIPTOR SdBuffer;
+ PLSAPR_SR_SECURITY_DESCRIPTOR SdPointer;
+ NTSTATUS Status;
+
+ TRACE("LsaQuerySecurityObject(%p %lx %p)\n",
+ ObjectHandle, SecurityInformation, SecurityDescriptor);
+
+ SdBuffer.Length = 0;
+ SdBuffer.SecurityDescriptor = NULL;
+
+ SdPointer = &SdBuffer;
+
+ RpcTryExcept
+ {
+ Status = LsarQuerySecurityObject((LSAPR_HANDLE)ObjectHandle,
+ SecurityInformation,
+ &SdPointer);
+ if (NT_SUCCESS(Status))
+ {
+ *SecurityDescriptor = SdBuffer.SecurityDescriptor;
+ }
+ else
+ {
+ *SecurityDescriptor = NULL;
+ }
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return Status;
+}
+
+
/*
* @unimplemented
*/
}
+/*
+ * @implemented
+ */
+NTSTATUS
+WINAPI
+LsaRemovePrivilegesFromAccount(IN LSA_HANDLE AccountHandle,
+ IN BOOLEAN AllPrivileges,
+ IN PPRIVILEGE_SET Privileges OPTIONAL)
+{
+ NTSTATUS Status;
+
+ RpcTryExcept
+ {
+ Status = LsarRemovePrivilegesFromAccount((LSAPR_HANDLE)AccountHandle,
+ AllPrivileges,
+ (PLSAPR_PRIVILEGE_SET)Privileges);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return Status;
+}
+
+
/*
* @unimplemented
*/
/*
- * @unimplemented
+ * @implemented
*/
NTSTATUS
WINAPI
IN POLICY_DOMAIN_INFORMATION_CLASS InformationClass,
IN PVOID Buffer OPTIONAL)
{
- FIXME("LsaSetDomainInformationPolicy(%p %d %p) stub\n",
+ NTSTATUS Status;
+
+ TRACE("LsaSetDomainInformationPolicy(%p %d %p)\n",
PolicyHandle, InformationClass, Buffer);
- return STATUS_UNSUCCESSFUL;
+
+ RpcTryExcept
+ {
+ Status = LsarSetDomainInformationPolicy((LSAPR_HANDLE)PolicyHandle,
+ InformationClass,
+ (PLSAPR_POLICY_DOMAIN_INFORMATION)Buffer);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return Status;
}
}
+/*
+ * @unimplemented
+ */
+NTSTATUS
+WINAPI
+LsaSetInformationTrustedDomain(IN LSA_HANDLE TrustedDomainHandle,
+ IN TRUSTED_INFORMATION_CLASS InformationClass,
+ IN PVOID Buffer)
+{
+ FIXME("LsaSetInformationTrustedDomain(%p %d %p)\n",
+ TrustedDomainHandle, InformationClass, Buffer);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
/*
* @implemented
*/
}
+/*
+ * @implemented
+ */
+NTSTATUS
+WINAPI
+LsaSetSecurityObject(IN LSA_HANDLE ObjectHandle,
+ IN SECURITY_INFORMATION SecurityInformation,
+ IN PSECURITY_DESCRIPTOR SecurityDescriptor)
+{
+ LSAPR_SR_SECURITY_DESCRIPTOR SdBuffer = {0, NULL};
+ ULONG SdLength = 0;
+ NTSTATUS Status;
+
+ TRACE("LsaSetSecurityObject(%p %lx %p)\n",
+ ObjectHandle, SecurityInformation, SecurityDescriptor);
+
+ Status = RtlMakeSelfRelativeSD(SecurityDescriptor,
+ NULL,
+ &SdLength);
+ if (Status != STATUS_BUFFER_TOO_SMALL)
+ return STATUS_INVALID_PARAMETER;
+
+ SdBuffer.SecurityDescriptor = MIDL_user_allocate(SdLength);
+ if (SdBuffer.SecurityDescriptor == NULL)
+ return STATUS_INSUFFICIENT_RESOURCES;
+
+ Status = RtlMakeSelfRelativeSD(SecurityDescriptor,
+ (PSECURITY_DESCRIPTOR)SdBuffer.SecurityDescriptor,
+ &SdLength);
+ if (!NT_SUCCESS(Status))
+ goto done;
+
+ SdBuffer.Length = SdLength;
+
+ RpcTryExcept
+ {
+ Status = LsarSetSecurityObject((LSAPR_HANDLE)ObjectHandle,
+ SecurityInformation,
+ &SdBuffer);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Status = I_RpcMapWin32Status(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+done:
+ if (SdBuffer.SecurityDescriptor != NULL)
+ MIDL_user_free(SdBuffer.SecurityDescriptor);
+
+ return Status;
+}
+
+
/*
* @implemented
*/