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:
Hervé Poussineau 2007-08-31 09:49:48 +00:00
parent 3095e9d9e8
commit 03980448f8
4 changed files with 81 additions and 91 deletions

View file

@ -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)

View file

@ -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.@]
* *

View file

@ -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)

View file

@ -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;
} }
/************************************************************************* /*************************************************************************