/************************************************************** * * 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 #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