2 * dlls/advapi32/security.c
3 * FIXME: for all functions thunking down to Rtl* functions: implement SetLastError()
12 #include "debugtools.h"
14 DEFAULT_DEBUG_CHANNEL(advapi);
16 #define CallWin32ToNt(func) \
19 if (ret !=STATUS_SUCCESS) \
20 { SetLastError (RtlNtStatusToDosError(ret)); return FALSE; } \
24 static void dumpLsaAttributes( PLSA_OBJECT_ATTRIBUTES oa )
28 TRACE("\n\tlength=%lu, rootdir=0x%08x, objectname=%s\n\tattr=0x%08lx, sid=%p qos=%p\n",
29 oa->Length, oa->RootDirectory,
30 oa->ObjectName?debugstr_w(oa->ObjectName->Buffer):"null",
31 oa->Attributes, oa->SecurityDescriptor, oa->SecurityQualityOfService);
35 /* ##############################
36 ###### TOKEN FUNCTIONS ######
37 ##############################
40 /******************************************************************************
41 * OpenProcessToken [ADVAPI32.@]
42 * Opens the access token associated with a process
45 * ProcessHandle [I] Handle to process
46 * DesiredAccess [I] Desired access to process
47 * TokenHandle [O] Pointer to handle of open access token
52 OpenProcessToken( HANDLE ProcessHandle, DWORD DesiredAccess,
55 CallWin32ToNt(NtOpenProcessToken( ProcessHandle, DesiredAccess, TokenHandle ));
58 /******************************************************************************
59 * OpenThreadToken [ADVAPI32.@]
68 OpenThreadToken( HANDLE ThreadHandle, DWORD DesiredAccess,
69 BOOL OpenAsSelf, HANDLE *TokenHandle)
71 CallWin32ToNt (NtOpenThreadToken(ThreadHandle, DesiredAccess, OpenAsSelf, TokenHandle));
74 /******************************************************************************
75 * AdjustTokenPrivileges [ADVAPI32.@]
79 * DisableAllPrivileges []
86 AdjustTokenPrivileges( HANDLE TokenHandle, BOOL DisableAllPrivileges,
87 LPVOID NewState, DWORD BufferLength,
88 LPVOID PreviousState, LPDWORD ReturnLength )
90 CallWin32ToNt(NtAdjustPrivilegesToken(TokenHandle, DisableAllPrivileges, NewState, BufferLength, PreviousState, ReturnLength));
93 /******************************************************************************
94 * CheckTokenMembership [ADVAPI32.@]
102 CheckTokenMembership( HANDLE TokenHandle, PSID SidToCheck,
105 FIXME("(0x%08x %p %p) stub!\n", TokenHandle, SidToCheck, IsMember);
111 /******************************************************************************
112 * GetTokenInformation [ADVAPI32.@]
123 GetTokenInformation( HANDLE token, TOKEN_INFORMATION_CLASS tokeninfoclass,
124 LPVOID tokeninfo, DWORD tokeninfolength, LPDWORD retlen )
126 CallWin32ToNt (NtQueryInformationToken( token, tokeninfoclass, tokeninfo, tokeninfolength, retlen));
129 /*************************************************************************
130 * SetThreadToken [ADVAPI32.@]
132 * Assigns an "impersonation token" to a thread so it can assume the
133 * security privledges of another thread or process. Can also remove
134 * a previously assigned token. Only supported on NT - it's a stub
135 * exactly like this one on Win9X.
139 BOOL WINAPI SetThreadToken(PHANDLE thread, HANDLE token)
141 FIXME("(%p, %x): stub (NT impl. only)\n", thread, token);
143 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
148 /* ##############################
149 ###### SID FUNCTIONS ######
150 ##############################
153 /******************************************************************************
154 * AllocateAndInitializeSid [ADVAPI32.@]
157 * pIdentifierAuthority []
158 * nSubAuthorityCount []
170 AllocateAndInitializeSid( PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
171 BYTE nSubAuthorityCount,
172 DWORD nSubAuthority0, DWORD nSubAuthority1,
173 DWORD nSubAuthority2, DWORD nSubAuthority3,
174 DWORD nSubAuthority4, DWORD nSubAuthority5,
175 DWORD nSubAuthority6, DWORD nSubAuthority7,
178 CallWin32ToNt (RtlAllocateAndInitializeSid(
179 pIdentifierAuthority, nSubAuthorityCount,
180 nSubAuthority0, nSubAuthority1, nSubAuthority2, nSubAuthority3,
181 nSubAuthority4, nSubAuthority5, nSubAuthority6, nSubAuthority7,
185 /******************************************************************************
186 * FreeSid [ADVAPI32.@]
195 return NULL; /* is documented like this */
198 /******************************************************************************
199 * CopySid [ADVAPI32.@]
202 * nDestinationSidLength []
207 CopySid( DWORD nDestinationSidLength, PSID pDestinationSid, PSID pSourceSid )
209 return RtlCopySid(nDestinationSidLength, pDestinationSid, pSourceSid);
212 /******************************************************************************
213 * IsValidSid [ADVAPI32.@]
219 IsValidSid( PSID pSid )
221 return RtlValidSid( pSid );
224 /******************************************************************************
225 * EqualSid [ADVAPI32.@]
232 EqualSid( PSID pSid1, PSID pSid2 )
234 return RtlEqualSid( pSid1, pSid2 );
237 /******************************************************************************
238 * EqualPrefixSid [ADVAPI32.@]
240 BOOL WINAPI EqualPrefixSid (PSID pSid1, PSID pSid2)
242 return RtlEqualPrefixSid(pSid1, pSid2);
245 /******************************************************************************
246 * GetSidLengthRequired [ADVAPI32.@]
249 * nSubAuthorityCount []
252 GetSidLengthRequired( BYTE nSubAuthorityCount )
254 return RtlLengthRequiredSid(nSubAuthorityCount);
257 /******************************************************************************
258 * InitializeSid [ADVAPI32.@]
261 * pIdentifierAuthority []
266 PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
267 BYTE nSubAuthorityCount)
269 return RtlInitializeSid(pSid, pIdentifierAuthority, nSubAuthorityCount);
272 /******************************************************************************
273 * GetSidIdentifierAuthority [ADVAPI32.@]
278 PSID_IDENTIFIER_AUTHORITY WINAPI
279 GetSidIdentifierAuthority( PSID pSid )
281 return RtlIdentifierAuthoritySid(pSid);
284 /******************************************************************************
285 * GetSidSubAuthority [ADVAPI32.@]
292 GetSidSubAuthority( PSID pSid, DWORD nSubAuthority )
294 return RtlSubAuthoritySid(pSid, nSubAuthority);
297 /******************************************************************************
298 * GetSidSubAuthorityCount [ADVAPI32.@]
304 GetSidSubAuthorityCount (PSID pSid)
306 return RtlSubAuthorityCountSid(pSid);
309 /******************************************************************************
310 * GetLengthSid [ADVAPI32.@]
316 GetLengthSid (PSID pSid)
318 return RtlLengthSid(pSid);
321 /* ##############################################
322 ###### SECURITY DESCRIPTOR FUNCTIONS ######
323 ##############################################
326 /******************************************************************************
327 * InitializeSecurityDescriptor [ADVAPI32.@]
334 InitializeSecurityDescriptor( SECURITY_DESCRIPTOR *pDescr, DWORD revision )
336 CallWin32ToNt (RtlCreateSecurityDescriptor(pDescr, revision ));
339 /******************************************************************************
340 * GetSecurityDescriptorLength [ADVAPI32.@]
342 DWORD WINAPI GetSecurityDescriptorLength( SECURITY_DESCRIPTOR *pDescr)
344 return (RtlLengthSecurityDescriptor(pDescr));
347 /******************************************************************************
348 * GetSecurityDescriptorOwner [ADVAPI32.@]
352 * lpbOwnerDefaulted []
355 GetSecurityDescriptorOwner( SECURITY_DESCRIPTOR *pDescr, PSID *pOwner,
356 LPBOOL lpbOwnerDefaulted )
358 CallWin32ToNt (RtlGetOwnerSecurityDescriptor( pDescr, pOwner, (PBOOLEAN)lpbOwnerDefaulted ));
361 /******************************************************************************
362 * SetSecurityDescriptorOwner [ADVAPI32.@]
366 BOOL WINAPI SetSecurityDescriptorOwner( PSECURITY_DESCRIPTOR pSecurityDescriptor,
367 PSID pOwner, BOOL bOwnerDefaulted)
369 CallWin32ToNt (RtlSetOwnerSecurityDescriptor(pSecurityDescriptor, pOwner, bOwnerDefaulted));
371 /******************************************************************************
372 * GetSecurityDescriptorGroup [ADVAPI32.@]
374 BOOL WINAPI GetSecurityDescriptorGroup(
375 PSECURITY_DESCRIPTOR SecurityDescriptor,
377 LPBOOL GroupDefaulted)
379 CallWin32ToNt (RtlGetGroupSecurityDescriptor(SecurityDescriptor, Group, (PBOOLEAN)GroupDefaulted));
381 /******************************************************************************
382 * SetSecurityDescriptorGroup [ADVAPI32.@]
384 BOOL WINAPI SetSecurityDescriptorGroup ( PSECURITY_DESCRIPTOR SecurityDescriptor,
385 PSID Group, BOOL GroupDefaulted)
387 CallWin32ToNt (RtlSetGroupSecurityDescriptor( SecurityDescriptor, Group, GroupDefaulted));
390 /******************************************************************************
391 * IsValidSecurityDescriptor [ADVAPI32.@]
397 IsValidSecurityDescriptor( PSECURITY_DESCRIPTOR SecurityDescriptor )
399 CallWin32ToNt (RtlValidSecurityDescriptor(SecurityDescriptor));
402 /******************************************************************************
403 * GetSecurityDescriptorDacl [ADVAPI32.@]
405 BOOL WINAPI GetSecurityDescriptorDacl(
406 IN PSECURITY_DESCRIPTOR pSecurityDescriptor,
407 OUT LPBOOL lpbDaclPresent,
409 OUT LPBOOL lpbDaclDefaulted)
411 CallWin32ToNt (RtlGetDaclSecurityDescriptor(pSecurityDescriptor, (PBOOLEAN)lpbDaclPresent,
412 pDacl, (PBOOLEAN)lpbDaclDefaulted));
415 /******************************************************************************
416 * SetSecurityDescriptorDacl [ADVAPI32.@]
419 SetSecurityDescriptorDacl (
420 PSECURITY_DESCRIPTOR lpsd,
425 CallWin32ToNt (RtlSetDaclSecurityDescriptor (lpsd, daclpresent, dacl, dacldefaulted ));
427 /******************************************************************************
428 * GetSecurityDescriptorSacl [ADVAPI32.@]
430 BOOL WINAPI GetSecurityDescriptorSacl(
431 IN PSECURITY_DESCRIPTOR lpsd,
432 OUT LPBOOL lpbSaclPresent,
434 OUT LPBOOL lpbSaclDefaulted)
436 CallWin32ToNt (RtlGetSaclSecurityDescriptor(lpsd,
437 (PBOOLEAN)lpbSaclPresent, pSacl, (PBOOLEAN)lpbSaclDefaulted));
440 /**************************************************************************
441 * SetSecurityDescriptorSacl [ADVAPI32.@]
443 BOOL WINAPI SetSecurityDescriptorSacl (
444 PSECURITY_DESCRIPTOR lpsd,
449 CallWin32ToNt (RtlSetSaclSecurityDescriptor(lpsd, saclpresent, lpsacl, sacldefaulted));
451 /******************************************************************************
452 * MakeSelfRelativeSD [ADVAPI32.@]
461 IN PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor,
462 IN PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
463 IN OUT LPDWORD lpdwBufferLength)
465 CallWin32ToNt (RtlMakeSelfRelativeSD(pAbsoluteSecurityDescriptor,pSelfRelativeSecurityDescriptor, lpdwBufferLength));
468 /******************************************************************************
469 * GetSecurityDescriptorControl [ADVAPI32.@]
472 BOOL WINAPI GetSecurityDescriptorControl ( PSECURITY_DESCRIPTOR pSecurityDescriptor,
473 PSECURITY_DESCRIPTOR_CONTROL pControl, LPDWORD lpdwRevision)
475 CallWin32ToNt (RtlGetControlSecurityDescriptor(pSecurityDescriptor,pControl,lpdwRevision));
478 /* ##############################
479 ###### ACL FUNCTIONS ######
480 ##############################
483 /*************************************************************************
484 * InitializeAcl [ADVAPI32.@]
486 DWORD WINAPI InitializeAcl(PACL acl, DWORD size, DWORD rev)
488 CallWin32ToNt (RtlCreateAcl(acl, size, rev));
491 /* ##############################
492 ###### MISC FUNCTIONS ######
493 ##############################
496 /******************************************************************************
497 * LookupPrivilegeValueW [ADVAPI32.@]
498 * Retrieves LUID used on a system to represent the privilege name.
501 * lpLuid should be PLUID
504 * lpSystemName [I] Address of string specifying the system
505 * lpName [I] Address of string specifying the privilege
506 * lpLuid [I] Address of locally unique identifier
511 LookupPrivilegeValueW( LPCWSTR lpSystemName, LPCWSTR lpName, LPVOID lpLuid )
513 FIXME("(%s,%s,%p): stub\n",debugstr_w(lpSystemName),
514 debugstr_w(lpName), lpLuid);
518 /******************************************************************************
519 * LookupPrivilegeValueA [ADVAPI32.@]
522 LookupPrivilegeValueA( LPCSTR lpSystemName, LPCSTR lpName, LPVOID lpLuid )
524 LPWSTR lpSystemNameW = HEAP_strdupAtoW(GetProcessHeap(), 0, lpSystemName);
525 LPWSTR lpNameW = HEAP_strdupAtoW(GetProcessHeap(), 0, lpName);
528 ret = LookupPrivilegeValueW( lpSystemNameW, lpNameW, lpLuid);
529 HeapFree(GetProcessHeap(), 0, lpNameW);
530 HeapFree(GetProcessHeap(), 0, lpSystemNameW);
534 /******************************************************************************
535 * GetFileSecurityA [ADVAPI32.@]
537 * Obtains Specified information about the security of a file or directory
538 * The information obtained is constrained by the callers access rights and
542 GetFileSecurityA( LPCSTR lpFileName,
543 SECURITY_INFORMATION RequestedInformation,
544 PSECURITY_DESCRIPTOR pSecurityDescriptor,
545 DWORD nLength, LPDWORD lpnLengthNeeded )
547 FIXME("(%s) : stub\n", debugstr_a(lpFileName));
551 /******************************************************************************
552 * GetFileSecurityW [ADVAPI32.@]
554 * Obtains Specified information about the security of a file or directory
555 * The information obtained is constrained by the callers access rights and
560 * RequestedInformation []
561 * pSecurityDescriptor []
566 GetFileSecurityW( LPCWSTR lpFileName,
567 SECURITY_INFORMATION RequestedInformation,
568 PSECURITY_DESCRIPTOR pSecurityDescriptor,
569 DWORD nLength, LPDWORD lpnLengthNeeded )
571 FIXME("(%s) : stub\n", debugstr_w(lpFileName) );
576 /******************************************************************************
577 * LookupAccountSidA [ADVAPI32.@]
584 IN OUT LPDWORD accountSize,
586 IN OUT LPDWORD domainSize,
587 OUT PSID_NAME_USE name_use )
589 static const char ac[] = "Administrator";
590 static const char dm[] = "DOMAIN";
591 FIXME("(%s,sid=%p,%p,%p(%lu),%p,%p(%lu),%p): semi-stub\n",
592 debugstr_a(system),sid,
593 account,accountSize,accountSize?*accountSize:0,
594 domain,domainSize,domainSize?*domainSize:0,
597 if (accountSize) *accountSize = strlen(ac)+1;
598 if (account && (*accountSize > strlen(ac)))
601 if (domainSize) *domainSize = strlen(dm)+1;
602 if (domain && (*domainSize > strlen(dm)))
605 if (name_use) *name_use = SidTypeUser;
609 /******************************************************************************
610 * LookupAccountSidW [ADVAPI32.@]
626 IN OUT LPDWORD accountSize,
628 IN OUT LPDWORD domainSize,
629 OUT PSID_NAME_USE name_use )
631 static const WCHAR ac[] = {'A','d','m','i','n','i','s','t','r','a','t','o','r',0};
632 static const WCHAR dm[] = {'D','O','M','A','I','N',0};
633 FIXME("(%s,sid=%p,%p,%p(%lu),%p,%p(%lu),%p): semi-stub\n",
634 debugstr_w(system),sid,
635 account,accountSize,accountSize?*accountSize:0,
636 domain,domainSize,domainSize?*domainSize:0,
639 if (accountSize) *accountSize = strlenW(ac)+1;
640 if (account && (*accountSize > strlenW(ac)))
641 strcpyW(account, ac);
643 if (domainSize) *domainSize = strlenW(dm)+1;
644 if (domain && (*domainSize > strlenW(dm)))
647 if (name_use) *name_use = SidTypeUser;
651 /******************************************************************************
652 * SetFileSecurityA [ADVAPI32.@]
653 * Sets the security of a file or directory
655 BOOL WINAPI SetFileSecurityA( LPCSTR lpFileName,
656 SECURITY_INFORMATION RequestedInformation,
657 PSECURITY_DESCRIPTOR pSecurityDescriptor)
659 FIXME("(%s) : stub\n", debugstr_a(lpFileName));
663 /******************************************************************************
664 * SetFileSecurityW [ADVAPI32.@]
665 * Sets the security of a file or directory
669 * RequestedInformation []
670 * pSecurityDescriptor []
673 SetFileSecurityW( LPCWSTR lpFileName,
674 SECURITY_INFORMATION RequestedInformation,
675 PSECURITY_DESCRIPTOR pSecurityDescriptor )
677 FIXME("(%s) : stub\n", debugstr_w(lpFileName) );
681 /******************************************************************************
682 * QueryWindows31FilesMigration [ADVAPI32.@]
688 QueryWindows31FilesMigration( DWORD x1 )
690 FIXME("(%ld):stub\n",x1);
694 /******************************************************************************
695 * SynchronizeWindows31FilesAndWindowsNTRegistry [ADVAPI32.@]
704 SynchronizeWindows31FilesAndWindowsNTRegistry( DWORD x1, DWORD x2, DWORD x3,
707 FIXME("(0x%08lx,0x%08lx,0x%08lx,0x%08lx):stub\n",x1,x2,x3,x4);
711 /******************************************************************************
712 * LsaOpenPolicy [ADVAPI32.@]
722 IN PLSA_UNICODE_STRING SystemName,
723 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes,
724 IN ACCESS_MASK DesiredAccess,
725 IN OUT PLSA_HANDLE PolicyHandle)
727 FIXME("(%s,%p,0x%08lx,%p):stub\n",
728 SystemName?debugstr_w(SystemName->Buffer):"null",
729 ObjectAttributes, DesiredAccess, PolicyHandle);
730 dumpLsaAttributes(ObjectAttributes);
731 if(PolicyHandle) *PolicyHandle = (LSA_HANDLE)0xcafe;
735 /******************************************************************************
736 * LsaQueryInformationPolicy [ADVAPI32.@]
739 LsaQueryInformationPolicy(
740 IN LSA_HANDLE PolicyHandle,
741 IN POLICY_INFORMATION_CLASS InformationClass,
744 FIXME("(%p,0x%08x,%p):stub\n",
745 PolicyHandle, InformationClass, Buffer);
747 if(!Buffer) return FALSE;
748 switch (InformationClass)
750 case PolicyAuditEventsInformation: /* 2 */
752 PPOLICY_AUDIT_EVENTS_INFO p = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(POLICY_AUDIT_EVENTS_INFO));
753 p->AuditingMode = FALSE; /* no auditing */
757 case PolicyPrimaryDomainInformation: /* 3 */
758 case PolicyAccountDomainInformation: /* 5 */
761 { POLICY_PRIMARY_DOMAIN_INFO ppdi;
764 SID_IDENTIFIER_AUTHORITY localSidAuthority = {SECURITY_NT_AUTHORITY};
766 struct di * xdi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(xdi));
767 RtlInitUnicodeString(&(xdi->ppdi.Name), HEAP_strdupAtoW(GetProcessHeap(),0,"DOMAIN"));
768 xdi->ppdi.Sid = &(xdi->sid);
769 xdi->sid.Revision = SID_REVISION;
770 xdi->sid.SubAuthorityCount = 1;
771 xdi->sid.IdentifierAuthority = localSidAuthority;
772 xdi->sid.SubAuthority[0] = SECURITY_LOCAL_SYSTEM_RID;
776 case PolicyAuditLogInformation:
777 case PolicyPdAccountInformation:
778 case PolicyLsaServerRoleInformation:
779 case PolicyReplicaSourceInformation:
780 case PolicyDefaultQuotaInformation:
781 case PolicyModificationInformation:
782 case PolicyAuditFullSetInformation:
783 case PolicyAuditFullQueryInformation:
784 case PolicyDnsDomainInformation:
786 FIXME("category not implemented\n");
793 /******************************************************************************
794 * LsaLookupSids [ADVAPI32.@]
799 LSA_UNICODE_STRING Name;
801 } LSA_TRANSLATED_NAME, *PLSA_TRANSLATED_NAME;
805 LSA_UNICODE_STRING Name;
807 } LSA_TRUST_INFORMATION, *PLSA_TRUST_INFORMATION;
812 PLSA_TRUST_INFORMATION Domains;
813 } LSA_REFERENCED_DOMAIN_LIST, *PLSA_REFERENCED_DOMAIN_LIST;
817 IN LSA_HANDLE PolicyHandle,
820 OUT PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,
821 OUT PLSA_TRANSLATED_NAME *Names )
823 FIXME("%p %lu %p %p %p\n",
824 PolicyHandle, Count, Sids, ReferencedDomains, Names);
828 /******************************************************************************
829 * LsaFreeMemory [ADVAPI32.@]
832 LsaFreeMemory(IN PVOID Buffer)
834 TRACE("(%p)\n",Buffer);
835 return HeapFree(GetProcessHeap(), 0, Buffer);
837 /******************************************************************************
838 * LsaClose [ADVAPI32.@]
841 LsaClose(IN LSA_HANDLE ObjectHandle)
843 FIXME("(%p):stub\n",ObjectHandle);
846 /******************************************************************************
847 * NotifyBootConfigStatus [ADVAPI32.@]
853 NotifyBootConfigStatus( DWORD x1 )
855 FIXME("(0x%08lx):stub\n",x1);
859 /******************************************************************************
860 * RevertToSelf [ADVAPI32.@]
872 /******************************************************************************
873 * ImpersonateSelf [ADVAPI32.@]
876 ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
878 return RtlImpersonateSelf(ImpersonationLevel);
881 /******************************************************************************
882 * AccessCheck [ADVAPI32.@]
884 * FIXME check cast LPBOOL to PBOOLEAN
888 PSECURITY_DESCRIPTOR SecurityDescriptor,
891 PGENERIC_MAPPING GenericMapping,
892 PPRIVILEGE_SET PrivilegeSet,
893 LPDWORD PrivilegeSetLength,
894 LPDWORD GrantedAccess,
897 CallWin32ToNt (NtAccessCheck(SecurityDescriptor, ClientToken, DesiredAccess,
898 GenericMapping, PrivilegeSet, PrivilegeSetLength, GrantedAccess, (PBOOLEAN)AccessStatus));
901 /*************************************************************************
902 * SetKernelObjectSecurity [ADVAPI32.@]
904 BOOL WINAPI SetKernelObjectSecurity (
906 IN SECURITY_INFORMATION SecurityInformation,
907 IN PSECURITY_DESCRIPTOR SecurityDescriptor )
909 CallWin32ToNt (NtSetSecurityObject (Handle, SecurityInformation, SecurityDescriptor));
912 /******************************************************************************
913 * AddAccessAllowedAce [ADVAPI32.@]
915 BOOL WINAPI AddAccessAllowedAce(
917 IN DWORD dwAceRevision,
921 return RtlAddAccessAllowedAce(pAcl, dwAceRevision, AccessMask, pSid);
924 /******************************************************************************
925 * LookupAccountNameA [ADVAPI32.@]
933 LPSTR ReferencedDomainName,
934 IN OUT LPDWORD cbReferencedDomainName,
935 OUT PSID_NAME_USE name_use )
937 FIXME("(%s,%s,%p,%p,%p,%p,%p), stub.\n",system,account,sid,cbSid,ReferencedDomainName,cbReferencedDomainName,name_use);
941 /******************************************************************************
942 * GetAce [ADVAPI32.@]
944 BOOL WINAPI GetAce(PACL pAcl,DWORD dwAceIndex,LPVOID *pAce )
946 CallWin32ToNt(RtlGetAce(pAcl, dwAceIndex, pAce));