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.

148 lines
3.7 KiB

  1. #include "stdafx.hxx"
  2. #include "vs_inc.hxx"
  3. #include "iadmw.h"
  4. #include "iiscnfg.h"
  5. #include "vs_reg.hxx"
  6. #include "stssites.hxx"
  7. void Usage()
  8. {
  9. wprintf(L"stssites list\n");
  10. wprintf(L"stssites lock site time\n");
  11. wprintf(L"\twhere site is the site number\n");
  12. wprintf(L"\twhere time is the # of seconds to hold the lock\n");
  13. }
  14. void InitializeSites(CSTSSites &sites)
  15. {
  16. if (!sites.ValidateSharepointVersion())
  17. {
  18. wprintf(L"Sharepoint 5.0 is not installed on this machine.\n");
  19. throw E_INVALIDARG;
  20. }
  21. if (!sites.Initialize())
  22. {
  23. wprintf(L"CSTSSites::Initialize failed.\n");
  24. throw E_INVALIDARG;
  25. }
  26. }
  27. void ListSites()
  28. {
  29. CSTSSites sites;
  30. InitializeSites(sites);
  31. DWORD cSites = sites.GetSiteCount();
  32. for(DWORD iSite = 0; iSite < cSites; iSite++)
  33. {
  34. DWORD siteId = sites.GetSiteId(iSite);
  35. wprintf(L"Site 0x%08x\n", siteId);
  36. VSS_PWSZ wszComment = sites.GetSiteComment(iSite);
  37. wprintf(L"Site name (comment) = %s\n", wszComment);
  38. CoTaskMemFree(wszComment);
  39. VSS_PWSZ wszIpAddress = sites.GetSiteIpAddress(iSite);
  40. VSS_PWSZ wszHost = sites.GetSiteHost(iSite);
  41. DWORD dwPort = sites.GetSitePort(iSite);
  42. if (wszIpAddress)
  43. {
  44. wprintf(L"IpAddress = %s\n", wszIpAddress);
  45. CoTaskMemFree(wszIpAddress);
  46. }
  47. if (wszHost)
  48. {
  49. wprintf(L"Host = %s\n", wszHost);
  50. CoTaskMemFree(wszHost);
  51. }
  52. wprintf(L"Port = %d\n", dwPort);
  53. VSS_PWSZ wszDsn = sites.GetSiteDSN(iSite);
  54. wprintf(L"DSN=%s\n", wszDsn);
  55. CoTaskMemFree(wszDsn);
  56. VSS_PWSZ wszRoot = sites.GetSiteRoot(iSite);
  57. wprintf(L"Root=%s\n", wszRoot);
  58. CoTaskMemFree(wszRoot);
  59. VSS_PWSZ wszRoles = sites.GetSiteRoles(iSite);
  60. wprintf(L"Roles = %s\n", wszRoles);
  61. CoTaskMemFree(wszRoles);
  62. wprintf(L"\n\n");
  63. }
  64. }
  65. void LockSite(LPCWSTR wszSiteId, LPCWSTR wszSleep)
  66. {
  67. DWORD siteId = _wtoi(wszSiteId);
  68. DWORD secs = _wtoi(wszSleep);
  69. CSTSSites sites;
  70. InitializeSites(sites);
  71. DWORD cSites = sites.GetSiteCount();
  72. for(DWORD iSite = 0; iSite < cSites; iSite++)
  73. {
  74. if (sites.GetSiteId(iSite) == siteId)
  75. break;
  76. }
  77. if (iSite >= cSites)
  78. {
  79. wprintf(L"invalid site id %d.\n", siteId);
  80. throw E_INVALIDARG;
  81. }
  82. sites.LockSiteContents(iSite);
  83. wprintf(L"site %d locked for %d seconds.\n", siteId, secs);
  84. Sleep(secs * 1000);
  85. sites.UnlockSites();
  86. }
  87. extern "C" __cdecl wmain(int argc, WCHAR **argv)
  88. {
  89. bool bCoInitializeSucceeded = false;
  90. try
  91. {
  92. HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
  93. if (FAILED(hr))
  94. {
  95. wprintf(L"CoInitializeEx failed with hr=0x%08lx.\n", hr);
  96. throw(hr);
  97. }
  98. bCoInitializeSucceeded = TRUE;
  99. if (argc < 2 || argc > 4)
  100. {
  101. Usage();
  102. throw E_INVALIDARG;
  103. }
  104. if (_wcsicmp(argv[1], L"list") == 0 && argc == 2)
  105. ListSites();
  106. else if (_wcsicmp(argv[1], L"lock") == 0 && argc == 4)
  107. LockSite(argv[2], argv[3]);
  108. else
  109. {
  110. Usage();
  111. throw E_INVALIDARG;
  112. }
  113. }
  114. catch(HRESULT)
  115. {
  116. }
  117. catch(...)
  118. {
  119. wprintf(L"Unexpected exception!!!\n");
  120. }
  121. if (bCoInitializeSucceeded)
  122. CoUninitialize();
  123. return 0;
  124. }