2 * PROJECT: Local Security Authority Server DLL
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/win32/lsasrv/policy.c
5 * PURPOSE: Policy object routines
6 * COPYRIGHT: Copyright 2011 Eric Kohl
11 /* FUNCTIONS ***************************************************************/
15 LsaIOpenPolicyTrusted(OUT LSAPR_HANDLE
*PolicyHandle
)
17 PLSA_DB_OBJECT PolicyObject
;
20 TRACE("(%p)\n", PolicyHandle
);
22 Status
= LsapOpenDbObject(NULL
,
30 if (NT_SUCCESS(Status
))
31 *PolicyHandle
= (LSAPR_HANDLE
)PolicyObject
;
38 LsarQueryAuditLog(PLSA_DB_OBJECT PolicyObject
,
39 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
41 PPOLICY_AUDIT_LOG_INFO AuditLogInfo
= NULL
;
45 *PolicyInformation
= NULL
;
47 AttributeSize
= sizeof(POLICY_AUDIT_LOG_INFO
);
48 AuditLogInfo
= MIDL_user_allocate(AttributeSize
);
49 if (AuditLogInfo
== NULL
)
50 return STATUS_INSUFFICIENT_RESOURCES
;
52 Status
= LsapGetObjectAttribute(PolicyObject
,
56 if (!NT_SUCCESS(Status
))
58 MIDL_user_free(AuditLogInfo
);
62 *PolicyInformation
= (PLSAPR_POLICY_INFORMATION
)AuditLogInfo
;
70 LsarQueryAuditEvents(PLSA_DB_OBJECT PolicyObject
,
71 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
73 PLSAP_POLICY_AUDIT_EVENTS_DATA AuditData
= NULL
;
74 PLSAPR_POLICY_AUDIT_EVENTS_INFO p
= NULL
;
76 NTSTATUS Status
= STATUS_SUCCESS
;
78 *PolicyInformation
= NULL
;
81 Status
= LsapGetObjectAttribute(PolicyObject
,
85 if (!NT_SUCCESS(Status
))
88 TRACE("Attribute size: %lu\n", AttributeSize
);
89 if (AttributeSize
> 0)
91 AuditData
= MIDL_user_allocate(AttributeSize
);
92 if (AuditData
== NULL
)
93 return STATUS_INSUFFICIENT_RESOURCES
;
95 Status
= LsapGetObjectAttribute(PolicyObject
,
99 if (!NT_SUCCESS(Status
))
103 p
= MIDL_user_allocate(sizeof(LSAPR_POLICY_AUDIT_EVENTS_INFO
));
106 Status
= STATUS_INSUFFICIENT_RESOURCES
;
110 if (AuditData
== NULL
)
112 p
->AuditingMode
= FALSE
;
113 p
->MaximumAuditEventCount
= 0;
114 p
->EventAuditingOptions
= NULL
;
118 p
->AuditingMode
= AuditData
->AuditingMode
;
119 p
->MaximumAuditEventCount
= AuditData
->MaximumAuditEventCount
;
121 p
->EventAuditingOptions
= MIDL_user_allocate(AuditData
->MaximumAuditEventCount
* sizeof(DWORD
));
122 if (p
->EventAuditingOptions
== NULL
)
124 Status
= STATUS_INSUFFICIENT_RESOURCES
;
128 memcpy(p
->EventAuditingOptions
,
129 &(AuditData
->AuditEvents
[0]),
130 AuditData
->MaximumAuditEventCount
* sizeof(DWORD
));
133 *PolicyInformation
= (PLSAPR_POLICY_INFORMATION
)p
;
136 TRACE("Status: 0x%lx\n", Status
);
138 if (!NT_SUCCESS(Status
))
142 if (p
->EventAuditingOptions
!= NULL
)
143 MIDL_user_free(p
->EventAuditingOptions
);
149 if (AuditData
!= NULL
)
150 MIDL_user_free(AuditData
);
157 LsarQueryPrimaryDomain(PLSA_DB_OBJECT PolicyObject
,
158 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
160 PLSAPR_POLICY_PRIMARY_DOM_INFO p
= NULL
;
161 PUNICODE_STRING DomainName
;
165 *PolicyInformation
= NULL
;
167 p
= MIDL_user_allocate(sizeof(LSAPR_POLICY_PRIMARY_DOM_INFO
));
169 return STATUS_INSUFFICIENT_RESOURCES
;
173 Status
= LsapGetObjectAttribute(PolicyObject
,
177 if (!NT_SUCCESS(Status
))
182 if (AttributeSize
> 0)
184 DomainName
= MIDL_user_allocate(AttributeSize
);
185 if (DomainName
== NULL
)
187 Status
= STATUS_INSUFFICIENT_RESOURCES
;
191 Status
= LsapGetObjectAttribute(PolicyObject
,
195 if (Status
== STATUS_SUCCESS
)
197 DomainName
->Buffer
= (LPWSTR
)((ULONG_PTR
)DomainName
+ (ULONG_PTR
)DomainName
->Buffer
);
199 TRACE("PrimaryDomainName: %wZ\n", DomainName
);
201 p
->Name
.Buffer
= MIDL_user_allocate(DomainName
->MaximumLength
);
202 if (p
->Name
.Buffer
== NULL
)
204 MIDL_user_free(DomainName
);
205 Status
= STATUS_INSUFFICIENT_RESOURCES
;
209 p
->Name
.Length
= DomainName
->Length
;
210 p
->Name
.MaximumLength
= DomainName
->MaximumLength
;
211 memcpy(p
->Name
.Buffer
,
213 DomainName
->MaximumLength
);
216 MIDL_user_free(DomainName
);
221 Status
= LsapGetObjectAttribute(PolicyObject
,
225 if (!NT_SUCCESS(Status
))
230 if (AttributeSize
> 0)
232 p
->Sid
= MIDL_user_allocate(AttributeSize
);
235 Status
= STATUS_INSUFFICIENT_RESOURCES
;
239 Status
= LsapGetObjectAttribute(PolicyObject
,
245 *PolicyInformation
= (PLSAPR_POLICY_INFORMATION
)p
;
248 if (!NT_SUCCESS(Status
))
253 MIDL_user_free(p
->Name
.Buffer
);
256 MIDL_user_free(p
->Sid
);
267 LsarQueryPdAccount(PLSA_DB_OBJECT PolicyObject
,
268 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
270 PLSAPR_POLICY_PD_ACCOUNT_INFO PdAccountInfo
= NULL
;
272 *PolicyInformation
= NULL
;
274 PdAccountInfo
= MIDL_user_allocate(sizeof(LSAPR_POLICY_PD_ACCOUNT_INFO
));
275 if (PdAccountInfo
== NULL
)
276 return STATUS_INSUFFICIENT_RESOURCES
;
278 PdAccountInfo
->Name
.Length
= 0;
279 PdAccountInfo
->Name
.MaximumLength
= 0;
280 PdAccountInfo
->Name
.Buffer
= NULL
;
282 *PolicyInformation
= (PLSAPR_POLICY_INFORMATION
)PdAccountInfo
;
284 return STATUS_SUCCESS
;
289 LsarQueryAccountDomain(PLSA_DB_OBJECT PolicyObject
,
290 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
292 PLSAPR_POLICY_ACCOUNT_DOM_INFO p
= NULL
;
293 PUNICODE_STRING DomainName
;
294 ULONG AttributeSize
= 0;
297 *PolicyInformation
= NULL
;
299 p
= MIDL_user_allocate(sizeof(LSAPR_POLICY_ACCOUNT_DOM_INFO
));
301 return STATUS_INSUFFICIENT_RESOURCES
;
304 Status
= LsapGetObjectAttribute(PolicyObject
,
308 if (!NT_SUCCESS(Status
))
313 if (AttributeSize
> 0)
315 DomainName
= MIDL_user_allocate(AttributeSize
);
316 if (DomainName
== NULL
)
318 Status
= STATUS_INSUFFICIENT_RESOURCES
;
322 Status
= LsapGetObjectAttribute(PolicyObject
,
326 if (Status
== STATUS_SUCCESS
)
328 DomainName
->Buffer
= (LPWSTR
)((ULONG_PTR
)DomainName
+ (ULONG_PTR
)DomainName
->Buffer
);
330 TRACE("AccountDomainName: %wZ\n", DomainName
);
332 p
->DomainName
.Buffer
= MIDL_user_allocate(DomainName
->MaximumLength
);
333 if (p
->DomainName
.Buffer
== NULL
)
335 MIDL_user_free(DomainName
);
336 Status
= STATUS_INSUFFICIENT_RESOURCES
;
340 p
->DomainName
.Length
= DomainName
->Length
;
341 p
->DomainName
.MaximumLength
= DomainName
->MaximumLength
;
342 memcpy(p
->DomainName
.Buffer
,
344 DomainName
->MaximumLength
);
347 MIDL_user_free(DomainName
);
352 Status
= LsapGetObjectAttribute(PolicyObject
,
356 if (!NT_SUCCESS(Status
))
361 if (AttributeSize
> 0)
363 p
->Sid
= MIDL_user_allocate(AttributeSize
);
366 Status
= STATUS_INSUFFICIENT_RESOURCES
;
370 Status
= LsapGetObjectAttribute(PolicyObject
,
376 *PolicyInformation
= (PLSAPR_POLICY_INFORMATION
)p
;
379 if (!NT_SUCCESS(Status
))
383 if (p
->DomainName
.Buffer
)
384 MIDL_user_free(p
->DomainName
.Buffer
);
387 MIDL_user_free(p
->Sid
);
398 LsarQueryServerRole(PLSA_DB_OBJECT PolicyObject
,
399 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
401 PPOLICY_LSA_SERVER_ROLE_INFO ServerRoleInfo
= NULL
;
405 *PolicyInformation
= NULL
;
407 AttributeSize
= sizeof(POLICY_LSA_SERVER_ROLE_INFO
);
408 ServerRoleInfo
= MIDL_user_allocate(AttributeSize
);
409 if (ServerRoleInfo
== NULL
)
410 return STATUS_INSUFFICIENT_RESOURCES
;
412 Status
= LsapGetObjectAttribute(PolicyObject
,
416 if (Status
== STATUS_OBJECT_NAME_NOT_FOUND
)
418 ServerRoleInfo
->LsaServerRole
= PolicyServerRolePrimary
;
419 Status
= STATUS_SUCCESS
;
422 if (!NT_SUCCESS(Status
))
424 MIDL_user_free(ServerRoleInfo
);
428 *PolicyInformation
= (PLSAPR_POLICY_INFORMATION
)ServerRoleInfo
;
436 LsarQueryReplicaSource(PLSA_DB_OBJECT PolicyObject
,
437 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
440 *PolicyInformation
= NULL
;
441 return STATUS_NOT_IMPLEMENTED
;
446 LsarQueryDefaultQuota(PLSA_DB_OBJECT PolicyObject
,
447 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
449 PPOLICY_DEFAULT_QUOTA_INFO QuotaInfo
= NULL
;
453 *PolicyInformation
= NULL
;
455 AttributeSize
= sizeof(POLICY_DEFAULT_QUOTA_INFO
);
456 QuotaInfo
= MIDL_user_allocate(AttributeSize
);
457 if (QuotaInfo
== NULL
)
458 return STATUS_INSUFFICIENT_RESOURCES
;
460 Status
= LsapGetObjectAttribute(PolicyObject
,
464 if (!NT_SUCCESS(Status
))
466 MIDL_user_free(QuotaInfo
);
470 *PolicyInformation
= (PLSAPR_POLICY_INFORMATION
)QuotaInfo
;
478 LsarQueryModification(PLSA_DB_OBJECT PolicyObject
,
479 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
481 PPOLICY_MODIFICATION_INFO Info
= NULL
;
485 *PolicyInformation
= NULL
;
487 AttributeSize
= sizeof(POLICY_MODIFICATION_INFO
);
488 Info
= MIDL_user_allocate(AttributeSize
);
490 return STATUS_INSUFFICIENT_RESOURCES
;
492 Status
= LsapGetObjectAttribute(PolicyObject
,
496 if (!NT_SUCCESS(Status
))
498 MIDL_user_free(Info
);
502 *PolicyInformation
= (PLSAPR_POLICY_INFORMATION
)Info
;
510 LsarQueryAuditFull(PLSA_DB_OBJECT PolicyObject
,
511 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
513 PPOLICY_AUDIT_FULL_QUERY_INFO AuditFullInfo
= NULL
;
517 *PolicyInformation
= NULL
;
519 AttributeSize
= sizeof(POLICY_AUDIT_FULL_QUERY_INFO
);
520 AuditFullInfo
= MIDL_user_allocate(AttributeSize
);
521 if (AuditFullInfo
== NULL
)
522 return STATUS_INSUFFICIENT_RESOURCES
;
524 Status
= LsapGetObjectAttribute(PolicyObject
,
528 if (!NT_SUCCESS(Status
))
530 MIDL_user_free(AuditFullInfo
);
534 *PolicyInformation
= (PLSAPR_POLICY_INFORMATION
)AuditFullInfo
;
542 LsarQueryDnsDomain(PLSA_DB_OBJECT PolicyObject
,
543 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
545 PLSAPR_POLICY_DNS_DOMAIN_INFO p
= NULL
;
546 PUNICODE_STRING DomainName
;
550 *PolicyInformation
= NULL
;
552 p
= MIDL_user_allocate(sizeof(LSAPR_POLICY_DNS_DOMAIN_INFO
));
554 return STATUS_INSUFFICIENT_RESOURCES
;
556 /* Primary Domain Name */
558 Status
= LsapGetObjectAttribute(PolicyObject
,
562 if (!NT_SUCCESS(Status
))
567 if (AttributeSize
> 0)
569 DomainName
= MIDL_user_allocate(AttributeSize
);
570 if (DomainName
== NULL
)
572 Status
= STATUS_INSUFFICIENT_RESOURCES
;
576 Status
= LsapGetObjectAttribute(PolicyObject
,
580 if (Status
== STATUS_SUCCESS
)
582 DomainName
->Buffer
= (LPWSTR
)((ULONG_PTR
)DomainName
+ (ULONG_PTR
)DomainName
->Buffer
);
584 TRACE("PrimaryDomainName: %wZ\n", DomainName
);
586 p
->Name
.Buffer
= MIDL_user_allocate(DomainName
->MaximumLength
);
587 if (p
->Name
.Buffer
== NULL
)
589 MIDL_user_free(DomainName
);
590 Status
= STATUS_INSUFFICIENT_RESOURCES
;
594 p
->Name
.Length
= DomainName
->Length
;
595 p
->Name
.MaximumLength
= DomainName
->MaximumLength
;
596 memcpy(p
->Name
.Buffer
,
598 DomainName
->MaximumLength
);
601 MIDL_user_free(DomainName
);
604 /* Primary Domain SID */
606 Status
= LsapGetObjectAttribute(PolicyObject
,
610 if (!NT_SUCCESS(Status
))
615 if (AttributeSize
> 0)
617 p
->Sid
= MIDL_user_allocate(AttributeSize
);
620 Status
= STATUS_INSUFFICIENT_RESOURCES
;
624 Status
= LsapGetObjectAttribute(PolicyObject
,
630 /* DNS Domain Name */
632 Status
= LsapGetObjectAttribute(PolicyObject
,
636 if (!NT_SUCCESS(Status
))
639 if (AttributeSize
> 0)
641 DomainName
= MIDL_user_allocate(AttributeSize
);
642 if (DomainName
== NULL
)
644 Status
= STATUS_INSUFFICIENT_RESOURCES
;
648 Status
= LsapGetObjectAttribute(PolicyObject
,
652 if (Status
== STATUS_SUCCESS
)
654 DomainName
->Buffer
= (LPWSTR
)((ULONG_PTR
)DomainName
+ (ULONG_PTR
)DomainName
->Buffer
);
656 TRACE("DNS Domain Name: %wZ\n", DomainName
);
658 p
->DnsDomainName
.Buffer
= MIDL_user_allocate(DomainName
->MaximumLength
);
659 if (p
->DnsDomainName
.Buffer
== NULL
)
661 MIDL_user_free(DomainName
);
662 Status
= STATUS_INSUFFICIENT_RESOURCES
;
666 p
->DnsDomainName
.Length
= DomainName
->Length
;
667 p
->DnsDomainName
.MaximumLength
= DomainName
->MaximumLength
;
668 memcpy(p
->DnsDomainName
.Buffer
,
670 DomainName
->MaximumLength
);
673 MIDL_user_free(DomainName
);
676 /* DNS Forest Name */
678 Status
= LsapGetObjectAttribute(PolicyObject
,
682 if (!NT_SUCCESS(Status
))
685 if (AttributeSize
> 0)
687 DomainName
= MIDL_user_allocate(AttributeSize
);
688 if (DomainName
== NULL
)
690 Status
= STATUS_INSUFFICIENT_RESOURCES
;
694 Status
= LsapGetObjectAttribute(PolicyObject
,
698 if (Status
== STATUS_SUCCESS
)
700 DomainName
->Buffer
= (LPWSTR
)((ULONG_PTR
)DomainName
+ (ULONG_PTR
)DomainName
->Buffer
);
702 TRACE("DNS Forest Name: %wZ\n", DomainName
);
704 p
->DnsForestName
.Buffer
= MIDL_user_allocate(DomainName
->MaximumLength
);
705 if (p
->DnsForestName
.Buffer
== NULL
)
707 MIDL_user_free(DomainName
);
708 Status
= STATUS_INSUFFICIENT_RESOURCES
;
712 p
->DnsForestName
.Length
= DomainName
->Length
;
713 p
->DnsForestName
.MaximumLength
= DomainName
->MaximumLength
;
714 memcpy(p
->DnsForestName
.Buffer
,
716 DomainName
->MaximumLength
);
719 MIDL_user_free(DomainName
);
722 /* DNS Domain GUID */
723 AttributeSize
= sizeof(GUID
);
724 Status
= LsapGetObjectAttribute(PolicyObject
,
728 if (!NT_SUCCESS(Status
))
731 *PolicyInformation
= (PLSAPR_POLICY_INFORMATION
)p
;
734 if (!NT_SUCCESS(Status
))
739 MIDL_user_free(p
->Name
.Buffer
);
741 if (p
->DnsDomainName
.Buffer
)
742 MIDL_user_free(p
->DnsDomainName
.Buffer
);
744 if (p
->DnsForestName
.Buffer
)
745 MIDL_user_free(p
->DnsForestName
.Buffer
);
748 MIDL_user_free(p
->Sid
);
759 LsarQueryDnsDomainInt(PLSA_DB_OBJECT PolicyObject
,
760 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
763 *PolicyInformation
= NULL
;
764 return STATUS_NOT_IMPLEMENTED
;
769 LsarQueryLocalAccountDomain(PLSA_DB_OBJECT PolicyObject
,
770 PLSAPR_POLICY_INFORMATION
*PolicyInformation
)
773 *PolicyInformation
= NULL
;
774 return STATUS_NOT_IMPLEMENTED
;
779 LsarSetAuditLog(PLSA_DB_OBJECT PolicyObject
,
780 PPOLICY_AUDIT_LOG_INFO Info
)
782 TRACE("(%p %p)\n", PolicyObject
, Info
);
784 return LsapSetObjectAttribute(PolicyObject
,
787 sizeof(POLICY_AUDIT_LOG_INFO
));
792 LsarSetAuditEvents(PLSA_DB_OBJECT PolicyObject
,
793 PLSAPR_POLICY_AUDIT_EVENTS_INFO Info
)
795 PLSAP_POLICY_AUDIT_EVENTS_DATA AuditData
= NULL
;
797 NTSTATUS Status
= STATUS_SUCCESS
;
799 TRACE("(%p %p)\n", PolicyObject
, Info
);
801 AttributeSize
= sizeof(LSAP_POLICY_AUDIT_EVENTS_DATA
) +
802 Info
->MaximumAuditEventCount
* sizeof(DWORD
);
804 AuditData
= RtlAllocateHeap(RtlGetProcessHeap(),
807 if (AuditData
== NULL
)
808 return STATUS_INSUFFICIENT_RESOURCES
;
810 AuditData
->AuditingMode
= Info
->AuditingMode
;
811 AuditData
->MaximumAuditEventCount
= Info
->MaximumAuditEventCount
;
813 memcpy(&(AuditData
->AuditEvents
[0]),
814 Info
->EventAuditingOptions
,
815 Info
->MaximumAuditEventCount
* sizeof(DWORD
));
817 Status
= LsapSetObjectAttribute(PolicyObject
,
822 RtlFreeHeap(RtlGetProcessHeap(), 0, AuditData
);
829 LsarSetPrimaryDomain(PLSA_DB_OBJECT PolicyObject
,
830 PLSAPR_POLICY_PRIMARY_DOM_INFO Info
)
832 PUNICODE_STRING Buffer
;
837 TRACE("(%p %p)\n", PolicyObject
, Info
);
839 Length
= sizeof(UNICODE_STRING
) + Info
->Name
.MaximumLength
;
840 Buffer
= RtlAllocateHeap(RtlGetProcessHeap(),
844 return STATUS_INSUFFICIENT_RESOURCES
;
846 Buffer
->Length
= Info
->Name
.Length
;
847 Buffer
->MaximumLength
= Info
->Name
.MaximumLength
;
848 Buffer
->Buffer
= (LPWSTR
)sizeof(UNICODE_STRING
);
849 Ptr
= (LPWSTR
)((ULONG_PTR
)Buffer
+ sizeof(UNICODE_STRING
));
850 memcpy(Ptr
, Info
->Name
.Buffer
, Info
->Name
.MaximumLength
);
852 Status
= LsapSetObjectAttribute(PolicyObject
,
857 RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer
);
859 if (!NT_SUCCESS(Status
))
863 if (Info
->Sid
!= NULL
)
864 Length
= RtlLengthSid(Info
->Sid
);
866 Status
= LsapSetObjectAttribute(PolicyObject
,
876 LsarSetAccountDomain(PLSA_DB_OBJECT PolicyObject
,
877 PLSAPR_POLICY_ACCOUNT_DOM_INFO Info
)
879 PUNICODE_STRING Buffer
;
884 TRACE("(%p %p)\n", PolicyObject
, Info
);
886 Length
= sizeof(UNICODE_STRING
) + Info
->DomainName
.MaximumLength
;
887 Buffer
= RtlAllocateHeap(RtlGetProcessHeap(),
891 return STATUS_INSUFFICIENT_RESOURCES
;
893 Buffer
->Length
= Info
->DomainName
.Length
;
894 Buffer
->MaximumLength
= Info
->DomainName
.MaximumLength
;
895 Buffer
->Buffer
= (LPWSTR
)sizeof(UNICODE_STRING
);
896 Ptr
= (LPWSTR
)((ULONG_PTR
)Buffer
+ sizeof(UNICODE_STRING
));
897 memcpy(Ptr
, Info
->DomainName
.Buffer
, Info
->DomainName
.MaximumLength
);
899 Status
= LsapSetObjectAttribute(PolicyObject
,
904 RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer
);
906 if (!NT_SUCCESS(Status
))
910 if (Info
->Sid
!= NULL
)
911 Length
= RtlLengthSid(Info
->Sid
);
913 Status
= LsapSetObjectAttribute(PolicyObject
,
923 LsarSetServerRole(PLSA_DB_OBJECT PolicyObject
,
924 PPOLICY_LSA_SERVER_ROLE_INFO Info
)
926 TRACE("(%p %p)\n", PolicyObject
, Info
);
928 return LsapSetObjectAttribute(PolicyObject
,
931 sizeof(POLICY_LSA_SERVER_ROLE_INFO
));
936 LsarSetReplicaSource(PLSA_DB_OBJECT PolicyObject
,
937 PPOLICY_LSA_REPLICA_SRCE_INFO Info
)
940 return STATUS_NOT_IMPLEMENTED
;
945 LsarSetDefaultQuota(PLSA_DB_OBJECT PolicyObject
,
946 PPOLICY_DEFAULT_QUOTA_INFO Info
)
948 TRACE("(%p %p)\n", PolicyObject
, Info
);
950 return LsapSetObjectAttribute(PolicyObject
,
953 sizeof(POLICY_DEFAULT_QUOTA_INFO
));
958 LsarSetModification(PLSA_DB_OBJECT PolicyObject
,
959 PPOLICY_MODIFICATION_INFO Info
)
961 TRACE("(%p %p)\n", PolicyObject
, Info
);
963 return LsapSetObjectAttribute(PolicyObject
,
966 sizeof(POLICY_MODIFICATION_INFO
));
971 LsarSetAuditFull(PLSA_DB_OBJECT PolicyObject
,
972 PPOLICY_AUDIT_FULL_QUERY_INFO Info
)
974 PPOLICY_AUDIT_FULL_QUERY_INFO AuditFullInfo
= NULL
;
978 TRACE("(%p %p)\n", PolicyObject
, Info
);
980 AttributeSize
= sizeof(POLICY_AUDIT_FULL_QUERY_INFO
);
981 AuditFullInfo
= MIDL_user_allocate(AttributeSize
);
982 if (AuditFullInfo
== NULL
)
983 return STATUS_INSUFFICIENT_RESOURCES
;
985 Status
= LsapGetObjectAttribute(PolicyObject
,
989 if (!NT_SUCCESS(Status
))
992 AuditFullInfo
->ShutDownOnFull
= Info
->ShutDownOnFull
;
994 Status
= LsapSetObjectAttribute(PolicyObject
,
1000 if (AuditFullInfo
!= NULL
)
1001 MIDL_user_free(AuditFullInfo
);
1008 LsarSetDnsDomain(PLSA_DB_OBJECT PolicyObject
,
1009 PLSAPR_POLICY_DNS_DOMAIN_INFO Info
)
1012 return STATUS_NOT_IMPLEMENTED
;
1017 LsarSetDnsDomainInt(PLSA_DB_OBJECT PolicyObject
,
1018 PLSAPR_POLICY_DNS_DOMAIN_INFO Info
)
1021 return STATUS_NOT_IMPLEMENTED
;
1026 LsarSetLocalAccountDomain(PLSA_DB_OBJECT PolicyObject
,
1027 PLSAPR_POLICY_ACCOUNT_DOM_INFO Info
)
1030 return STATUS_NOT_IMPLEMENTED
;