Replacing GINA
-
I'm working on a GINA replacement, because we need to do some custom log on of the users. I have one major problem that I can't find any solutions for. When the user is logged on, the start-menu is, err..., not exactly disabled but it's acting very strage. Fucus is not folloving the mouse, and it don't respond to mouse clicks. Anyone got an idea? I have been searching google and found other people with the same problem, but not any solutions. :( - Anders Money talks, but all mine ever says is "Goodbye!"
-
I'm working on a GINA replacement, because we need to do some custom log on of the users. I have one major problem that I can't find any solutions for. When the user is logged on, the start-menu is, err..., not exactly disabled but it's acting very strage. Fucus is not folloving the mouse, and it don't respond to mouse clicks. Anyone got an idea? I have been searching google and found other people with the same problem, but not any solutions. :( - Anders Money talks, but all mine ever says is "Goodbye!"
Are you sure you setup proper security descriptors for the WinSta0 and WinSta0/Default windowstation/desktop objects? Seems that the user account the shell process is running under has not the proper access rights to create menus. -- Daniel Lohmann http://www.losoft.de (Hey, this page is worth looking! You can find some free and handy NT tools there :-D )
-
Are you sure you setup proper security descriptors for the WinSta0 and WinSta0/Default windowstation/desktop objects? Seems that the user account the shell process is running under has not the proper access rights to create menus. -- Daniel Lohmann http://www.losoft.de (Hey, this page is worth looking! You can find some free and handy NT tools there :-D )
I found this a couple of hours ago, and it did the trick :)
TOKEN\_GROUPS \*pGroups; DWORD dwSize, i; BOOL status = FALSE; pGroups = (\_TOKEN\_GROUPS\*)LocalAlloc(LMEM\_FIXED, 2048); GetTokenInformation(pgContext->UserToken, TokenGroups, pGroups, 2048, &dwSize); for (i = 0; i < pGroups->GroupCount; i++) { if ((pGroups->Groups\[i\].Attributes & SE\_GROUP\_LOGON\_ID) == SE\_GROUP\_LOGON\_ID) { CopySid(GetLengthSid(pLogonSid), pLogonSid, pGroups->Groups\[i\].Sid ); break; } } LocalFree(pGroups);
- Anders Money talks, but all mine ever says is "Goodbye!"