mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 19:41:45 +00:00
[SHELL32] Implement SHTestTokenMembership and forward IsUserAnAdmin to it
Moved to the bottom of the file with the other ros functions to help keep wine syncs easier.
This commit is contained in:
parent
6748d72c9f
commit
0649f25b48
3 changed files with 76 additions and 86 deletions
|
@ -1316,17 +1316,6 @@ SHGetProcessDword(DWORD dwUnknown1, DWORD dwUnknown2)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Unimplemented
|
|
||||||
*/
|
|
||||||
EXTERN_C BOOL
|
|
||||||
WINAPI
|
|
||||||
SHTestTokenMembership(HANDLE TokenHandle, ULONG SidToCheck)
|
|
||||||
{
|
|
||||||
FIXME("SHTestTokenMembership() stub\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unimplemented
|
* Unimplemented
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* (NT uses Unicode strings, 95 uses ASCII strings)
|
* (NT uses Unicode strings, 95 uses ASCII strings)
|
||||||
*
|
*
|
||||||
* Copyright 1997 Marcus Meissner
|
* Copyright 1997 Marcus Meissner
|
||||||
* 1998 Jürgen Schmied
|
* 1998 Jürgen Schmied
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -1300,80 +1300,6 @@ BOOL WINAPI FileIconInit(BOOL bFullInit)
|
||||||
return SIC_Initialize();
|
return SIC_Initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
* IsUserAnAdmin [SHELL32.680] NT 4.0
|
|
||||||
*
|
|
||||||
* Checks whether the current user is a member of the Administrators group.
|
|
||||||
*
|
|
||||||
* PARAMS
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
* RETURNS
|
|
||||||
* Success: TRUE
|
|
||||||
* Failure: FALSE
|
|
||||||
*/
|
|
||||||
BOOL WINAPI IsUserAnAdmin(VOID)
|
|
||||||
{
|
|
||||||
SID_IDENTIFIER_AUTHORITY Authority = {SECURITY_NT_AUTHORITY};
|
|
||||||
HANDLE hToken;
|
|
||||||
DWORD dwSize;
|
|
||||||
PTOKEN_GROUPS lpGroups;
|
|
||||||
PSID lpSid;
|
|
||||||
DWORD i;
|
|
||||||
BOOL bResult = FALSE;
|
|
||||||
|
|
||||||
TRACE("\n");
|
|
||||||
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!GetTokenInformation(hToken, TokenGroups, NULL, 0, &dwSize))
|
|
||||||
{
|
|
||||||
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
|
|
||||||
{
|
|
||||||
CloseHandle(hToken);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lpGroups = HeapAlloc(GetProcessHeap(), 0, dwSize);
|
|
||||||
if (lpGroups == NULL)
|
|
||||||
{
|
|
||||||
CloseHandle(hToken);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!GetTokenInformation(hToken, TokenGroups, lpGroups, dwSize, &dwSize))
|
|
||||||
{
|
|
||||||
HeapFree(GetProcessHeap(), 0, lpGroups);
|
|
||||||
CloseHandle(hToken);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
CloseHandle(hToken);
|
|
||||||
if (!AllocateAndInitializeSid(&Authority, 2, SECURITY_BUILTIN_DOMAIN_RID,
|
|
||||||
DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0,
|
|
||||||
&lpSid))
|
|
||||||
{
|
|
||||||
HeapFree(GetProcessHeap(), 0, lpGroups);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < lpGroups->GroupCount; i++)
|
|
||||||
{
|
|
||||||
if (EqualSid(lpSid, lpGroups->Groups[i].Sid))
|
|
||||||
{
|
|
||||||
bResult = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FreeSid(lpSid);
|
|
||||||
HeapFree(GetProcessHeap(), 0, lpGroups);
|
|
||||||
return bResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* SetAppStartingCursor [SHELL32.99]
|
* SetAppStartingCursor [SHELL32.99]
|
||||||
*/
|
*/
|
||||||
|
@ -2149,3 +2075,70 @@ HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv,
|
||||||
return hRes;
|
return hRes;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* SHTestTokenMembership [SHELL32.245]
|
||||||
|
*
|
||||||
|
* Checks whether a given token is a mamber of a local group with the
|
||||||
|
* specified RID.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
EXTERN_C BOOL
|
||||||
|
WINAPI
|
||||||
|
SHTestTokenMembership(HANDLE TokenHandle, ULONG ulRID)
|
||||||
|
{
|
||||||
|
SID_IDENTIFIER_AUTHORITY ntAuth = {SECURITY_NT_AUTHORITY};
|
||||||
|
DWORD nSubAuthority0, nSubAuthority1;
|
||||||
|
DWORD nSubAuthorityCount;
|
||||||
|
PSID SidToCheck;
|
||||||
|
BOOL IsMember = FALSE;
|
||||||
|
|
||||||
|
if ((ulRID == SECURITY_SERVICE_RID) || ulRID == SECURITY_LOCAL_SYSTEM_RID)
|
||||||
|
{
|
||||||
|
nSubAuthority0 = ulRID;
|
||||||
|
nSubAuthority1 = 0;
|
||||||
|
nSubAuthorityCount= 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nSubAuthority0 = SECURITY_BUILTIN_DOMAIN_RID;
|
||||||
|
nSubAuthority1 = ulRID;
|
||||||
|
nSubAuthorityCount= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!AllocateAndInitializeSid(&ntAuth,
|
||||||
|
nSubAuthorityCount,
|
||||||
|
nSubAuthority0,
|
||||||
|
nSubAuthority1,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
&SidToCheck))
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!CheckTokenMembership(TokenHandle, SidToCheck, &IsMember))
|
||||||
|
{
|
||||||
|
IsMember = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
FreeSid(SidToCheck);
|
||||||
|
return IsMember;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* IsUserAnAdmin [SHELL32.680] NT 4.0
|
||||||
|
*
|
||||||
|
* Checks whether the current user is a member of the Administrators group.
|
||||||
|
*
|
||||||
|
* PARAMS
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* RETURNS
|
||||||
|
* Success: TRUE
|
||||||
|
* Failure: FALSE
|
||||||
|
*/
|
||||||
|
BOOL WINAPI IsUserAnAdmin(VOID)
|
||||||
|
{
|
||||||
|
return SHTestTokenMembership(NULL, DOMAIN_ALIAS_RID_ADMINS);
|
||||||
|
}
|
|
@ -632,6 +632,14 @@ DoEnvironmentSubstW(
|
||||||
_Inout_updates_(cchSrc) LPWSTR pszSrc,
|
_Inout_updates_(cchSrc) LPWSTR pszSrc,
|
||||||
UINT cchSrc);
|
UINT cchSrc);
|
||||||
|
|
||||||
|
#if (_WIN32_IE >= 0x0601)
|
||||||
|
BOOL
|
||||||
|
WINAPI
|
||||||
|
SHTestTokenMembership(
|
||||||
|
_In_opt_ HANDLE hToken,
|
||||||
|
_In_ ULONG ulRID);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef UNICODE
|
#ifdef UNICODE
|
||||||
#define NOTIFYICONDATA_V1_SIZE NOTIFYICONDATAW_V1_SIZE
|
#define NOTIFYICONDATA_V1_SIZE NOTIFYICONDATAW_V1_SIZE
|
||||||
#define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAW_V2_SIZE
|
#define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAW_V2_SIZE
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue