1*b0a7a3cfSSteve Yin /**************************************************************
2*b0a7a3cfSSteve Yin *
3*b0a7a3cfSSteve Yin * Licensed to the Apache Software Foundation (ASF) under one
4*b0a7a3cfSSteve Yin * or more contributor license agreements. See the NOTICE file
5*b0a7a3cfSSteve Yin * distributed with this work for additional information
6*b0a7a3cfSSteve Yin * regarding copyright ownership. The ASF licenses this file
7*b0a7a3cfSSteve Yin * to you under the Apache License, Version 2.0 (the
8*b0a7a3cfSSteve Yin * "License"); you may not use this file except in compliance
9*b0a7a3cfSSteve Yin * with the License. You may obtain a copy of the License at
10*b0a7a3cfSSteve Yin *
11*b0a7a3cfSSteve Yin * http://www.apache.org/licenses/LICENSE-2.0
12*b0a7a3cfSSteve Yin *
13*b0a7a3cfSSteve Yin * Unless required by applicable law or agreed to in writing,
14*b0a7a3cfSSteve Yin * software distributed under the License is distributed on an
15*b0a7a3cfSSteve Yin * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b0a7a3cfSSteve Yin * KIND, either express or implied. See the License for the
17*b0a7a3cfSSteve Yin * specific language governing permissions and limitations
18*b0a7a3cfSSteve Yin * under the License.
19*b0a7a3cfSSteve Yin *
20*b0a7a3cfSSteve Yin *************************************************************/
21*b0a7a3cfSSteve Yin
22*b0a7a3cfSSteve Yin #ifndef __ACCACT_HXX
23*b0a7a3cfSSteve Yin #define __ACCACT_HXX
24*b0a7a3cfSSteve Yin
25*b0a7a3cfSSteve Yin #include <windows.h>
26*b0a7a3cfSSteve Yin #include <tchar.h>
27*b0a7a3cfSSteve Yin
28*b0a7a3cfSSteve Yin
IsXPOrLater()29*b0a7a3cfSSteve Yin static bool IsXPOrLater()
30*b0a7a3cfSSteve Yin {
31*b0a7a3cfSSteve Yin OSVERSIONINFO osvi;
32*b0a7a3cfSSteve Yin
33*b0a7a3cfSSteve Yin ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
34*b0a7a3cfSSteve Yin
35*b0a7a3cfSSteve Yin osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
36*b0a7a3cfSSteve Yin
37*b0a7a3cfSSteve Yin GetVersionEx(&osvi);
38*b0a7a3cfSSteve Yin return ((osvi.dwMajorVersion > 5) ||
39*b0a7a3cfSSteve Yin ((osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion >= 1)));
40*b0a7a3cfSSteve Yin }
41*b0a7a3cfSSteve Yin
42*b0a7a3cfSSteve Yin static HANDLE pActCtx = INVALID_HANDLE_VALUE;
43*b0a7a3cfSSteve Yin static ULONG_PTR lpCookie;
44*b0a7a3cfSSteve Yin
ActivateActContext()45*b0a7a3cfSSteve Yin static bool ActivateActContext()
46*b0a7a3cfSSteve Yin {
47*b0a7a3cfSSteve Yin if(!IsXPOrLater())
48*b0a7a3cfSSteve Yin return false;
49*b0a7a3cfSSteve Yin
50*b0a7a3cfSSteve Yin ACTCTX actctx;
51*b0a7a3cfSSteve Yin
52*b0a7a3cfSSteve Yin ZeroMemory(&actctx, sizeof(actctx));
53*b0a7a3cfSSteve Yin
54*b0a7a3cfSSteve Yin actctx.cbSize = sizeof(actctx);
55*b0a7a3cfSSteve Yin
56*b0a7a3cfSSteve Yin TCHAR szDllDirPath[1024];
57*b0a7a3cfSSteve Yin ::GetCurrentDirectory(1024,szDllDirPath);
58*b0a7a3cfSSteve Yin LPTSTR szDllPath = szDllDirPath;
59*b0a7a3cfSSteve Yin lstrcat(szDllPath, _T("\\UAccCOM.dll"));
60*b0a7a3cfSSteve Yin
61*b0a7a3cfSSteve Yin actctx.lpSource = szDllPath;
62*b0a7a3cfSSteve Yin actctx.lpResourceName = MAKEINTRESOURCE(97);
63*b0a7a3cfSSteve Yin actctx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID;
64*b0a7a3cfSSteve Yin
65*b0a7a3cfSSteve Yin HANDLE pActCtx = CreateActCtx(&actctx);
66*b0a7a3cfSSteve Yin
67*b0a7a3cfSSteve Yin if(pActCtx != INVALID_HANDLE_VALUE)
68*b0a7a3cfSSteve Yin {
69*b0a7a3cfSSteve Yin if(ActivateActCtx(pActCtx, &lpCookie))
70*b0a7a3cfSSteve Yin {
71*b0a7a3cfSSteve Yin return true;
72*b0a7a3cfSSteve Yin }
73*b0a7a3cfSSteve Yin }
74*b0a7a3cfSSteve Yin pActCtx = INVALID_HANDLE_VALUE;
75*b0a7a3cfSSteve Yin lpCookie = 0;
76*b0a7a3cfSSteve Yin return false;
77*b0a7a3cfSSteve Yin }
78*b0a7a3cfSSteve Yin
DeactivateActContext()79*b0a7a3cfSSteve Yin static void DeactivateActContext()
80*b0a7a3cfSSteve Yin {
81*b0a7a3cfSSteve Yin if(!IsXPOrLater())
82*b0a7a3cfSSteve Yin return;
83*b0a7a3cfSSteve Yin
84*b0a7a3cfSSteve Yin if(lpCookie)
85*b0a7a3cfSSteve Yin DeactivateActCtx(0, lpCookie);
86*b0a7a3cfSSteve Yin
87*b0a7a3cfSSteve Yin if(pActCtx!=INVALID_HANDLE_VALUE)
88*b0a7a3cfSSteve Yin ReleaseActCtx(pActCtx);
89*b0a7a3cfSSteve Yin }
90*b0a7a3cfSSteve Yin #endif