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 ###### MISC FUNCTIONS ######
656 ##############################
659 /******************************************************************************
660 * LookupPrivilegeValueW [ADVAPI32.@]
662 * See LookupPrivilegeValueA.
665 LookupPrivilegeValueW( LPCWSTR lpSystemName
, LPCWSTR lpName
, PLUID lpLuid
)
667 FIXME("(%s,%s,%p): stub\n",debugstr_w(lpSystemName
),
668 debugstr_w(lpName
), lpLuid
);
669 lpLuid
->LowPart
= 0x12345678;
670 lpLuid
->HighPart
= 0x87654321;
674 /******************************************************************************
675 * LookupPrivilegeValueA [ADVAPI32.@]
677 * Retrieves LUID used on a system to represent the privilege name.
680 * lpSystemName [I] Name of the system
681 * lpName [I] Name of the privilege
682 * pLuid [O] Destination for the resulting LUD
685 * Success: TRUE. pLuid contains the requested LUID.
689 LookupPrivilegeValueA( LPCSTR lpSystemName
, LPCSTR lpName
, PLUID lpLuid
)
691 UNICODE_STRING lpSystemNameW
;
692 UNICODE_STRING lpNameW
;
695 RtlCreateUnicodeStringFromAsciiz(&lpSystemNameW
, lpSystemName
);
696 RtlCreateUnicodeStringFromAsciiz(&lpNameW
,lpName
);
697 ret
= LookupPrivilegeValueW(lpSystemNameW
.Buffer
, lpNameW
.Buffer
, lpLuid
);
698 RtlFreeUnicodeString(&lpNameW
);
699 RtlFreeUnicodeString(&lpSystemNameW
);
703 /******************************************************************************
704 * GetFileSecurityA [ADVAPI32.@]
706 * Obtains Specified information about the security of a file or directory.
709 * lpFileName [I] Name of the file to get info for
710 * RequestedInformation [I] SE_ flags from "winnt.h"
711 * pSecurityDescriptor [O] Destination for security information
712 * nLength [I] Length of pSecurityDescriptor
713 * lpnLengthNeeded [O] Destination for length of returned security information
716 * Success: TRUE. pSecurityDescriptor contains the requested information.
717 * Failure: FALSE. lpnLengthNeeded contains the required space to return the info.
720 * The information returned is constrained by the callers access rights and
724 GetFileSecurityA( LPCSTR lpFileName
,
725 SECURITY_INFORMATION RequestedInformation
,
726 PSECURITY_DESCRIPTOR pSecurityDescriptor
,
727 DWORD nLength
, LPDWORD lpnLengthNeeded
)
729 FIXME("(%s) : stub\n", debugstr_a(lpFileName
));
733 /******************************************************************************
734 * GetFileSecurityW [ADVAPI32.@]
736 * See GetFileSecurityA.
739 GetFileSecurityW( LPCWSTR lpFileName
,
740 SECURITY_INFORMATION RequestedInformation
,
741 PSECURITY_DESCRIPTOR pSecurityDescriptor
,
742 DWORD nLength
, LPDWORD lpnLengthNeeded
)
744 FIXME("(%s) : stub\n", debugstr_w(lpFileName
) );
749 /******************************************************************************
750 * LookupAccountSidA [ADVAPI32.@]
757 IN OUT LPDWORD accountSize
,
759 IN OUT LPDWORD domainSize
,
760 OUT PSID_NAME_USE name_use
)
762 static const char ac
[] = "Administrator";
763 static const char dm
[] = "DOMAIN";
764 FIXME("(%s,sid=%p,%p,%p(%lu),%p,%p(%lu),%p): semi-stub\n",
765 debugstr_a(system
),sid
,
766 account
,accountSize
,accountSize
?*accountSize
:0,
767 domain
,domainSize
,domainSize
?*domainSize
:0,
770 if (accountSize
) *accountSize
= strlen(ac
)+1;
771 if (account
&& (*accountSize
> strlen(ac
)))
774 if (domainSize
) *domainSize
= strlen(dm
)+1;
775 if (domain
&& (*domainSize
> strlen(dm
)))
778 if (name_use
) *name_use
= SidTypeUser
;
782 /******************************************************************************
783 * LookupAccountSidW [ADVAPI32.@]
799 IN OUT LPDWORD accountSize
,
801 IN OUT LPDWORD domainSize
,
802 OUT PSID_NAME_USE name_use
)
804 static const WCHAR ac
[] = {'A','d','m','i','n','i','s','t','r','a','t','o','r',0};
805 static const WCHAR dm
[] = {'D','O','M','A','I','N',0};
806 FIXME("(%s,sid=%p,%p,%p(%lu),%p,%p(%lu),%p): semi-stub\n",
807 debugstr_w(system
),sid
,
808 account
,accountSize
,accountSize
?*accountSize
:0,
809 domain
,domainSize
,domainSize
?*domainSize
:0,
812 if (accountSize
) *accountSize
= strlenW(ac
)+1;
813 if (account
&& (*accountSize
> strlenW(ac
)))
814 strcpyW(account
, ac
);
816 if (domainSize
) *domainSize
= strlenW(dm
)+1;
817 if (domain
&& (*domainSize
> strlenW(dm
)))
820 if (name_use
) *name_use
= SidTypeUser
;
824 /******************************************************************************
825 * SetFileSecurityA [ADVAPI32.@]
826 * Sets the security of a file or directory
828 BOOL WINAPI
SetFileSecurityA( LPCSTR lpFileName
,
829 SECURITY_INFORMATION RequestedInformation
,
830 PSECURITY_DESCRIPTOR pSecurityDescriptor
)
832 FIXME("(%s) : stub\n", debugstr_a(lpFileName
));
836 /******************************************************************************
837 * SetFileSecurityW [ADVAPI32.@]
838 * Sets the security of a file or directory
842 * RequestedInformation []
843 * pSecurityDescriptor []
846 SetFileSecurityW( LPCWSTR lpFileName
,
847 SECURITY_INFORMATION RequestedInformation
,
848 PSECURITY_DESCRIPTOR pSecurityDescriptor
)
850 FIXME("(%s) : stub\n", debugstr_w(lpFileName
) );
854 /******************************************************************************
855 * QueryWindows31FilesMigration [ADVAPI32.@]
861 QueryWindows31FilesMigration( DWORD x1
)
863 FIXME("(%ld):stub\n",x1
);
867 /******************************************************************************
868 * SynchronizeWindows31FilesAndWindowsNTRegistry [ADVAPI32.@]
877 SynchronizeWindows31FilesAndWindowsNTRegistry( DWORD x1
, DWORD x2
, DWORD x3
,
880 FIXME("(0x%08lx,0x%08lx,0x%08lx,0x%08lx):stub\n",x1
,x2
,x3
,x4
);
884 /******************************************************************************
885 * LsaOpenPolicy [ADVAPI32.@]
895 IN PLSA_UNICODE_STRING SystemName
,
896 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes
,
897 IN ACCESS_MASK DesiredAccess
,
898 IN OUT PLSA_HANDLE PolicyHandle
)
900 FIXME("(%s,%p,0x%08lx,%p):stub\n",
901 SystemName
?debugstr_w(SystemName
->Buffer
):"null",
902 ObjectAttributes
, DesiredAccess
, PolicyHandle
);
903 ADVAPI_ForceLocalComputer(SystemName
? SystemName
->Buffer
: NULL
,
904 STATUS_ACCESS_VIOLATION
);
905 dumpLsaAttributes(ObjectAttributes
);
906 if(PolicyHandle
) *PolicyHandle
= (LSA_HANDLE
)0xcafe;
907 return STATUS_SUCCESS
;
910 /******************************************************************************
911 * LsaQueryInformationPolicy [ADVAPI32.@]
914 LsaQueryInformationPolicy(
915 IN LSA_HANDLE PolicyHandle
,
916 IN POLICY_INFORMATION_CLASS InformationClass
,
919 FIXME("(%p,0x%08x,%p):stub\n",
920 PolicyHandle
, InformationClass
, Buffer
);
922 if(!Buffer
) return FALSE
;
923 switch (InformationClass
)
925 case PolicyAuditEventsInformation
: /* 2 */
927 PPOLICY_AUDIT_EVENTS_INFO p
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(POLICY_AUDIT_EVENTS_INFO
));
928 p
->AuditingMode
= FALSE
; /* no auditing */
932 case PolicyPrimaryDomainInformation
: /* 3 */
933 case PolicyAccountDomainInformation
: /* 5 */
936 { POLICY_PRIMARY_DOMAIN_INFO ppdi
;
939 SID_IDENTIFIER_AUTHORITY localSidAuthority
= {SECURITY_NT_AUTHORITY
};
941 struct di
* xdi
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(xdi
));
942 RtlCreateUnicodeStringFromAsciiz(&(xdi
->ppdi
.Name
), "DOMAIN");
944 xdi
->ppdi
.Sid
= &(xdi
->sid
);
945 xdi
->sid
.Revision
= SID_REVISION
;
946 xdi
->sid
.SubAuthorityCount
= 1;
947 xdi
->sid
.IdentifierAuthority
= localSidAuthority
;
948 xdi
->sid
.SubAuthority
[0] = SECURITY_LOCAL_SYSTEM_RID
;
952 case PolicyAuditLogInformation
:
953 case PolicyPdAccountInformation
:
954 case PolicyLsaServerRoleInformation
:
955 case PolicyReplicaSourceInformation
:
956 case PolicyDefaultQuotaInformation
:
957 case PolicyModificationInformation
:
958 case PolicyAuditFullSetInformation
:
959 case PolicyAuditFullQueryInformation
:
960 case PolicyDnsDomainInformation
:
962 FIXME("category not implemented\n");
969 /******************************************************************************
970 * LsaLookupSids [ADVAPI32.@]
975 LSA_UNICODE_STRING Name
;
977 } LSA_TRANSLATED_NAME
, *PLSA_TRANSLATED_NAME
;
981 LSA_UNICODE_STRING Name
;
983 } LSA_TRUST_INFORMATION
, *PLSA_TRUST_INFORMATION
;
988 PLSA_TRUST_INFORMATION Domains
;
989 } LSA_REFERENCED_DOMAIN_LIST
, *PLSA_REFERENCED_DOMAIN_LIST
;
993 IN LSA_HANDLE PolicyHandle
,
996 OUT PLSA_REFERENCED_DOMAIN_LIST
*ReferencedDomains
,
997 OUT PLSA_TRANSLATED_NAME
*Names
)
999 FIXME("%p %lu %p %p %p\n",
1000 PolicyHandle
, Count
, Sids
, ReferencedDomains
, Names
);
1004 /******************************************************************************
1005 * LsaFreeMemory [ADVAPI32.@]
1008 LsaFreeMemory(IN PVOID Buffer
)
1010 TRACE("(%p)\n",Buffer
);
1011 return HeapFree(GetProcessHeap(), 0, Buffer
);
1013 /******************************************************************************
1014 * LsaClose [ADVAPI32.@]
1017 LsaClose(IN LSA_HANDLE ObjectHandle
)
1019 FIXME("(%p):stub\n",ObjectHandle
);
1023 /******************************************************************************
1024 * LsaNtStatusToWinError [ADVAPI32.@]
1030 LsaNtStatusToWinError(NTSTATUS Status
)
1032 return RtlNtStatusToDosError(Status
);
1035 /******************************************************************************
1036 * NotifyBootConfigStatus [ADVAPI32.@]
1042 NotifyBootConfigStatus( DWORD x1
)
1044 FIXME("(0x%08lx):stub\n",x1
);
1048 /******************************************************************************
1049 * RevertToSelf [ADVAPI32.@]
1055 RevertToSelf( void )
1057 FIXME("(), stub\n");
1061 /******************************************************************************
1062 * ImpersonateSelf [ADVAPI32.@]
1065 ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
)
1067 return RtlImpersonateSelf(ImpersonationLevel
);
1070 /******************************************************************************
1071 * ImpersonateLoggedOnUser [ADVAPI32.@]
1073 BOOL WINAPI
ImpersonateLoggedOnUser(HANDLE hToken
)
1075 FIXME("(%p):stub returning FALSE\n", hToken
);
1079 /******************************************************************************
1080 * AccessCheck [ADVAPI32.@]
1082 * FIXME check cast LPBOOL to PBOOLEAN
1086 PSECURITY_DESCRIPTOR SecurityDescriptor
,
1088 DWORD DesiredAccess
,
1089 PGENERIC_MAPPING GenericMapping
,
1090 PPRIVILEGE_SET PrivilegeSet
,
1091 LPDWORD PrivilegeSetLength
,
1092 LPDWORD GrantedAccess
,
1093 LPBOOL AccessStatus
)
1095 CallWin32ToNt (NtAccessCheck(SecurityDescriptor
, ClientToken
, DesiredAccess
,
1096 GenericMapping
, PrivilegeSet
, PrivilegeSetLength
, GrantedAccess
, (PBOOLEAN
)AccessStatus
));
1099 /*************************************************************************
1100 * SetKernelObjectSecurity [ADVAPI32.@]
1102 BOOL WINAPI
SetKernelObjectSecurity (
1104 IN SECURITY_INFORMATION SecurityInformation
,
1105 IN PSECURITY_DESCRIPTOR SecurityDescriptor
)
1107 CallWin32ToNt (NtSetSecurityObject (Handle
, SecurityInformation
, SecurityDescriptor
));
1110 /******************************************************************************
1111 * AddAccessAllowedAce [ADVAPI32.@]
1113 BOOL WINAPI
AddAccessAllowedAce(
1115 IN DWORD dwAceRevision
,
1116 IN DWORD AccessMask
,
1119 return RtlAddAccessAllowedAce(pAcl
, dwAceRevision
, AccessMask
, pSid
);
1122 /******************************************************************************
1123 * LookupAccountNameA [ADVAPI32.@]
1131 LPSTR ReferencedDomainName
,
1132 IN OUT LPDWORD cbReferencedDomainName
,
1133 OUT PSID_NAME_USE name_use
)
1135 FIXME("(%s,%s,%p,%p,%p,%p,%p), stub.\n",system
,account
,sid
,cbSid
,ReferencedDomainName
,cbReferencedDomainName
,name_use
);
1139 /******************************************************************************
1140 * GetAce [ADVAPI32.@]
1142 BOOL WINAPI
GetAce(PACL pAcl
,DWORD dwAceIndex
,LPVOID
*pAce
)
1144 CallWin32ToNt(RtlGetAce(pAcl
, dwAceIndex
, pAce
));
1147 /******************************************************************************
1148 * PrivilegeCheck [ADVAPI32.@]
1150 BOOL WINAPI
PrivilegeCheck( HANDLE ClientToken
, PPRIVILEGE_SET RequiredPrivileges
, LPBOOL pfResult
)
1152 FIXME("stub %p %p %p\n", ClientToken
, RequiredPrivileges
, pfResult
);
1158 /******************************************************************************
1159 * GetSecurityInfoExW [ADVAPI32.@]
1161 DWORD WINAPI
GetSecurityInfoExW(
1162 HANDLE hObject
, SE_OBJECT_TYPE ObjectType
,
1163 SECURITY_INFORMATION SecurityInfo
, LPCWSTR lpProvider
,
1164 LPCWSTR lpProperty
, PACTRL_ACCESSW
*ppAccessList
,
1165 PACTRL_AUDITW
*ppAuditList
, LPWSTR
*lppOwner
, LPWSTR
*lppGroup
1169 return ERROR_BAD_PROVIDER
;