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.

100 lines
2.4 KiB

  1. #include "private.h"
  2. #include "immxutil.h"
  3. #include "cicutil.h"
  4. #include "mui.h"
  5. #define SP1_BEGIN_RC_ID 10000
  6. #define SP1_END_RC_ID 20000
  7. HINSTANCE g_hInstXPSP1Res = NULL;
  8. ////////////////////////////////////////////////////////////////////////////
  9. //
  10. // IsXPSP1ResourceID
  11. //
  12. ////////////////////////////////////////////////////////////////////////////
  13. BOOL IsXPSP1ResourceID(UINT uId)
  14. {
  15. BOOL bRet = FALSE;
  16. if (uId >= SP1_BEGIN_RC_ID && uId <= SP1_END_RC_ID)
  17. {
  18. bRet = TRUE;
  19. }
  20. return bRet;
  21. }
  22. ////////////////////////////////////////////////////////////////////////////
  23. //
  24. // GetCicResInstance()
  25. //
  26. ////////////////////////////////////////////////////////////////////////////
  27. HINSTANCE GetCicResInstance(HINSTANCE hInstOrg, UINT uId)
  28. {
  29. #ifdef CIC_XPSP1
  30. if (IsXPSP1ResourceID(uId))
  31. {
  32. if (!g_hInstXPSP1Res)
  33. {
  34. g_hInstXPSP1Res = LoadSystemLibraryEx(TEXT("xpsp1res.dll"),
  35. NULL,
  36. LOAD_LIBRARY_AS_DATAFILE);
  37. }
  38. return g_hInstXPSP1Res;
  39. }
  40. else
  41. {
  42. return hInstOrg;
  43. }
  44. #else
  45. return hInstOrg;
  46. #endif
  47. }
  48. ////////////////////////////////////////////////////////////////////////////
  49. //
  50. // FreeCicResInstance()
  51. //
  52. ////////////////////////////////////////////////////////////////////////////
  53. void FreeCicResInstance()
  54. {
  55. #ifdef CIC_XPSP1
  56. if (g_hInstXPSP1Res)
  57. FreeLibrary(g_hInstXPSP1Res);
  58. #endif // CIC_XPSP1
  59. }
  60. ////////////////////////////////////////////////////////////////////////////
  61. //
  62. // CicLoadStringA
  63. //
  64. ////////////////////////////////////////////////////////////////////////////
  65. int CicLoadStringA(HINSTANCE hInstOrg, UINT uId, LPSTR lpBuffer, UINT cchMax)
  66. {
  67. HINSTANCE hResInst = GetCicResInstance(hInstOrg, uId);
  68. return LoadStringA(hResInst, uId, lpBuffer, cchMax);
  69. }
  70. ////////////////////////////////////////////////////////////////////////////
  71. //
  72. // CicLoadStringWrapW
  73. //
  74. ////////////////////////////////////////////////////////////////////////////
  75. int CicLoadStringWrapW(HINSTANCE hInstOrg, UINT uId, LPWSTR lpwBuffer, UINT cchMax)
  76. {
  77. HINSTANCE hResInst = GetCicResInstance(hInstOrg, uId);
  78. return LoadStringWrapW(hResInst, uId, lpwBuffer, cchMax);
  79. }