00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00047 #ifndef COMSTL_INCL_COMSTL_SECURITY_HPP_SECURITY_INITIALISERS
00048 #define COMSTL_INCL_COMSTL_SECURITY_HPP_SECURITY_INITIALISERS
00049 
00050 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00051 # define COMSTL_VER_COMSTL_SECURITY_HPP_SECURITY_INITIALISERS_MAJOR      4
00052 # define COMSTL_VER_COMSTL_SECURITY_HPP_SECURITY_INITIALISERS_MINOR      1
00053 # define COMSTL_VER_COMSTL_SECURITY_HPP_SECURITY_INITIALISERS_REVISION   2
00054 # define COMSTL_VER_COMSTL_SECURITY_HPP_SECURITY_INITIALISERS_EDIT       46
00055 #endif 
00056 
00057 
00058 
00059 
00060 
00061 #ifndef COMSTL_INCL_COMSTL_H_COMSTL
00062 # include <comstl/comstl.h>
00063 #endif 
00064 #ifndef STLSOFT_INCL_STLSOFT_CONVERSION_HPP_UNION_CAST
00065 # include <stlsoft/conversion/union_cast.hpp>
00066 #endif 
00067 
00068 #if (   !defined(_WIN32_WINNT) || \
00069         (_WIN32_WINNT < 0x0400)) && \
00070     !defined(_WIN32_DCOM)
00071 # error This file can only be used in the context of DCOM compilations.
00072 #endif 
00073 
00074 #if defined(STLSOFT_COMPILER_IS_MSVC) && \
00075     _MSC_VER >= 1200
00076 # include <iaccess.h>
00077 #endif 
00078 
00079 
00080 
00081 
00082 
00083 #ifndef _COMSTL_NO_NAMESPACE
00084 # if defined(_STLSOFT_NO_NAMESPACE) || \
00085      defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
00086 
00087 namespace comstl
00088 {
00089 # else
00090 
00091 
00092 namespace stlsoft
00093 {
00094 
00095 namespace comstl_project
00096 {
00097 
00098 # endif 
00099 #endif 
00100 
00101 
00102 
00103 
00104 
00105 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00106 const DWORD _EOAC_SEC_DESC          =   0x0;
00107 const DWORD _EOAC_ACCESS_CONTROL    =   0x4;
00108 const DWORD _EOAC_APPID             =   0x8;
00109 const DWORD _EOAC_SECURITY_MASK     =   (   _EOAC_SEC_DESC |
00110                                             _EOAC_APPID |
00111                                             _EOAC_ACCESS_CONTROL);
00112 #endif 
00113 
00114 
00115 
00116 
00117 
00118 
00119 
00120 
00121 
00122 
00123 
00124 
00130 #ifdef __IAccessControl_INTERFACE_DEFINED__
00131 inline HRESULT CoInitSecurity(  LPUNKNOWN                   punkAccessControl,
00132                                 LONG                        cAuthSvc,
00133                                 SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
00134                                 DWORD                       dwAuthnLevel,
00135                                 DWORD                       dwImpLevel,
00136                                 RPC_AUTH_IDENTITY_HANDLE    pAuthInfo,
00137                                 DWORD                       dwCapabilities)
00138 {
00139     
00140     static const CLSID  IID_IAccessControl__ = { 0xEEDD23E0, 0x8410, 0x11CE, { 0xA1, 0xC3, 0x08, 0x00, 0x2B, 0x2B, 0x8D, 0x8F } };
00141 
00142     HRESULT         hr;
00143     IAccessControl  *pac;
00144 
00145     
00146     dwCapabilities &= ~_EOAC_SECURITY_MASK;
00147     dwCapabilities |= _EOAC_ACCESS_CONTROL;
00148 
00149     hr = punkAccessControl->QueryInterface(IID_IAccessControl__, (void**)&pac);
00150 
00151     if(SUCCEEDED(hr))
00152     {
00153         hr = ::CoInitializeSecurity(pac, cAuthSvc, asAuthSvc, NULL, dwAuthnLevel, dwImpLevel, pAuthInfo, dwCapabilities, NULL);
00154 
00155         pac->Release();
00156     }
00157 
00158     return hr;
00159 }
00160 #endif // __IAccessControl_INTERFACE_DEFINED__
00161 
00167 inline HRESULT CoInitSecurity(  GUID const                  &appid,
00168                                 LONG                        cAuthSvc,
00169                                 SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
00170                                 DWORD                       dwAuthnLevel,
00171                                 DWORD                       dwImpLevel,
00172                                 RPC_AUTH_IDENTITY_HANDLE    pAuthInfo,
00173                                 DWORD                       dwCapabilities)
00174 {
00175     
00176     dwCapabilities &= ~_EOAC_SECURITY_MASK;
00177     dwCapabilities |= _EOAC_APPID;
00178 
00179     
00180     
00181 
00182     return ::CoInitializeSecurity(stlsoft_ns_qual(union_cast)<SECURITY_DESCRIPTOR*>(&appid), cAuthSvc, asAuthSvc, NULL, dwAuthnLevel, dwImpLevel, pAuthInfo, dwCapabilities, NULL);
00183 }
00184 
00190 inline HRESULT CoInitSecurity(  SECURITY_DESCRIPTOR         *psd,
00191                                 LONG                        cAuthSvc,
00192                                 SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
00193                                 DWORD                       dwAuthnLevel,
00194                                 DWORD                       dwImpLevel,
00195                                 RPC_AUTH_IDENTITY_HANDLE    pAuthInfo,
00196                                 DWORD                       dwCapabilities)
00197 {
00198     
00199     dwCapabilities &= ~_EOAC_SECURITY_MASK;
00200     dwCapabilities |= _EOAC_SEC_DESC;
00201 
00202     return ::CoInitializeSecurity(psd, cAuthSvc, asAuthSvc, NULL, dwAuthnLevel, dwImpLevel, pAuthInfo, dwCapabilities, NULL);
00203 }
00204 
00206 
00207 
00208 #ifdef STLSOFT_UNITTEST
00209 # include "./unittest/security_initialisers_unittest_.h"
00210 #endif 
00211 
00212 
00213 
00214 #ifndef _COMSTL_NO_NAMESPACE
00215 # if defined(_STLSOFT_NO_NAMESPACE) || \
00216      defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
00217 } 
00218 # else
00219 } 
00220 } 
00221 # endif 
00222 #endif 
00223 
00224 
00225 
00226 #endif 
00227 
00228