What I'm trying to understand is whether LogonUser with LOGON32_LOGON_INTERACTIVE produces restricted token or not? Here is my code:
int davai()
{
FILE * fp;
fp = fopen ("C:\\tmp\\davai.txt", "a");
fprintf(fp, "shevedi davai");
fflush(fp);
HANDLE token = NULL;
HANDLE dupToken = NULL;
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_DUPLICATE, &token))
{
  fprintf(fp, "davai: OpenProcessToken cheijva. %d\n", (int)GetLastError());
  fflush(fp);
}
if (DuplicateTokenEx(token, MAXIMUM_ALLOWED, NULL, SecurityDelegation,
                          TokenPrimary, &dupToken) == 0)
{
  fprintf(fp, "davai: OpenProcessToken DuplicateTokenEx. %d\n", (int)GetLastError());
  fflush(fp);
}
PTOKEN_GROUPS pPrivilegesToken = NULL;
DWORD cbSize = 0;
GetTokenInformation(dupToken, TokenGroups, NULL, 0, &cbSize);
pPrivilegesToken = (PTOKEN_GROUPS) LocalAlloc(LPTR, cbSize);
if (GetTokenInformation(dupToken, TokenGroups, 
                             pPrivilegesToken, cbSize, &cbSize) == FALSE)
{
  fprintf(fp, "davai: GetTokenInformation cheijva. %d\n", (int)GetLastError());
  fflush(fp);
}
char * gio;
for (ULONG i = 0; i < pPrivilegesToken->GroupCount; i++)
{
  if (ConvertSidToStringSid(pPrivilegesToken->Groups[i].Sid, &gio) == 0)
  {
    fprintf(fp, "davai: ConvertSidToStringSid cheijva. %d\n", (int)GetLastError());
    fflush(fp);
  }
 
  fprintf(fp, "Value: %s attribute -> %ld \n",gio, pPrivilegesToken->Groups[i].Attributes);
  fflush(fp);
}
LocalFree (gio);
return 1;
}
which is run by a token which was obtained by LOGON32_LOGON_INTERACTIVE. And my output is this:
Value: S-1-5-21-1018819917-2920201817-244685803-513 attribute -> 7 
Value: S-1-1-0 attribute -> 7 
Value: S-1-5-21-1018819917-2920201817-244685803-1000 attribute -> 7 
Value: S-1-5-32-544 attribute -> 16 
Value: S-1-5-32-545 attribute -> 7 
Value: S-1-5-4 attribute -> 7 
Value: S-1-2-1 attribute -> 7 
Value: S-1-5-11 attribute -> 7 
Value: S-1-5-15 attribute -> 7 
Value: S-1-5-5-0-19732224 attribute -> -1073741817 
Value: S-1-5-64-10 attribute -> 7 
Value: S-1-16-8192 attribute -> 96 
Notice the 16 with Administrators Group. If I use LOGON32_LOGON_BATCH I get this:
S-1-5-21-1018819917-2920201817-244685803-513 attribute -> 7 
Value: S-1-1-0 attribute -> 7 
Value: S-1-5-21-1018819917-2920201817-244685803-1000 attribute -> 7 
Value: S-1-5-32-544 attribute -> 15 
Value: S-1-5-32-545 attribute -> 7 
Value: S-1-5-3 attribute -> 7 
Value: S-1-2-1 attribute -> 7 
Value: S-1-5-11 attribute -> 7 
Value: S-1-5-15 attribute -> 7 
Value: S-1-2-0 attribute -> 7 
Value: S-1-5-5-0-20537541 attribute -> -1073741817 
Value: S-1-5-64-10 attribute -> 7 
Value: S-1-16-12288 attribute -> 96 
I also found that some people have same problem as I do.
- IsAdminUser returns incorrect value 
 - In Windows: How do you programatically launch a process in administrator mode under another user context?
 - How to call LogonUser() to get a non-restricted full token inside a Windows Service with UAC enabled?
 
It seems to me that LOGON32_LOGON_INTERACTIVE produces restricted token (or is it that just different types of logons produce different kind of token?), Is there any documentation that would verify that I'm right?

