/[rdesktop]/sourceforge.net/trunk/seamlessrdp/ServerExe/HookDll/hookdll.cpp
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/seamlessrdp/ServerExe/HookDll/hookdll.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1065 by ossman_, Wed Mar 8 16:12:49 2006 UTC revision 1066 by ossman_, Wed Mar 8 16:55:02 2006 UTC
# Line 31  HHOOK hShellProc = 0; Line 31  HHOOK hShellProc = 0;
31  HHOOK hWndProc = 0;  HHOOK hWndProc = 0;
32  HINSTANCE hInst = 0;  HINSTANCE hInst = 0;
33  HANDLE m_vcHandle = 0;  HANDLE m_vcHandle = 0;
34    HANDLE hMutex = 0;
35    
36  void SendDebug( char *format, ... )  void SendDebug( char *format, ... )
37  {  {
# Line 52  void SendDebug( char *format, ... ) Line 52  void SendDebug( char *format, ... )
52  extern "C" BOOL APIENTRY DllMain( HINSTANCE hinstDLL, DWORD ul_reason_for_call, LPVOID lpReserved )  extern "C" BOOL APIENTRY DllMain( HINSTANCE hinstDLL, DWORD ul_reason_for_call, LPVOID lpReserved )
53  {  {
54      switch ( ul_reason_for_call ) {      switch ( ul_reason_for_call ) {
55      case DLL_PROCESS_ATTACH: {      case DLL_PROCESS_ATTACH:
56              // remember our instance handle          // remember our instance handle
57              hInst = hinstDLL;          hInst = hinstDLL;
58              ++iInstanceCount;  
59              OpenVirtualChannel();          hMutex = CreateMutex( NULL, FALSE, "Local\\Seamless" );
60              break;          if (!hMutex)
61          }              return FALSE;
62    
63            WaitForSingleObject( hMutex, INFINITE );
64            ++iInstanceCount;
65            ReleaseMutex( hMutex );
66    
67            OpenVirtualChannel();
68    
69            break;
70    
71      case DLL_THREAD_ATTACH:      case DLL_THREAD_ATTACH:
72          break;          break;
73    
74      case DLL_THREAD_DETACH:      case DLL_THREAD_DETACH:
75          break;          break;
76      case DLL_PROCESS_DETACH: {  
77              --iInstanceCount;      case DLL_PROCESS_DETACH:
78              CloseVirtualChannel();          WaitForSingleObject( hMutex, INFINITE );
79          }          --iInstanceCount;
80            ReleaseMutex( hMutex );
81    
82            CloseVirtualChannel();
83    
84            CloseHandle( hMutex );
85    
86          break;          break;
87      }      }
88    
# Line 441  int ChannelIsOpen() Line 456  int ChannelIsOpen()
456    
457  int WriteToChannel( PCHAR buffer )  int WriteToChannel( PCHAR buffer )
458  {  {
459        BOOL result;
460      PULONG bytesRead = 0;      PULONG bytesRead = 0;
461      PULONG pBytesWritten = 0;      PULONG pBytesWritten = 0;
462    
463      if ( !ChannelIsOpen() )      if ( !ChannelIsOpen() )
464          return 1;          return 1;
465    
466      BOOL result = WTSVirtualChannelWrite( m_vcHandle, buffer, ( ULONG ) strlen( buffer ), pBytesWritten );      WaitForSingleObject( hMutex, INFINITE );
467        result = WTSVirtualChannelWrite( m_vcHandle, buffer, ( ULONG ) strlen( buffer ), pBytesWritten );
468        ReleaseMutex( hMutex );
469    
470      if ( result ) {      if ( result ) {
471          return 1;          return 1;

Legend:
Removed from v.1065  
changed lines
  Added in v.1066

  ViewVC Help
Powered by ViewVC 1.1.26