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.
 
 
 
 
 
 

259 lines
6.0 KiB

//***************************************************************************
//
// Copyright © Microsoft Corporation. All rights reserved.
//
// SmartPtr.h
//
// Purpose: Declare smartpointer typedefs
//
//***************************************************************************
#pragma once
#include <io.h>
_COM_SMARTPTR_TYPEDEF(IWbemClassObject, __uuidof(IWbemClassObject));
_COM_SMARTPTR_TYPEDEF(IWbemObjectSink, __uuidof(IWbemObjectSink));
_COM_SMARTPTR_TYPEDEF(IWbemQualifierSet, __uuidof(IWbemQualifierSet));
_COM_SMARTPTR_TYPEDEF(IWbemObjectAccess, __uuidof(IWbemObjectAccess));
_COM_SMARTPTR_TYPEDEF(IWbemServices, __uuidof(IWbemServices));
_COM_SMARTPTR_TYPEDEF(IWbemQuery, __uuidof(IWbemQuery));
_COM_SMARTPTR_TYPEDEF(IWbemContext, __uuidof(IWbemContext));
_COM_SMARTPTR_TYPEDEF(IWbemCallResult, __uuidof(IWbemCallResult));
_COM_SMARTPTR_TYPEDEF(IWbemObjectSink, __uuidof(IWbemObjectSink));
_COM_SMARTPTR_TYPEDEF(IEnumWbemClassObject, __uuidof(IEnumWbemClassObject));
_COM_SMARTPTR_TYPEDEF(IWbemLocator, __uuidof(IWbemLocator));
_COM_SMARTPTR_TYPEDEF(IUnsecuredApartment, __uuidof(IUnsecuredApartment));
_COM_SMARTPTR_TYPEDEF(IWbemStatusCodeText, __uuidof(IWbemStatusCodeText));
//_COM_SMARTPTR_TYPEDEF(IWbemBackupRestore, __uuidof(IWbemBackupRestore));
_COM_SMARTPTR_TYPEDEF(IWbemRefresher, __uuidof(IWbemRefresher));
_COM_SMARTPTR_TYPEDEF(IWbemHiPerfEnum, __uuidof(IWbemHiPerfEnum));
_COM_SMARTPTR_TYPEDEF(IWbemConfigureRefresher, __uuidof(IWbemConfigureRefresher));
_COM_SMARTPTR_TYPEDEF(IMofCompiler, __uuidof(IMofCompiler));
_COM_SMARTPTR_TYPEDEF(ExternalMethodContext, __uuidof(ExternalMethodContext));
_COM_SMARTPTR_TYPEDEF(InternalMethodContext, __uuidof(InternalMethodContext));
_COM_SMARTPTR_TYPEDEF(InternalMethodContextAsynch, __uuidof(InternalMethodContextAsynch));
_COM_SMARTPTR_TYPEDEF(CInstance, __uuidof(CInstance));
class SmartCloseHandle
{
private:
HANDLE m_h;
public:
SmartCloseHandle():m_h(INVALID_HANDLE_VALUE){}
SmartCloseHandle(HANDLE h):m_h(h){}
~SmartCloseHandle(){if (m_h!=INVALID_HANDLE_VALUE) CloseHandle(m_h);}
HANDLE operator =(HANDLE h) {if (m_h!=INVALID_HANDLE_VALUE) CloseHandle(m_h); m_h=h; return h;}
operator HANDLE() const {return m_h;}
HANDLE* operator &() {if (m_h!=INVALID_HANDLE_VALUE) CloseHandle(m_h); m_h = INVALID_HANDLE_VALUE; return &m_h;}
};
class Smart_findclose
{
private:
intptr_t m_h;
public:
Smart_findclose():m_h(0){}
Smart_findclose(intptr_t h):m_h(h){}
~Smart_findclose(){if (m_h!=0) _findclose(m_h);}
intptr_t operator =(intptr_t h) {if (m_h) _findclose(m_h); m_h=h; return h;}
operator intptr_t() const {return m_h;}
intptr_t* operator &() {if (m_h) _findclose(m_h); m_h = 0; return &m_h;}
};
class SmartFindClose
{
private:
HANDLE m_h;
public:
SmartFindClose():m_h(INVALID_HANDLE_VALUE){}
SmartFindClose(HANDLE h):m_h(h){}
~SmartFindClose(){if (m_h!=INVALID_HANDLE_VALUE) FindClose(m_h);}
HANDLE operator =(HANDLE h) {if (m_h!=INVALID_HANDLE_VALUE) FindClose(m_h); m_h=h; return h;}
operator HANDLE() const {return m_h;}
HANDLE* operator &() {if (m_h!=INVALID_HANDLE_VALUE) FindClose(m_h); m_h = INVALID_HANDLE_VALUE; return &m_h;}
};
class SmartCloseServiceHandle
{
private:
SC_HANDLE m_h;
public:
SmartCloseServiceHandle():m_h(NULL){}
SmartCloseServiceHandle(SC_HANDLE h):m_h(h){}
~SmartCloseServiceHandle(){if (m_h!=NULL) CloseServiceHandle(m_h);}
SC_HANDLE operator =(SC_HANDLE h) {if (m_h!=NULL) CloseServiceHandle(m_h); m_h=h; return h;}
operator SC_HANDLE() const {return m_h;}
SC_HANDLE* operator &() {if (m_h!=NULL) CloseServiceHandle(m_h); m_h = NULL; return &m_h;}
};
class CSmartCreatedDC
{
public:
CSmartCreatedDC(HDC hdc) { m_hdc = hdc;}
operator HDC() const {return m_hdc;}
~CSmartCreatedDC()
{
if (m_hdc)
DeleteDC(m_hdc);
}
protected:
HDC m_hdc;
};
class CSmartBuffer
{
private:
LPBYTE m_pBuffer;
public:
CSmartBuffer() : m_pBuffer(NULL) {}
CSmartBuffer(LPBYTE pBuffer) : m_pBuffer(pBuffer) {}
CSmartBuffer(DWORD dwSize)
{
m_pBuffer = new BYTE[dwSize];
if (m_pBuffer == NULL)
{
throw CHeap_Exception ( CHeap_Exception :: E_ALLOCATION_ERROR ) ;
}
}
~CSmartBuffer()
{
Free();
}
LPBYTE operator =(LPBYTE pBuffer)
{
Free();
m_pBuffer = pBuffer;
return m_pBuffer;
}
operator LPBYTE() const { return m_pBuffer; }
LPBYTE* operator &()
{
Free();
m_pBuffer = NULL;
return &m_pBuffer;
}
protected:
void Free()
{
if (m_pBuffer != NULL)
{
delete [] m_pBuffer;
}
}
};
template <typename O, typename FT, FT F> class FrameDynOnDeleteObjVoid
{
private:
O* Obj_;
BOOL bExec;
public:
FrameDynOnDeleteObjVoid ( O* Val ): Obj_ ( Val ), bExec ( FALSE )
{
};
void Exec ( BOOL bSetExecFlag = TRUE )
{
(Obj_->*F)();
if ( bSetExecFlag )
{
bExec = TRUE;
}
}
void SetExecFlag ( BOOL bSetExecFlag = TRUE )
{
bExec = bSetExecFlag ;
}
void ReSetExecFlag ( )
{
SetExecFlag ( FALSE ) ;
}
~FrameDynOnDeleteObjVoid ( )
{
if ( !bExec )
{
Exec ();
}
};
};
template <typename T, typename FT, FT F> class FrameDynOnDelete
{
private:
T Val_;
BOOL bExec;
public:
FrameDynOnDelete ( T Val ): Val_ ( Val ), bExec ( FALSE )
{
};
void Exec ( )
{
F(Val_);
bExec = TRUE;
}
~FrameDynOnDelete ( )
{
if ( !bExec )
{
Exec ();
}
};
};
#ifndef __WAITEX__
#define __WAITEX__
template < typename T, typename FT, FT F, int iTime >
class WaitException
{
public:
WaitException ( T Val_ )
{
BOOL bResult = FALSE;
while ( ! bResult )
{
try
{
F ( Val_ );
bResult = TRUE;
}
catch ( ... )
{
}
if ( ! bResult )
{
::Sleep ( iTime );
}
}
}
};
#endif __WAITEX__