|
|
//--------------------------------------------------------------------
// 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; }
|