166 lines
3.2 KiB
C++
166 lines
3.2 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1994 Microsoft Corporation
|
||
|
|
||
|
Module Name :
|
||
|
|
||
|
tsres.hxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Defines a wrapper class for locks ( for TCP Services Resources)
|
||
|
used for light-weight syncronization and portability to Win95.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
John Ludeman ( JohnL) 21-Nov-1994
|
||
|
|
||
|
Project:
|
||
|
|
||
|
TCP Services Common DLL
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
# ifndef _TSRES_HXX_
|
||
|
# define _TSRES_HXX_
|
||
|
|
||
|
/************************************************************
|
||
|
* Include Headers
|
||
|
************************************************************/
|
||
|
|
||
|
# ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
# endif // __cplusplus
|
||
|
|
||
|
# include <nt.h>
|
||
|
# include <ntrtl.h>
|
||
|
|
||
|
# ifdef __cplusplus
|
||
|
}; // extern "C"
|
||
|
# endif // __cplusplus
|
||
|
|
||
|
#include <pudebug.h>
|
||
|
|
||
|
|
||
|
# ifndef TCP_REQUIRE
|
||
|
#define TCP_REQUIRE(x) DBG_REQUIRE(x)
|
||
|
# endif // TCP_REQUIRE
|
||
|
|
||
|
# ifndef TCP_ASSERT
|
||
|
#define TCP_ASSERT(x) DBG_ASSERT(x)
|
||
|
# endif // TCP_REQUIRE
|
||
|
|
||
|
/************************************************************
|
||
|
* Type Definitions
|
||
|
************************************************************/
|
||
|
|
||
|
# ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
# endif // __cplusplus
|
||
|
|
||
|
BOOL
|
||
|
InetInitializeResource(
|
||
|
IN PRTL_RESOURCE Resource
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InetAcquireResourceShared(
|
||
|
IN PRTL_RESOURCE Resource,
|
||
|
IN BOOL Wait
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InetAcquireResourceExclusive(
|
||
|
IN PRTL_RESOURCE Resource,
|
||
|
IN BOOL Wait
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InetReleaseResource(
|
||
|
IN PRTL_RESOURCE Resource
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InetConvertSharedToExclusive(
|
||
|
IN PRTL_RESOURCE Resource
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InetConvertExclusiveToShared(
|
||
|
IN PRTL_RESOURCE Resource
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
InetDeleteResource (
|
||
|
IN PRTL_RESOURCE Resource
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
InetDumpResource(
|
||
|
IN PRTL_RESOURCE Resource
|
||
|
);
|
||
|
|
||
|
# ifdef __cplusplus
|
||
|
}; // extern "C"
|
||
|
# endif // __cplusplus
|
||
|
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Simple RTL_RESOURCE Wrapper class
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
enum TSRES_LOCK_TYPE
|
||
|
{
|
||
|
TSRES_LOCK_READ = 0, // Take the lock for read only
|
||
|
TSRES_LOCK_WRITE // Take the lock for write
|
||
|
};
|
||
|
|
||
|
enum TSRES_CONV_TYPE
|
||
|
{
|
||
|
TSRES_CONV_READ = 0, // Convert the lock from write to read
|
||
|
TSRES_CONV_WRITE // Convert the lock from read to write
|
||
|
};
|
||
|
|
||
|
class dllexp TS_RESOURCE
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
TS_RESOURCE()
|
||
|
{ DBG_REQUIRE( InetInitializeResource( &_rtlres )); }
|
||
|
|
||
|
~TS_RESOURCE()
|
||
|
{ InetDeleteResource( &_rtlres ); }
|
||
|
|
||
|
void Lock( enum TSRES_LOCK_TYPE type )
|
||
|
{ if ( type == TSRES_LOCK_READ ) {
|
||
|
DBG_REQUIRE( InetAcquireResourceShared( &_rtlres, TRUE ) );
|
||
|
} else {
|
||
|
DBG_REQUIRE( InetAcquireResourceExclusive( &_rtlres, TRUE ));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Convert( enum TSRES_CONV_TYPE type )
|
||
|
{ if ( type == TSRES_CONV_READ ) {
|
||
|
DBG_REQUIRE( InetConvertExclusiveToShared( &_rtlres ));
|
||
|
} else {
|
||
|
DBG_REQUIRE( InetConvertSharedToExclusive( &_rtlres ));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Unlock( VOID )
|
||
|
{ DBG_REQUIRE( InetReleaseResource( &_rtlres )); }
|
||
|
|
||
|
private:
|
||
|
RTL_RESOURCE _rtlres;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
# endif // _TSRES_HXX_
|
||
|
|
||
|
/************************ End of File ***********************/
|