blob: 53d8509ec7ee8b3a87c0485944069df2db51272f [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 winbase.h file in order to avoid
// warnings because of multiple defines
//------------------------------------------------------------------------
#ifdef LoadLibraryW
#undef LoadLibraryW
#endif
#ifdef LoadLibraryExW
#undef LoadLibraryExW
#endif
#ifdef GetModuleFileNameW
#undef GetModuleFileNameW
#endif
#ifdef GetLogicalDriveStringsW
#undef GetLogicalDriveStringsW
#endif
#ifdef DeleteFileW
#undef DeleteFileW
#endif
#ifdef CopyFileW
#undef CopyFileW
#endif
#ifdef MoveFileW
#undef MoveFileW
#endif
#ifdef MoveFileExW
#undef MoveFileExW
#endif
#ifdef CreateFileW
#undef CreateFileW
#endif
#ifdef RemoveDirectoryW
#undef RemoveDirectoryW
#endif
#ifdef CreateDirectoryW
#undef CreateDirectoryW
#endif
#ifdef CreateDirectoryExW
#undef CreateDirectoryExW
#endif
#ifdef CreateFileW
#undef CreateFileW
#endif
#ifdef GetLongPathNameW
#undef GetLongPathNameW
#endif
#ifdef GetLocaleInfoW
#undef GetLocaleInfoW
#endif
#ifdef GetFullPathNameW
#undef GetFullPathNameW
#endif
#ifdef CreateProcessW
#undef CreateProcessW
#endif
#ifdef CreateProcessAsUserW
#undef CreateProcessAsUserW
#endif
#ifdef GetEnvironmentVariableW
#undef GetEnvironmentVariableW
#endif
#ifdef GetDriveTypeW
#undef GetDriveTypeW
#endif
#ifdef GetCurrentDirectoryW
#undef GetCurrentDirectoryW
#endif
#ifdef SetCurrentDirectoryW
#undef SetCurrentDirectoryW
#endif
#ifdef GetVolumeInformationW
#undef GetVolumeInformationW
#endif
#ifdef GetDiskFreeSpaceExA
#undef GetDiskFreeSpaceExA
#endif
#ifdef GetDiskFreeSpaceExW
#undef GetDiskFreeSpaceExW
#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 KERNEL9X_API extern
//------------------------------------------------------------------------
// declare function pointers to the appropriate kernel functions
//------------------------------------------------------------------------
//BOOL WINAPI RegisterServiceProcess( DWORD dwProcessID, BOOL fRegister );
KERNEL9X_API HMODULE (WINAPI *lpfnLoadLibraryExW ) (
LPCWSTR lpLibFileName, // file name of module
HANDLE hFile, // reserved, must be NULL
DWORD dwFlags // entry-point execution option
);
KERNEL9X_API DWORD (WINAPI *lpfnGetModuleFileNameW ) (
HMODULE hModule, // handle to module
LPWSTR lpFilename, // file name of module
DWORD nSize // size of buffer
);
KERNEL9X_API DWORD (WINAPI *lpfnGetLogicalDriveStringsW ) (
DWORD nBufferLength, // size of buffer
LPWSTR lpBuffer // drive strings buffer
);
KERNEL9X_API HANDLE ( WINAPI *lpfnCreateFileW )(
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
KERNEL9X_API DWORD WINAPI GetCanonicalPathNameA(
LPCSTR lpszPath, // file name
LPSTR lpszCanonicalPath, // path buffer
DWORD cchBuffer // size of path buffer
);
KERNEL9X_API DWORD WINAPI GetCanonicalPathNameW(
LPCWSTR lpszPath, // file name
LPWSTR lpszCanonicalPath, // path buffer
DWORD cchBuffer // size of path buffer
);
KERNEL9X_API HANDLE ( WINAPI * lpfnCreateFileW ) (
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile );
KERNEL9X_API BOOL (WINAPI *lpfnDeleteFileW ) (
LPCWSTR lpFileName // file name
);
KERNEL9X_API BOOL (WINAPI *lpfnCopyFileW ) (
LPCWSTR lpExistingFileName, // file name
LPCWSTR lpNewFileName, // new file name
BOOL bFailIfExist // operation if file exists
);
KERNEL9X_API BOOL (WINAPI *lpfnMoveFileW ) (
LPCWSTR lpExistingFileName, // file name
LPCWSTR lpNewFileName // new file name
);
KERNEL9X_API BOOL (WINAPI *lpfnMoveFileExW ) (
LPCWSTR lpExistingFileName, // file name
LPCWSTR lpNewFileName, // new file name
DWORD dwFlags // move options
);
KERNEL9X_API BOOL (WINAPI *lpfnRemoveDirectoryW ) (
LPCWSTR lpPathName // directory name
);
KERNEL9X_API BOOL ( WINAPI * lpfnCreateDirectoryW ) (
LPCWSTR lpNewDirectory, LPSECURITY_ATTRIBUTES lpSecurityAttributes );
KERNEL9X_API BOOL ( WINAPI * lpfnCreateDirectoryExW ) (
LPCWSTR lpTemplateDirectory,
LPCWSTR lpNewDirectory,
LPSECURITY_ATTRIBUTES lpSecurityAttributes );
KERNEL9X_API DWORD ( WINAPI * lpfnGetLongPathNameW ) (
LPCWSTR lpszShortPath, // file name
LPWSTR lpszLongPath, // path buffer
DWORD cchBuffer // size of path buffer
);
// GetCanonicalPath is a tool function with no exact counterpart
// in the win32 api; we use nevertheless a function pointer
// because every variable etc. must root in the Kernel9x.lib else
// we loose our AutoSystoolInit object during linking
KERNEL9X_API DWORD ( WINAPI * lpfnGetCanonicalPathW ) (
LPCWSTR lpszPath, // file name
LPWSTR lpszCanonicalPath, // path buffer
DWORD cchBuffer // size of path buffer
);
KERNEL9X_API int ( WINAPI* lpfnGetLocaleInfoW ) (
LCID Locale, // locale identifier
LCTYPE LCType, // information type
LPWSTR lpLCData, // information buffer
int cchData // size of buffer
);
KERNEL9X_API DWORD ( WINAPI * lpfnGetFullPathNameW )(
LPCWSTR lpFileName, // file name
DWORD nBufferLength, // size of path buffer
LPWSTR lpBuffer, // path buffer
LPWSTR *lpFilePart // address of file name in path
);
KERNEL9X_API BOOL ( WINAPI * lpfnCreateProcessW )(
LPCWSTR lpApplicationName, // name of executable module
LPWSTR lpCommandLine, // command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
BOOL bInheritHandles, // handle inheritance option
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCWSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFOW lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInformation // process information
);
KERNEL9X_API BOOL ( WINAPI * lpfnCreateProcessAsUserW )(
HANDLE hToken, // handle to user token
LPCWSTR lpApplicationName, // name of executable module
LPWSTR lpCommandLine, // command-line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
BOOL bInheritHandles, // inheritance option
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCWSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFOW lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInformation // process information
);
KERNEL9X_API DWORD ( WINAPI * lpfnGetEnvironmentVariableW )(
LPCWSTR lpName, // environment variable name
LPWSTR lpBuffer, // buffer for variable value
DWORD nSize // size of buffer
);
KERNEL9X_API UINT ( WINAPI * lpfnGetDriveTypeW )(
LPCWSTR lpRootPathName // root directory
);
KERNEL9X_API DWORD ( WINAPI * lpfnGetCurrentDirectoryW )(
DWORD nBufferLength, // size of directory buffer
LPWSTR lpBuffer // directory buffer
);
KERNEL9X_API BOOL ( WINAPI * lpfnSetCurrentDirectoryW )(
LPCWSTR lpPathName // new directory name
);
// GetVolumeInformation
KERNEL9X_API BOOL ( WINAPI* lpfnGetVolumeInformationW )(
LPCWSTR lpRootPathName, // root directory
LPWSTR lpVolumeNameBuffer, // volume name buffer
DWORD nVolumeNameSize, // length of name buffer
LPDWORD lpVolumeSerialNumber, // volume serial number
LPDWORD lpMaximumComponentLength, // maximum file name length
LPDWORD lpFileSystemFlags, // file system options
LPWSTR lpFileSystemName, // file system name buffer
DWORD nFileSystemNameSize // length of file system name buffer
);
// GetDiskFreeSpaceExA
KERNEL9X_API BOOL (WINAPI *lpfnGetDiskFreeSpaceExA)(
LPCSTR lpDirectoryName, // directory name
PULARGE_INTEGER lpFreeBytesAvailable, // bytes available to caller
PULARGE_INTEGER lpTotalNumberOfBytes, // bytes on disk
PULARGE_INTEGER lpTotalNumberOfFreeBytes // free bytes on disk
);
// GetDiskFreeSpaceExW
KERNEL9X_API BOOL (WINAPI *lpfnGetDiskFreeSpaceExW)(
LPCWSTR lpDirectoryName, // directory name
PULARGE_INTEGER lpFreeBytesAvailable, // bytes available to caller
PULARGE_INTEGER lpTotalNumberOfBytes, // bytes on disk
PULARGE_INTEGER lpTotalNumberOfFreeBytes // free bytes on disk
);
//------------------------------------------------------------------------
// redefine the above undefined macros so that the preprocessor replaces
// all occurrences of this macros with our function pointer
//------------------------------------------------------------------------
#define LoadLibraryExW lpfnLoadLibraryExW
#define LoadLibraryW(c) LoadLibraryExW(c, NULL, 0)
#define GetModuleFileNameW lpfnGetModuleFileNameW
#define GetLogicalDriveStringsW lpfnGetLogicalDriveStringsW
#define CreateFileW lpfnCreateFileW
#define DeleteFileW lpfnDeleteFileW
#define CopyFileW lpfnCopyFileW
#define MoveFileW lpfnMoveFileW
#define MoveFileExW lpfnMoveFileExW
#define RemoveDirectoryW lpfnRemoveDirectoryW
#define CreateDirectoryW lpfnCreateDirectoryW
#define CreateDirectoryExW lpfnCreateDirectoryExW
#define GetLongPathNameW lpfnGetLongPathNameW
#define GetFullPathNameW lpfnGetFullPathNameW
#define GetCanonicalPath lpfnGetCanonicalPathW
#define GetLocaleInfoW lpfnGetLocaleInfoW
#define CreateProcessW lpfnCreateProcessW
#define CreateProcessAsUserW lpfnCreateProcessAsUserW
#define GetEnvironmentVariableW lpfnGetEnvironmentVariableW
#define GetDriveTypeW lpfnGetDriveTypeW
#define GetCurrentDirectoryW lpfnGetCurrentDirectoryW
#define SetCurrentDirectoryW lpfnSetCurrentDirectoryW
#define GetVolumeInformationW lpfnGetVolumeInformationW
#define GetDiskFreeSpaceExA lpfnGetDiskFreeSpaceExA
#define GetDiskFreeSpaceExW lpfnGetDiskFreeSpaceExW
#ifdef __cplusplus
}
#endif