![]() |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| Welcome to Windows Vista Forums. Our forum is dedicated to helping you find solutions with any problems, errors or issues you are experiencing with Windows Vista. The Vista forum also covers news and updates and has an extensive Windows Vista tutorial section that covers a wide range of tips and tricks. |
| |||||||
![]() |
| |
| | #1 (permalink) |
| Guest | WTSSendMessage fail with error Access Denied i describe my Issue that i am developing virtual printer driver DLL which is run by spooler service of operation system, means my driver is run under spooler service. Now i need to show one MessageBox from my this DLL in Window vista but vista not support any user interface from service thats why i use this WTSSendMessage function but this function give me error "ACCESS DENIED"... //Code i used #define WTS_CURRENT_SERVER ((HANDLE)NULL) #define WTS_CURRENT_SERVER_HANDLE ((HANDLE)NULL) #define WTS_CURRENT_SERVER_NAME (NULL) #define WTS_CURRENT_SESSION ((DWORD)-1) //defination of WTSSendmessage Function pointer typedef BOOL (*funPtr) ( HANDLE, DWORD, LPWSTR, DWORD, LPWSTR, DWORD, DWORD, DWORD, DWORD*, BOOL); funPtr callFun; HMODULE hModule = LoadLibrary(L"Wtsapi32.dll"); if(hModule) { callFun = (funPtr) GetProcAddress(hModule, "WTSSendMessageW"); if(callFun) { DWORD result; BOOL ret = callFun( WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, (LPWSTR)L"Thunder Driver", 38, MB_OK, FALSE, &result, 0); if(!ret) { Print_Error(); } }//end getproc }//end loadlibrary function return with "Error : Access Denied";; WTSSendmesage function fail and return with error "ACCESS DENIED". This function failed is happening on Window vista only, One more thing is this same code is running successfully On Window XP means i think that there is some problem arise due to Vista securtiy... So please help me .... Thanks in Advance.... |
My System Specs![]() |
| | #2 (permalink) |
| Guest | Re: WTSSendMessage fail with error Access Denied "kalpesh" <kalpeshgedia@gmail.com> wrote ... > callFun( WTS_CURRENT_SERVER_HANDLE, > WTS_CURRENT_SESSION, > (LPWSTR)L"Thunder Driver", > function return with "Error : Access Denied";; > WTSSendmesage function fail > and return with error "ACCESS DENIED". Hi Kalpesh, I'm not sure if this is the full answer to your problem, but ... in your code snippet, you are sending the Message to WTS_CURRENT_SESSION. Is this what you really want to do? (actually, I'm pretty sure it's *not* what you want to do). This will send the message to the current session. In the context of the spooler service on Vista, that's going to be Session 0 - exactly what you're trying to avoid!! I suspect you'd need to list the current user sessions on the machine; eg, by a call to WTSEnumerateSessions(). Then select one or more of these user sessions to send the message to. Typically logged-in users will start from session 1, but this isn't enforced by teh system - the logged-in user could potentially be in be in session 7, 16 or 42. And if several users are logged in at one (even on a desktop PC, there may be multiple "fast user switching" sessions), you 'll need to decide which sessions (and which logged-in users) you want to send your message to. The user context of the process which is sending the message also needs the Terminal Server "Message" permission, to send messages to another user's session - otherwise, it would be vulnerable to shatter attacks. See WTSSendMessage() in MSDN fo rdetails. Hope it helps, Andrew |
My System Specs![]() |
![]() |
| Thread Tools | |
| |
Similar Threads | ||||
| Thread | Forum | |||
| Error: access is denied | Vista General | |||
| Error: access is denied | Vista General | |||
| WTSSendMessage return access denied! | Vista security | |||
| WTSSendMessage fail with error Access Denied | Vista security | |||
| getdrivelayout: create file fail! Access Denied (ERROR) Please he | Vista General | |||