2 * Copyright 1999, 2000 Juergen Schmied <juergen.schmied@debitel.net>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 * FIXME: for all functions thunking down to Rtl* functions: implement SetLastError()
30 #include "wine/debug.h"
31 #include "wine/unicode.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(advapi);
35 #define CallWin32ToNt(func) \
38 if (ret !=STATUS_SUCCESS) \
39 { SetLastError (RtlNtStatusToDosError(ret)); return FALSE; } \
43 static void dumpLsaAttributes( PLSA_OBJECT_ATTRIBUTES oa )
47 TRACE("\n\tlength=%lu, rootdir=%p, objectname=%s\n\tattr=0x%08lx, sid=%p qos=%p\n",
48 oa->Length, oa->RootDirectory,
49 oa->ObjectName?debugstr_w(oa->ObjectName->Buffer):"null",
50 oa->Attributes, oa->SecurityDescriptor, oa->SecurityQualityOfService);
54 /************************************************************
55 * ADVAPI_IsLocalComputer
57 * Checks whether the server name indicates local machine.
59 BOOL ADVAPI_IsLocalComputer(LPCWSTR ServerName)
67 DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
71 buf = HeapAlloc(GetProcessHeap(), 0, dwSize * sizeof(WCHAR));
72 Result = GetComputerNameW(buf, &dwSize);
73 if (Result && (ServerName[0] == '\\') && (ServerName[1] == '\\'))
75 Result = Result && !lstrcmpW(ServerName, buf);
76 HeapFree(GetProcessHeap(), 0, buf);
82 #define ADVAPI_ForceLocalComputer(ServerName, FailureCode) \
83 if (!ADVAPI_IsLocalComputer(ServerName)) \
85 FIXME("Action Implemented for local computer only. " \
86 "Requested for server %s\n", debugstr_w(ServerName)); \
90 /* ##############################
91 ###### TOKEN FUNCTIONS ######
92 ##############################
95 /******************************************************************************
96 * OpenProcessToken [ADVAPI32.@]
97 * Opens the access token associated with a process handle.
100 * ProcessHandle [I] Handle to process
101 * DesiredAccess [I] Desired access to process
102 * TokenHandle [O] Pointer to handle of open access token
105 * Success: TRUE. TokenHandle contains the access token.
109 * See NtOpenProcessToken.
112 OpenProcessToken( HANDLE ProcessHandle, DWORD DesiredAccess,
113 HANDLE *TokenHandle )
115 CallWin32ToNt(NtOpenProcessToken( ProcessHandle, DesiredAccess, TokenHandle ));
118 /******************************************************************************
119 * OpenThreadToken [ADVAPI32.@]
121 * Opens the access token associated with a thread handle.
124 * ThreadHandle [I] Handle to process
125 * DesiredAccess [I] Desired access to the thread
127 * TokenHandle [O] Destination for the token handle
130 * Success: TRUE. TokenHandle contains the access token.
134 * See NtOpenThreadToken.
137 OpenThreadToken( HANDLE ThreadHandle, DWORD DesiredAccess,
138 BOOL OpenAsSelf, HANDLE *TokenHandle)
140 CallWin32ToNt (NtOpenThreadToken(ThreadHandle, DesiredAccess, OpenAsSelf, TokenHandle));
143 /******************************************************************************
144 * AdjustTokenPrivileges [ADVAPI32.@]
146 * Adjust the privileges of an open token handle.
149 * TokenHandle [I] Handle from OpenProcessToken() or OpenThreadToken()
150 * DisableAllPrivileges [I] TRUE=Remove all privileges, FALSE=Use NewState
151 * NewState [I] Desired new privileges of the token
152 * BufferLength [I] Length of NewState
153 * PreviousState [O] Destination for the previous state
154 * ReturnLength [I/O] Size of PreviousState
158 * Success: TRUE. Privileges are set to NewState and PreviousState is updated.
162 * See NtAdjustPrivilegesToken.
165 AdjustTokenPrivileges( HANDLE TokenHandle, BOOL DisableAllPrivileges,
166 LPVOID NewState, DWORD BufferLength,
167 LPVOID PreviousState, LPDWORD ReturnLength )
169 CallWin32ToNt(NtAdjustPrivilegesToken(TokenHandle, DisableAllPrivileges, NewState, BufferLength, PreviousState, ReturnLength));
172 /******************************************************************************
173 * CheckTokenMembership [ADVAPI32.@]
175 * Determine if an access token is a member of a SID.
178 * TokenHandle [I] Handle from OpenProcessToken() or OpenThreadToken()
179 * SidToCheck [I] SID that possibly contains the token
180 * IsMember [O] Destination for result.
183 * Success: TRUE. IsMember is TRUE if TokenHandle is a member, FALSE otherwise.
187 CheckTokenMembership( HANDLE TokenHandle, PSID SidToCheck,
190 FIXME("(%p %p %p) stub!\n", TokenHandle, SidToCheck, IsMember);
196 /******************************************************************************
197 * GetTokenInformation [ADVAPI32.@]
200 * token [I] Handle from OpenProcessToken() or OpenThreadToken()
201 * tokeninfoclass [I] A TOKEN_INFORMATION_CLASS from "winnt.h"
202 * tokeninfo [O] Destination for token information
203 * tokeninfolength [I] Length of tokeninfo
204 * retlen [O] Destination for returned token information length
207 * Success: TRUE. tokeninfo contains retlen bytes of token information
211 * See NtQueryInformationToken.
214 GetTokenInformation( HANDLE token, TOKEN_INFORMATION_CLASS tokeninfoclass,
215 LPVOID tokeninfo, DWORD tokeninfolength, LPDWORD retlen )
217 TRACE("(%p, %s, %p, %ld, %p): \n",
219 (tokeninfoclass == TokenUser) ? "TokenUser" :
220 (tokeninfoclass == TokenGroups) ? "TokenGroups" :
221 (tokeninfoclass == TokenPrivileges) ? "TokenPrivileges" :
222 (tokeninfoclass == TokenOwner) ? "TokenOwner" :
223 (tokeninfoclass == TokenPrimaryGroup) ? "TokenPrimaryGroup" :
224 (tokeninfoclass == TokenDefaultDacl) ? "TokenDefaultDacl" :
225 (tokeninfoclass == TokenSource) ? "TokenSource" :
226 (tokeninfoclass == TokenType) ? "TokenType" :
227 (tokeninfoclass == TokenImpersonationLevel) ? "TokenImpersonationLevel" :
228 (tokeninfoclass == TokenStatistics) ? "TokenStatistics" :
229 (tokeninfoclass == TokenRestrictedSids) ? "TokenRestrictedSids" :
230 (tokeninfoclass == TokenSessionId) ? "TokenSessionId" :
231 (tokeninfoclass == TokenGroupsAndPrivileges) ? "TokenGroupsAndPrivileges" :
232 (tokeninfoclass == TokenSessionReference) ? "TokenSessionReference" :
233 (tokeninfoclass == TokenSandBoxInert) ? "TokenSandBoxInert" :
235 tokeninfo, tokeninfolength, retlen);
236 CallWin32ToNt (NtQueryInformationToken( token, tokeninfoclass, tokeninfo, tokeninfolength, retlen));
239 /******************************************************************************
240 * SetTokenInformation [ADVAPI32.@]
242 * Set information for an access token.
245 * token [I] Handle from OpenProcessToken() or OpenThreadToken()
246 * tokeninfoclass [I] A TOKEN_INFORMATION_CLASS from "winnt.h"
247 * tokeninfo [I] Token information to set
248 * tokeninfolength [I] Length of tokeninfo
251 * Success: TRUE. The information for the token is set to tokeninfo.
255 SetTokenInformation( HANDLE token, TOKEN_INFORMATION_CLASS tokeninfoclass,
256 LPVOID tokeninfo, DWORD tokeninfolength )
258 FIXME("(%p, %s, %p, %ld): stub\n",
260 (tokeninfoclass == TokenUser) ? "TokenUser" :
261 (tokeninfoclass == TokenGroups) ? "TokenGroups" :
262 (tokeninfoclass == TokenPrivileges) ? "TokenPrivileges" :
263 (tokeninfoclass == TokenOwner) ? "TokenOwner" :
264 (tokeninfoclass == TokenPrimaryGroup) ? "TokenPrimaryGroup" :
265 (tokeninfoclass == TokenDefaultDacl) ? "TokenDefaultDacl" :
266 (tokeninfoclass == TokenSource) ? "TokenSource" :
267 (tokeninfoclass == TokenType) ? "TokenType" :
268 (tokeninfoclass == TokenImpersonationLevel) ? "TokenImpersonationLevel" :
269 (tokeninfoclass == TokenStatistics) ? "TokenStatistics" :
270 (tokeninfoclass == TokenRestrictedSids) ? "TokenRestrictedSids" :
271 (tokeninfoclass == TokenSessionId) ? "TokenSessionId" :
272 (tokeninfoclass == TokenGroupsAndPrivileges) ? "TokenGroupsAndPrivileges" :
273 (tokeninfoclass == TokenSessionReference) ? "TokenSessionReference" :
274 (tokeninfoclass == TokenSandBoxInert) ? "TokenSandBoxInert" :
276 tokeninfo, tokeninfolength);
278 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
283 /*************************************************************************
284 * SetThreadToken [ADVAPI32.@]
286 * Assigns an 'impersonation token' to a thread so it can assume the
287 * security privledges of another thread or process. Can also remove
288 * a previously assigned token.
291 * thread [O] Handle to thread to set the token for
292 * token [I] Token to set
295 * Success: TRUE. The threads access token is set to token
299 * Only supported on NT or higher. On Win9X this function does nothing.
300 * See SetTokenInformation.
302 BOOL WINAPI SetThreadToken(PHANDLE thread, HANDLE token)
304 FIXME("(%p, %p): stub (NT impl. only)\n", thread, token);
306 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
311 /* ##############################
312 ###### SID FUNCTIONS ######
313 ##############################
316 /******************************************************************************
317 * AllocateAndInitializeSid [ADVAPI32.@]
320 * pIdentifierAuthority []
321 * nSubAuthorityCount []
333 AllocateAndInitializeSid( PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
334 BYTE nSubAuthorityCount,
335 DWORD nSubAuthority0, DWORD nSubAuthority1,
336 DWORD nSubAuthority2, DWORD nSubAuthority3,
337 DWORD nSubAuthority4, DWORD nSubAuthority5,
338 DWORD nSubAuthority6, DWORD nSubAuthority7,
341 CallWin32ToNt (RtlAllocateAndInitializeSid(
342 pIdentifierAuthority, nSubAuthorityCount,
343 nSubAuthority0, nSubAuthority1, nSubAuthority2, nSubAuthority3,
344 nSubAuthority4, nSubAuthority5, nSubAuthority6, nSubAuthority7,
348 /******************************************************************************
349 * FreeSid [ADVAPI32.@]
358 return NULL; /* is documented like this */
361 /******************************************************************************
362 * CopySid [ADVAPI32.@]
365 * nDestinationSidLength []
370 CopySid( DWORD nDestinationSidLength, PSID pDestinationSid, PSID pSourceSid )
372 return RtlCopySid(nDestinationSidLength, pDestinationSid, pSourceSid);
375 /******************************************************************************
376 * IsValidSid [ADVAPI32.@]
382 IsValidSid( PSID pSid )
384 return RtlValidSid( pSid );
387 /******************************************************************************
388 * EqualSid [ADVAPI32.@]
395 EqualSid( PSID pSid1, PSID pSid2 )
397 return RtlEqualSid( pSid1, pSid2 );
400 /******************************************************************************
401 * EqualPrefixSid [ADVAPI32.@]
403 BOOL WINAPI EqualPrefixSid (PSID pSid1, PSID pSid2)
405 return RtlEqualPrefixSid(pSid1, pSid2);
408 /******************************************************************************
409 * GetSidLengthRequired [ADVAPI32.@]
412 * nSubAuthorityCount []
415 GetSidLengthRequired( BYTE nSubAuthorityCount )
417 return RtlLengthRequiredSid(nSubAuthorityCount);
420 /******************************************************************************
421 * InitializeSid [ADVAPI32.@]
424 * pIdentifierAuthority []
429 PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
430 BYTE nSubAuthorityCount)
432 return RtlInitializeSid(pSid, pIdentifierAuthority, nSubAuthorityCount);
435 /******************************************************************************
436 * GetSidIdentifierAuthority [ADVAPI32.@]
441 PSID_IDENTIFIER_AUTHORITY WINAPI
442 GetSidIdentifierAuthority( PSID pSid )
444 return RtlIdentifierAuthoritySid(pSid);
447 /******************************************************************************
448 * GetSidSubAuthority [ADVAPI32.@]
455 GetSidSubAuthority( PSID pSid, DWORD nSubAuthority )
457 return RtlSubAuthoritySid(pSid, nSubAuthority);
460 /******************************************************************************
461 * GetSidSubAuthorityCount [ADVAPI32.@]
467 GetSidSubAuthorityCount (PSID pSid)
469 return RtlSubAuthorityCountSid(pSid);
472 /******************************************************************************
473 * GetLengthSid [ADVAPI32.@]
479 GetLengthSid (PSID pSid)
481 return RtlLengthSid(pSid);
484 /* ##############################################
485 ###### SECURITY DESCRIPTOR FUNCTIONS ######
486 ##############################################
489 /******************************************************************************
490 * InitializeSecurityDescriptor [ADVAPI32.@]
497 InitializeSecurityDescriptor( SECURITY_DESCRIPTOR *pDescr, DWORD revision )
499 CallWin32ToNt (RtlCreateSecurityDescriptor(pDescr, revision ));
502 /******************************************************************************
503 * GetSecurityDescriptorLength [ADVAPI32.@]
505 DWORD WINAPI GetSecurityDescriptorLength( SECURITY_DESCRIPTOR *pDescr)
507 return (RtlLengthSecurityDescriptor(pDescr));
510 /******************************************************************************
511 * GetSecurityDescriptorOwner [ADVAPI32.@]
515 * lpbOwnerDefaulted []
518 GetSecurityDescriptorOwner( SECURITY_DESCRIPTOR *pDescr, PSID *pOwner,
519 LPBOOL lpbOwnerDefaulted )
521 CallWin32ToNt (RtlGetOwnerSecurityDescriptor( pDescr, pOwner, (PBOOLEAN)lpbOwnerDefaulted ));
524 /******************************************************************************
525 * SetSecurityDescriptorOwner [ADVAPI32.@]
529 BOOL WINAPI SetSecurityDescriptorOwner( PSECURITY_DESCRIPTOR pSecurityDescriptor,
530 PSID pOwner, BOOL bOwnerDefaulted)
532 CallWin32ToNt (RtlSetOwnerSecurityDescriptor(pSecurityDescriptor, pOwner, bOwnerDefaulted));
534 /******************************************************************************
535 * GetSecurityDescriptorGroup [ADVAPI32.@]
537 BOOL WINAPI GetSecurityDescriptorGroup(
538 PSECURITY_DESCRIPTOR SecurityDescriptor,
540 LPBOOL GroupDefaulted)
542 CallWin32ToNt (RtlGetGroupSecurityDescriptor(SecurityDescriptor, Group, (PBOOLEAN)GroupDefaulted));
544 /******************************************************************************
545 * SetSecurityDescriptorGroup [ADVAPI32.@]
547 BOOL WINAPI SetSecurityDescriptorGroup ( PSECURITY_DESCRIPTOR SecurityDescriptor,
548 PSID Group, BOOL GroupDefaulted)
550 CallWin32ToNt (RtlSetGroupSecurityDescriptor( SecurityDescriptor, Group, GroupDefaulted));
553 /******************************************************************************
554 * IsValidSecurityDescriptor [ADVAPI32.@]
560 IsValidSecurityDescriptor( PSECURITY_DESCRIPTOR SecurityDescriptor )
562 CallWin32ToNt (RtlValidSecurityDescriptor(SecurityDescriptor));
565 /******************************************************************************
566 * GetSecurityDescriptorDacl [ADVAPI32.@]
568 BOOL WINAPI GetSecurityDescriptorDacl(
569 IN PSECURITY_DESCRIPTOR pSecurityDescriptor,
570 OUT LPBOOL lpbDaclPresent,
572 OUT LPBOOL lpbDaclDefaulted)
574 CallWin32ToNt (RtlGetDaclSecurityDescriptor(pSecurityDescriptor, (PBOOLEAN)lpbDaclPresent,
575 pDacl, (PBOOLEAN)lpbDaclDefaulted));
578 /******************************************************************************
579 * SetSecurityDescriptorDacl [ADVAPI32.@]
582 SetSecurityDescriptorDacl (
583 PSECURITY_DESCRIPTOR lpsd,
588 CallWin32ToNt (RtlSetDaclSecurityDescriptor (lpsd, daclpresent, dacl, dacldefaulted ));
590 /******************************************************************************
591 * GetSecurityDescriptorSacl [ADVAPI32.@]
593 BOOL WINAPI GetSecurityDescriptorSacl(
594 IN PSECURITY_DESCRIPTOR lpsd,
595 OUT LPBOOL lpbSaclPresent,
597 OUT LPBOOL lpbSaclDefaulted)
599 CallWin32ToNt (RtlGetSaclSecurityDescriptor(lpsd,
600 (PBOOLEAN)lpbSaclPresent, pSacl, (PBOOLEAN)lpbSaclDefaulted));
603 /**************************************************************************
604 * SetSecurityDescriptorSacl [ADVAPI32.@]
606 BOOL WINAPI SetSecurityDescriptorSacl (
607 PSECURITY_DESCRIPTOR lpsd,
612 CallWin32ToNt (RtlSetSaclSecurityDescriptor(lpsd, saclpresent, lpsacl, sacldefaulted));
614 /******************************************************************************
615 * MakeSelfRelativeSD [ADVAPI32.@]
624 IN PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor,
625 IN PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
626 IN OUT LPDWORD lpdwBufferLength)
628 CallWin32ToNt (RtlMakeSelfRelativeSD(pAbsoluteSecurityDescriptor,pSelfRelativeSecurityDescriptor, lpdwBufferLength));
631 /******************************************************************************
632 * GetSecurityDescriptorControl [ADVAPI32.@]
635 BOOL WINAPI GetSecurityDescriptorControl ( PSECURITY_DESCRIPTOR pSecurityDescriptor,
636 PSECURITY_DESCRIPTOR_CONTROL pControl, LPDWORD lpdwRevision)
638 CallWin32ToNt (RtlGetControlSecurityDescriptor(pSecurityDescriptor,pControl,lpdwRevision));
641 /* ##############################
642 ###### ACL FUNCTIONS ######
643 ##############################
646 /*************************************************************************
647 * InitializeAcl [ADVAPI32.@]
649 DWORD WINAPI InitializeAcl(PACL acl, DWORD size, DWORD rev)
651 CallWin32ToNt (RtlCreateAcl(acl, size, rev));
654 /******************************************************************************
655 * AddAccessAllowedAce [ADVAPI32.@]
657 BOOL WINAPI AddAccessAllowedAce(
659 IN DWORD dwAceRevision,
663 CallWin32ToNt(RtlAddAccessAllowedAce(pAcl, dwAceRevision, AccessMask, pSid));
666 /******************************************************************************
667 * AddAccessAllowedAceEx [ADVAPI32.@]
669 BOOL WINAPI AddAccessAllowedAceEx(
671 IN DWORD dwAceRevision,
676 CallWin32ToNt(RtlAddAccessAllowedAceEx(pAcl, dwAceRevision, AceFlags, AccessMask, pSid));
679 /******************************************************************************
680 * AddAccessDeniedAce [ADVAPI32.@]
682 BOOL WINAPI AddAccessDeniedAce(
684 IN DWORD dwAceRevision,
688 CallWin32ToNt(RtlAddAccessDeniedAce(pAcl, dwAceRevision, AccessMask, pSid));
691 /******************************************************************************
692 * AddAccessDeniedAceEx [ADVAPI32.@]
694 BOOL WINAPI AddAccessDeniedAceEx(
696 IN DWORD dwAceRevision,
701 CallWin32ToNt(RtlAddAccessDeniedAceEx(pAcl, dwAceRevision, AceFlags, AccessMask, pSid));
704 /******************************************************************************
705 * AddAce [ADVAPI32.@]
709 IN DWORD dwAceRevision,
710 IN DWORD dwStartingAceIndex,
712 DWORD nAceListLength)
714 CallWin32ToNt(RtlAddAce(pAcl, dwAceRevision, dwStartingAceIndex, pAceList, nAceListLength));
717 /******************************************************************************
718 * FindFirstFreeAce [ADVAPI32.@]
720 BOOL WINAPI FindFirstFreeAce(IN PACL pAcl, LPVOID * pAce)
722 return RtlFirstFreeAce(pAcl, (PACE_HEADER *)pAce);
725 /******************************************************************************
726 * GetAce [ADVAPI32.@]
728 BOOL WINAPI GetAce(PACL pAcl,DWORD dwAceIndex,LPVOID *pAce )
730 CallWin32ToNt(RtlGetAce(pAcl, dwAceIndex, pAce));
733 /******************************************************************************
734 * GetAclInformation [ADVAPI32.@]
736 BOOL WINAPI GetAclInformation(
738 LPVOID pAclInformation,
739 DWORD nAclInformationLength,
740 ACL_INFORMATION_CLASS dwAclInformationClass)
742 FIXME("(%p,%p,%ld,%d): stub\n",pAcl, pAclInformation,
743 nAclInformationLength, dwAclInformationClass);
747 /******************************************************************************
748 * IsValidAcl [ADVAPI32.@]
750 BOOL WINAPI IsValidAcl(IN PACL pAcl)
752 return RtlValidAcl(pAcl);
755 /* ##############################
756 ###### MISC FUNCTIONS ######
757 ##############################
760 static const char * const DefaultPrivNames[] =
763 "SeCreateTokenPrivilege", "SeAssignPrimaryTokenPrivilege",
764 "SeLockMemoryPrivilege", "SeIncreaseQuotaPrivilege",
765 "SeMachineAccountPrivilege", "SeTcbPrivilege",
766 "SeSecurityPrivilege", "SeTakeOwnershipPrivilege",
767 "SeLoadDriverPrivilege", "SeSystemProfilePrivilege",
768 "SeSystemtimePrivilege", "SeProfileSingleProcessPrivilege",
769 "SeIncreaseBasePriorityPrivilege", "SeCreatePagefilePrivilege",
770 "SeCreatePermanentPrivilege", "SeBackupPrivilege",
771 "SeRestorePrivilege", "SeShutdownPrivilege",
772 "SeDebugPrivilege", "SeAuditPrivilege",
773 "SeSystemEnvironmentPrivilege", "SeChangeNotifyPrivilege",
774 "SeRemoteShutdownPrivilege",
776 #define NUMPRIVS (sizeof DefaultPrivNames/sizeof DefaultPrivNames[0])
778 /******************************************************************************
779 * LookupPrivilegeValueW [ADVAPI32.@]
781 * See LookupPrivilegeValueA.
784 LookupPrivilegeValueW( LPCWSTR lpSystemName, LPCWSTR lpName, PLUID lpLuid )
789 TRACE("%s,%s,%p\n",debugstr_w(lpSystemName), debugstr_w(lpName), lpLuid);
791 for( i=0; i<NUMPRIVS; i++ )
793 if( !DefaultPrivNames[i] )
795 MultiByteToWideChar( CP_ACP, 0, DefaultPrivNames[i], -1,
797 if( strcmpW( priv, lpName) )
800 lpLuid->HighPart = 0;
801 TRACE( "%s -> %08lx-%08lx\n",debugstr_w( lpSystemName ),
802 lpLuid->HighPart, lpLuid->LowPart );
808 /******************************************************************************
809 * LookupPrivilegeValueA [ADVAPI32.@]
811 * Retrieves LUID used on a system to represent the privilege name.
814 * lpSystemName [I] Name of the system
815 * lpName [I] Name of the privilege
816 * pLuid [O] Destination for the resulting LUD
819 * Success: TRUE. pLuid contains the requested LUID.
823 LookupPrivilegeValueA( LPCSTR lpSystemName, LPCSTR lpName, PLUID lpLuid )
825 UNICODE_STRING lpSystemNameW;
826 UNICODE_STRING lpNameW;
829 RtlCreateUnicodeStringFromAsciiz(&lpSystemNameW, lpSystemName);
830 RtlCreateUnicodeStringFromAsciiz(&lpNameW,lpName);
831 ret = LookupPrivilegeValueW(lpSystemNameW.Buffer, lpNameW.Buffer, lpLuid);
832 RtlFreeUnicodeString(&lpNameW);
833 RtlFreeUnicodeString(&lpSystemNameW);
838 /******************************************************************************
839 * LookupPrivilegeNameA [ADVAPI32.@]
842 LookupPrivilegeNameA( LPCSTR lpSystemName, PLUID lpLuid, LPSTR lpName, LPDWORD cchName)
844 FIXME("%s %p %p %p\n", debugstr_a(lpSystemName), lpLuid, lpName, cchName);
848 /******************************************************************************
849 * LookupPrivilegeNameW [ADVAPI32.@]
852 LookupPrivilegeNameW( LPCWSTR lpSystemName, PLUID lpLuid, LPSTR lpName, LPDWORD cchName)
854 FIXME("%s %p %p %p\n", debugstr_w(lpSystemName), lpLuid, lpName, cchName);
858 /******************************************************************************
859 * GetFileSecurityA [ADVAPI32.@]
861 * Obtains Specified information about the security of a file or directory.
864 * lpFileName [I] Name of the file to get info for
865 * RequestedInformation [I] SE_ flags from "winnt.h"
866 * pSecurityDescriptor [O] Destination for security information
867 * nLength [I] Length of pSecurityDescriptor
868 * lpnLengthNeeded [O] Destination for length of returned security information
871 * Success: TRUE. pSecurityDescriptor contains the requested information.
872 * Failure: FALSE. lpnLengthNeeded contains the required space to return the info.
875 * The information returned is constrained by the callers access rights and
879 GetFileSecurityA( LPCSTR lpFileName,
880 SECURITY_INFORMATION RequestedInformation,
881 PSECURITY_DESCRIPTOR pSecurityDescriptor,
882 DWORD nLength, LPDWORD lpnLengthNeeded )
884 FIXME("(%s) : stub\n", debugstr_a(lpFileName));
888 /******************************************************************************
889 * GetFileSecurityW [ADVAPI32.@]
891 * See GetFileSecurityA.
894 GetFileSecurityW( LPCWSTR lpFileName,
895 SECURITY_INFORMATION RequestedInformation,
896 PSECURITY_DESCRIPTOR pSecurityDescriptor,
897 DWORD nLength, LPDWORD lpnLengthNeeded )
899 FIXME("(%s) : stub\n", debugstr_w(lpFileName) );
904 /******************************************************************************
905 * LookupAccountSidA [ADVAPI32.@]
912 IN OUT LPDWORD accountSize,
914 IN OUT LPDWORD domainSize,
915 OUT PSID_NAME_USE name_use )
917 static const char ac[] = "Administrator";
918 static const char dm[] = "DOMAIN";
919 FIXME("(%s,sid=%p,%p,%p(%lu),%p,%p(%lu),%p): semi-stub\n",
920 debugstr_a(system),sid,
921 account,accountSize,accountSize?*accountSize:0,
922 domain,domainSize,domainSize?*domainSize:0,
925 if (accountSize) *accountSize = strlen(ac)+1;
926 if (account && (*accountSize > strlen(ac)))
929 if (domainSize) *domainSize = strlen(dm)+1;
930 if (domain && (*domainSize > strlen(dm)))
933 if (name_use) *name_use = SidTypeUser;
937 /******************************************************************************
938 * LookupAccountSidW [ADVAPI32.@]
954 IN OUT LPDWORD accountSize,
956 IN OUT LPDWORD domainSize,
957 OUT PSID_NAME_USE name_use )
959 static const WCHAR ac[] = {'A','d','m','i','n','i','s','t','r','a','t','o','r',0};
960 static const WCHAR dm[] = {'D','O','M','A','I','N',0};
961 FIXME("(%s,sid=%p,%p,%p(%lu),%p,%p(%lu),%p): semi-stub\n",
962 debugstr_w(system),sid,
963 account,accountSize,accountSize?*accountSize:0,
964 domain,domainSize,domainSize?*domainSize:0,
967 if (accountSize) *accountSize = strlenW(ac)+1;
968 if (account && (*accountSize > strlenW(ac)))
969 strcpyW(account, ac);
971 if (domainSize) *domainSize = strlenW(dm)+1;
972 if (domain && (*domainSize > strlenW(dm)))
975 if (name_use) *name_use = SidTypeUser;
979 /******************************************************************************
980 * SetFileSecurityA [ADVAPI32.@]
981 * Sets the security of a file or directory
983 BOOL WINAPI SetFileSecurityA( LPCSTR lpFileName,
984 SECURITY_INFORMATION RequestedInformation,
985 PSECURITY_DESCRIPTOR pSecurityDescriptor)
987 FIXME("(%s) : stub\n", debugstr_a(lpFileName));
991 /******************************************************************************
992 * SetFileSecurityW [ADVAPI32.@]
993 * Sets the security of a file or directory
997 * RequestedInformation []
998 * pSecurityDescriptor []
1001 SetFileSecurityW( LPCWSTR lpFileName,
1002 SECURITY_INFORMATION RequestedInformation,
1003 PSECURITY_DESCRIPTOR pSecurityDescriptor )
1005 FIXME("(%s) : stub\n", debugstr_w(lpFileName) );
1009 /******************************************************************************
1010 * QueryWindows31FilesMigration [ADVAPI32.@]
1016 QueryWindows31FilesMigration( DWORD x1 )
1018 FIXME("(%ld):stub\n",x1);
1022 /******************************************************************************
1023 * SynchronizeWindows31FilesAndWindowsNTRegistry [ADVAPI32.@]
1032 SynchronizeWindows31FilesAndWindowsNTRegistry( DWORD x1, DWORD x2, DWORD x3,
1035 FIXME("(0x%08lx,0x%08lx,0x%08lx,0x%08lx):stub\n",x1,x2,x3,x4);
1039 /******************************************************************************
1040 * LsaOpenPolicy [ADVAPI32.@]
1050 IN PLSA_UNICODE_STRING SystemName,
1051 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes,
1052 IN ACCESS_MASK DesiredAccess,
1053 IN OUT PLSA_HANDLE PolicyHandle)
1055 FIXME("(%s,%p,0x%08lx,%p):stub\n",
1056 SystemName?debugstr_w(SystemName->Buffer):"null",
1057 ObjectAttributes, DesiredAccess, PolicyHandle);
1058 ADVAPI_ForceLocalComputer(SystemName ? SystemName->Buffer : NULL,
1059 STATUS_ACCESS_VIOLATION);
1060 dumpLsaAttributes(ObjectAttributes);
1061 if(PolicyHandle) *PolicyHandle = (LSA_HANDLE)0xcafe;
1062 return STATUS_SUCCESS;
1065 /******************************************************************************
1066 * LsaQueryInformationPolicy [ADVAPI32.@]
1069 LsaQueryInformationPolicy(
1070 IN LSA_HANDLE PolicyHandle,
1071 IN POLICY_INFORMATION_CLASS InformationClass,
1074 FIXME("(%p,0x%08x,%p):stub\n",
1075 PolicyHandle, InformationClass, Buffer);
1077 if(!Buffer) return FALSE;
1078 switch (InformationClass)
1080 case PolicyAuditEventsInformation: /* 2 */
1082 PPOLICY_AUDIT_EVENTS_INFO p = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(POLICY_AUDIT_EVENTS_INFO));
1083 p->AuditingMode = FALSE; /* no auditing */
1087 case PolicyPrimaryDomainInformation: /* 3 */
1088 case PolicyAccountDomainInformation: /* 5 */
1091 { POLICY_PRIMARY_DOMAIN_INFO ppdi;
1094 SID_IDENTIFIER_AUTHORITY localSidAuthority = {SECURITY_NT_AUTHORITY};
1096 struct di * xdi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(xdi));
1097 RtlCreateUnicodeStringFromAsciiz(&(xdi->ppdi.Name), "DOMAIN");
1099 xdi->ppdi.Sid = &(xdi->sid);
1100 xdi->sid.Revision = SID_REVISION;
1101 xdi->sid.SubAuthorityCount = 1;
1102 xdi->sid.IdentifierAuthority = localSidAuthority;
1103 xdi->sid.SubAuthority[0] = SECURITY_LOCAL_SYSTEM_RID;
1107 case PolicyAuditLogInformation:
1108 case PolicyPdAccountInformation:
1109 case PolicyLsaServerRoleInformation:
1110 case PolicyReplicaSourceInformation:
1111 case PolicyDefaultQuotaInformation:
1112 case PolicyModificationInformation:
1113 case PolicyAuditFullSetInformation:
1114 case PolicyAuditFullQueryInformation:
1115 case PolicyDnsDomainInformation:
1117 FIXME("category not implemented\n");
1124 /******************************************************************************
1125 * LsaLookupSids [ADVAPI32.@]
1130 LSA_UNICODE_STRING Name;
1132 } LSA_TRANSLATED_NAME, *PLSA_TRANSLATED_NAME;
1136 LSA_UNICODE_STRING Name;
1138 } LSA_TRUST_INFORMATION, *PLSA_TRUST_INFORMATION;
1143 PLSA_TRUST_INFORMATION Domains;
1144 } LSA_REFERENCED_DOMAIN_LIST, *PLSA_REFERENCED_DOMAIN_LIST;
1148 IN LSA_HANDLE PolicyHandle,
1151 OUT PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,
1152 OUT PLSA_TRANSLATED_NAME *Names )
1154 FIXME("%p %lu %p %p %p\n",
1155 PolicyHandle, Count, Sids, ReferencedDomains, Names);
1159 /******************************************************************************
1160 * LsaFreeMemory [ADVAPI32.@]
1163 LsaFreeMemory(IN PVOID Buffer)
1165 TRACE("(%p)\n",Buffer);
1166 return HeapFree(GetProcessHeap(), 0, Buffer);
1168 /******************************************************************************
1169 * LsaClose [ADVAPI32.@]
1172 LsaClose(IN LSA_HANDLE ObjectHandle)
1174 FIXME("(%p):stub\n",ObjectHandle);
1178 /******************************************************************************
1179 * LsaNtStatusToWinError [ADVAPI32.@]
1185 LsaNtStatusToWinError(NTSTATUS Status)
1187 return RtlNtStatusToDosError(Status);
1190 /******************************************************************************
1191 * NotifyBootConfigStatus [ADVAPI32.@]
1197 NotifyBootConfigStatus( DWORD x1 )
1199 FIXME("(0x%08lx):stub\n",x1);
1203 /******************************************************************************
1204 * RevertToSelf [ADVAPI32.@]
1210 RevertToSelf( void )
1212 FIXME("(), stub\n");
1216 /******************************************************************************
1217 * ImpersonateSelf [ADVAPI32.@]
1220 ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
1222 return RtlImpersonateSelf(ImpersonationLevel);
1225 /******************************************************************************
1226 * ImpersonateLoggedOnUser [ADVAPI32.@]
1228 BOOL WINAPI ImpersonateLoggedOnUser(HANDLE hToken)
1230 FIXME("(%p):stub returning FALSE\n", hToken);
1234 /******************************************************************************
1235 * AccessCheck [ADVAPI32.@]
1237 * FIXME check cast LPBOOL to PBOOLEAN
1241 PSECURITY_DESCRIPTOR SecurityDescriptor,
1243 DWORD DesiredAccess,
1244 PGENERIC_MAPPING GenericMapping,
1245 PPRIVILEGE_SET PrivilegeSet,
1246 LPDWORD PrivilegeSetLength,
1247 LPDWORD GrantedAccess,
1248 LPBOOL AccessStatus)
1250 CallWin32ToNt (NtAccessCheck(SecurityDescriptor, ClientToken, DesiredAccess,
1251 GenericMapping, PrivilegeSet, PrivilegeSetLength, GrantedAccess, (PBOOLEAN)AccessStatus));
1254 /*************************************************************************
1255 * SetKernelObjectSecurity [ADVAPI32.@]
1257 BOOL WINAPI SetKernelObjectSecurity (
1259 IN SECURITY_INFORMATION SecurityInformation,
1260 IN PSECURITY_DESCRIPTOR SecurityDescriptor )
1262 CallWin32ToNt (NtSetSecurityObject (Handle, SecurityInformation, SecurityDescriptor));
1265 /******************************************************************************
1266 * LookupAccountNameA [ADVAPI32.@]
1274 LPSTR ReferencedDomainName,
1275 IN OUT LPDWORD cbReferencedDomainName,
1276 OUT PSID_NAME_USE name_use )
1278 FIXME("(%s,%s,%p,%p,%p,%p,%p), stub.\n",system,account,sid,cbSid,ReferencedDomainName,cbReferencedDomainName,name_use);
1282 /******************************************************************************
1283 * PrivilegeCheck [ADVAPI32.@]
1285 BOOL WINAPI PrivilegeCheck( HANDLE ClientToken, PPRIVILEGE_SET RequiredPrivileges, LPBOOL pfResult)
1287 FIXME("stub %p %p %p\n", ClientToken, RequiredPrivileges, pfResult);
1293 /******************************************************************************
1294 * AccessCheckAndAuditAlarmA [ADVAPI32.@]
1296 BOOL WINAPI AccessCheckAndAuditAlarmA(LPCSTR Subsystem, LPVOID HandleId, LPSTR ObjectTypeName,
1297 LPSTR ObjectName, PSECURITY_DESCRIPTOR SecurityDescriptor, DWORD DesiredAccess,
1298 PGENERIC_MAPPING GenericMapping, BOOL ObjectCreation, LPDWORD GrantedAccess,
1299 LPBOOL AccessStatus, LPBOOL pfGenerateOnClose)
1301 FIXME("stub (%s,%p,%s,%s,%p,%08lx,%p,%x,%p,%p,%p)\n", debugstr_a(Subsystem),
1302 HandleId, debugstr_a(ObjectTypeName), debugstr_a(ObjectName),
1303 SecurityDescriptor, DesiredAccess, GenericMapping,
1304 ObjectCreation, GrantedAccess, AccessStatus, pfGenerateOnClose);
1308 /******************************************************************************
1309 * AccessCheckAndAuditAlarmW [ADVAPI32.@]
1311 BOOL WINAPI AccessCheckAndAuditAlarmW(LPCWSTR Subsystem, LPVOID HandleId, LPWSTR ObjectTypeName,
1312 LPWSTR ObjectName, PSECURITY_DESCRIPTOR SecurityDescriptor, DWORD DesiredAccess,
1313 PGENERIC_MAPPING GenericMapping, BOOL ObjectCreation, LPDWORD GrantedAccess,
1314 LPBOOL AccessStatus, LPBOOL pfGenerateOnClose)
1316 FIXME("stub (%s,%p,%s,%s,%p,%08lx,%p,%x,%p,%p,%p)\n", debugstr_w(Subsystem),
1317 HandleId, debugstr_w(ObjectTypeName), debugstr_w(ObjectName),
1318 SecurityDescriptor, DesiredAccess, GenericMapping,
1319 ObjectCreation, GrantedAccess, AccessStatus, pfGenerateOnClose);
1324 /******************************************************************************
1325 * GetSecurityInfoExW [ADVAPI32.@]
1327 DWORD WINAPI GetSecurityInfoExW(
1328 HANDLE hObject, SE_OBJECT_TYPE ObjectType,
1329 SECURITY_INFORMATION SecurityInfo, LPCWSTR lpProvider,
1330 LPCWSTR lpProperty, PACTRL_ACCESSW *ppAccessList,
1331 PACTRL_AUDITW *ppAuditList, LPWSTR *lppOwner, LPWSTR *lppGroup
1335 return ERROR_BAD_PROVIDER;
1338 /******************************************************************************
1339 * BuildTrusteeWithSidA [ADVAPI32.@]
1341 VOID WINAPI BuildTrusteeWithSidA(PTRUSTEEA pTrustee, PSID pSid)
1343 FIXME("%p %p\n", pTrustee, pSid);
1346 /******************************************************************************
1347 * BuildTrusteeWithSidW [ADVAPI32.@]
1349 VOID WINAPI BuildTrusteeWithSidW(PTRUSTEEW pTrustee, PSID pSid)
1351 FIXME("%p %p\n", pTrustee, pSid);
1354 /******************************************************************************
1355 * SetEntriesInAclA [ADVAPI32.@]
1357 DWORD WINAPI SetEntriesInAclA( ULONG count, PEXPLICIT_ACCESSA pEntries,
1358 PACL OldAcl, PACL* NewAcl )
1360 FIXME("%ld %p %p %p\n",count,pEntries,OldAcl,NewAcl);
1361 return ERROR_CALL_NOT_IMPLEMENTED;
1364 /******************************************************************************
1365 * SetEntriesInAclW [ADVAPI32.@]
1367 DWORD WINAPI SetEntriesInAclW( ULONG count, PEXPLICIT_ACCESSW pEntries,
1368 PACL OldAcl, PACL* NewAcl )
1370 FIXME("%ld %p %p %p\n",count,pEntries,OldAcl,NewAcl);
1371 return ERROR_CALL_NOT_IMPLEMENTED;
1374 /******************************************************************************
1375 * SetNamedSecurityInfoA [ADVAPI32.@]
1377 DWORD WINAPI SetNamedSecurityInfoA(LPSTR pObjectName,
1378 SE_OBJECT_TYPE ObjectType, SECURITY_INFORMATION SecurityInfo,
1379 PSID psidOwner, PSID psidGroup, PACL pDacl, PACL pSacl)
1381 FIXME("%s %d %ld %p %p %p %p\n", debugstr_a(pObjectName), ObjectType,
1382 SecurityInfo, psidOwner, psidGroup, pDacl, pSacl);
1383 return ERROR_CALL_NOT_IMPLEMENTED;
1386 /******************************************************************************
1387 * SetNamedSecurityInfoW [ADVAPI32.@]
1389 DWORD WINAPI SetNamedSecurityInfoW(LPWSTR pObjectName,
1390 SE_OBJECT_TYPE ObjectType, SECURITY_INFORMATION SecurityInfo,
1391 PSID psidOwner, PSID psidGroup, PACL pDacl, PACL pSacl)
1393 FIXME("%s %d %ld %p %p %p %p\n", debugstr_w(pObjectName), ObjectType,
1394 SecurityInfo, psidOwner, psidGroup, pDacl, pSacl);
1395 return ERROR_CALL_NOT_IMPLEMENTED;