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.

139 lines
3.6 KiB

  1. //--------------------------------------------------------------------
  2. // MyCritSec - implementation
  3. // Copyright (C) Microsoft Corporation, 2000
  4. //
  5. // Created by: Louis Thomas (louisth), 02-03-00
  6. //
  7. // exception handling wrapper for critical sections
  8. //
  9. #include "pch.h" // precompiled headers
  10. //####################################################################
  11. // module public functions
  12. //--------------------------------------------------------------------
  13. HRESULT myHExceptionCode(EXCEPTION_POINTERS * pep) {
  14. HRESULT hr=pep->ExceptionRecord->ExceptionCode;
  15. if (!FAILED(hr)) {
  16. hr=HRESULT_FROM_WIN32(hr);
  17. }
  18. return hr;
  19. }
  20. //--------------------------------------------------------------------
  21. HRESULT myEnterCriticalSection(CRITICAL_SECTION * pcs) {
  22. HRESULT hr;
  23. _BeginTryWith(hr) {
  24. EnterCriticalSection(pcs);
  25. } _TrapException(hr);
  26. _JumpIfError(hr, error, "EnterCriticalSection");
  27. hr=S_OK;
  28. error:
  29. return hr;
  30. }
  31. //--------------------------------------------------------------------
  32. HRESULT myTryEnterCriticalSection(CRITICAL_SECTION * pcs, BOOL * pbEntered) {
  33. BOOL bEntered = FALSE;
  34. HRESULT hr;
  35. _BeginTryWith(hr) {
  36. bEntered = TryEnterCriticalSection(pcs);
  37. } _TrapException(hr);
  38. _JumpIfError(hr, error, "TryEnterCriticalSection");
  39. *pbEntered = bEntered;
  40. hr = S_OK;
  41. error:
  42. return hr;
  43. }
  44. //--------------------------------------------------------------------
  45. HRESULT myLeaveCriticalSection(CRITICAL_SECTION * pcs) {
  46. HRESULT hr;
  47. _BeginTryWith(hr) {
  48. LeaveCriticalSection(pcs);
  49. } _TrapException(hr);
  50. _JumpIfError(hr, error, "LeaveCriticalSection");
  51. hr=S_OK;
  52. error:
  53. return hr;
  54. }
  55. //--------------------------------------------------------------------
  56. HRESULT myInitializeCriticalSection(CRITICAL_SECTION * pcs) {
  57. HRESULT hr;
  58. _BeginTryWith(hr) {
  59. InitializeCriticalSection(pcs);
  60. } _TrapException(hr);
  61. _JumpIfError(hr, error, "InitializeCriticalSection");
  62. hr=S_OK;
  63. error:
  64. return hr;
  65. }
  66. //--------------------------------------------------------------------
  67. HRESULT myRtlInitializeResource(IN PRTL_RESOURCE Resource) {
  68. HRESULT hr;
  69. _BeginTryWith(hr) {
  70. RtlInitializeResource(Resource);
  71. } _TrapException(hr);
  72. _JumpIfError(hr, error, "RtlInitializeResource");
  73. hr = S_OK;
  74. error:
  75. return hr;
  76. }
  77. //--------------------------------------------------------------------
  78. HRESULT myRtlAcquireResourceExclusive(IN PRTL_RESOURCE Resource, IN BOOLEAN Wait, OUT BOOLEAN *pResult) {
  79. HRESULT hr;
  80. _BeginTryWith(hr) {
  81. *pResult = RtlAcquireResourceExclusive(Resource, Wait);
  82. } _TrapException(hr);
  83. _JumpIfError(hr, error, "RtlAcquireResourceExclusive");
  84. hr = S_OK;
  85. error:
  86. return hr;
  87. }
  88. //--------------------------------------------------------------------
  89. HRESULT myRtlAcquireResourceShared(IN PRTL_RESOURCE Resource, IN BOOLEAN Wait, OUT BOOLEAN *pResult) {
  90. HRESULT hr;
  91. _BeginTryWith(hr) {
  92. *pResult = RtlAcquireResourceShared(Resource, Wait);
  93. } _TrapException(hr);
  94. _JumpIfError(hr, error, "RtlAcquireResourceShared");
  95. hr = S_OK;
  96. error:
  97. return hr;
  98. }
  99. //--------------------------------------------------------------------
  100. HRESULT myRtlReleaseResource(IN PRTL_RESOURCE Resource) {
  101. HRESULT hr;
  102. _BeginTryWith(hr) {
  103. RtlReleaseResource(Resource);
  104. } _TrapException(hr);
  105. _JumpIfError(hr, error, "RtlReleaseResource");
  106. hr = S_OK;
  107. error:
  108. return hr;
  109. }