| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| #ifndef __ACCACT_HXX |
| #define __ACCACT_HXX |
| |
| #include <windows.h> |
| #include <tchar.h> |
| |
| |
| static bool IsXPOrLater() |
| { |
| OSVERSIONINFO osvi; |
| |
| ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); |
| |
| osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); |
| |
| GetVersionEx(&osvi); |
| return ((osvi.dwMajorVersion > 5) || |
| ((osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion >= 1))); |
| } |
| |
| static HANDLE pActCtx = INVALID_HANDLE_VALUE; |
| static ULONG_PTR lpCookie; |
| |
| static bool ActivateActContext() |
| { |
| if(!IsXPOrLater()) |
| return false; |
| |
| ACTCTX actctx; |
| |
| ZeroMemory(&actctx, sizeof(actctx)); |
| |
| actctx.cbSize = sizeof(actctx); |
| |
| TCHAR szDllDirPath[1024]; |
| ::GetCurrentDirectory(1024,szDllDirPath); |
| LPTSTR szDllPath = szDllDirPath; |
| lstrcat(szDllPath, _T("\\UAccCOM.dll")); |
| |
| actctx.lpSource = szDllPath; |
| actctx.lpResourceName = MAKEINTRESOURCE(97); |
| actctx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID; |
| |
| HANDLE pActCtx = CreateActCtx(&actctx); |
| |
| if(pActCtx != INVALID_HANDLE_VALUE) |
| { |
| if(ActivateActCtx(pActCtx, &lpCookie)) |
| { |
| return true; |
| } |
| } |
| pActCtx = INVALID_HANDLE_VALUE; |
| lpCookie = 0; |
| return false; |
| } |
| |
| static void DeactivateActContext() |
| { |
| if(!IsXPOrLater()) |
| return; |
| |
| if(lpCookie) |
| DeactivateActCtx(0, lpCookie); |
| |
| if(pActCtx!=INVALID_HANDLE_VALUE) |
| ReleaseActCtx(pActCtx); |
| } |
| #endif |