Annotation of win32/apache22/include/os.h, revision 1.1
1.1 ! moko 1: /* Licensed to the Apache Software Foundation (ASF) under one or more
! 2: * contributor license agreements. See the NOTICE file distributed with
! 3: * this work for additional information regarding copyright ownership.
! 4: * The ASF licenses this file to You under the Apache License, Version 2.0
! 5: * (the "License"); you may not use this file except in compliance with
! 6: * the License. You may obtain a copy of the License at
! 7: *
! 8: * http://www.apache.org/licenses/LICENSE-2.0
! 9: *
! 10: * Unless required by applicable law or agreed to in writing, software
! 11: * distributed under the License is distributed on an "AS IS" BASIS,
! 12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
! 13: * See the License for the specific language governing permissions and
! 14: * limitations under the License.
! 15: */
! 16:
! 17: /**
! 18: * @file win32/os.h
! 19: * @brief This file in included in all Apache source code. It contains definitions
! 20: * of facilities available on _this_ operating system (HAVE_* macros),
! 21: * and prototypes of OS specific functions defined in os.c or os-inline.c
! 22: *
! 23: * @defgroup APACHE_OS_WIN32 win32
! 24: * @ingroup APACHE_OS
! 25: * @{
! 26: */
! 27:
! 28: #ifdef WIN32
! 29:
! 30: #ifndef AP_OS_H
! 31: #define AP_OS_H
! 32: /* Delegate windows include to the apr.h header, if USER or GDI declarations
! 33: * are required (for a window rather than console application), include
! 34: * windows.h prior to any other Apache header files.
! 35: */
! 36: #include "apr_pools.h"
! 37:
! 38: #include <io.h>
! 39: #include <fcntl.h>
! 40:
! 41: #ifdef _WIN64
! 42: #define PLATFORM "Win64"
! 43: #else
! 44: #define PLATFORM "Win32"
! 45: #endif
! 46:
! 47: /* going away shortly... */
! 48: #define HAVE_DRIVE_LETTERS
! 49: #define HAVE_UNC_PATHS
! 50: #define CASE_BLIND_FILESYSTEM
! 51:
! 52: #define APACHE_MPM_DIR "server/mpm/winnt" /* generated on unix */
! 53:
! 54: #include <stddef.h>
! 55: #include <stdlib.h> /* for exit() */
! 56:
! 57: #ifdef __cplusplus
! 58: extern "C" {
! 59: #endif
! 60:
! 61: /* BIG RED WARNING: exit() is mapped to allow us to capture the exit
! 62: * status. This header must only be included from modules linked into
! 63: * the ApacheCore.dll - since it's a horrible behavior to exit() from
! 64: * any module outside the main() block, and we -will- assume it's a
! 65: * fatal error.
! 66: */
! 67:
! 68: AP_DECLARE_DATA extern int ap_real_exit_code;
! 69:
! 70: #define exit(status) ((exit)((ap_real_exit_code==2) \
! 71: ? (ap_real_exit_code = (status)) \
! 72: : ((ap_real_exit_code = 0), (status))))
! 73:
! 74: #ifdef AP_DECLARE_EXPORT
! 75:
! 76: /* Defined in util_win32.c and available only to the core module for
! 77: * win32 MPM design.
! 78: */
! 79:
! 80: AP_DECLARE(apr_status_t) ap_os_proc_filepath(char **binpath, apr_pool_t *p);
! 81:
! 82: typedef enum {
! 83: AP_DLL_WINBASEAPI = 0, // kernel32 From WinBase.h
! 84: AP_DLL_WINADVAPI = 1, // advapi32 From WinBase.h
! 85: AP_DLL_WINSOCKAPI = 2, // mswsock From WinSock.h
! 86: AP_DLL_WINSOCK2API = 3, // ws2_32 From WinSock2.h
! 87: AP_DLL_defined = 4 // must define as last idx_ + 1
! 88: } ap_dlltoken_e;
! 89:
! 90: FARPROC ap_load_dll_func(ap_dlltoken_e fnLib, char* fnName, int ordinal);
! 91:
! 92: PSECURITY_ATTRIBUTES GetNullACL(void);
! 93: void CleanNullACL(void *sa);
! 94:
! 95: int set_listeners_noninheritable(apr_pool_t *p);
! 96:
! 97:
! 98: #define AP_DECLARE_LATE_DLL_FUNC(lib, rettype, calltype, fn, ord, args, names) \
! 99: typedef rettype (calltype *ap_winapi_fpt_##fn) args; \
! 100: static ap_winapi_fpt_##fn ap_winapi_pfn_##fn = NULL; \
! 101: static APR_INLINE rettype ap_winapi_##fn args \
! 102: { if (!ap_winapi_pfn_##fn) \
! 103: ap_winapi_pfn_##fn = (ap_winapi_fpt_##fn) ap_load_dll_func(lib, #fn, ord); \
! 104: return (*(ap_winapi_pfn_##fn)) names; }; \
! 105:
! 106: /* Win2K kernel only */
! 107: AP_DECLARE_LATE_DLL_FUNC(AP_DLL_WINADVAPI, BOOL, WINAPI, ChangeServiceConfig2A, 0, (
! 108: SC_HANDLE hService,
! 109: DWORD dwInfoLevel,
! 110: LPVOID lpInfo),
! 111: (hService, dwInfoLevel, lpInfo));
! 112: #undef ChangeServiceConfig2
! 113: #define ChangeServiceConfig2 ap_winapi_ChangeServiceConfig2A
! 114:
! 115: /* WinNT kernel only */
! 116: AP_DECLARE_LATE_DLL_FUNC(AP_DLL_WINBASEAPI, BOOL, WINAPI, CancelIo, 0, (
! 117: IN HANDLE hFile),
! 118: (hFile));
! 119: #undef CancelIo
! 120: #define CancelIo ap_winapi_CancelIo
! 121:
! 122: /* Win9x kernel only */
! 123: AP_DECLARE_LATE_DLL_FUNC(AP_DLL_WINBASEAPI, DWORD, WINAPI, RegisterServiceProcess, 0, (
! 124: DWORD dwProcessId,
! 125: DWORD dwType),
! 126: (dwProcessId, dwType));
! 127: #define RegisterServiceProcess ap_winapi_RegisterServiceProcess
! 128:
! 129: #endif /* def AP_DECLARE_EXPORT */
! 130:
! 131: #ifdef __cplusplus
! 132: }
! 133: #endif
! 134:
! 135: #endif /* ndef AP_OS_H */
! 136: #endif /* def WIN32 */
! 137: /** @} */
E-mail: