[SAMLIB][SAMSRV]
[reactos.git] / reactos / dll / win32 / samsrv / samrpc.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: Security Account Manager (SAM) Server
4 * FILE: reactos/dll/win32/samsrv/samrpc.c
5 * PURPOSE: RPC interface functions
6 *
7 * PROGRAMMERS: Eric Kohl
8 */
9
10 /* INCLUDES ****************************************************************/
11
12 #include "samsrv.h"
13
14 WINE_DEFAULT_DEBUG_CHANNEL(samsrv);
15
16 /* GLOBALS ********************************************************************/
17
18 static SID_IDENTIFIER_AUTHORITY NtSidAuthority = {SECURITY_NT_AUTHORITY};
19
20 /* FUNCTIONS ***************************************************************/
21
22 VOID
23 SampStartRpcServer(VOID)
24 {
25 RPC_STATUS Status;
26
27 TRACE("SampStartRpcServer() called\n");
28
29 Status = RpcServerUseProtseqEpW(L"ncacn_np",
30 10,
31 L"\\pipe\\samr",
32 NULL);
33 if (Status != RPC_S_OK)
34 {
35 WARN("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
36 return;
37 }
38
39 Status = RpcServerRegisterIf(samr_v1_0_s_ifspec,
40 NULL,
41 NULL);
42 if (Status != RPC_S_OK)
43 {
44 WARN("RpcServerRegisterIf() failed (Status %lx)\n", Status);
45 return;
46 }
47
48 Status = RpcServerListen(1, 20, TRUE);
49 if (Status != RPC_S_OK)
50 {
51 WARN("RpcServerListen() failed (Status %lx)\n", Status);
52 return;
53 }
54
55 TRACE("SampStartRpcServer() done\n");
56 }
57
58
59 void __RPC_FAR * __RPC_USER midl_user_allocate(SIZE_T len)
60 {
61 return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
62 }
63
64
65 void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
66 {
67 HeapFree(GetProcessHeap(), 0, ptr);
68 }
69
70 void __RPC_USER SAMPR_HANDLE_rundown(SAMPR_HANDLE hHandle)
71 {
72 }
73
74 /* Function 0 */
75 NTSTATUS
76 NTAPI
77 SamrConnect(IN PSAMPR_SERVER_NAME ServerName,
78 OUT SAMPR_HANDLE *ServerHandle,
79 IN ACCESS_MASK DesiredAccess)
80 {
81 PSAM_DB_OBJECT ServerObject;
82 NTSTATUS Status;
83
84 TRACE("SamrConnect(%p %p %lx)\n",
85 ServerName, ServerHandle, DesiredAccess);
86
87 Status = SampOpenDbObject(NULL,
88 NULL,
89 L"SAM",
90 SamDbServerObject,
91 DesiredAccess,
92 &ServerObject);
93 if (NT_SUCCESS(Status))
94 *ServerHandle = (SAMPR_HANDLE)ServerObject;
95
96 TRACE("SamrConnect done (Status 0x%08lx)\n", Status);
97
98 return Status;
99 }
100
101 /* Function 1 */
102 NTSTATUS
103 NTAPI
104 SamrCloseHandle(IN OUT SAMPR_HANDLE *SamHandle)
105 {
106 PSAM_DB_OBJECT DbObject;
107 NTSTATUS Status = STATUS_SUCCESS;
108
109 TRACE("SamrCloseHandle(%p)\n", SamHandle);
110
111 Status = SampValidateDbObject(*SamHandle,
112 SamDbIgnoreObject,
113 0,
114 &DbObject);
115 if (Status == STATUS_SUCCESS)
116 {
117 Status = SampCloseDbObject(DbObject);
118 *SamHandle = NULL;
119 }
120
121 TRACE("SamrCloseHandle done (Status 0x%08lx)\n", Status);
122
123 return Status;
124 }
125
126 /* Function 2 */
127 NTSTATUS
128 NTAPI
129 SamrSetSecurityObject(IN SAMPR_HANDLE ObjectHandle,
130 IN SECURITY_INFORMATION SecurityInformation,
131 IN PSAMPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor)
132 {
133 UNIMPLEMENTED;
134 return STATUS_NOT_IMPLEMENTED;
135 }
136
137 /* Function 3 */
138 NTSTATUS
139 NTAPI
140 SamrQuerySecurityObject(IN SAMPR_HANDLE ObjectHandle,
141 IN SECURITY_INFORMATION SecurityInformation,
142 OUT PSAMPR_SR_SECURITY_DESCRIPTOR * SecurityDescriptor)
143 {
144 UNIMPLEMENTED;
145 return STATUS_NOT_IMPLEMENTED;
146 }
147
148 /* Function 4 */
149 NTSTATUS
150 NTAPI
151 SamrShutdownSamServer(IN SAMPR_HANDLE ServerHandle)
152 {
153 UNIMPLEMENTED;
154 return STATUS_NOT_IMPLEMENTED;
155 }
156
157 /* Function 5 */
158 NTSTATUS
159 NTAPI
160 SamrLookupDomainInSamServer(IN SAMPR_HANDLE ServerHandle,
161 IN PRPC_UNICODE_STRING Name,
162 OUT PRPC_SID *DomainId)
163 {
164 UNIMPLEMENTED;
165 return STATUS_NOT_IMPLEMENTED;
166 }
167
168 /* Function 6 */
169 NTSTATUS
170 NTAPI
171 SamrEnumerateDomainsInSamServer(IN SAMPR_HANDLE ServerHandle,
172 IN OUT unsigned long *EnumerationContext,
173 OUT PSAMPR_ENUMERATION_BUFFER *Buffer,
174 IN unsigned long PreferedMaximumLength,
175 OUT unsigned long *CountReturned)
176 {
177 UNIMPLEMENTED;
178 return STATUS_NOT_IMPLEMENTED;
179 }
180
181 /* Function 7 */
182 NTSTATUS
183 NTAPI
184 SamrOpenDomain(IN SAMPR_HANDLE ServerHandle,
185 IN ACCESS_MASK DesiredAccess,
186 IN PRPC_SID DomainId,
187 OUT SAMPR_HANDLE *DomainHandle)
188 {
189 PSAM_DB_OBJECT ServerObject;
190 PSAM_DB_OBJECT DomainObject;
191 NTSTATUS Status;
192
193 TRACE("SamrOpenDomain(%p %lx %p %p)\n",
194 ServerHandle, DesiredAccess, DomainId, DomainHandle);
195
196 /* Validate the server handle */
197 Status = SampValidateDbObject(ServerHandle,
198 SamDbServerObject,
199 SAM_SERVER_LOOKUP_DOMAIN,
200 &ServerObject);
201 if (!NT_SUCCESS(Status))
202 return Status;
203
204 /* Validate the Domain SID */
205 if ((DomainId->Revision != SID_REVISION) ||
206 (DomainId->SubAuthorityCount > SID_MAX_SUB_AUTHORITIES) ||
207 (memcmp(&DomainId->IdentifierAuthority, &NtSidAuthority, sizeof(SID_IDENTIFIER_AUTHORITY)) != 0))
208 return STATUS_INVALID_PARAMETER;
209
210 /* Open the domain object */
211 if ((DomainId->SubAuthorityCount == 1) &&
212 (DomainId->SubAuthority[0] == SECURITY_BUILTIN_DOMAIN_RID))
213 {
214 /* Builtin domain object */
215 TRACE("Opening the builtin domain object.\n");
216
217 Status = SampOpenDbObject(ServerObject,
218 L"Domains",
219 L"Builtin",
220 SamDbDomainObject,
221 DesiredAccess,
222 &DomainObject);
223 }
224 else if ((DomainId->SubAuthorityCount == 4) &&
225 (DomainId->SubAuthority[0] == SECURITY_NT_NON_UNIQUE))
226 {
227 /* Account domain object */
228 TRACE("Opening the account domain object.\n");
229
230 /* FIXME: Check the account domain sub authorities!!! */
231
232 Status = SampOpenDbObject(ServerObject,
233 L"Domains",
234 L"Account",
235 SamDbDomainObject,
236 DesiredAccess,
237 &DomainObject);
238 }
239 else
240 {
241 /* No vaild domain SID */
242 Status = STATUS_INVALID_PARAMETER;
243 }
244
245 if (NT_SUCCESS(Status))
246 *DomainHandle = (SAMPR_HANDLE)DomainObject;
247
248 TRACE("SamrOpenDomain done (Status 0x%08lx)\n", Status);
249
250 return Status;
251 }
252
253 /* Function 8 */
254 NTSTATUS
255 NTAPI
256 SamrQueryInformationDomain(IN SAMPR_HANDLE DomainHandle,
257 IN DOMAIN_INFORMATION_CLASS DomainInformationClass,
258 OUT PSAMPR_DOMAIN_INFO_BUFFER *Buffer)
259 {
260 UNIMPLEMENTED;
261 return STATUS_NOT_IMPLEMENTED;
262 }
263
264 /* Function 9 */
265 NTSTATUS
266 NTAPI
267 SamrSetInformationDomain(IN SAMPR_HANDLE DomainHandle,
268 IN DOMAIN_INFORMATION_CLASS DomainInformationClass,
269 IN PSAMPR_DOMAIN_INFO_BUFFER DomainInformation)
270 {
271 UNIMPLEMENTED;
272 return STATUS_NOT_IMPLEMENTED;
273 }
274
275 /* Function 10 */
276 NTSTATUS
277 NTAPI
278 SamrCreateGroupInDomain(IN SAMPR_HANDLE DomainHandle,
279 IN PRPC_UNICODE_STRING Name,
280 IN ACCESS_MASK DesiredAccess,
281 OUT SAMPR_HANDLE *GroupHandle,
282 OUT unsigned long *RelativeId)
283 {
284 UNIMPLEMENTED;
285 return STATUS_NOT_IMPLEMENTED;
286 }
287
288 /* Function 10 */
289 NTSTATUS
290 NTAPI
291 SamrEnumerateGroupsInDomain(IN SAMPR_HANDLE DomainHandle,
292 IN OUT unsigned long *EnumerationContext,
293 OUT PSAMPR_ENUMERATION_BUFFER *Buffer,
294 IN unsigned long PreferedMaximumLength,
295 OUT unsigned long *CountReturned)
296 {
297 UNIMPLEMENTED;
298 return STATUS_NOT_IMPLEMENTED;
299 }
300
301 /* Function 12 */
302 NTSTATUS
303 NTAPI
304 SamrCreateUserInDomain(IN SAMPR_HANDLE DomainHandle,
305 IN PRPC_UNICODE_STRING Name,
306 IN ACCESS_MASK DesiredAccess,
307 OUT SAMPR_HANDLE *UserHandle,
308 OUT unsigned long *RelativeId)
309 {
310 PSAM_DB_OBJECT DomainObject;
311 PSAM_DB_OBJECT UserObject;
312 ULONG ulSize;
313 ULONG ulRid;
314 WCHAR szRid[9];
315 BOOL bAliasExists = FALSE;
316 NTSTATUS Status;
317
318 TRACE("SamrCreateUserInDomain(%p %p %lx %p %p)\n",
319 DomainHandle, Name, DesiredAccess, UserHandle, RelativeId);
320
321 /* Validate the domain handle */
322 Status = SampValidateDbObject(DomainHandle,
323 SamDbDomainObject,
324 DOMAIN_CREATE_USER,
325 &DomainObject);
326 if (!NT_SUCCESS(Status))
327 {
328 TRACE("failed with status 0x%08lx\n", Status);
329 return Status;
330 }
331
332 /* Get the NextRID attribute */
333 ulSize = sizeof(ULONG);
334 Status = SampGetObjectAttribute(DomainObject,
335 L"NextRID",
336 NULL,
337 (LPVOID)&ulRid,
338 &ulSize);
339 if (!NT_SUCCESS(Status))
340 ulRid = DOMAIN_USER_RID_MAX;
341
342 TRACE("RID: %lx\n", ulRid);
343
344 /* Convert the RID into a string (hex) */
345 _ultow(ulRid, szRid, 16);
346
347 /* Check whether the user name is already in use */
348 Status = SampCheckDbObjectNameAlias(DomainObject,
349 L"Users",
350 Name->Buffer,
351 &bAliasExists);
352 if (!NT_SUCCESS(Status))
353 {
354 TRACE("failed with status 0x%08lx\n", Status);
355 return Status;
356 }
357
358 if (bAliasExists)
359 {
360 TRACE("The user account %S already exists!\n", Name->Buffer);
361 return STATUS_USER_EXISTS;
362 }
363
364 /* Create the user object */
365 Status = SampCreateDbObject(DomainObject,
366 L"Users",
367 szRid,
368 SamDbUserObject,
369 DesiredAccess,
370 &UserObject);
371 if (!NT_SUCCESS(Status))
372 {
373 TRACE("failed with status 0x%08lx\n", Status);
374 return Status;
375 }
376
377 /* Add the name alias for the user object */
378 Status = SampSetDbObjectNameAlias(DomainObject,
379 L"Users",
380 Name->Buffer,
381 ulRid);
382 if (!NT_SUCCESS(Status))
383 {
384 TRACE("failed with status 0x%08lx\n", Status);
385 return Status;
386 }
387
388 /* Set the account name attribute */
389 Status = SampSetObjectAttribute(UserObject,
390 L"AccountName",
391 REG_SZ,
392 (LPVOID)Name->Buffer,
393 Name->MaximumLength);
394 if (!NT_SUCCESS(Status))
395 {
396 TRACE("failed with status 0x%08lx\n", Status);
397 return Status;
398 }
399
400 /* FIXME: Set default user attributes */
401
402 if (NT_SUCCESS(Status))
403 {
404 *UserHandle = (SAMPR_HANDLE)UserObject;
405 *RelativeId = ulRid;
406 }
407
408 /* Increment the NextRID attribute */
409 ulRid++;
410 ulSize = sizeof(ULONG);
411 SampSetObjectAttribute(DomainObject,
412 L"NextRID",
413 REG_DWORD,
414 (LPVOID)&ulRid,
415 ulSize);
416
417 TRACE("returns with status 0x%08lx\n", Status);
418
419 return Status;
420 }
421
422 /* Function 13 */
423 NTSTATUS
424 NTAPI
425 SamrEnumerateUsersInDomain(IN SAMPR_HANDLE DomainHandle,
426 IN OUT unsigned long *EnumerationContext,
427 IN unsigned long UserAccountControl,
428 OUT PSAMPR_ENUMERATION_BUFFER *Buffer,
429 IN unsigned long PreferedMaximumLength,
430 OUT unsigned long *CountReturned)
431 {
432 UNIMPLEMENTED;
433 return STATUS_NOT_IMPLEMENTED;
434 }
435
436 /* Function 14 */
437 NTSTATUS
438 NTAPI
439 SamrCreateAliasInDomain(IN SAMPR_HANDLE DomainHandle,
440 IN PRPC_UNICODE_STRING AccountName,
441 IN ACCESS_MASK DesiredAccess,
442 OUT SAMPR_HANDLE *AliasHandle,
443 OUT unsigned long *RelativeId)
444 {
445 UNIMPLEMENTED;
446 return STATUS_NOT_IMPLEMENTED;
447 }
448
449 /* Function 15 */
450 NTSTATUS
451 NTAPI
452 SamrEnumerateAliasesInDomain(IN SAMPR_HANDLE DomainHandle,
453 IN OUT unsigned long *EnumerationContext,
454 OUT PSAMPR_ENUMERATION_BUFFER *Buffer,
455 IN unsigned long PreferedMaximumLength,
456 OUT unsigned long *CountReturned)
457 {
458 UNIMPLEMENTED;
459 return STATUS_NOT_IMPLEMENTED;
460 }
461
462 /* Function 16 */
463 NTSTATUS
464 NTAPI
465 SamrGetAliasMembership(IN SAMPR_HANDLE DomainHandle,
466 IN PSAMPR_PSID_ARRAY SidArray,
467 OUT PSAMPR_ULONG_ARRAY Membership)
468 {
469 UNIMPLEMENTED;
470 return STATUS_NOT_IMPLEMENTED;
471 }
472
473 /* Function 17 */
474 NTSTATUS
475 NTAPI
476 SamrLookupNamesInDomain(IN SAMPR_HANDLE DomainHandle,
477 IN unsigned long Count,
478 IN RPC_UNICODE_STRING Names[],
479 OUT PSAMPR_ULONG_ARRAY RelativeIds,
480 OUT PSAMPR_ULONG_ARRAY Use)
481 {
482 UNIMPLEMENTED;
483 return STATUS_NOT_IMPLEMENTED;
484 }
485
486 /* Function 18 */
487 NTSTATUS
488 NTAPI
489 SamrLookupIdsInDomain(IN SAMPR_HANDLE DomainHandle,
490 IN unsigned long Count,
491 IN unsigned long *RelativeIds,
492 OUT PSAMPR_RETURNED_USTRING_ARRAY Names,
493 OUT PSAMPR_ULONG_ARRAY Use)
494 {
495 UNIMPLEMENTED;
496 return STATUS_NOT_IMPLEMENTED;
497 }
498
499 /* Function 19 */
500 NTSTATUS
501 NTAPI
502 SamrOpenGroup(IN SAMPR_HANDLE DomainHandle,
503 IN ACCESS_MASK DesiredAccess,
504 IN unsigned long GroupId,
505 OUT SAMPR_HANDLE *GroupHandle)
506 {
507 UNIMPLEMENTED;
508 return STATUS_NOT_IMPLEMENTED;
509 }
510
511 /* Function 20 */
512 NTSTATUS
513 NTAPI
514 SamrQueryInformationGroup(IN SAMPR_HANDLE GroupHandle,
515 IN GROUP_INFORMATION_CLASS GroupInformationClass,
516 OUT PSAMPR_GROUP_INFO_BUFFER *Buffer)
517 {
518 UNIMPLEMENTED;
519 return STATUS_NOT_IMPLEMENTED;
520 }
521
522 /* Function 21 */
523 NTSTATUS
524 NTAPI
525 SamrSetInformationGroup(IN SAMPR_HANDLE GroupHandle,
526 IN GROUP_INFORMATION_CLASS GroupInformationClass,
527 IN PSAMPR_GROUP_INFO_BUFFER Buffer)
528 {
529 UNIMPLEMENTED;
530 return STATUS_NOT_IMPLEMENTED;
531 }
532
533 /* Function 22 */
534 NTSTATUS
535 NTAPI
536 SamrAddMemberToGroup(IN SAMPR_HANDLE GroupHandle,
537 IN unsigned long MemberId,
538 IN unsigned long Attributes)
539 {
540 UNIMPLEMENTED;
541 return STATUS_NOT_IMPLEMENTED;
542 }
543
544 /* Function 21 */
545 NTSTATUS
546 NTAPI
547 SamrDeleteGroup(IN OUT SAMPR_HANDLE *GroupHandle)
548 {
549 UNIMPLEMENTED;
550 return STATUS_NOT_IMPLEMENTED;
551 }
552
553 /* Function 24 */
554 NTSTATUS
555 NTAPI
556 SamrRemoveMemberFromGroup(IN SAMPR_HANDLE GroupHandle,
557 IN unsigned long MemberId)
558 {
559 UNIMPLEMENTED;
560 return STATUS_NOT_IMPLEMENTED;
561 }
562
563 /* Function 25 */
564 NTSTATUS
565 NTAPI
566 SamrGetMembersInGroup(IN SAMPR_HANDLE GroupHandle,
567 OUT PSAMPR_GET_MEMBERS_BUFFER *Members)
568 {
569 UNIMPLEMENTED;
570 return STATUS_NOT_IMPLEMENTED;
571 }
572
573 /* Function 26 */
574 NTSTATUS
575 NTAPI
576 SamrSetMemberAttributesOfGroup(IN SAMPR_HANDLE GroupHandle,
577 IN unsigned long MemberId,
578 IN unsigned long Attributes)
579 {
580 UNIMPLEMENTED;
581 return STATUS_NOT_IMPLEMENTED;
582 }
583
584 /* Function 27 */
585 NTSTATUS
586 NTAPI
587 SamrOpenAlias(IN SAMPR_HANDLE DomainHandle,
588 IN ACCESS_MASK DesiredAccess,
589 IN unsigned long AliasId,
590 OUT SAMPR_HANDLE *AliasHandle)
591 {
592 UNIMPLEMENTED;
593 return STATUS_NOT_IMPLEMENTED;
594 }
595
596 /* Function 28 */
597 NTSTATUS
598 NTAPI
599 SamrQueryInformationAlias(IN SAMPR_HANDLE AliasHandle,
600 IN ALIAS_INFORMATION_CLASS AliasInformationClass,
601 OUT PSAMPR_ALIAS_INFO_BUFFER *Buffer)
602 {
603 UNIMPLEMENTED;
604 return STATUS_NOT_IMPLEMENTED;
605 }
606
607 /* Function 29 */
608 NTSTATUS
609 NTAPI
610 SamrSetInformationAlias(IN SAMPR_HANDLE AliasHandle,
611 IN ALIAS_INFORMATION_CLASS AliasInformationClass,
612 IN PSAMPR_ALIAS_INFO_BUFFER Buffer)
613 {
614 UNIMPLEMENTED;
615 return STATUS_NOT_IMPLEMENTED;
616 }
617
618 /* Function 30 */
619 NTSTATUS
620 NTAPI
621 SamrDeleteAlias(IN OUT SAMPR_HANDLE *AliasHandle)
622 {
623 UNIMPLEMENTED;
624 return STATUS_NOT_IMPLEMENTED;
625 }
626
627 /* Function 31 */
628 NTSTATUS
629 NTAPI
630 SamrAddMemberToAlias(IN SAMPR_HANDLE AliasHandle,
631 IN PRPC_SID MemberId)
632 {
633 UNIMPLEMENTED;
634 return STATUS_NOT_IMPLEMENTED;
635 }
636
637 /* Function 32 */
638 NTSTATUS
639 NTAPI
640 SamrRemoveMemberFromAlias(IN SAMPR_HANDLE AliasHandle,
641 IN PRPC_SID MemberId)
642 {
643 UNIMPLEMENTED;
644 return STATUS_NOT_IMPLEMENTED;
645 }
646
647 /* Function 33 */
648 NTSTATUS
649 NTAPI
650 SamrGetMembersInAlias(IN SAMPR_HANDLE AliasHandle,
651 OUT PSAMPR_PSID_ARRAY_OUT Members)
652 {
653 UNIMPLEMENTED;
654 return STATUS_NOT_IMPLEMENTED;
655 }
656
657 /* Function 34 */
658 NTSTATUS
659 NTAPI
660 SamrOpenUser(IN SAMPR_HANDLE DomainHandle,
661 IN unsigned long DesiredAccess,
662 IN unsigned long UserId,
663 OUT SAMPR_HANDLE *UserHandle)
664 {
665 UNIMPLEMENTED;
666 return STATUS_NOT_IMPLEMENTED;
667 }
668
669 /* Function 35 */
670 NTSTATUS
671 NTAPI
672 SamrDeleteUser(IN OUT SAMPR_HANDLE *UserHandle)
673 {
674 UNIMPLEMENTED;
675 return STATUS_NOT_IMPLEMENTED;
676 }
677
678 /* Function 36 */
679 NTSTATUS
680 NTAPI
681 SamrQueryInformationUser(IN SAMPR_HANDLE UserHandle,
682 IN USER_INFORMATION_CLASS UserInformationClass,
683 OUT PSAMPR_USER_INFO_BUFFER *Buffer)
684 {
685 UNIMPLEMENTED;
686 return STATUS_NOT_IMPLEMENTED;
687 }
688
689 /* Function 37 */
690 NTSTATUS
691 NTAPI
692 SamrSetInformationUser(IN SAMPR_HANDLE UserHandle,
693 IN USER_INFORMATION_CLASS UserInformationClass,
694 IN PSAMPR_USER_INFO_BUFFER Buffer)
695 {
696 UNIMPLEMENTED;
697 return STATUS_NOT_IMPLEMENTED;
698 }
699
700 /* Function 38 */
701 NTSTATUS
702 NTAPI
703 SamrChangePasswordUser(IN SAMPR_HANDLE UserHandle,
704 IN unsigned char LmPresent,
705 IN PENCRYPTED_LM_OWF_PASSWORD OldLmEncryptedWithNewLm,
706 IN PENCRYPTED_LM_OWF_PASSWORD NewLmEncryptedWithOldLm,
707 IN unsigned char NtPresent,
708 IN PENCRYPTED_NT_OWF_PASSWORD OldNtEncryptedWithNewNt,
709 IN PENCRYPTED_NT_OWF_PASSWORD NewNtEncryptedWithOldNt,
710 IN unsigned char NtCrossEncryptionPresent,
711 IN PENCRYPTED_NT_OWF_PASSWORD NewNtEncryptedWithNewLm,
712 IN unsigned char LmCrossEncryptionPresent,
713 IN PENCRYPTED_LM_OWF_PASSWORD NewLmEncryptedWithNewNt)
714 {
715 UNIMPLEMENTED;
716 return STATUS_NOT_IMPLEMENTED;
717 }
718
719 /* Function 39 */
720 NTSTATUS
721 NTAPI
722 SamrGetGroupsForUser(IN SAMPR_HANDLE UserHandle,
723 OUT PSAMPR_GET_GROUPS_BUFFER *Groups)
724 {
725 UNIMPLEMENTED;
726 return STATUS_NOT_IMPLEMENTED;
727 }
728
729 /* Function 40 */
730 NTSTATUS
731 NTAPI
732 SamrQueryDisplayInformation(IN SAMPR_HANDLE DomainHandle,
733 IN DOMAIN_DISPLAY_INFORMATION DisplayInformationClass,
734 IN unsigned long Index,
735 IN unsigned long EntryCount,
736 IN unsigned long PreferredMaximumLength,
737 OUT unsigned long *TotalAvailable,
738 OUT unsigned long *TotalReturned,
739 OUT PSAMPR_DISPLAY_INFO_BUFFER Buffer)
740 {
741 UNIMPLEMENTED;
742 return STATUS_NOT_IMPLEMENTED;
743 }
744
745 /* Function 41 */
746 NTSTATUS
747 NTAPI
748 SamrGetDisplayEnumerationIndex(IN SAMPR_HANDLE DomainHandle,
749 IN DOMAIN_DISPLAY_INFORMATION DisplayInformationClass,
750 IN PRPC_UNICODE_STRING Prefix,
751 OUT unsigned long *Index)
752 {
753 UNIMPLEMENTED;
754 return STATUS_NOT_IMPLEMENTED;
755 }
756
757 /* Function 42 */
758 NTSTATUS
759 NTAPI
760 SamrTestPrivateFunctionsDomain(IN SAMPR_HANDLE DomainHandle)
761 {
762 UNIMPLEMENTED;
763 return STATUS_NOT_IMPLEMENTED;
764 }
765
766 /* Function 43 */
767 NTSTATUS
768 NTAPI
769 SamrTestPrivateFunctionsUser(IN SAMPR_HANDLE UserHandle)
770 {
771 UNIMPLEMENTED;
772 return STATUS_NOT_IMPLEMENTED;
773 }
774
775 /* Function 44 */
776 NTSTATUS
777 NTAPI
778 SamrGetUserDomainPasswordInformation(IN SAMPR_HANDLE UserHandle,
779 OUT PUSER_DOMAIN_PASSWORD_INFORMATION PasswordInformation)
780 {
781 UNIMPLEMENTED;
782 return STATUS_NOT_IMPLEMENTED;
783 }
784
785 /* Function 45 */
786 NTSTATUS
787 NTAPI
788 SamrRemoveMemberFromForeignDomain(IN SAMPR_HANDLE DomainHandle,
789 IN PRPC_SID MemberSid)
790 {
791 UNIMPLEMENTED;
792 return STATUS_NOT_IMPLEMENTED;
793 }
794
795 /* Function 46 */
796 NTSTATUS
797 NTAPI
798 SamrQueryInformationDomain2(IN SAMPR_HANDLE DomainHandle,
799 IN DOMAIN_INFORMATION_CLASS DomainInformationClass,
800 OUT PSAMPR_DOMAIN_INFO_BUFFER *Buffer)
801 {
802 UNIMPLEMENTED;
803 return STATUS_NOT_IMPLEMENTED;
804 }
805
806 /* Function 47 */
807 NTSTATUS
808 NTAPI
809 SamrQueryInformationUser2(IN SAMPR_HANDLE UserHandle,
810 IN USER_INFORMATION_CLASS UserInformationClass,
811 OUT PSAMPR_USER_INFO_BUFFER *Buffer)
812 {
813 UNIMPLEMENTED;
814 return STATUS_NOT_IMPLEMENTED;
815 }
816
817 /* Function 48 */
818 NTSTATUS
819 NTAPI
820 SamrQueryDisplayInformation2(IN SAMPR_HANDLE DomainHandle,
821 IN DOMAIN_DISPLAY_INFORMATION DisplayInformationClass,
822 IN unsigned long Index,
823 IN unsigned long EntryCount,
824 IN unsigned long PreferredMaximumLength,
825 OUT unsigned long *TotalAvailable,
826 OUT unsigned long *TotalReturned,
827 OUT PSAMPR_DISPLAY_INFO_BUFFER Buffer)
828 {
829 UNIMPLEMENTED;
830 return STATUS_NOT_IMPLEMENTED;
831 }
832
833 /* Function 49 */
834 NTSTATUS
835 NTAPI
836 SamrGetDisplayEnumerationIndex2(IN SAMPR_HANDLE DomainHandle,
837 IN DOMAIN_DISPLAY_INFORMATION DisplayInformationClass,
838 IN PRPC_UNICODE_STRING Prefix,
839 OUT unsigned long *Index)
840 {
841 UNIMPLEMENTED;
842 return STATUS_NOT_IMPLEMENTED;
843 }
844
845 /* Function 50 */
846 NTSTATUS
847 NTAPI
848 SamrCreateUser2InDomain(IN SAMPR_HANDLE DomainHandle,
849 IN PRPC_UNICODE_STRING Name,
850 IN unsigned long AccountType,
851 IN unsigned long DesiredAccess,
852 OUT SAMPR_HANDLE *UserHandle,
853 OUT unsigned long *GrantedAccess,
854 OUT unsigned long *RelativeId)
855 {
856 UNIMPLEMENTED;
857 return STATUS_NOT_IMPLEMENTED;
858 }
859
860 /* Function 51 */
861 NTSTATUS
862 NTAPI
863 SamrQueryDisplayInformation3(IN SAMPR_HANDLE DomainHandle,
864 IN DOMAIN_DISPLAY_INFORMATION DisplayInformationClass,
865 IN unsigned long Index,
866 IN unsigned long EntryCount,
867 IN unsigned long PreferredMaximumLength,
868 OUT unsigned long *TotalAvailable,
869 OUT unsigned long *TotalReturned,
870 OUT PSAMPR_DISPLAY_INFO_BUFFER Buffer)
871 {
872 UNIMPLEMENTED;
873 return STATUS_NOT_IMPLEMENTED;
874 }
875
876 /* Function 52 */
877 NTSTATUS
878 NTAPI
879 SamrAddMultipleMembersToAlias(IN SAMPR_HANDLE AliasHandle,
880 IN PSAMPR_PSID_ARRAY MembersBuffer)
881 {
882 UNIMPLEMENTED;
883 return STATUS_NOT_IMPLEMENTED;
884 }
885
886 /* Function 53 */
887 NTSTATUS
888 NTAPI
889 SamrRemoveMultipleMembersFromAlias(IN SAMPR_HANDLE AliasHandle,
890 IN PSAMPR_PSID_ARRAY MembersBuffer)
891 {
892 UNIMPLEMENTED;
893 return STATUS_NOT_IMPLEMENTED;
894 }
895
896 /* Function 54 */
897 NTSTATUS
898 NTAPI
899 SamrOemChangePasswordUser2(IN handle_t BindingHandle,
900 IN PRPC_STRING ServerName,
901 IN PRPC_STRING UserName,
902 IN PSAMPR_ENCRYPTED_USER_PASSWORD NewPasswordEncryptedWithOldLm,
903 IN PENCRYPTED_LM_OWF_PASSWORD OldLmOwfPasswordEncryptedWithNewLm)
904 {
905 UNIMPLEMENTED;
906 return STATUS_NOT_IMPLEMENTED;
907 }
908
909 /* Function 55 */
910 NTSTATUS
911 NTAPI
912 SamrUnicodeChangePasswordUser2(IN handle_t BindingHandle,
913 IN PRPC_UNICODE_STRING ServerName,
914 IN PRPC_UNICODE_STRING UserName,
915 IN PSAMPR_ENCRYPTED_USER_PASSWORD NewPasswordEncryptedWithOldNt,
916 IN PENCRYPTED_NT_OWF_PASSWORD OldNtOwfPasswordEncryptedWithNewNt,
917 IN unsigned char LmPresent,
918 IN PSAMPR_ENCRYPTED_USER_PASSWORD NewPasswordEncryptedWithOldLm,
919 IN PENCRYPTED_LM_OWF_PASSWORD OldLmOwfPasswordEncryptedWithNewNt)
920 {
921 UNIMPLEMENTED;
922 return STATUS_NOT_IMPLEMENTED;
923 }
924
925 /* Function 56 */
926 NTSTATUS
927 NTAPI
928 SamrGetDomainPasswordInformation(IN handle_t BindingHandle,
929 IN PRPC_UNICODE_STRING Unused,
930 OUT PUSER_DOMAIN_PASSWORD_INFORMATION PasswordInformation)
931 {
932 UNIMPLEMENTED;
933 return STATUS_NOT_IMPLEMENTED;
934 }
935
936 /* Function 57 */
937 NTSTATUS
938 NTAPI
939 SamrConnect2(IN PSAMPR_SERVER_NAME ServerName,
940 OUT SAMPR_HANDLE *ServerHandle,
941 IN ACCESS_MASK DesiredAccess)
942 {
943 UNIMPLEMENTED;
944 return STATUS_NOT_IMPLEMENTED;
945 }
946
947 /* Function 58 */
948 NTSTATUS
949 NTAPI
950 SamrSetInformationUser2(IN SAMPR_HANDLE UserHandle,
951 IN USER_INFORMATION_CLASS UserInformationClass,
952 IN PSAMPR_USER_INFO_BUFFER Buffer)
953 {
954 UNIMPLEMENTED;
955 return STATUS_NOT_IMPLEMENTED;
956 }
957
958 /* Function 59 */
959 NTSTATUS
960 NTAPI
961 SamrSetBootKeyInformation(IN handle_t BindingHandle) /* FIXME */
962 {
963 UNIMPLEMENTED;
964 return STATUS_NOT_IMPLEMENTED;
965 }
966
967 /* Function 60 */
968 NTSTATUS
969 NTAPI
970 SamrGetBootKeyInformation(IN handle_t BindingHandle) /* FIXME */
971 {
972 UNIMPLEMENTED;
973 return STATUS_NOT_IMPLEMENTED;
974 }
975
976 /* Function 61 */
977 NTSTATUS
978 NTAPI
979 SamrConnect3(IN handle_t BindingHandle) /* FIXME */
980 {
981 UNIMPLEMENTED;
982 return STATUS_NOT_IMPLEMENTED;
983 }
984
985 /* Function 62 */
986 NTSTATUS
987 NTAPI
988 SamrConnect4(IN PSAMPR_SERVER_NAME ServerName,
989 OUT SAMPR_HANDLE *ServerHandle,
990 IN unsigned long ClientRevision,
991 IN ACCESS_MASK DesiredAccess)
992 {
993 UNIMPLEMENTED;
994 return STATUS_NOT_IMPLEMENTED;
995 }
996
997 /* Function 63 */
998 NTSTATUS
999 NTAPI
1000 SamrUnicodeChangePasswordUser3(IN handle_t BindingHandle) /* FIXME */
1001 {
1002 UNIMPLEMENTED;
1003 return STATUS_NOT_IMPLEMENTED;
1004 }
1005
1006 /* Function 64 */
1007 NTSTATUS
1008 NTAPI
1009 SamrConnect5(IN PSAMPR_SERVER_NAME ServerName,
1010 IN ACCESS_MASK DesiredAccess,
1011 IN unsigned long InVersion,
1012 IN SAMPR_REVISION_INFO *InRevisionInfo,
1013 OUT unsigned long *OutVersion,
1014 OUT SAMPR_REVISION_INFO *OutRevisionInfo,
1015 OUT SAMPR_HANDLE *ServerHandle)
1016 {
1017 UNIMPLEMENTED;
1018 return STATUS_NOT_IMPLEMENTED;
1019 }
1020
1021 /* Function 65 */
1022 NTSTATUS
1023 NTAPI
1024 SamrRidToSid(IN SAMPR_HANDLE ObjectHandle,
1025 IN unsigned long Rid,
1026 OUT PRPC_SID *Sid)
1027 {
1028 UNIMPLEMENTED;
1029 return STATUS_NOT_IMPLEMENTED;
1030 }
1031
1032 /* Function 66 */
1033 NTSTATUS
1034 NTAPI
1035 SamrSetDSRMPassword(IN handle_t BindingHandle,
1036 IN PRPC_UNICODE_STRING Unused,
1037 IN unsigned long UserId,
1038 IN PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword)
1039 {
1040 UNIMPLEMENTED;
1041 return STATUS_NOT_IMPLEMENTED;
1042 }
1043
1044 /* Function 67 */
1045 NTSTATUS
1046 NTAPI
1047 SamrValidatePassword(IN handle_t Handle,
1048 IN PASSWORD_POLICY_VALIDATION_TYPE ValidationType,
1049 IN PSAM_VALIDATE_INPUT_ARG InputArg,
1050 OUT PSAM_VALIDATE_OUTPUT_ARG *OutputArg)
1051 {
1052 UNIMPLEMENTED;
1053 return STATUS_NOT_IMPLEMENTED;
1054 }
1055
1056 /* EOF */