Prev: CreateFile() returns ERROR_ACCESS_DENIED to the user
Next: Processes spawned from service occasionally die due to 0xc0000142
From: dc2000 on 15 Nov 2006 00:08 Thanks. But how will I get HANDLE hWlx to call that API? Please note that I'm not calling this API from GINA replacement DLL. "Skywing [MVP]" wrote: > WlxDialogBox* from a GINA DLL. Note that GINA DLLs are obsolete and > unusable in Windows Vista and future OS releases. > > -- > Ken Johnson (Skywing) > Windows SDK MVP > http://www.nynaeve.net > > "dc2000" <dc2000(a)discussions.microsoft.com> wrote in message > news:B5021860-82E2-4EB8-BD9B-48B2C7AA6B1F(a)microsoft.com... > > Hey, it just dawned on me. Is there any way to display my own dialog > > window > > during Winlogon? > > > > > > "anton bassov" wrote: > > > >> Hi mate > >> > >> > Everything works fine when user's desktop is shown. If I go into > >> > Winlogon by > >> > clicking Start -> Log Off -> Switch User (see picture here: > >> > http://www.codeguru.com/forum/attachment.php?attachmentid=17852&stc=1), > >> > the > >> > message is displayed but FindWindow() returns NULL. I tried > >> > EnumWindows() and > >> > it failed as well. > >> > >> When you specify MB_SERVICE_NOTIFICATION flag, message box is displayed > >> as ZwRaiseHardError() call, so that it is owned by csrss.exe, rather > >> than by caller, and,as a result, it gets displayed on currently active > >> desktop. However, it does not mean that the caller has an access to > >> this destop. In general, under Windows, desktop is a security boundary. > >> Therefore, FindWindow() and EnumWindows() are able to find and > >> enumerate > >> only those windows that belong to the desktop the caller is associated > >> with > >> > >> > >> > >> > I heard that one solution would be to use CBT_HOOK but for that I will > >> > need > >> > a separate DLL module (for global hook), > >> > >> It is not going to work either - Windows hooks are of desktop-level > >> scope > >> > >> > >> > Does anyone know how to get a handle to this message box during > >> > Winlogon? > >> > >> You cannot do it in your application's context - no one, apart from > >> Winlogon.exe, has an access to "Winlogon" desktop. If you are Admin, > >> you may assign yourself privileges of LocalSystem account, so that you > >> are able to open a handle to Winlogon.exe and inject a DLL into it > >> > >> Anton Bassov > >> > >> dc2000 wrote: > >> > Hi everyone: > >> > > >> > > >> > I have a tricky situation. My app displays a message box using > >> > MB_SERVICE_NOTIFICATION flag like this: > >> > > >> > ::MessageBox(NULL, message, title, MB_OK | MB_ICONINFORMATION | > >> > MB_SERVICE_NOTIFICATION); > >> > > >> > I'm using MB_SERVICE_NOTIFICATION since I need this message to be > >> > displayed > >> > over screen-saver, or Winlogon as well. > >> > > >> > > >> > When the window is shown on the screen I use WM_TIMER message and > >> > FindWindow() to get the handle of the Message Box and later update text > >> > displayed in it. > >> > > >> > HWND hMsgBxWnd = ::FindWindow("#32770", title); > >> > > >> > //Get handle to the static window in the Message Box > >> > if(::GetDlgItem(hMsgBxWnd, 0xffff)) > >> > { > >> > //Got it, now can update it > >> > ::SetDlgItemText(hMsgBxWnd, 0xffff, message_str); > >> > } > >> > > >> > Everything works fine when user's desktop is shown. If I go into > >> > Winlogon by > >> > clicking Start -> Log Off -> Switch User (see picture here: > >> > http://www.codeguru.com/forum/attachment.php?attachmentid=17852&stc=1), > >> > the > >> > message is displayed but FindWindow() returns NULL. I tried > >> > EnumWindows() and > >> > it failed as well. > >> > > >> > I heard that one solution would be to use CBT_HOOK but for that I will > >> > need > >> > a separate DLL module (for global hook), which I'd really like to > >> > avoid. > >> > > >> > Does anyone know how to get a handle to this message box during > >> > Winlogon? > >> > > >> > > >> > FYI. The currently active Terminal Session is still the same as when > >> > the > >> > message is shown during Winlogon. > >> > >> > > >
From: Grzegorz Wróbel on 15 Nov 2006 03:17
dc2000 wrote: > Thanks. But how will I get HANDLE hWlx to call that API? Please note that I'm > not calling this API from GINA replacement DLL. You won't. These functions are meant to be used only from within GINA. Unless you're going for some really ugly hack. -- Grzegorz Wróbel http://www.4neurons.com/ 677265676F727940346E6575726F6E732E636F6D |