mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 09:50:02 +00:00
Implement IsUserAnAdmin(), by copying implementation of IsUserAdmin() in setupapi (was implemented by Eric Kohl)
Redirect setupapi.IsUserAdmin to shell32.IsUserAnAdmin svn path=/trunk/; revision=28693
This commit is contained in:
parent
3095e9d9e8
commit
03980448f8
4 changed files with 81 additions and 91 deletions
|
@ -135,7 +135,7 @@ CONFIGRET WINAPI CMP_Report_LogOn(
|
||||||
if (!PnpGetLocalHandles(&BindingHandle, NULL))
|
if (!PnpGetLocalHandles(&BindingHandle, NULL))
|
||||||
return CR_FAILURE;
|
return CR_FAILURE;
|
||||||
|
|
||||||
bAdmin = IsUserAdmin();
|
bAdmin = IsUserAnAdmin();
|
||||||
|
|
||||||
for (i = 0; i < 30; i++)
|
for (i = 0; i < 30; i++)
|
||||||
{
|
{
|
||||||
|
@ -182,7 +182,7 @@ CONFIGRET WINAPI CM_Add_Empty_Log_Conf_Ex(
|
||||||
FIXME("%p %p %lu %lx %p\n",
|
FIXME("%p %p %lu %lx %p\n",
|
||||||
plcLogConf, dnDevInst, Priority, ulFlags, hMachine);
|
plcLogConf, dnDevInst, Priority, ulFlags, hMachine);
|
||||||
|
|
||||||
if (!IsUserAdmin())
|
if (!IsUserAnAdmin())
|
||||||
return CR_ACCESS_DENIED;
|
return CR_ACCESS_DENIED;
|
||||||
|
|
||||||
if (plcLogConf == NULL)
|
if (plcLogConf == NULL)
|
||||||
|
@ -298,7 +298,7 @@ CONFIGRET WINAPI CM_Add_ID_ExW(
|
||||||
|
|
||||||
TRACE("%p %s %lx %p\n", dnDevInst, debugstr_w(pszID), ulFlags, hMachine);
|
TRACE("%p %s %lx %p\n", dnDevInst, debugstr_w(pszID), ulFlags, hMachine);
|
||||||
|
|
||||||
if (!IsUserAdmin())
|
if (!IsUserAnAdmin())
|
||||||
return CR_ACCESS_DENIED;
|
return CR_ACCESS_DENIED;
|
||||||
|
|
||||||
if (dnDevInst == 0)
|
if (dnDevInst == 0)
|
||||||
|
@ -490,7 +490,7 @@ CONFIGRET WINAPI CM_Create_DevNode_ExW(
|
||||||
FIXME("%p %s %p %lx %p\n",
|
FIXME("%p %s %p %lx %p\n",
|
||||||
pdnDevInst, debugstr_w(pDeviceID), dnParent, ulFlags, hMachine);
|
pdnDevInst, debugstr_w(pDeviceID), dnParent, ulFlags, hMachine);
|
||||||
|
|
||||||
if (!IsUserAdmin())
|
if (!IsUserAnAdmin())
|
||||||
return CR_ACCESS_DENIED;
|
return CR_ACCESS_DENIED;
|
||||||
|
|
||||||
if (pdnDevInst == NULL)
|
if (pdnDevInst == NULL)
|
||||||
|
@ -637,7 +637,7 @@ CONFIGRET WINAPI CM_Disable_DevNode_Ex(
|
||||||
|
|
||||||
FIXME("%p %lx %p\n", dnDevInst, ulFlags, hMachine);
|
FIXME("%p %lx %p\n", dnDevInst, ulFlags, hMachine);
|
||||||
|
|
||||||
if (!IsUserAdmin())
|
if (!IsUserAnAdmin())
|
||||||
return CR_ACCESS_DENIED;
|
return CR_ACCESS_DENIED;
|
||||||
|
|
||||||
if (dnDevInst == 0)
|
if (dnDevInst == 0)
|
||||||
|
@ -725,7 +725,7 @@ CONFIGRET WINAPI CM_Enable_DevNode_Ex(
|
||||||
|
|
||||||
FIXME("%p %lx %p\n", dnDevInst, ulFlags, hMachine);
|
FIXME("%p %lx %p\n", dnDevInst, ulFlags, hMachine);
|
||||||
|
|
||||||
if (!IsUserAdmin())
|
if (!IsUserAnAdmin())
|
||||||
return CR_ACCESS_DENIED;
|
return CR_ACCESS_DENIED;
|
||||||
|
|
||||||
if (dnDevInst == 0)
|
if (dnDevInst == 0)
|
||||||
|
@ -961,7 +961,7 @@ CONFIGRET WINAPI CM_Free_Log_Conf_Ex(
|
||||||
|
|
||||||
TRACE("%lx %lx %lx\n", lcLogConfToBeFreed, ulFlags, hMachine);
|
TRACE("%lx %lx %lx\n", lcLogConfToBeFreed, ulFlags, hMachine);
|
||||||
|
|
||||||
if (!IsUserAdmin())
|
if (!IsUserAnAdmin())
|
||||||
return CR_ACCESS_DENIED;
|
return CR_ACCESS_DENIED;
|
||||||
|
|
||||||
pLogConfInfo = (PLOG_CONF_INFO)lcLogConfToBeFreed;
|
pLogConfInfo = (PLOG_CONF_INFO)lcLogConfToBeFreed;
|
||||||
|
@ -2707,7 +2707,7 @@ CONFIGRET WINAPI CM_Move_DevNode_Ex(
|
||||||
FIXME("%lx %lx %lx %lx\n",
|
FIXME("%lx %lx %lx %lx\n",
|
||||||
dnFromDevInst, dnToDevInst, ulFlags, hMachine);
|
dnFromDevInst, dnToDevInst, ulFlags, hMachine);
|
||||||
|
|
||||||
if (!IsUserAdmin())
|
if (!IsUserAnAdmin())
|
||||||
return CR_ACCESS_DENIED;
|
return CR_ACCESS_DENIED;
|
||||||
|
|
||||||
if (dnFromDevInst == 0 || dnToDevInst == 0)
|
if (dnFromDevInst == 0 || dnToDevInst == 0)
|
||||||
|
@ -3051,7 +3051,7 @@ CONFIGRET WINAPI CM_Run_Detection_Ex(
|
||||||
|
|
||||||
TRACE("%lx %lx\n", ulFlags, hMachine);
|
TRACE("%lx %lx\n", ulFlags, hMachine);
|
||||||
|
|
||||||
if (!IsUserAdmin())
|
if (!IsUserAnAdmin())
|
||||||
return CR_ACCESS_DENIED;
|
return CR_ACCESS_DENIED;
|
||||||
|
|
||||||
if (ulFlags & ~CM_DETECT_BITS)
|
if (ulFlags & ~CM_DETECT_BITS)
|
||||||
|
@ -3525,7 +3525,7 @@ CONFIGRET WINAPI CM_Setup_DevNode_Ex(
|
||||||
|
|
||||||
FIXME("%lx %lx %lx\n", dnDevInst, ulFlags, hMachine);
|
FIXME("%lx %lx %lx\n", dnDevInst, ulFlags, hMachine);
|
||||||
|
|
||||||
if (!IsUserAdmin())
|
if (!IsUserAnAdmin())
|
||||||
return CR_ACCESS_DENIED;
|
return CR_ACCESS_DENIED;
|
||||||
|
|
||||||
if (dnDevInst == 0)
|
if (dnDevInst == 0)
|
||||||
|
|
|
@ -249,84 +249,6 @@ LONG WINAPI QueryRegistryValue(HKEY hKey,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* IsUserAdmin [SETUPAPI.@]
|
|
||||||
*
|
|
||||||
* Checks whether the current user is a member of the Administrators group.
|
|
||||||
*
|
|
||||||
* PARAMS
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
* RETURNS
|
|
||||||
* Success: TRUE
|
|
||||||
* Failure: FALSE
|
|
||||||
*/
|
|
||||||
BOOL WINAPI IsUserAdmin(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 = MyMalloc(dwSize);
|
|
||||||
if (lpGroups == NULL)
|
|
||||||
{
|
|
||||||
CloseHandle(hToken);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!GetTokenInformation(hToken, TokenGroups, lpGroups, dwSize, &dwSize))
|
|
||||||
{
|
|
||||||
MyFree(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))
|
|
||||||
{
|
|
||||||
MyFree(lpGroups);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < lpGroups->GroupCount; i++)
|
|
||||||
{
|
|
||||||
if (EqualSid(lpSid, lpGroups->Groups[i].Sid))
|
|
||||||
{
|
|
||||||
bResult = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FreeSid(lpSid);
|
|
||||||
MyFree(lpGroups);
|
|
||||||
|
|
||||||
return bResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* MultiByteToUnicode [SETUPAPI.@]
|
* MultiByteToUnicode [SETUPAPI.@]
|
||||||
*
|
*
|
||||||
|
|
|
@ -216,7 +216,7 @@
|
||||||
@ stdcall InstallHinfSectionW(long long wstr long)
|
@ stdcall InstallHinfSectionW(long long wstr long)
|
||||||
@ stub InstallStop
|
@ stub InstallStop
|
||||||
@ stub InstallStopEx
|
@ stub InstallStopEx
|
||||||
@ stdcall IsUserAdmin()
|
@ stdcall IsUserAdmin=shell32.IsUserAnAdmin()
|
||||||
@ stub LookUpStringInTable
|
@ stub LookUpStringInTable
|
||||||
@ stub MemoryInitialize
|
@ stub MemoryInitialize
|
||||||
@ stdcall MultiByteToUnicode(str long)
|
@ stdcall MultiByteToUnicode(str long)
|
||||||
|
|
|
@ -1227,10 +1227,78 @@ BOOL WINAPI FileIconInit(BOOL bFullInit)
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* IsUserAnAdmin [SHELL32.680] NT 4.0
|
* 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)
|
BOOL WINAPI IsUserAnAdmin(VOID)
|
||||||
{ FIXME("stub\n");
|
{
|
||||||
return TRUE;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
|
Loading…
Reference in a new issue