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

//--------------------------------------------------------------------
// MyCritSec - implementation
// Copyright (C) Microsoft Corporation, 2000
//
// Created by: Louis Thomas (louisth), 02-03-00
//
// exception handling wrapper for critical sections
//
#include "pch.h" // precompiled headers
//####################################################################
// module public functions
//--------------------------------------------------------------------
HRESULT myHExceptionCode(EXCEPTION_POINTERS * pep) {
HRESULT hr=pep->ExceptionRecord->ExceptionCode;
if (!FAILED(hr)) {
hr=HRESULT_FROM_WIN32(hr);
}
return hr;
}
//--------------------------------------------------------------------
HRESULT myEnterCriticalSection(CRITICAL_SECTION * pcs) {
HRESULT hr;
_BeginTryWith(hr) {
EnterCriticalSection(pcs);
} _TrapException(hr);
_JumpIfError(hr, error, "EnterCriticalSection");
hr=S_OK;
error:
return hr;
}
//--------------------------------------------------------------------
HRESULT myTryEnterCriticalSection(CRITICAL_SECTION * pcs, BOOL * pbEntered) {
BOOL bEntered = FALSE;
HRESULT hr;
_BeginTryWith(hr) {
bEntered = TryEnterCriticalSection(pcs);
} _TrapException(hr);
_JumpIfError(hr, error, "TryEnterCriticalSection");
*pbEntered = bEntered;
hr = S_OK;
error:
return hr;
}
//--------------------------------------------------------------------
HRESULT myLeaveCriticalSection(CRITICAL_SECTION * pcs) {
HRESULT hr;
_BeginTryWith(hr) {
LeaveCriticalSection(pcs);
} _TrapException(hr);
_JumpIfError(hr, error, "LeaveCriticalSection");
hr=S_OK;
error:
return hr;
}
//--------------------------------------------------------------------
HRESULT myInitializeCriticalSection(CRITICAL_SECTION * pcs) {
HRESULT hr;
_BeginTryWith(hr) {
InitializeCriticalSection(pcs);
} _TrapException(hr);
_JumpIfError(hr, error, "InitializeCriticalSection");
hr=S_OK;
error:
return hr;
}
//--------------------------------------------------------------------
HRESULT myRtlInitializeResource(IN PRTL_RESOURCE Resource) {
HRESULT hr;
_BeginTryWith(hr) {
RtlInitializeResource(Resource);
} _TrapException(hr);
_JumpIfError(hr, error, "RtlInitializeResource");
hr = S_OK;
error:
return hr;
}
//--------------------------------------------------------------------
HRESULT myRtlAcquireResourceExclusive(IN PRTL_RESOURCE Resource, IN BOOLEAN Wait, OUT BOOLEAN *pResult) {
HRESULT hr;
_BeginTryWith(hr) {
*pResult = RtlAcquireResourceExclusive(Resource, Wait);
} _TrapException(hr);
_JumpIfError(hr, error, "RtlAcquireResourceExclusive");
hr = S_OK;
error:
return hr;
}
//--------------------------------------------------------------------
HRESULT myRtlAcquireResourceShared(IN PRTL_RESOURCE Resource, IN BOOLEAN Wait, OUT BOOLEAN *pResult) {
HRESULT hr;
_BeginTryWith(hr) {
*pResult = RtlAcquireResourceShared(Resource, Wait);
} _TrapException(hr);
_JumpIfError(hr, error, "RtlAcquireResourceShared");
hr = S_OK;
error:
return hr;
}
//--------------------------------------------------------------------
HRESULT myRtlReleaseResource(IN PRTL_RESOURCE Resource) {
HRESULT hr;
_BeginTryWith(hr) {
RtlReleaseResource(Resource);
} _TrapException(hr);
_JumpIfError(hr, error, "RtlReleaseResource");
hr = S_OK;
error:
return hr;
}