if (!PnpGetLocalHandles(&BindingHandle, NULL))
return CR_FAILURE;
- bAdmin = IsUserAnAdmin();
+ bAdmin = IsUserAdmin();
for (i = 0; i < 30; i++)
{
FIXME("%p %p %lu %lx %p\n",
plcLogConf, dnDevInst, Priority, ulFlags, hMachine);
- if (!IsUserAnAdmin())
+ if (!IsUserAdmin())
return CR_ACCESS_DENIED;
if (plcLogConf == NULL)
TRACE("%p %s %lx %p\n", dnDevInst, debugstr_w(pszID), ulFlags, hMachine);
- if (!IsUserAnAdmin())
+ if (!IsUserAdmin())
return CR_ACCESS_DENIED;
if (dnDevInst == 0)
FIXME("%p %s %p %lx %p\n",
pdnDevInst, debugstr_w(pDeviceID), dnParent, ulFlags, hMachine);
- if (!IsUserAnAdmin())
+ if (!IsUserAdmin())
return CR_ACCESS_DENIED;
if (pdnDevInst == NULL)
FIXME("%p %lx %p\n", dnDevInst, ulFlags, hMachine);
- if (!IsUserAnAdmin())
+ if (!IsUserAdmin())
return CR_ACCESS_DENIED;
if (dnDevInst == 0)
FIXME("%p %lx %p\n", dnDevInst, ulFlags, hMachine);
- if (!IsUserAnAdmin())
+ if (!IsUserAdmin())
return CR_ACCESS_DENIED;
if (dnDevInst == 0)
TRACE("%lx %lx %lx\n", lcLogConfToBeFreed, ulFlags, hMachine);
- if (!IsUserAnAdmin())
+ if (!IsUserAdmin())
return CR_ACCESS_DENIED;
pLogConfInfo = (PLOG_CONF_INFO)lcLogConfToBeFreed;
FIXME("%lx %lx %lx %lx\n",
dnFromDevInst, dnToDevInst, ulFlags, hMachine);
- if (!IsUserAnAdmin())
+ if (!IsUserAdmin())
return CR_ACCESS_DENIED;
if (dnFromDevInst == 0 || dnToDevInst == 0)
TRACE("%lx %lx\n", ulFlags, hMachine);
- if (!IsUserAnAdmin())
+ if (!IsUserAdmin())
return CR_ACCESS_DENIED;
if (ulFlags & ~CM_DETECT_BITS)
FIXME("%lx %lx %lx\n", dnDevInst, ulFlags, hMachine);
- if (!IsUserAnAdmin())
+ if (!IsUserAdmin())
return CR_ACCESS_DENIED;
if (dnDevInst == 0)
{
return IsEqualGUID(lpGUID, &GUID_NULL);
}
+
+/*
+ * implemented
+ */
+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;
+
+ 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;
+}
@ stdcall InstallHinfSection(long long str long) InstallHinfSectionA
@ stdcall InstallHinfSectionA(long long str long)
@ stdcall InstallHinfSectionW(long long wstr long)
-@ stdcall IsUserAdmin() shell32.IsUserAnAdmin
+@ stdcall IsUserAdmin()
@ stdcall MyFree(ptr)
@ stdcall MyMalloc(long)
@ stdcall MyRealloc(ptr long)
@ stub pSetupInstallStopEx
@ stdcall pSetupIsGuidNull(ptr)
@ stub pSetupIsLocalSystem
-@ stub pSetupIsUserAdmin
+@ stdcall pSetupIsUserAdmin() IsUserAdmin
@ stub pSetupMakeSurePathExists
@ stub pSetupMalloc
@ stub pSetupModifyGlobalFlags