Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
3.1 KiB

  1. //+---------------------------------------------------------------------------
  2. //
  3. // File: server.cpp
  4. //
  5. // Contents: COM server functionality.
  6. //
  7. //----------------------------------------------------------------------------
  8. #include "private.h"
  9. #include "cdimm.h"
  10. #include "globals.h"
  11. #include "util.h"
  12. #include "imeapp.h"
  13. BOOL DIMM12_DllProcessAttach()
  14. {
  15. if (g_ProcessIMM == NULL)
  16. {
  17. g_ProcessIMM = new CProcessIMM;
  18. if (g_ProcessIMM == NULL)
  19. {
  20. return FALSE;
  21. }
  22. }
  23. if (IsOnNT())
  24. {
  25. HINSTANCE hUser32 = GetSystemModuleHandle(TEXT("user32.dll"));
  26. if (hUser32)
  27. g_pfnToUnicodeEx = (TOUNICODEEX)GetProcAddress(hUser32, TEXT("ToUnicodeEx"));
  28. }
  29. WM_MSIME_SERVICE = RegisterWindowMessageA( RWM_SERVICE );
  30. WM_MSIME_UIREADY = RegisterWindowMessageA( RWM_UIREADY );
  31. WM_MSIME_RECONVERTREQUEST = RegisterWindowMessageA( RWM_RECONVERTREQUEST );
  32. WM_MSIME_RECONVERT = RegisterWindowMessageA( RWM_RECONVERT );
  33. WM_MSIME_DOCUMENTFEED = RegisterWindowMessageA( RWM_DOCUMENTFEED );
  34. WM_MSIME_QUERYPOSITION = RegisterWindowMessageA( RWM_QUERYPOSITION );
  35. WM_MSIME_MODEBIAS = RegisterWindowMessageA( RWM_MODEBIAS );
  36. WM_MSIME_SHOWIMEPAD = RegisterWindowMessageA( RWM_SHOWIMEPAD );
  37. WM_MSIME_MOUSE = RegisterWindowMessageA( RWM_MOUSE );
  38. WM_MSIME_KEYMAP = RegisterWindowMessageA( RWM_KEYMAP );
  39. if (!WM_MSIME_SERVICE ||
  40. !WM_MSIME_UIREADY ||
  41. !WM_MSIME_RECONVERTREQUEST ||
  42. !WM_MSIME_RECONVERT ||
  43. !WM_MSIME_DOCUMENTFEED ||
  44. !WM_MSIME_QUERYPOSITION ||
  45. !WM_MSIME_MODEBIAS ||
  46. !WM_MSIME_SHOWIMEPAD ||
  47. !WM_MSIME_MOUSE ||
  48. !WM_MSIME_KEYMAP)
  49. return FALSE;
  50. return TRUE;
  51. }
  52. void DIMM12_DllProcessDeatch()
  53. {
  54. if (g_ProcessIMM != NULL)
  55. {
  56. delete g_ProcessIMM;
  57. }
  58. }
  59. HRESULT DIMM12_DllRegisterServer(void)
  60. {
  61. TCHAR achPath[MAX_PATH+1];
  62. HRESULT hr = E_FAIL;
  63. if (GetModuleFileName(g_hInst, achPath, ARRAYSIZE(achPath)) == 0)
  64. goto Exit;
  65. if (!RegisterServer(CLSID_CActiveIMM, TEXT("Active IMM"), achPath, TEXT("Apartment"), NULL))
  66. goto Exit;
  67. if (!RegisterServer(CLSID_CActiveIMM12, TEXT("Active IMM"), achPath, TEXT("Apartment"), NULL))
  68. goto Exit;
  69. if (!RegisterServer(CLSID_CActiveIMM12_Trident, TEXT("Active IMM"), achPath, TEXT("Apartment"), NULL))
  70. goto Exit;
  71. hr = S_OK;
  72. Exit:
  73. return hr;
  74. }
  75. HRESULT DIMM12_DllUnregisterServer(void)
  76. {
  77. HRESULT hr;
  78. if (FAILED(hr = RegisterServer(CLSID_CActiveIMM, NULL, NULL, NULL, NULL) ? S_OK : E_FAIL))
  79. goto Exit;
  80. if (FAILED(hr = RegisterServer(CLSID_CActiveIMM12, NULL, NULL, NULL, NULL) ? S_OK : E_FAIL))
  81. goto Exit;
  82. if (FAILED(hr = RegisterServer(CLSID_CActiveIMM12_Trident, NULL, NULL, NULL, NULL) ? S_OK : E_FAIL))
  83. goto Exit;
  84. Exit:
  85. return hr;
  86. }