blob: ff4387cd49fdbc93e54657f9c9bd55451c2a7892 [file] [log] [blame]
/**************************************************************
*
* 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.
*
*************************************************************/
#pragma once
#ifndef _WINDOWS_
#include <windows.h>
#endif
#ifdef __cplusplus
extern "C"{
#endif
//------------------------------------------------------------------------
// undefine the macros defined in the shlobj.h file in order to avoid
// warnings because of multiple defines
//------------------------------------------------------------------------
// begin obsolete Win32 API functions -->
#ifdef RegOpenKey
#undef RegOpenKey
#endif
#ifdef RegEnumKey
#undef RegEnumKey
#endif
#ifdef RegCreateKey
#undef RegCreateKey
#endif
#ifdef RegQueryValue
#undef RegQueryValue
#endif
#ifdef RegSetValue
#undef RegSetValue
#endif
// <-- end obsolete Win32 functions
#ifdef RegOpenKeyExW
#undef RegOpenKeyExW
#endif
#ifdef RegEnumKeyExW
#undef RegEnumKeyExW
#endif
#ifdef RegCreateKeyExW
#undef RegCreateKeyExW
#endif
#ifdef RegDeleteKeyW
#undef RegDeleteKeyW
#endif
#ifdef RegEnumValueW
#undef RegEnumValueW
#endif
#ifdef RegQueryValueExW
#undef RegQueryValueExW
#endif
#ifdef RegSetValueExW
#undef RegSetValueExW
#endif
#ifdef RegDeleteValueW
#undef RegDeleteValueW
#endif
#ifdef RegQueryInfoKeyW
#undef RegQueryInfoKeyW
#endif
//------------------------------------------------------------------------
// set the compiler directives for the function pointer we declare below
// if we build sal or sal will be used as static library we define extern
// else sal exports the function pointers from a dll and we use __declspec
//------------------------------------------------------------------------
#define ADVAPI9X_API extern
//------------------------------------------------------------------------
// declare function pointers to the appropriate shell functions
//------------------------------------------------------------------------
ADVAPI9X_API LONG (WINAPI * lpfnRegOpenKeyExW) (
HKEY hKey, // handle to open key
LPCWSTR lpSubKey, // subkey name
DWORD ulOptions, // reserved
REGSAM samDesired, // security access mask
PHKEY phkResult // handle to open key
);
ADVAPI9X_API LONG (WINAPI *lpfnRegEnumKeyExW) (
HKEY hKey, // handle to key to enumerate
DWORD dwIndex, // subkey index
LPWSTR lpName, // subkey name
LPDWORD lpcName, // size of subkey buffer
LPDWORD lpReserved, // reserved
LPWSTR lpClass, // class string buffer
LPDWORD lpcClass, // size of class string buffer
PFILETIME lpftLastWriteTime // last write time
);
ADVAPI9X_API LONG (WINAPI *lpfnRegCreateKeyExW)(
HKEY hKey, // handle to open key
LPCWSTR lpSubKey, // subkey name
DWORD Reserved, // reserved
LPWSTR lpClass, // class string
DWORD dwOptions, // special options
REGSAM samDesired, // desired security access
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // inheritance
PHKEY phkResult, // key handle
LPDWORD lpdwDisposition // disposition value buffer
);
ADVAPI9X_API LONG (WINAPI *lpfnRegDeleteKeyW) (
HKEY hKey, // handle to open key
LPCWSTR lpSubKey // subkey name
);
ADVAPI9X_API LONG (WINAPI *lpfnRegEnumValueW) (
HKEY hKey, // handle to key to query
DWORD dwIndex, // index of value to query
LPWSTR lpValueName, // value buffer
LPDWORD lpcValueName, // size of value buffer
LPDWORD lpReserved, // reserved
LPDWORD lpType, // type buffer
LPBYTE lpData, // data buffer
LPDWORD lpcbData // size of data buffer
);
ADVAPI9X_API LONG (WINAPI *lpfnRegQueryValueExW) (
HKEY hKey, // handle to key
LPCWSTR lpValueName, // value name
LPDWORD lpReserved, // reserved
LPDWORD lpType, // type buffer
LPBYTE lpData, // data buffer
LPDWORD lpcbData // size of data buffer
);
ADVAPI9X_API LONG (WINAPI *lpfnRegSetValueExW)(
HKEY hKey, // handle to key
LPCWSTR lpValueName, // value name
DWORD Reserved, // reserved
DWORD dwType, // value type
CONST BYTE *lpData, // value data
DWORD cbData // size of value data
);
ADVAPI9X_API LONG (WINAPI *lpfnRegDeleteValueW) (
HKEY hKey, // handle to key
LPCWSTR lpValueName // value name
);
ADVAPI9X_API LONG (WINAPI *lpfnRegQueryInfoKeyW) (
HKEY hKey, // handle to key to query
LPWSTR lpClassW, // address of buffer for class string
LPDWORD lpcbClass, // address of size of class string buffer
LPDWORD lpReserved, // reserved
LPDWORD lpcSubKeys, // address of buffer for number of
// subkeys
LPDWORD lpcbMaxSubKeyLen, // address of buffer for longest subkey
// name length
LPDWORD lpcbMaxClassLen, // address of buffer for longest class
// string length
LPDWORD lpcValues, // address of buffer for number of value
// entries
LPDWORD lpcbMaxValueNameLen, // address of buffer for longest
// value name length
LPDWORD lpcbMaxValueLen, // address of buffer for longest value
// data length
LPDWORD lpcbSecurityDescriptor, // address of buffer for security
// descriptor length
PFILETIME lpftLastWriteTime // address of buffer for last write time
);
//------------------------------------------------------------------------
// redefine the above undefined macros so that the preprocessor replaces
// all occurrences of this macros with our function pointer
//------------------------------------------------------------------------
#define RegOpenKeyExW lpfnRegOpenKeyExW
#define RegEnumKeyExW lpfnRegEnumKeyExW
#define RegCreateKeyExW lpfnRegCreateKeyExW
#define RegDeleteKeyW lpfnRegDeleteKeyW
#define RegEnumValueW lpfnRegEnumValueW
#define RegQueryValueExW lpfnRegQueryValueExW
#define RegSetValueExW lpfnRegSetValueExW
#define RegDeleteValueW lpfnRegDeleteValueW
#define RegQueryInfoKeyW lpfnRegQueryInfoKeyW
#ifdef __cplusplus
}
#endif