├── .gitignore ├── bin ├── mod_authn_ntlm.so └── mod_authn_ntlm.map ├── conf ├── ajax_post_demo │ ├── ajax_bounce.php │ ├── .htaccess │ ├── ajax_anon.php │ └── ajax_auth.php └── httpd.conf ├── appveyor ├── build.cmd ├── install.cmd ├── build-task.cmd └── Get-Apache.ps1 ├── .appveyor.yml ├── copyright.txt ├── src ├── mod_ntlm_version.h ├── mod_ntlm.h ├── mod_ntlm_authorization.c ├── mod_ntlm.c ├── mod_ntlm_interface.c └── mod_ntlm_authentication.c ├── CMakeLists.txt └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /bin/mod_authn_ntlm.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TQsoft-GmbH/mod_authn_ntlm/HEAD/bin/mod_authn_ntlm.so -------------------------------------------------------------------------------- /conf/ajax_post_demo/ajax_bounce.php: -------------------------------------------------------------------------------- 1 | 2 | order deny,allow 3 | Require valid-user 4 | AuthType SSPI 5 | NTLMAuth On 6 | NTLMAuthoritative On 7 | require user "NT AUTHORITY\ANONYMOUS LOGON" denied 8 | 9 | 10 | 11 | order deny,allow 12 | Require valid-user 13 | AuthType SSPI 14 | NTLMAuth On 15 | NTLMAuthoritative On 16 | NTLMNotForced On 17 | 18 | -------------------------------------------------------------------------------- /appveyor/build.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal enableextensions enabledelayedexpansion 3 | cd /d %APPVEYOR_BUILD_FOLDER% 4 | 5 | if not exist "Apache24\bin\httpd.exe" ( 6 | echo Apache24 not found 7 | exit /b 3 8 | ) 9 | 10 | if "%ARCHITECTURE%"=="x64" ( 11 | set GENERATOR="Visual Studio 15 2017 Win64" 12 | ) 13 | 14 | if "%ARCHITECTURE%"=="x86" ( 15 | set GENERATOR="Visual Studio 15 2017" 16 | ) 17 | 18 | mkdir %APPVEYOR_BUILD_FOLDER%\build 19 | 20 | set CMAKE_BUILD_TYPE=Release 21 | cmd /c %APPVEYOR_BUILD_FOLDER%\appveyor\build-task.cmd 22 | 23 | set CMAKE_BUILD_TYPE=Debug 24 | cmd /c %APPVEYOR_BUILD_FOLDER%\appveyor\build-task.cmd 25 | endlocal 26 | -------------------------------------------------------------------------------- /.appveyor.yml: -------------------------------------------------------------------------------- 1 | 2 | version: '{branch}.{build}' 3 | 4 | environment: 5 | matrix: 6 | - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 7 | ARCHITECTURE: x64 8 | BUILD_CRT: VC15 9 | - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 10 | ARCHITECTURE: x86 11 | BUILD_CRT: VC15 12 | 13 | install: 14 | - appveyor\install.cmd 15 | 16 | build_script: 17 | - appveyor\build.cmd 18 | 19 | artifacts: 20 | - path: artifacts 21 | name: mod_authn_ntlm-%APPVEYOR_REPO_TAG_NAME%-%ARCHITECTURE%-%BUILD_CRT% 22 | type: zip 23 | # - path: build 24 | # name: mod_authn_ntlm-%APPVEYOR_REPO_TAG_NAME%-%ARCHITECTURE%-%BUILD_CRT%-Build 25 | # type: zip 26 | -------------------------------------------------------------------------------- /copyright.txt: -------------------------------------------------------------------------------- 1 | /* ==================================================================== 2 | * This code is copyright 2013 TQsoft GmbH 3 | * It may be freely distributed, as long as the above notices are reproduced. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | * 17 | */ 18 | -------------------------------------------------------------------------------- /conf/ajax_post_demo/ajax_anon.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ajax test 5 | 6 | 7 | 8 | 9 |

10 | 11 | send 12 |

13 | 14 |
15 |
16 | Username is 17 |
18 | 
21 | 
22 | 23 | 24 | -------------------------------------------------------------------------------- /conf/ajax_post_demo/ajax_auth.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ajax test 5 | 6 | 7 | 8 | 9 |

10 | 11 | send 12 |

13 | 14 |
15 |
16 | Username is 17 |
18 | 
21 | 
22 | 23 | 24 | -------------------------------------------------------------------------------- /appveyor/install.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal enableextensions enabledelayedexpansion 3 | 4 | PowerShell -ExecutionPolicy RemoteSigned %~dp0\Get-Apache.ps1 -Arch %ARCHITECTURE% -DownloadPath %APPVEYOR_BUILD_FOLDER% 5 | 6 | xcopy %APPVEYOR_BUILD_FOLDER%\README.md %APPVEYOR_BUILD_FOLDER%\artifacts\ /y /f 7 | xcopy %APPVEYOR_BUILD_FOLDER%\copyright.txt %APPVEYOR_BUILD_FOLDER%\artifacts\ /y /f 8 | xcopy %APPVEYOR_BUILD_FOLDER%\CMakeLists.txt %APPVEYOR_BUILD_FOLDER%\artifacts\ /y /f 9 | xcopy %APPVEYOR_BUILD_FOLDER%\conf %APPVEYOR_BUILD_FOLDER%\artifacts\conf\ /y /f 10 | xcopy %APPVEYOR_BUILD_FOLDER%\src %APPVEYOR_BUILD_FOLDER%\artifacts\src\ /y /f 11 | 12 | if "%APPVEYOR_REPO_TAG_NAME%"=="" ( 13 | set APPVEYOR_REPO_TAG_NAME=%APPVEYOR_REPO_BRANCH%-%APPVEYOR_REPO_COMMIT:~0,8% 14 | for /f "tokens=1-3* delims= " %%i in (src\mod_ntlm_version.h) do ( 15 | if "%%j"=="MOD_NTLM_VERSION_MAJOR" ( 16 | set MOD_NTLM_VERSION_MAJOR=%%k 17 | ) 18 | if "%%j"=="MOD_NTLM_VERSION_MID" ( 19 | set MOD_NTLM_VERSION_MID=%%k 20 | ) 21 | if "%%j"=="MOD_NTLM_VERSION_MINOR" ( 22 | set MOD_NTLM_VERSION_MINOR=%%k 23 | ) 24 | ) 25 | set MOD_NTL_VERSION=!MOD_NTLM_VERSION_MAJOR!.!MOD_NTLM_VERSION_MID!.!MOD_NTLM_VERSION_MINOR! 26 | set APPVEYOR_REPO_TAG_NAME=!MOD_NTL_VERSION!-!APPVEYOR_REPO_TAG_NAME! 27 | 28 | appveyor SetVariable -Name APPVEYOR_REPO_TAG_NAME -Value !APPVEYOR_REPO_TAG_NAME! 29 | ) 30 | 31 | endlocal 32 | -------------------------------------------------------------------------------- /src/mod_ntlm_version.h: -------------------------------------------------------------------------------- 1 | /* ==================================================================== 2 | * This code is copyright 2013 TQsoft GmbH 3 | * Inspired by mod_auth_sspi project from Tim Castello 4 | * 5 | * It may be freely distributed, as long as the above notices are reproduced. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * 19 | */ 20 | 21 | #ifndef _MOD_NTLM_VERSION_H_ 22 | #define _MOD_NTLM_VERSION_H_ 23 | 24 | #define MOD_NTLM_MODULE_NAME "mod_authn_ntlm" 25 | 26 | #define MOD_NTLM_VERSION_MAJOR 1 27 | #define MOD_NTLM_VERSION_MID 0 28 | #define MOD_NTLM_VERSION_MINOR 8 29 | #define STRINGIFY(n) STRINGIFY_HELPER(n) 30 | #define STRINGIFY_HELPER(n) #n 31 | 32 | #define MOD_NTLM_VERSION_STR \ 33 | STRINGIFY(MOD_NTLM_VERSION_MAJOR) "." \ 34 | STRINGIFY(MOD_NTLM_VERSION_MID) "." \ 35 | STRINGIFY(MOD_NTLM_VERSION_MINOR) 36 | 37 | #endif /* ndef _MOD_NTLM_VERSION_H_ */ 38 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 2 | # -- CMAKE build file for mod_auth_ntlm 3 | # 4 | cmake_minimum_required (VERSION 3.9.1) 5 | project(mod_authn_ntlm C) 6 | set(LIBAPR "libapr-1") 7 | set(LIBAPRUTIL "libaprutil-1") 8 | 9 | if(NOT DEFINED APACHE_ROOT) 10 | set(APACHE_ROOT "Apache24") 11 | endif() 12 | option( USE_STATIC_RUNTIME "use MSVC static runtimes" OFF) 13 | # 14 | # -- Windows option for static runtimes - must match Apache build 15 | # default is OFF and will use /MD /MDd, which links against VC runtime dlls. 16 | # USE_STATIC_RUNTIME uses /MT or /MTd, no VC dlls needed 17 | # 18 | if(DEFINED USE_STATIC_RUNTIME AND USE_STATIC_RUNTIME AND WIN32) 19 | # Set MSVC runtime flags for all configurations 20 | foreach(cfg "" ${CMAKE_CONFIGURATION_TYPES}) 21 | set(flag_var CMAKE_CXX_FLAGS) 22 | if(cfg) 23 | string(TOUPPER ${cfg} cfg_upper) 24 | string(APPEND flag_var "_${cfg_upper}") 25 | endif() 26 | if(${flag_var} MATCHES "/MD") 27 | string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") 28 | endif() 29 | set(flag_var CMAKE_C_FLAGS) 30 | if(cfg) 31 | string(TOUPPER ${cfg} cfg_upper) 32 | string(APPEND flag_var "_${cfg_upper}") 33 | endif() 34 | if(${flag_var} MATCHES "/MD") 35 | string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") 36 | endif() 37 | endforeach() 38 | endif() 39 | 40 | include_directories(${APACHE_ROOT}/include) 41 | link_directories(${APACHE_ROOT}/lib) 42 | 43 | file(GLOB_RECURSE SOURCE_FILES 44 | "src/*.h" 45 | "src/*.c" 46 | ) 47 | 48 | add_library(mod_authn_ntlm SHARED ${SOURCE_FILES}) 49 | set_target_properties(mod_authn_ntlm PROPERTIES SUFFIX ".so") 50 | target_link_libraries(mod_authn_ntlm libhttpd ${LIBAPR} ${LIBAPRUTIL}) 51 | 52 | install(TARGETS mod_authn_ntlm 53 | CONFIGURATIONS Release 54 | CONFIGURATIONS Debug 55 | RUNTIME DESTINATION ${APACHE_ROOT}/modules 56 | ) 57 | -------------------------------------------------------------------------------- /appveyor/build-task.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal enableextensions enabledelayedexpansion 3 | cd /d %APPVEYOR_BUILD_FOLDER%\build 4 | 5 | cmake -G %GENERATOR% -DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE% .. 6 | cmake --build . --config %CMAKE_BUILD_TYPE% 7 | 8 | if not exist "%APPVEYOR_BUILD_FOLDER%\build\%CMAKE_BUILD_TYPE%\mod_authn_ntlm.dll" exit /b 3 9 | 10 | move "%APPVEYOR_BUILD_FOLDER%\build\%CMAKE_BUILD_TYPE%\mod_authn_ntlm.dll" "%APPVEYOR_BUILD_FOLDER%\build\%CMAKE_BUILD_TYPE%\mod_authn_ntlm.so" 11 | 12 | xcopy %APPVEYOR_BUILD_FOLDER%\build\%CMAKE_BUILD_TYPE% %APPVEYOR_BUILD_FOLDER%\artifacts\%CMAKE_BUILD_TYPE%\ /y /f 13 | 14 | xcopy %APPVEYOR_BUILD_FOLDER%\README.md %APPVEYOR_BUILD_FOLDER%\mod_authn_ntlm-%APPVEYOR_REPO_TAG_NAME%-%ARCHITECTURE%-%BUILD_CRT%-%CMAKE_BUILD_TYPE%\ /y /f 15 | xcopy %APPVEYOR_BUILD_FOLDER%\copyright.txt %APPVEYOR_BUILD_FOLDER%\mod_authn_ntlm-%APPVEYOR_REPO_TAG_NAME%-%ARCHITECTURE%-%BUILD_CRT%-%CMAKE_BUILD_TYPE%\ /y /f 16 | xcopy %APPVEYOR_BUILD_FOLDER%\CMakeLists.txt %APPVEYOR_BUILD_FOLDER%\mod_authn_ntlm-%APPVEYOR_REPO_TAG_NAME%-%ARCHITECTURE%-%BUILD_CRT%-%CMAKE_BUILD_TYPE%\ /y /f 17 | xcopy %APPVEYOR_BUILD_FOLDER%\conf %APPVEYOR_BUILD_FOLDER%\mod_authn_ntlm-%APPVEYOR_REPO_TAG_NAME%-%ARCHITECTURE%-%BUILD_CRT%-%CMAKE_BUILD_TYPE%\conf\ /y /f 18 | xcopy %APPVEYOR_BUILD_FOLDER%\src %APPVEYOR_BUILD_FOLDER%\mod_authn_ntlm-%APPVEYOR_REPO_TAG_NAME%-%ARCHITECTURE%-%BUILD_CRT%-%CMAKE_BUILD_TYPE%\conf\ /y /f 19 | xcopy %APPVEYOR_BUILD_FOLDER%\build\%CMAKE_BUILD_TYPE%\* %APPVEYOR_BUILD_FOLDER%\mod_authn_ntlm-%APPVEYOR_REPO_TAG_NAME%-%ARCHITECTURE%-%BUILD_CRT%-%CMAKE_BUILD_TYPE%\bin\ /y /f 20 | 7z a mod_authn_ntlm-%APPVEYOR_REPO_TAG_NAME%-%ARCHITECTURE%-%BUILD_CRT%-%CMAKE_BUILD_TYPE%.zip %APPVEYOR_BUILD_FOLDER%\mod_authn_ntlm-%APPVEYOR_REPO_TAG_NAME%-%ARCHITECTURE%-%BUILD_CRT%-%CMAKE_BUILD_TYPE%\* 21 | appveyor PushArtifact mod_authn_ntlm-%APPVEYOR_REPO_TAG_NAME%-%ARCHITECTURE%-%BUILD_CRT%-%CMAKE_BUILD_TYPE%.zip -FileName mod_authn_ntlm-%APPVEYOR_REPO_TAG_NAME%-%ARCHITECTURE%-%BUILD_CRT%-%CMAKE_BUILD_TYPE%.zip 22 | 23 | endlocal 24 | -------------------------------------------------------------------------------- /appveyor/Get-Apache.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | .SYNOPSIS 3 | PowerShell script to install Apache 4 | 5 | .LINK 6 | https://github.com/fawno/WAMP-Tools/tree/PowerShell 7 | 8 | .LINK 9 | https://lab.fawno.com 10 | #> 11 | 12 | Param ( 13 | [ValidateSet("x86", "x64", "X86", "X64")] [string] $Arch = "x64", 14 | [string] $DownloadPath = ".." 15 | ) 16 | 17 | $Arch = $Arch.ToLower() 18 | 19 | $ApacheLounge = "https://www.apachelounge.com/download/" 20 | 21 | [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 22 | 23 | Write-Output "Checking for downloadable Apache versions..." 24 | 25 | $Releases = @() 26 | 27 | $DownloadsPage = Invoke-WebRequest $ApacheLounge -UserAgent "" 28 | $DownloadsPage.Links | Where-Object { $_.innerText -match "^httpd-([\d\.]+)-(win\d+)-(VC\d+).zip$" } | ForEach-Object { 29 | $Matches[2] = $Matches[2].ToLower().Replace("win32", "x86").Replace("win64", "x64") 30 | $Releases += @{ 31 | DownloadFile = $Matches[0]; 32 | Version = New-Object -TypeName System.Version($Matches[1]); 33 | VC = $Matches[3]; 34 | VCVersion = "$($Matches[3])_$($Matches[2])"; 35 | Architecture = $Matches[2]; 36 | DownloadUrl = $_.href; 37 | } 38 | } 39 | 40 | 41 | $Release = $Releases | Where-Object { $_.Architecture -eq $Arch } | Sort-Object -Descending { $_.Version } | Select-Object -First 1 42 | 43 | if (!$Release) { 44 | throw "Unable to find an installable version of $Arch Apache $Version. Check that the version specified is correct." 45 | } 46 | 47 | $ApacheDownloadUri = $Release.DownloadUrl 48 | $ApacheFileName = [Uri]::new([Uri]$ApacheDownloadUri).Segments[-1] 49 | $ApacheDownloadFile = "$DownloadPath\$ApacheFileName" 50 | 51 | if (!(Test-Path -Path "$DownloadPath\bin\httpd.exe" )) { 52 | if (!(Test-Path -Path "$DownloadPath" )) { 53 | New-Item -ItemType Directory -Force -Path $DownloadPath | Out-Null 54 | } 55 | 56 | if (!(Test-Path -Path $ApacheDownloadFile )) { 57 | Write-Output "Downloading Apache $($Release.Version) ($ApacheFileName)..." 58 | try { 59 | Start-BitsTransfer -Source $ApacheDownloadUri -Destination $ApacheDownloadFile 60 | } catch { 61 | throw "Unable to download Apache from: $ApacheDownloadUri" 62 | } 63 | } 64 | 65 | if ((Test-Path -Path $ApacheDownloadFile )) { 66 | try { 67 | Write-Output "Extracting Apache $($Release.Version) ($ApacheFileName) to: $DownloadPath" 68 | Expand-Archive -LiteralPath $ApacheDownloadFile -DestinationPath $DownloadPath -ErrorAction Stop 69 | } catch { 70 | throw "Unable to extract Apache from ZIP" 71 | } 72 | Remove-Item $ApacheDownloadFile -Force -ErrorAction SilentlyContinue | Out-Null 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/mod_ntlm.h: -------------------------------------------------------------------------------- 1 | /* ==================================================================== 2 | * This code is copyright 2013 TQsoft GmbH 3 | * Inspired by mod_auth_sspi project from Tim Castello 4 | * 5 | * It may be freely distributed, as long as the above notices are reproduced. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * 19 | */ 20 | 21 | #ifndef _MOD_NTLM_H_ 22 | #define _MOD_NTLM_H_ 23 | 24 | /* Preprocessor macro definitions */ 25 | #define WIN32_LEAN_AND_MEAN 1 26 | #define SECURITY_WIN32 1 27 | #define WINNT_SECURITY_DLL "SECURITY.DLL" 28 | #define WIN9X_SECURITY_DLL "SECUR32.DLL" 29 | #define DEFAULT_SSPI_PACKAGE "NTLM" 30 | #define UUID_STRING_LEN 64 31 | #define MAX_RETRYS 2 32 | 33 | #define _WIN32_WINNT 0x0400 34 | 35 | /* Version information */ 36 | #include "mod_ntlm_version.h" 37 | 38 | /* System headers */ 39 | #include 40 | #include 41 | #include 42 | #include 43 | #include 44 | #include 45 | 46 | /* sockaddr_in6 required by apr_network_io.h */ 47 | #include 48 | 49 | /* HTTPD headers */ 50 | #include "ap_config.h" 51 | #include "apr_base64.h" 52 | #include "httpd.h" 53 | #include "http_config.h" 54 | #include "http_core.h" 55 | #include "http_log.h" 56 | #include "http_protocol.h" 57 | #include "http_request.h" 58 | #include "apr_tables.h" 59 | #include "apr_strings.h" 60 | #include "mod_auth.h" 61 | #include "ap_provider.h" 62 | 63 | /* These might not be available with older Platform SDK */ 64 | #ifndef SecureZeroMemory 65 | #define SecureZeroMemory(p,s) memset(p,0,s) 66 | #endif 67 | #define SSPILOGNO(n) "SSPI" #n ": " 68 | 69 | /* Type and struct definitions */ 70 | typedef struct sspi_module_struct { 71 | BOOL supportsSSPI; 72 | LPSTR defaultPackage; 73 | LPOSVERSIONINFO lpVersionInformation; 74 | char userDataKeyString[UUID_STRING_LEN]; 75 | HMODULE securityDLL; 76 | SecurityFunctionTable *functable; 77 | ULONG numPackages; 78 | PSecPkgInfo pkgInfo; 79 | #ifdef _DEBUG 80 | unsigned int currentlyDebugging; 81 | #endif /* def _DEBUG */ 82 | } sspi_module_rec; 83 | 84 | typedef struct sspi_connection_struct { 85 | unsigned int have_credentials; 86 | 87 | /* Credentials */ 88 | CredHandle client_credentials; 89 | CredHandle server_credentials; 90 | 91 | /* Client context */ 92 | CtxtHandle client_context; 93 | TimeStamp client_ctxtexpiry; 94 | 95 | /* Server context */ 96 | CtxtHandle server_context; 97 | TimeStamp server_ctxtexpiry; 98 | 99 | /* Information about the REMOTE_USER */ 100 | HANDLE usertoken; 101 | char *username; 102 | apr_table_t *groups; 103 | char *package; 104 | int sspi_failing; 105 | char Failure; 106 | } sspi_connection_rec; 107 | 108 | typedef struct sspi_config_struct { 109 | unsigned int sspi_on; 110 | unsigned int sspi_authoritative; 111 | unsigned int sspi_offersspi; 112 | unsigned int sspi_offerbasic; 113 | unsigned int sspi_omitdomain; 114 | unsigned int sspi_basicpreferred; 115 | unsigned int sspi_msie3hack; 116 | unsigned int sspi_optional; 117 | char *sspi_package_basic; 118 | char *sspi_domain; 119 | char *sspi_default_domain; 120 | size_t sspi_default_domain_len; 121 | char *sspi_usernamecase; 122 | unsigned int sspi_per_request_auth; 123 | unsigned int sspi_chain_auth; 124 | char *sspi_packages; 125 | } sspi_config_rec; 126 | 127 | typedef enum { 128 | typeSSPI = 1, 129 | typeBasic 130 | } NTLMAuthType; 131 | 132 | typedef struct sspi_header_struct { 133 | unsigned char *User; 134 | unsigned long UserLength; 135 | unsigned char *Domain; 136 | unsigned long DomainLength; 137 | unsigned char *Password; 138 | unsigned long PasswordLength; 139 | unsigned long Flags; 140 | NTLMAuthType authtype; 141 | } sspi_header_rec; 142 | 143 | typedef struct sspi_auth_ctx_struct { 144 | request_rec *r; 145 | sspi_config_rec *crec; 146 | sspi_connection_rec *scr; 147 | sspi_header_rec hdr; 148 | } sspi_auth_ctx; 149 | 150 | /* Function Prototypes */ 151 | int authenticate_sspi_user(request_rec *); 152 | int cleanup_sspi_user(request_rec *); 153 | authz_status sspi_user_check_authorization(request_rec *, 154 | const char *, const void *); 155 | authz_status sspi_group_check_authorization(request_rec *, 156 | const char *, const void *); 157 | authz_status sspi_valid_check_authorization(request_rec *, 158 | const char *, const void *); 159 | apr_status_t cleanup_sspi_connection(void *); 160 | 161 | void *create_sspi_dir_config(apr_pool_t *, char *); 162 | void *create_sspi_server_config(apr_pool_t *p, server_rec *s); 163 | void *merge_sspi_dir_config(apr_pool_t *p, void *base_conf, void *new_conf); 164 | 165 | sspi_config_rec *get_sspi_config_rec(request_rec *); 166 | int get_sspi_header(sspi_auth_ctx *ctx); 167 | void note_sspi_auth_challenge(sspi_auth_ctx *ctx, const char *); 168 | void note_sspi_auth_failure(request_rec *r); 169 | void note_sspi_auth_failure_old(request_rec *); 170 | char *uuencode_binary(apr_pool_t *, const char *, int); 171 | unsigned char *uudecode_binary(apr_pool_t *, const char *, int *); 172 | 173 | /* Global variables */ 174 | extern sspi_module_rec sspiModuleInfo; 175 | 176 | #endif /* ndef _MOD_NTLM_H_ */ 177 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | Apache 2.4 SSPI NTLM based authentication module for windows 3 | 4 | Inspired by mod_auth_sspi project from Tim Castello 5 | 6 | Using the module from Tim worked only on Apache versions < 2.4. 7 | 8 | In addition to that if you mistype your credentials the Apache responded with a 9 | "incorrect credentials messages" and you need to close the browser to retry. 10 | If you used a Internet Explorer in the wrong domain a login would fail as well. 11 | 12 | This version works on Apache 2.4 using NTLM authentication and asks for correct 13 | credentials for 3 times. 14 | 15 | We needed that for our own and as many in the net were asking for a working version 16 | for Apache 2.4 we decided to share this project to the community. 17 | 18 | Installation 19 | ============ 20 | 21 | Add the following line to your server config file: 22 | 23 | `LoadModule auth_ntlm_module modules/mod_authn_ntlm.so` 24 | 25 | Dependencies 26 | ============ 27 | 28 | You need to activate the following module (ldap_module) as well. Normally it is in your server config file, so just uncomment it: 29 | 30 | `LoadModule ldap_module modules/mod_ldap.so` 31 | 32 | If you want to add the authenticated user to your http header, load the following module as well and see below the sample config: 33 | 34 | `LoadModule rewrite_module modules/mod_rewrite.so` 35 | 36 | Sample Config 37 | ============= 38 | 39 | # make sure the header is only written in the auth location 40 | RequestHeader unset X_ISRW_PROXY_AUTH_USER 41 | 42 | #AllowOverride None 43 | AuthName "Private location" 44 | AuthType SSPI 45 | NTLMAuth On 46 | NTLMAuthoritative On 47 | 48 | 49 | Require valid-user 50 | #require sspi-user EMEA\group_name 51 | 52 | 53 | Require user "ANONYMOUS LOGON" 54 | Require user "NT-AUTORITÄT\ANONYMOUS-ANMELDUNG" 55 | 56 | 57 | # use this to add the authenticated username to you header 58 | # so any backend system can fetch the current user 59 | # rewrite_module needs to be loaded then 60 | # while X_ISRW_PROXY_AUTH_USER is your header name 61 | RequestHeader set X_ISRW_PROXY_AUTH_USER expr=%{REMOTE_USER} 62 | 63 | 64 | List of available parameters 65 | ============================= 66 | 67 | **Note:** 68 | 69 | if you want to set "NTLMDomain" or "NTLMDefaultDomain", please set both 70 | "NTLMOfferBasic" and "NTLMBasicPreferred" to "on". this is because 71 | we can't modify NTLMv2 response, we have to let user send clear text 72 | username and password, then ntlm module will use username and password 73 | to generate NTLM context, and do the authentication. 74 | 75 | - `NTLMAuth` => set to 'on' to activate NTLM authentication here 76 | - `NTLMOfferNTLM` => set to 'off' to allow access control to be passed along to lower modules if the UserID is not known to this module 77 | - `NTLMAuthoritative` => set to 'off' to allow access control to be passed along to lower modules if the UserID is not known to this module 78 | - `NTLMOfferBasic` => set to 'on' to allow the client to authenticate against NT with 'Basic' authentication instead of using the NTLM protocol 79 | - `NTLMPackage` => set to the name of the package you want to use to authenticate users 80 | - `NTLMPackages` => set to the name of the package you want to use to authenticate users 81 | - `NTLMDomain` => force users to authenticated against for cleartext authentication if specified. 82 | - `NTLMDefaultDomain` => set to the domain you want users authenticated against for cleartext authentication - if not specified, the local machine, then all trusted domains are checked 83 | - `NTLMOmitDomain` => set to 'on' if you want to omit / exclude the domain name. set to 'off' if you want the usernames to include the domain name 84 | - `NTLMUsernameCase` => set to 'lower' if you want the username and domain to be lowercase, set to 'upper' if you want the username and domain to be uppercase, if not specified, username and domain case conversion is disabled 85 | - `NTLMBasicPreferred` => set to 'on' if you want basic authentication to be the higher priority 86 | - `NTLMMSIE3Hack` => set to 'on' if you expect MSIE 3 clients to be using this server 87 | - `NTLMPerRequestAuth` => set to 'on' if you want authorization per request instead of per connection 88 | - `NTLMChainAuth` => set to 'on' if you want an alternative authorization module like SVNPathAuthz to work at the same level 89 | - `NTLMNotForced` => Set to on to allow requests pass even when user not really authorized This is needed if same resources can be access with and without NTLM auth 90 | 91 | Configure several groups 92 | ======================== 93 | 94 | If you want to add more then one group then use the following syntax, so the module can process them correctly. 95 | 96 | 97 | require sspi-group "DOMAIN\GROUP2" "DOMAIN\GROUP1" 98 | 99 | 100 | Configure server to allow local ntlm authentication 101 | =================================================== 102 | 103 | If you set apache to listen to a FQDN you might not be able to authenticate against the site if you are open this site on the server itself. 104 | 105 | You can read about the cause and the workaround here: 106 | 107 | https://support.microsoft.com/en-us/kb/896861 108 | 109 | > I did test method 1 and added the FQDN domain in the registry, after ntlm authentication works on the local server. 110 | 111 | Build instructions 112 | =================== 113 | 114 | - Install the latest CMake from https://cmake.org/download/ 115 | - Download Win64 Apache 2.4 from https://www.apachelounge.com/download/ (or use your own version) 116 | - Build options should match Apache build (architecture, variant, and runtime linking) 117 | 118 | **cmake options:** 119 | 120 | - USE_STATIC_RUNTIME (default is OFF) and will use /MD and /MDd. If ON will build with /MT and /MTd for release and debug, respectively. 121 | - APACHE_ROOT default is the local folder if not set. Otherwise set to the location of your apache installation such as C:\Program Files\Apache24. 122 | 123 | **examples for Visual Studio:** 124 | 125 | `cd mod_auth_ntlm` 126 | 127 | `cmake -B ./build-x64 -S ./ -G "Visual Studio 15 2017" -A x64 -T host=x64 -DAPACHE_ROOT="C:\Program Files\Apache24"` 128 | 129 | `cmake --build ./build-x64 --config Release` 130 | 131 | `cmake --build ./build-x64 --config Debug` 132 | 133 | static runtimes 134 | 135 | `cmake -B ./build-s-x64 -S ./ -G "Visual Studio 15 2017" -A x64 -T host=x64 -DAPACHE_ROOT="C:\Program Files\Apache24" -DUSE_STATIC_RUNTIME=ON` 136 | 137 | `cmake --build ./build-s-x64 --config Release` 138 | 139 | `cmake --build ./build-s-x64 --config Debug` 140 | 141 | **install mod_auth_ntlm.so to module path** 142 | 143 | `cmake -DBUILD_TYPE=Release -P ./build-x64/cmake_install.cmake` 144 | 145 | 146 | Example Generators 147 | ================== 148 | 149 | - Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files. Optional [arch] can be "Win64" or "ARM". 150 | - Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files. Optional [arch] can be "Win64" or "ARM". 151 | - Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files. Optional [arch] can be "Win64" or "ARM". 152 | - Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files. Optional [arch] can be "Win64" or "ARM". 153 | - Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files. Optional [arch] can be "Win64" or "IA64". 154 | - Visual Studio 9 2008 [arch] = Generates Visual Studio 2008 project files. Optional [arch] can be "Win64" or "IA64". 155 | - Visual Studio 8 2005 [arch] = Deprecated. Generates Visual Studio 2005 project files. Optional [arch] can be "Win64". 156 | 157 | > **Note:** if no arch is specified it compiles for x86 aka Win32 158 | > For a full list see "cmake --help" 159 | -------------------------------------------------------------------------------- /src/mod_ntlm_authorization.c: -------------------------------------------------------------------------------- 1 | /* ==================================================================== 2 | * This code is copyright 2013 TQsoft GmbH 3 | * Inspired by mod_auth_sspi project from Tim Castello 4 | * 5 | * It may be freely distributed, as long as the above notices are reproduced. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * 19 | */ 20 | 21 | /* --------------------------------------------------------------------------- 22 | * mod_ntlm_authorization.c 23 | * Apache 2.4 authorization part for NTLM module 24 | * -------------------------------------------------------------------------*/ 25 | 26 | #include "mod_ntlm.h" 27 | 28 | /* APLOG_USE_MODULE macro for multi-file modules */ 29 | APLOG_USE_MODULE(auth_ntlm); 30 | 31 | /* is_member() checks if current user is allowed in the group which is 32 | identified by a security identifier (SID) */ 33 | int is_member(request_rec *r, HANDLE usertoken, const char *w) 34 | { 35 | PSID pGroupSid = NULL; 36 | int sidsize = 0; 37 | char domain_name[_MAX_PATH]; 38 | int domainlen = _MAX_PATH; 39 | SID_NAME_USE snu; 40 | int member = 0; 41 | 42 | /* Get the security identifier (SID) for the group pointed by w */ 43 | LookupAccountName(NULL, w, pGroupSid, &sidsize, domain_name, &domainlen, 44 | &snu); 45 | if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { 46 | if (pGroupSid = apr_palloc(r->pool, sidsize)) { 47 | if (LookupAccountName 48 | (NULL, w, pGroupSid, &sidsize, domain_name, 49 | &domainlen, &snu)) { 50 | BOOL IsMember; 51 | /* Check if the current user is allowed in this SID */ 52 | if (CheckTokenMembership 53 | (usertoken, pGroupSid, &IsMember)) { 54 | if (IsMember) { 55 | member = 1; 56 | } 57 | } else { 58 | /* Error logs */ 59 | ap_log_rerror(APLOG_MARK, 60 | APLOG_NOERRNO | 61 | APLOG_ALERT, 0, r, 62 | "CheckTokenMembership(): error %d", 63 | GetLastError()); 64 | } 65 | } else { 66 | ap_log_rerror(APLOG_MARK, 67 | APLOG_NOERRNO | APLOG_ALERT, 0, r, 68 | "LookupAccountName(2): error %d", 69 | GetLastError()); 70 | } 71 | } else { 72 | ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ALERT, 73 | 0, r, 74 | "An error occured in is_member(): apr_palloc() failed."); 75 | } 76 | } else { 77 | ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ALERT, 0, r, 78 | "LookupAccountName(1): error %d", GetLastError()); 79 | } 80 | 81 | return member; 82 | } 83 | 84 | /* sspi_common_authz_check() does the common authentication for the 3 types discussed before 85 | 1) user authorization 86 | 2) group authorization 87 | 3) valid check authorization 88 | */ 89 | int sspi_common_authz_check(request_rec *r, 90 | const sspi_config_rec *crec, 91 | sspi_connection_rec **pscr, authz_status * pas) 92 | { 93 | int res = 1; 94 | 95 | /* If the switch isn't on issue error log and status to denied */ 96 | if (!crec->sspi_on) { 97 | 98 | ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, SSPILOGNO(00004) 99 | "Access to %s failed, reason: SSPIAuth is off", 100 | r->uri); 101 | 102 | *pas = AUTHZ_DENIED; 103 | res = 0; 104 | } 105 | 106 | /* If no user was authenticated, deny */ 107 | if (res && !r->user) { 108 | 109 | ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, SSPILOGNO(00005) 110 | "Access to %s failed, reason: No user authenticated", 111 | r->uri); 112 | 113 | *pas = AUTHZ_DENIED_NO_USER; 114 | res = 0; 115 | } 116 | 117 | /* Retrieve SSPI Connection Record */ 118 | if (res) { 119 | apr_pool_userdata_get(pscr, sspiModuleInfo.userDataKeyString, 120 | r->connection->pool); 121 | 122 | /* Is user authenticated? If not, we don't want to do further checking */ 123 | if (*pscr == 0 || (*pscr)->username != r->user) { 124 | 125 | ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, 126 | SSPILOGNO(00006) 127 | "Access to %s failed, reason: inconsistent SSPI record. Debug: %s ; %s", 128 | r->uri, (*pscr)->username, r->user); 129 | 130 | *pas = AUTHZ_DENIED; 131 | res = 0; 132 | } 133 | } 134 | 135 | return res; 136 | } 137 | 138 | /* common_deny_actions() deals with notifying that the authentification has failed */ 139 | static void common_deny_actions(request_rec *r, sspi_connection_rec *scr) 140 | { 141 | 142 | /* under the Apache request_rec structure, if main is pointing to null, 143 | it doesnot make sense to continue with the connection. This could mean 144 | that the current request is the main request itself */ 145 | if (r->main == NULL) { 146 | //cleanup_sspi_connection(scr); 147 | scr->Failure = 1; 148 | } 149 | 150 | /* error logs */ 151 | ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, SSPILOGNO(00003) 152 | "access to %s failed, reason: user '%s' does not meet " 153 | "requirements for user to be allowed access", 154 | r->uri, r->user); 155 | 156 | /* notification that the authentication has failed */ 157 | note_sspi_auth_failure(r); 158 | } 159 | 160 | /* sspi_user_check_authorization(): deals with checking of user authorization */ 161 | authz_status sspi_user_check_authorization(request_rec *r, 162 | const char *require_args, 163 | const void *parsed_require_args) 164 | { 165 | const sspi_config_rec *crec = get_sspi_config_rec(r); 166 | char *user = r->user; 167 | sspi_connection_rec *scr; 168 | const char *t, *w; 169 | authz_status as; 170 | 171 | /* Checking if a user was authenticated */ 172 | if (!sspi_common_authz_check(r, crec, &scr, &as)) { 173 | return as; 174 | } 175 | 176 | /* There is a valid user so checking user requirements */ 177 | t = require_args; 178 | while ((w = ap_getword_conf(r->pool, &t)) && w[0]) { 179 | if (!strcmp(user, w)) { 180 | return AUTHZ_GRANTED; 181 | } 182 | } 183 | 184 | /* preparing for try again */ 185 | common_deny_actions(r, scr); 186 | return AUTHZ_DENIED; 187 | } 188 | 189 | /* sspi_group_check_authorization() deals with authorization of group. This comes into picture 190 | when we ask for credientials DOMAIN\GROUP_NAME. 191 | The steps are same as that of sspi_user_check_authorization() */ 192 | authz_status sspi_group_check_authorization(request_rec *r, 193 | const char *require_args, 194 | const void *parsed_require_args) 195 | { 196 | const sspi_config_rec *crec = get_sspi_config_rec(r); 197 | char *user = r->user; 198 | sspi_connection_rec *scr; 199 | const char *t, *w; 200 | authz_status as; 201 | 202 | /* Checking if a user was authenticated */ 203 | if (!sspi_common_authz_check(r, crec, &scr, &as)) { 204 | return as; 205 | } 206 | 207 | /* There is a valid user so checking user requirements */ 208 | t = require_args; 209 | while ((w = ap_getword_conf(r->pool, &t)) && w[0]) { 210 | if (is_member(r, scr->usertoken, w)) { 211 | return AUTHZ_GRANTED; 212 | } 213 | } 214 | 215 | /* preparing for try again */ 216 | common_deny_actions(r, scr); 217 | return AUTHZ_DENIED; 218 | } 219 | 220 | /* sspi_valid_check_authorization() deals with the last category ie 221 | valid check provider authorization */ 222 | authz_status sspi_valid_check_authorization(request_rec *r, 223 | const char *require_args, 224 | const void *parsed_require_args) 225 | { 226 | const sspi_config_rec *crec = get_sspi_config_rec(r); 227 | char *user = r->user; 228 | sspi_connection_rec *scr; 229 | authz_status as; 230 | 231 | if (!sspi_common_authz_check(r, crec, &scr, &as)) { 232 | return as; 233 | } 234 | 235 | /* Now we know there is a valid user so grant access */ 236 | 237 | return AUTHZ_GRANTED; 238 | } 239 | -------------------------------------------------------------------------------- /src/mod_ntlm.c: -------------------------------------------------------------------------------- 1 | /* ==================================================================== 2 | * This code is copyright 2013 TQsoft GmbH 3 | * Inspired by mod_auth_sspi project from Tim Castello 4 | * 5 | * It may be freely distributed, as long as the above notices are reproduced. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * 19 | */ 20 | 21 | /* --------------------------------------------------------------------------- 22 | * mod_ntlm.c 23 | * Apache 2.4 module code for NTLM. 24 | * Developed based on the example module for Apache 2.4 25 | * -------------------------------------------------------------------------*/ 26 | 27 | #include "mod_ntlm.h" 28 | 29 | /* An apache module is identified by httpd with a well 30 | defined data structure: AP_MODULE_DECLARE_DATA */ 31 | module AP_MODULE_DECLARE_DATA auth_ntlm_module; 32 | 33 | sspi_module_rec sspiModuleInfo = { 0, }; 34 | 35 | /* commands& their bindings that this module understands */ 36 | static const command_rec sspi_cmds[] = { 37 | AP_INIT_FLAG("NTLMAuth", ap_set_flag_slot, 38 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_on), OR_AUTHCFG, 39 | "set to 'on' to activate NTLM authentication here"), 40 | AP_INIT_FLAG("NTLMOfferNTLM", ap_set_flag_slot, 41 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_offersspi), 42 | OR_AUTHCFG, 43 | "set to 'off' to allow access control to be passed along to " 44 | "lower modules if the UserID is not known to this module"), 45 | AP_INIT_FLAG("NTLMAuthoritative", ap_set_flag_slot, 46 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_authoritative), 47 | OR_AUTHCFG, 48 | "set to 'off' to allow access control to be passed along to " 49 | "lower modules if the UserID is not known to this module"), 50 | AP_INIT_FLAG("NTLMOfferBasic", ap_set_flag_slot, 51 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_offerbasic), 52 | OR_AUTHCFG, 53 | "set to 'on' to allow the client to authenticate against NT " 54 | "with 'Basic' authentication instead of using the NTLM protocol"), 55 | AP_INIT_TAKE1("NTLMPackage", ap_set_string_slot, 56 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_package_basic), 57 | OR_AUTHCFG, 58 | "set to the name of the package you want to use to " 59 | "authenticate users"), 60 | AP_INIT_TAKE1("NTLMPackages", ap_set_string_slot, 61 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_packages), 62 | OR_AUTHCFG, 63 | "set to the name of the package you want to use to " 64 | "authenticate users"), 65 | AP_INIT_TAKE1("NTLMDomain", ap_set_string_slot, 66 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_domain), 67 | OR_AUTHCFG, 68 | "set to the domain you want users authenticated against for " 69 | "cleartext authentication - if not specified, the local " 70 | "machine, then all trusted domains are checked"), 71 | AP_INIT_TAKE1("NTLMDefaultDomain", ap_set_string_slot, 72 | (void *)APR_OFFSETOF(sspi_config_rec, 73 | sspi_default_domain), OR_AUTHCFG, 74 | "set the default domain you want to user to authenticate with, it " 75 | "will try to add default domain in the NTLM SSPI header if there" 76 | "is no domain set in NTLM response"), 77 | AP_INIT_FLAG("NTLMOmitDomain", ap_set_flag_slot, 78 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_omitdomain), 79 | OR_AUTHCFG, 80 | "set to 'on' if you want the usernames to have the domain " 81 | "prefix OMITTED, on = user, off = DOMAIN\\user"), 82 | AP_INIT_TAKE1("NTLMUsernameCase", ap_set_string_slot, 83 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_usernamecase), 84 | OR_AUTHCFG, 85 | "set to 'lower' if you want the username and domain to be lowercase, " 86 | "set to 'upper' if you want the username and domain to be uppercase, " 87 | "if not specified, username and domain case conversion is disabled"), 88 | AP_INIT_FLAG("NTLMBasicPreferred", ap_set_flag_slot, 89 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_basicpreferred), 90 | OR_AUTHCFG, 91 | "set to 'on' if you want basic authentication to be the " 92 | "higher priority"), 93 | AP_INIT_FLAG("NTLMMSIE3Hack", ap_set_flag_slot, 94 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_msie3hack), 95 | OR_AUTHCFG, 96 | "set to 'on' if you expect MSIE 3 clients to be using this server"), 97 | AP_INIT_FLAG("NTLMPerRequestAuth", ap_set_flag_slot, 98 | (void *)APR_OFFSETOF(sspi_config_rec, 99 | sspi_per_request_auth), OR_AUTHCFG, 100 | "set to 'on' if you want authorization per request instead of per connection"), 101 | AP_INIT_FLAG("NTLMChainAuth", ap_set_flag_slot, 102 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_chain_auth), 103 | OR_AUTHCFG, 104 | "set to 'on' if you want an alternative authorization module like SVNPathAuthz to work at the same level"), 105 | AP_INIT_FLAG("NTLMNotForced", ap_set_flag_slot, 106 | (void *)APR_OFFSETOF(sspi_config_rec, sspi_optional), 107 | OR_AUTHCFG, 108 | "Set to on to allow requests pass even when user not really authorized " 109 | "This is needed if same resources can be access with and without NTLM auth"), 110 | 111 | {NULL} 112 | }; 113 | 114 | /* module cleanup */ 115 | static apr_status_t sspi_module_cleanup(void *unused) 116 | { 117 | UNREFERENCED_PARAMETER(unused); 118 | 119 | /* unloading microsoft's security.dll */ 120 | if (sspiModuleInfo.securityDLL != NULL) { 121 | if (sspiModuleInfo.functable != NULL) { 122 | sspiModuleInfo.functable-> 123 | FreeContextBuffer(sspiModuleInfo.pkgInfo); 124 | } 125 | FreeLibrary(sspiModuleInfo.securityDLL); 126 | } 127 | 128 | return APR_SUCCESS; 129 | } 130 | 131 | /* module initialization */ 132 | static int init_module(apr_pool_t *pconf, apr_pool_t *ptemp, 133 | apr_pool_t *plog, server_rec *s) 134 | { 135 | GUID userDataKey; 136 | OLECHAR userDataKeyString[UUID_STRING_LEN]; 137 | LPSTR lpDllName = NULL; 138 | INIT_SECURITY_INTERFACE pInit; 139 | SECURITY_STATUS ss = SEC_E_INTERNAL_ERROR; 140 | 141 | if (sspiModuleInfo.lpVersionInformation == NULL) { 142 | /* finding current OS */ 143 | sspiModuleInfo.lpVersionInformation = 144 | apr_pcalloc(pconf, sizeof(OSVERSIONINFO)); 145 | sspiModuleInfo.lpVersionInformation->dwOSVersionInfoSize = 146 | sizeof(OSVERSIONINFO); 147 | GetVersionEx(sspiModuleInfo.lpVersionInformation); 148 | 149 | /* initializating the OS support for authentication to true. 150 | This can be reset later. */ 151 | sspiModuleInfo.supportsSSPI = TRUE; 152 | sspiModuleInfo.defaultPackage = DEFAULT_SSPI_PACKAGE; 153 | 154 | /* Unique ID for connection info storage. */ 155 | CoInitializeEx(NULL, 156 | COINIT_MULTITHREADED | COINIT_SPEED_OVER_MEMORY); 157 | CoCreateGuid(&userDataKey); 158 | StringFromGUID2(&userDataKey, userDataKeyString, 159 | UUID_STRING_LEN); 160 | WideCharToMultiByte(CP_ACP, 0, userDataKeyString, -1, 161 | sspiModuleInfo.userDataKeyString, 162 | UUID_STRING_LEN, NULL, NULL); 163 | CoUninitialize(); 164 | 165 | /* For older version of Windows security.dll is called secur32.dll */ 166 | if (sspiModuleInfo.lpVersionInformation->dwPlatformId == 167 | VER_PLATFORM_WIN32_NT) { 168 | lpDllName = WINNT_SECURITY_DLL; 169 | } else { 170 | lpDllName = WIN9X_SECURITY_DLL; 171 | } 172 | 173 | /* Loading the security dll */ 174 | __try { 175 | /* checking id the security dll can be loaded */ 176 | if (! 177 | (sspiModuleInfo.securityDLL = 178 | LoadLibrary(lpDllName))) { 179 | ap_log_error(APLOG_MARK, APLOG_CRIT, 180 | APR_FROM_OS_ERROR(GetLastError()), 181 | s, 182 | "%s: could not load security support provider DLL", 183 | MOD_NTLM_MODULE_NAME); 184 | return HTTP_INTERNAL_SERVER_ERROR; 185 | } 186 | 187 | /* checking dll's entry point */ 188 | if (! 189 | (pInit = 190 | (INIT_SECURITY_INTERFACE) 191 | GetProcAddress(sspiModuleInfo.securityDLL, 192 | SECURITY_ENTRYPOINT))) { 193 | ap_log_error(APLOG_MARK, APLOG_CRIT, 194 | APR_FROM_OS_ERROR(GetLastError()), 195 | s, 196 | "%s: could not locate security support provider entrypoint in DLL", 197 | MOD_NTLM_MODULE_NAME); 198 | return HTTP_INTERNAL_SERVER_ERROR; 199 | } 200 | 201 | if (!(sspiModuleInfo.functable = pInit())) { 202 | ap_log_error(APLOG_MARK, APLOG_CRIT, 203 | APR_FROM_OS_ERROR(GetLastError()), 204 | s, 205 | "%s: could not get security support provider function table from initialisation function", 206 | MOD_NTLM_MODULE_NAME); 207 | return HTTP_INTERNAL_SERVER_ERROR; 208 | } 209 | 210 | ss = sspiModuleInfo.functable-> 211 | EnumerateSecurityPackages(&sspiModuleInfo. 212 | numPackages, 213 | &sspiModuleInfo.pkgInfo); 214 | } 215 | __finally { 216 | if (ss != SEC_E_OK) { 217 | sspi_module_cleanup(NULL); 218 | sspiModuleInfo.supportsSSPI = FALSE; 219 | } 220 | } 221 | } 222 | 223 | apr_pool_cleanup_register(pconf, NULL, sspi_module_cleanup, 224 | sspi_module_cleanup); 225 | 226 | ap_add_version_component(pconf, apr_psprintf(pconf, "%s/%d.%d.%d", 227 | MOD_NTLM_MODULE_NAME, 228 | MOD_NTLM_VERSION_MAJOR, 229 | MOD_NTLM_VERSION_MID, 230 | MOD_NTLM_VERSION_MINOR)); 231 | 232 | return OK; 233 | } 234 | 235 | /* binding the function that does user authentication */ 236 | static const authz_provider authz_sspi_user_provider = { 237 | &sspi_user_check_authorization, 238 | NULL, 239 | }; 240 | 241 | /* binding the function that does group authentication */ 242 | static const authz_provider authz_sspi_group_provider = { 243 | &sspi_group_check_authorization, 244 | NULL, 245 | }; 246 | 247 | /* binding the function that does the last step of valid check authentication */ 248 | static const authz_provider authz_sspi_valid_provider = { 249 | &sspi_valid_check_authorization, 250 | NULL, 251 | }; 252 | 253 | /* API hooks as specified in Apache 2.4 module development */ 254 | static void register_hooks(apr_pool_t *p) 255 | { 256 | /* Register authorization provider */ 257 | ap_hook_check_authn(authenticate_sspi_user, NULL, NULL, APR_HOOK_MIDDLE, 258 | AP_AUTH_INTERNAL_PER_CONF); 259 | 260 | /* Register authorization user provider */ 261 | ap_register_auth_provider(p, AUTHZ_PROVIDER_GROUP, "sspi-user", 262 | AUTHZ_PROVIDER_VERSION, 263 | &authz_sspi_user_provider, 264 | AP_AUTH_INTERNAL_PER_CONF); 265 | 266 | /* Register authorization group provider */ 267 | ap_register_auth_provider(p, AUTHZ_PROVIDER_GROUP, "sspi-group", 268 | AUTHZ_PROVIDER_VERSION, 269 | &authz_sspi_group_provider, 270 | AP_AUTH_INTERNAL_PER_CONF); 271 | 272 | /* Register authorization valid check provider */ 273 | ap_register_auth_provider(p, AUTHZ_PROVIDER_GROUP, "valid-sspi-user", 274 | AUTHZ_PROVIDER_VERSION, 275 | &authz_sspi_valid_provider, 276 | AP_AUTH_INTERNAL_PER_CONF); 277 | 278 | ap_hook_check_authn(cleanup_sspi_user, NULL, NULL, APR_HOOK_LAST, 279 | AP_AUTH_INTERNAL_PER_CONF); 280 | 281 | ap_hook_post_config(init_module, NULL, NULL, APR_HOOK_FIRST); 282 | } 283 | 284 | /* AP_DECLARE_MODULE macro to declare modules */ 285 | AP_DECLARE_MODULE(auth_ntlm) = { 286 | STANDARD20_MODULE_STUFF, create_sspi_dir_config, /* dir config creater */ 287 | NULL, /* dir merger --- default is to override */ 288 | NULL, /* server config */ 289 | NULL, /* merge server config */ 290 | sspi_cmds, /* command apr_table_t */ 291 | register_hooks /* register hooks */ 292 | }; 293 | 294 | sspi_config_rec *get_sspi_config_rec(request_rec *r) 295 | { 296 | return (sspi_config_rec *) 297 | ap_get_module_config(r->per_dir_config, &auth_ntlm_module); 298 | } 299 | -------------------------------------------------------------------------------- /conf/httpd.conf: -------------------------------------------------------------------------------- 1 | ######################################## 2 | #### Sample Apache 2.4 config #### 3 | #### Module tested with this config #### 4 | ######################################## 5 | 6 | ServerName thor 7 | ServerRoot "D:/Informer/apache" 8 | Listen 80 9 | 10 | LoadModule access_compat_module modules/mod_access_compat.so 11 | LoadModule actions_module modules/mod_actions.so 12 | LoadModule alias_module modules/mod_alias.so 13 | LoadModule allowmethods_module modules/mod_allowmethods.so 14 | LoadModule asis_module modules/mod_asis.so 15 | LoadModule auth_basic_module modules/mod_auth_basic.so 16 | #LoadModule auth_digest_module modules/mod_auth_digest.so 17 | #LoadModule authn_anon_module modules/mod_authn_anon.so 18 | LoadModule authn_core_module modules/mod_authn_core.so 19 | #LoadModule authn_dbd_module modules/mod_authn_dbd.so 20 | #LoadModule authn_dbm_module modules/mod_authn_dbm.so 21 | LoadModule authn_file_module modules/mod_authn_file.so 22 | #LoadModule authn_socache_module modules/mod_authn_socache.so 23 | #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so 24 | LoadModule authz_core_module modules/mod_authz_core.so 25 | #LoadModule authz_dbd_module modules/mod_authz_dbd.so 26 | #LoadModule authz_dbm_module modules/mod_authz_dbm.so 27 | LoadModule authz_groupfile_module modules/mod_authz_groupfile.so 28 | LoadModule authz_host_module modules/mod_authz_host.so 29 | #LoadModule authz_owner_module modules/mod_authz_owner.so 30 | LoadModule authz_user_module modules/mod_authz_user.so 31 | LoadModule autoindex_module modules/mod_autoindex.so 32 | #LoadModule buffer_module modules/mod_buffer.so 33 | #LoadModule cache_module modules/mod_cache.so 34 | #LoadModule cache_disk_module modules/mod_cache_disk.so 35 | #LoadModule cern_meta_module modules/mod_cern_meta.so 36 | LoadModule cgi_module modules/mod_cgi.so 37 | #LoadModule charset_lite_module modules/mod_charset_lite.so 38 | #LoadModule data_module modules/mod_data.so 39 | #LoadModule dav_module modules/mod_dav.so 40 | #LoadModule dav_fs_module modules/mod_dav_fs.so 41 | #LoadModule dav_lock_module modules/mod_dav_lock.so 42 | #LoadModule dbd_module modules/mod_dbd.so 43 | LoadModule deflate_module modules/mod_deflate.so 44 | LoadModule dir_module modules/mod_dir.so 45 | #LoadModule dumpio_module modules/mod_dumpio.so 46 | LoadModule env_module modules/mod_env.so 47 | #LoadModule expires_module modules/mod_expires.so 48 | #LoadModule ext_filter_module modules/mod_ext_filter.so 49 | #LoadModule file_cache_module modules/mod_file_cache.so 50 | LoadModule filter_module modules/mod_filter.so 51 | LoadModule headers_module modules/mod_headers.so 52 | #LoadModule heartbeat_module modules/mod_heartbeat.so 53 | #LoadModule heartmonitor_module modules/mod_heartmonitor.so 54 | #LoadModule ident_module modules/mod_ident.so 55 | #LoadModule imagemap_module modules/mod_imagemap.so 56 | LoadModule include_module modules/mod_include.so 57 | #LoadModule info_module modules/mod_info.so 58 | LoadModule isapi_module modules/mod_isapi.so 59 | #LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so 60 | LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so 61 | #LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so 62 | #LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so 63 | 64 | LoadModule ldap_module modules/mod_ldap.so 65 | 66 | #LoadModule logio_module modules/mod_logio.so 67 | LoadModule log_config_module modules/mod_log_config.so 68 | #LoadModule log_debug_module modules/mod_log_debug.so 69 | #LoadModule log_forensic_module modules/mod_log_forensic.so 70 | #LoadModule lua_module modules/mod_lua.so 71 | LoadModule mime_module modules/mod_mime.so 72 | #LoadModule mime_magic_module modules/mod_mime_magic.so 73 | LoadModule negotiation_module modules/mod_negotiation.so 74 | LoadModule proxy_module modules/mod_proxy.so 75 | #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so 76 | LoadModule proxy_balancer_module modules/mod_proxy_balancer.so 77 | #LoadModule proxy_connect_module modules/mod_proxy_connect.so 78 | #LoadModule proxy_express_module modules/mod_proxy_express.so 79 | #LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so 80 | #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so 81 | #LoadModule proxy_html_module modules/mod_proxy_html.so 82 | LoadModule proxy_http_module modules/mod_proxy_http.so 83 | #LoadModule proxy_scgi_module modules/mod_proxy_scgi.so 84 | #LoadModule ratelimit_module modules/mod_ratelimit.so 85 | #LoadModule reflector_module modules/mod_reflector.so 86 | #LoadModule remoteip_module modules/mod_remoteip.so 87 | #LoadModule request_module modules/mod_request.so 88 | #LoadModule reqtimeout_module modules/mod_reqtimeout.so 89 | 90 | LoadModule rewrite_module modules/mod_rewrite.so 91 | 92 | #LoadModule sed_module modules/mod_sed.so 93 | #LoadModule session_module modules/mod_session.so 94 | #LoadModule session_cookie_module modules/mod_session_cookie.so 95 | #LoadModule session_crypto_module modules/mod_session_crypto.so 96 | #LoadModule session_dbd_module modules/mod_session_dbd.so 97 | LoadModule setenvif_module modules/mod_setenvif.so 98 | #LoadModule slotmem_plain_module modules/mod_slotmem_plain.so 99 | LoadModule slotmem_shm_module modules/mod_slotmem_shm.so 100 | #LoadModule socache_dbm_module modules/mod_socache_dbm.so 101 | #LoadModule socache_memcache_module modules/mod_socache_memcache.so 102 | #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 103 | #LoadModule speling_module modules/mod_speling.so 104 | #LoadModule ssl_module modules/mod_ssl.so 105 | #LoadModule status_module modules/mod_status.so 106 | #LoadModule substitute_module modules/mod_substitute.so 107 | #LoadModule unique_id_module modules/mod_unique_id.so 108 | #LoadModule userdir_module modules/mod_userdir.so 109 | #LoadModule usertrack_module modules/mod_usertrack.so 110 | #LoadModule version_module modules/mod_version.so 111 | #LoadModule vhost_alias_module modules/mod_vhost_alias.so 112 | #LoadModule watchdog_module modules/mod_watchdog.so 113 | #LoadModule xml2enc_module modules/mod_xml2enc.so 114 | 115 | LoadModule auth_ntlm_module modules/mod_authn_ntlm.so 116 | 117 | ServerAdmin admin@example.com 118 | 119 | # 120 | # ServerName gives the name and port that the server uses to identify itself. 121 | # This can often be determined automatically, but we recommend you specify 122 | # it explicitly to prevent problems during startup. 123 | # 124 | # If your host doesn't have a registered DNS name, enter its IP address here. 125 | # 126 | #ServerName www.example.com:80 127 | 128 | # 129 | # Deny access to the entirety of your server's filesystem. You must 130 | # explicitly permit access to web content directories in other 131 | # blocks below. 132 | # 133 | 134 | AllowOverride none 135 | Require all denied 136 | 137 | 138 | # 139 | # Note that from this point forward you must specifically allow 140 | # particular features to be enabled - so if something's not working as 141 | # you might expect, make sure that you have specifically enabled it 142 | # below. 143 | # 144 | 145 | # 146 | # DocumentRoot: The directory out of which you will serve your 147 | # documents. By default, all requests are taken from this directory, but 148 | # symbolic links and aliases may be used to point to other locations. 149 | # 150 | DocumentRoot "D:/Informer/apache/htdocs" 151 | 152 | Options Indexes FollowSymLinks 153 | AllowOverride None 154 | Require all granted 155 | 156 | 157 | 158 | DirectoryIndex index.html 159 | 160 | 161 | 162 | Require all denied 163 | 164 | 165 | ErrorLog "logs/error.log" 166 | 167 | # 168 | # LogLevel: Control the number of messages logged to the error_log. 169 | # Possible values include: debug, info, notice, warn, error, crit, 170 | # alert, emerg. 171 | # 172 | LogLevel warn 173 | 174 | 175 | # 176 | # The following directives define some format nicknames for use with 177 | # a CustomLog directive (see below). 178 | # 179 | LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 180 | LogFormat "%h %l %u %t \"%r\" %>s %b" common 181 | 182 | 183 | # You need to enable mod_logio.c to use %I and %O 184 | LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio 185 | 186 | 187 | # 188 | # The location and format of the access logfile (Common Logfile Format). 189 | # If you do not define any access logfiles within a 190 | # container, they will be logged here. Contrariwise, if you *do* 191 | # define per- access logfiles, transactions will be 192 | # logged therein and *not* in this file. 193 | # 194 | CustomLog "logs/access.log" common 195 | 196 | # 197 | # If you prefer a logfile with access, agent, and referer information 198 | # (Combined Logfile Format) you can use the following directive. 199 | # 200 | #CustomLog "logs/access.log" combined 201 | 202 | 203 | 204 | 205 | TypesConfig conf/mime.types 206 | AddType application/x-compress .Z 207 | AddType application/x-gzip .gz .tgz 208 | 209 | 210 | 211 | # Configure mod_proxy_html to understand HTML4/XHTML1 212 | 213 | Include conf/extra/proxy-html.conf 214 | 215 | 216 | 217 | SSLRandomSeed startup builtin 218 | SSLRandomSeed connect builtin 219 | 220 | # 221 | # uncomment out the below to deal with user agents that deliberately 222 | # violate open standards by misusing DNT (DNT *must* be a specific 223 | # end-user choice) 224 | # 225 | # 226 | #BrowserMatch "MSIE 10.0;" bad_DNT 227 | # 228 | # 229 | #RequestHeader unset DNT env=bad_DNT 230 | # 231 | 232 | 233 | #SSLEngine On 234 | #SSLCertificateFile conf/ssl/intranet.domain.de.crt 235 | #SSLCertificateKeyFile conf/ssl/intranet.domain.de.pem 236 | 237 | ServerName thor 238 | #ServerAlias fqdn.domain.de 239 | DocumentRoot "d:/informer/company/latest/ror/public" 240 | 241 | 242 | Require all granted 243 | 244 | 245 | #RequestHeader set Front-End-Https "On" 246 | #RequestHeader set X_ORIGINAL_PROTOCOL "https" 247 | 248 | ErrorLog "d:/informer/company/latest/ror/log/balancer_error.log" 249 | CustomLog "d:/informer/company/latest/ror/log/balancer_access.log" combined 250 | 251 | #CacheEnable mem /images 252 | #CacheEnable mem /stylesheets 253 | #CacheEnable mem /javascripts 254 | 255 | #MCacheSize 64000000 256 | #MCacheMaxObjectCount 10000 257 | #MCacheMinObjectSize 1 258 | #MCacheMaxObjectSize 204800 259 | 260 | #AddOutputFilterByType DEFLATE text/html text/plain text/xml text/xml text/css application/json text/json application/xml application/xhtml+xml application/x-javascript text/javascript 261 | 262 | #RewriteEngine On 263 | #ProxyRequests Off 264 | #SSLProxyEngine On 265 | #ProxyVia On 266 | ProxyPreserveHost On 267 | 268 | ProxyPass /images ! 269 | ProxyPass /stylesheets ! 270 | ProxyPass /javascripts ! 271 | 272 | # Informer Firma latest 273 | ProxyPass /ror http://127.0.0.1:3101/ror 274 | ProxyPassReverse /ror http://127.0.0.1:3101/ror 275 | ProxyPass /latest http://127.0.0.1/latest retry=1 276 | ProxyPassReverse /latest http://127.0.0.1/latest 277 | 278 | # Use windows ntlm authentication 279 | # Workaround MS Internet Explorer - Windows Auth deny post of any data. 280 | # So we split up authentication and normal use of our application. 281 | # See: http://support.microsoft.com/?id=251404 282 | ProxyPass /ror_auth http://127.0.0.1:3101/ror 283 | ProxyPassReverse /ror_auth http://127.0.0.1:3101/ror 284 | 285 | # make sure the header is only written in the auth location 286 | RequestHeader unset X_ISRW_PROXY_AUTH_USER 287 | 288 | #Order allow,deny 289 | #Allow from all 290 | AllowOverride None 291 | AuthName "Private location" 292 | AuthType SSPI 293 | NTLMAuth On 294 | NTLMAuthoritative On 295 | 296 | 297 | Require valid-user 298 | #require sspi-group EMEA\group_name 299 | 300 | 301 | Require user "ANONYMOUS LOGON" 302 | Require user "NT-AUTORITÄT\ANONYMOUS-ANMELDUNG" 303 | 304 | 305 | 306 | RequestHeader set X_ISRW_PROXY_AUTH_USER expr=%{REMOTE_USER} 307 | 308 | 309 | 310 | 311 | -------------------------------------------------------------------------------- /src/mod_ntlm_interface.c: -------------------------------------------------------------------------------- 1 | /* ==================================================================== 2 | * This code is copyright 2013 TQsoft GmbH 3 | * Inspired by mod_auth_sspi project from Tim Castello 4 | * 5 | * It may be freely distributed, as long as the above notices are reproduced. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * 19 | */ 20 | 21 | /* --------------------------------------------------------------------------- 22 | * mod_ntlm_interface.c 23 | * Deals with interface functions needed for authorization and authentication 24 | * modules like creating server config, getting user password, 25 | * generating base64 for NTLM handshakes etc 26 | * -------------------------------------------------------------------------*/ 27 | #include 28 | #include 29 | #include "mod_ntlm.h" 30 | 31 | /* APLOG_USE_MODULE macro for multi-file modules */ 32 | APLOG_USE_MODULE(auth_ntlm); 33 | 34 | /* constructor function for initializing and memory allocation for the SSPI 35 | server context */ 36 | void *create_sspi_server_config(apr_pool_t *p, server_rec *s) 37 | { 38 | sspi_config_rec *crec = 39 | (sspi_config_rec *) apr_pcalloc(p, sizeof(sspi_config_rec)); 40 | 41 | /* Set the defaults to true */ 42 | crec->sspi_offersspi = TRUE; 43 | crec->sspi_authoritative = TRUE; 44 | 45 | return crec; 46 | } 47 | 48 | /* constructor function for initializing and memory allocation for the SSPI 49 | dir context which is needed to be specified in an APACHE module */ 50 | void *create_sspi_dir_config(apr_pool_t *p, char *d) 51 | { 52 | sspi_config_rec *crec = 53 | (sspi_config_rec *) apr_pcalloc(p, sizeof(sspi_config_rec)); 54 | 55 | /* Set the defaults to true */ 56 | crec->sspi_offersspi = TRUE; 57 | crec->sspi_authoritative = TRUE; 58 | 59 | return crec; 60 | } 61 | 62 | /* TODO: this function can be removed */ 63 | void *merge_sspi_dir_config(apr_pool_t *p, void *base_conf, void *new_conf) 64 | { 65 | sspi_config_rec *merged_rec = create_sspi_dir_config(p, 0); 66 | sspi_config_rec *base_rec = base_conf; 67 | sspi_config_rec *new_rec = new_conf; 68 | 69 | #ifdef _DEBUG 70 | if (sspiModuleInfo.currentlyDebugging == FALSE) { 71 | sspiModuleInfo.currentlyDebugging = TRUE; 72 | DebugBreak(); 73 | } 74 | #endif /* def _DEBUG */ 75 | 76 | if (base_rec->sspi_on && !new_rec->sspi_on) 77 | memcpy(merged_rec, base_rec, sizeof(sspi_config_rec)); 78 | else if (!base_rec->sspi_on && new_rec->sspi_on) 79 | memcpy(merged_rec, new_rec, sizeof(sspi_config_rec)); 80 | 81 | return merged_rec; 82 | } 83 | 84 | /* this function gets called when the brower has negotiated that 85 | it can send an encrypted password. The encrypted password is again 86 | encoded in base64 which needs to be decoded */ 87 | static int get_sspi_userpass(sspi_auth_ctx *ctx, const char *auth_line) 88 | { 89 | int len; 90 | 91 | /* we are decoding the base64 encoded password */ 92 | if (auth_line) { 93 | ctx->hdr.Password = uudecode_binary(ctx->r->pool, 94 | auth_line, &len); 95 | ctx->hdr.PasswordLength = len; 96 | ctx->hdr.authtype = typeSSPI; 97 | } else { 98 | if (ctx->crec->sspi_authoritative) { 99 | return HTTP_BAD_REQUEST; 100 | } else { 101 | return DECLINED; 102 | } 103 | } 104 | /* if password is empty decline the login request */ 105 | if (!ctx->hdr.PasswordLength || !ctx->hdr.Password) { 106 | if (ctx->crec->sspi_authoritative) { 107 | return HTTP_BAD_REQUEST; 108 | } else { 109 | return DECLINED; 110 | } 111 | } 112 | 113 | return OK; 114 | } 115 | 116 | /* this function gets called when the brower has negotiated that 117 | it can only do basic authentication ie the password is sent in 118 | clear text format with base64 encoding */ 119 | static int get_basic_userpass(sspi_auth_ctx *ctx, const char *auth_line) 120 | { 121 | char *ptr, *domainptr; 122 | int len; 123 | 124 | /* decoding the base64 decoded password */ 125 | if (!(ptr = uudecode_binary(ctx->r->pool, auth_line, &len))) { 126 | /* if decoding was not successful then issue an authentication 127 | failure */ 128 | note_sspi_auth_failure(ctx->r); 129 | if (ctx->crec->sspi_authoritative) { 130 | return HTTP_BAD_REQUEST; 131 | } else { 132 | return DECLINED; 133 | } 134 | } 135 | 136 | /* ap_getword_nulls will preserve empty entries */ 137 | ctx->hdr.User = ap_getword_nulls(ctx->r->pool, &ptr, ':'); 138 | if (ctx->hdr.User) { 139 | ctx->hdr.UserLength = (unsigned long)strlen(ctx->hdr.User); 140 | } else { 141 | /* send failure as user is null */ 142 | note_sspi_auth_failure(ctx->r); 143 | if (ctx->crec->sspi_authoritative) { 144 | return HTTP_BAD_REQUEST; 145 | } else { 146 | return DECLINED; 147 | } 148 | } 149 | 150 | /* trying to split the domain name from the user name */ 151 | for (domainptr = ctx->hdr.User; 152 | (unsigned long)(domainptr - ctx->hdr.User) < ctx->hdr.UserLength; 153 | domainptr++) { 154 | 155 | /* people can enter username in both ways like DOMAIN\USERNAME or DOMAIN/USERNAME 156 | so we have to take care of both slashes */ 157 | if (*domainptr == '\\' || *domainptr == '/') { 158 | /* when we get a slash we put a null character so that 159 | the domainptr will have the domain name as the string */ 160 | *domainptr = '\0'; 161 | ctx->hdr.Domain = ctx->hdr.User; 162 | ctx->hdr.DomainLength = 163 | (unsigned long)strlen(ctx->hdr.Domain); 164 | ctx->hdr.User = domainptr + 1; 165 | ctx->hdr.UserLength = 166 | (unsigned long)strlen(ctx->hdr.User); 167 | break; 168 | } else if (*domainptr == '@') { 169 | *domainptr = '\0'; 170 | ctx->hdr.Domain = domainptr + 1; 171 | ctx->hdr.DomainLength = 172 | (unsigned long)strlen(ctx->hdr.Domain); 173 | ctx->hdr.UserLength = 174 | (unsigned long)strlen(ctx->hdr.User); 175 | break; 176 | } 177 | } 178 | 179 | ctx->hdr.Password = ptr; 180 | if (ctx->hdr.Password) { 181 | ctx->hdr.PasswordLength = 182 | (unsigned long)strlen(ctx->hdr.Password); 183 | } else { 184 | /* if no password send authentication failure */ 185 | note_sspi_auth_failure(ctx->r); 186 | if (ctx->crec->sspi_authoritative) { 187 | return HTTP_BAD_REQUEST; 188 | } else { 189 | return DECLINED; 190 | } 191 | } 192 | /* since this is cleartext authetication set the auth type to basic */ 193 | ctx->hdr.authtype = typeBasic; 194 | 195 | return OK; 196 | } 197 | 198 | 199 | /* needed for the authentication part in a HTTP header */ 200 | const char *get_authorization_header_name(request_rec *r) 201 | { 202 | return (PROXYREQ_PROXY == r->proxyreq) ? "Proxy-Authorization" 203 | : "Authorization"; 204 | } 205 | 206 | /* needed for the authentication part in a HTTP header */ 207 | const char *get_authenticate_header_name(request_rec *r) 208 | { 209 | return (PROXYREQ_PROXY == r->proxyreq) ? "Proxy-Authenticate" 210 | : "WWW-Authenticate"; 211 | } 212 | 213 | /* checking if the package is valid */ 214 | static int check_package_valid(sspi_auth_ctx *ctx, char *scheme) 215 | { 216 | if (0 != ctx->scr->package && 0 != lstrcmpi(scheme, ctx->scr->package)) 217 | return HTTP_INTERNAL_SERVER_ERROR; 218 | 219 | if (0 == ctx->crec->sspi_packages) 220 | return HTTP_INTERNAL_SERVER_ERROR; 221 | else { 222 | const char *list = ctx->crec->sspi_packages; 223 | char *w; 224 | while (list && list[0]) { 225 | w = ap_getword_white(ctx->r->pool, &list); 226 | if (w && w[0] && lstrcmpi(w, scheme) == 0) 227 | return OK; 228 | } 229 | } 230 | 231 | return HTTP_INTERNAL_SERVER_ERROR; 232 | } 233 | 234 | /* 235 | * The difference between sspi_set_domain() and sspi_set_default_domain() is: 236 | * sspi_set_domain() will force to set the Domain if you NTLMDomain on 237 | * httpd.conf, and don't care users specified the domain already or not. 238 | * 239 | * Instead, sspi_set_default_domain() will check use specified the domain or 240 | * not, only add set default domain if you have config NTLMDefaultDomain on 241 | * httpd.conf, and users are not specified it on Basic request. 242 | */ 243 | static void sspi_set_domain(sspi_auth_ctx *ctx) 244 | { 245 | if (!ctx->crec->sspi_domain || 246 | !ctx->crec->sspi_domain[0]) 247 | return; 248 | 249 | ctx->hdr.Domain = ctx->crec->sspi_domain; 250 | ctx->hdr.DomainLength = strlen(ctx->crec->sspi_domain); 251 | } 252 | 253 | static void sspi_set_default_domain(sspi_auth_ctx *ctx) 254 | { 255 | if (!ctx->crec->sspi_default_domain || 256 | !ctx->crec->sspi_default_domain[0]) 257 | return; 258 | 259 | /* Ignore it, if it has been set. */ 260 | if (ctx->hdr.Domain && ctx->hdr.Domain[0]) 261 | return; 262 | 263 | ctx->hdr.Domain = ctx->crec->sspi_default_domain; 264 | ctx->hdr.DomainLength = strlen(ctx->crec->sspi_default_domain); 265 | } 266 | 267 | /* working up with SSPI header */ 268 | int get_sspi_header(sspi_auth_ctx *ctx) 269 | { 270 | int ret; 271 | char *scheme; 272 | /* Finding if its Proxy-Authorization or WWW authenticate one */ 273 | const char *auth_line = apr_table_get(ctx->r->headers_in, 274 | get_authorization_header_name 275 | (ctx->r)); 276 | 277 | /* If the client didn't supply an Authorization: (or Proxy-Authorization) 278 | * header, we need to reply 401 and supply a WWW-Authenticate 279 | * (or Proxy-Authenticate) header indicating acceptable authentication 280 | * schemes */ 281 | if (!auth_line) { 282 | note_sspi_auth_failure(ctx->r); 283 | return HTTP_UNAUTHORIZED; 284 | } 285 | 286 | /* Do a quick check of the Authorization: header. If it is 'Basic', and we're 287 | * allowed, try a cleartext logon. Else if it isn't the selected package 288 | * and we're authoritative, reply 401 again */ 289 | scheme = ap_getword_white(ctx->r->pool, &auth_line); 290 | 291 | 292 | if (ctx->crec->sspi_offerbasic && 0 == lstrcmpi(scheme, "Basic")) { 293 | ctx->scr->package = ctx->crec->sspi_package_basic; 294 | ret = get_basic_userpass(ctx, auth_line); 295 | sspi_set_domain(ctx); 296 | sspi_set_default_domain(ctx); 297 | return ret; 298 | } else if (ctx->crec->sspi_offersspi && 0 == check_package_valid(ctx, scheme)) { 299 | if (0 == ctx->scr->package) 300 | ctx->scr->package = apr_pstrdup(ctx->r->connection->pool, scheme); 301 | 302 | return get_sspi_userpass(ctx, auth_line); 303 | } 304 | 305 | /* check if its authoritative */ 306 | if (ctx->crec->sspi_authoritative) { 307 | /* error logs */ 308 | ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, ctx->r, 309 | "client used wrong authentication scheme: %s for %s (needed %s)", 310 | ctx->scr->package, ctx->r->uri, 311 | ctx->crec->sspi_packages); 312 | note_sspi_auth_failure(ctx->r); 313 | return HTTP_UNAUTHORIZED; 314 | } else { 315 | return DECLINED; 316 | } 317 | 318 | return HTTP_INTERNAL_SERVER_ERROR; 319 | } 320 | 321 | /* handles when the authentication fails */ 322 | void note_sspi_auth_failure(request_rec *r) 323 | { 324 | const char *auth_hdr = get_authenticate_header_name(r); 325 | sspi_config_rec *crec = get_sspi_config_rec(r); 326 | 327 | char *basicline = 0; 328 | 329 | /* remove the values from the hash table */ 330 | apr_table_unset(r->err_headers_out, auth_hdr); 331 | 332 | /* if basic authentication is offered */ 333 | if (crec->sspi_offerbasic) { 334 | basicline = 335 | apr_psprintf(r->pool, "Basic realm=\"%s\"", 336 | ap_auth_name(r)); 337 | } 338 | 339 | /* if secured authentication is negotiated */ 340 | if (crec->sspi_offersspi) { 341 | sspi_connection_rec *scr = 0; 342 | /* getting user data */ 343 | apr_pool_userdata_get(&scr, sspiModuleInfo.userDataKeyString, 344 | r->connection->pool); 345 | 346 | if (scr == 0 || scr->sspi_failing <= MAX_RETRYS) { 347 | char *w; 348 | const char *package_list = crec->sspi_packages; 349 | 350 | /* populating the HTTP headers that needs to be send out */ 351 | if (crec->sspi_offerbasic && crec->sspi_basicpreferred) { 352 | apr_table_addn(r->err_headers_out, auth_hdr, 353 | basicline); 354 | basicline = 0; 355 | } 356 | 357 | if (package_list) { 358 | // Fix wrong header syntax on Offer & Prefer Basic 359 | // We already offered Basic Auth above, now we need to also offer NTLM if enabled 360 | // If NTLM is not enabled: do not print second invalid WWW-Authenticate: Basic Header 361 | if (!stricmp(package_list, "Basic")) { 362 | package_list = crec->sspi_offersspi ? "NTLM" : ""; 363 | } 364 | 365 | while (*package_list) { 366 | /* Copies everything from package_list to a new string */ 367 | w = ap_getword_white(r->pool, 368 | &package_list); 369 | if (w[0]) { 370 | /* add to the hashtable */ 371 | apr_table_addn(r-> 372 | err_headers_out, 373 | auth_hdr, w); 374 | } 375 | } 376 | } 377 | } 378 | } 379 | 380 | if (basicline != 0) { 381 | /* add to the hashtable */ 382 | apr_table_addn(r->err_headers_out, auth_hdr, basicline); 383 | } 384 | } 385 | 386 | /* to generate the authentification challenge key */ 387 | void note_sspi_auth_challenge(sspi_auth_ctx *ctx, const char *challenge) 388 | { 389 | /* to find if Proxy-Authenticate or WWW-Authenticate */ 390 | const char *auth_hdr = get_authenticate_header_name(ctx->r); 391 | 392 | apr_table_setn(ctx->r->err_headers_out, auth_hdr, 393 | apr_psprintf(ctx->r->pool, "%s %s", ctx->scr->package, 394 | challenge)); 395 | 396 | if (ctx->r->connection->keepalives) 397 | --ctx->r->connection->keepalives; 398 | 399 | /* sending the header with content length to 0 to stop browser from 400 | closing down the connection */ 401 | if ((ctx->crec->sspi_msie3hack) 402 | && (ctx->r->proto_num < HTTP_VERSION(1, 1))) { 403 | apr_table_setn(ctx->r->err_headers_out, "Content-Length", "0"); 404 | } 405 | } 406 | 407 | /* does the encoding of the input to base 64 format */ 408 | char *uuencode_binary(apr_pool_t *p, const char *data, int len) 409 | { 410 | int encodelength; 411 | char *encoded; 412 | 413 | encodelength = apr_base64_encode_len(len); 414 | encoded = apr_palloc(p, encodelength); 415 | 416 | if (encoded != NULL) { 417 | if (apr_base64_encode_binary(encoded, data, len) > 0) { 418 | return encoded; 419 | } 420 | } 421 | 422 | return NULL; 423 | } 424 | 425 | /* does the decoding of the base64 input */ 426 | unsigned char *uudecode_binary(apr_pool_t *p, const char *data, 427 | int *decodelength) 428 | { 429 | char *decoded; 430 | 431 | *decodelength = apr_base64_decode_len(data); 432 | decoded = apr_palloc(p, *decodelength); 433 | 434 | if (decoded != NULL) { 435 | *decodelength = apr_base64_decode_binary(decoded, data); 436 | if (*decodelength > 0) { 437 | decoded[(*decodelength)] = '\0'; 438 | return decoded; 439 | } 440 | } 441 | 442 | return NULL; 443 | } 444 | -------------------------------------------------------------------------------- /src/mod_ntlm_authentication.c: -------------------------------------------------------------------------------- 1 | /* ==================================================================== 2 | * This code is copyright 2013 TQsoft GmbH 3 | * Inspired by mod_auth_sspi project from Tim Castello 4 | * 5 | * It may be freely distributed, as long as the above notices are reproduced. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * 19 | */ 20 | 21 | /* --------------------------------------------------------------------------- 22 | * mod_ntlm_authentication.c 23 | * Deals with NTLM authentication stuff 24 | * -------------------------------------------------------------------------*/ 25 | 26 | #include "mod_ntlm.h" 27 | 28 | /* APLOG_USE_MODULE macro for multi-file modules */ 29 | APLOG_USE_MODULE(auth_ntlm); 30 | 31 | /* getting the mjaximum token size from the given security package info */ 32 | static int get_package_max_token_size(PSecPkgInfo pkgInfo, ULONG numPackages, 33 | char *package) 34 | { 35 | ULONG ctr; 36 | 37 | for (ctr = 0; ctr < numPackages; ctr++) { 38 | if (!strcmp(package, pkgInfo[ctr].Name)) { 39 | return pkgInfo[ctr].cbMaxToken; 40 | } 41 | } 42 | 43 | return 0; 44 | } 45 | 46 | /* obtaining credentials for the secure authentication connection */ 47 | static int obtain_credentials(sspi_auth_ctx *ctx) 48 | { 49 | SECURITY_STATUS ss; 50 | TimeStamp throwaway; 51 | sspi_header_rec *auth_id; 52 | 53 | #ifdef UNICODE 54 | #define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2 55 | ctx->hdr.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE; 56 | #else 57 | #define SEC_WINNT_AUTH_IDENTITY_ANSI 0x1 58 | ctx->hdr.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI; 59 | #endif 60 | 61 | /* setting values based on the basic type authentication and the 62 | secured SSPI based authentication */ 63 | if (ctx->hdr.authtype == typeBasic) { 64 | auth_id = &ctx->hdr; 65 | if (auth_id->Domain == NULL && ctx->crec->sspi_domain != NULL) { 66 | auth_id->Domain = ctx->crec->sspi_domain; 67 | auth_id->DomainLength = 68 | (unsigned long)strlen(ctx->crec->sspi_domain); 69 | } 70 | } else { 71 | auth_id = NULL; 72 | } 73 | 74 | /* if credentials cant be acquired for SSPI authentication then return error */ 75 | if (! 76 | (ctx->scr->client_credentials.dwLower 77 | || ctx->scr->client_credentials.dwUpper)) { 78 | if ((ss = 79 | sspiModuleInfo.functable->AcquireCredentialsHandle(NULL, 80 | DEFAULT_SSPI_PACKAGE, 81 | SECPKG_CRED_OUTBOUND, 82 | NULL, 83 | auth_id, 84 | NULL, 85 | NULL, 86 | &ctx-> 87 | scr-> 88 | client_credentials, 89 | &throwaway) 90 | ) != SEC_E_OK) { 91 | if (ss == SEC_E_SECPKG_NOT_FOUND) { 92 | ap_log_rerror(APLOG_MARK, APLOG_ERR, 93 | APR_FROM_OS_ERROR(GetLastError()), 94 | ctx->r, 95 | "access to %s failed, reason: unable to acquire credentials " 96 | "handle", ctx->r->uri, 97 | ctx->scr->package); 98 | } 99 | return HTTP_INTERNAL_SERVER_ERROR; 100 | } 101 | } 102 | 103 | /* if credentials cant be acquired for SSPI authentication then return error */ 104 | if (! 105 | (ctx->scr->server_credentials.dwLower 106 | || ctx->scr->server_credentials.dwUpper)) { 107 | if ((ss = 108 | sspiModuleInfo.functable->AcquireCredentialsHandle(NULL, 109 | DEFAULT_SSPI_PACKAGE, 110 | SECPKG_CRED_INBOUND, 111 | NULL, 112 | NULL, 113 | NULL, 114 | NULL, 115 | &ctx-> 116 | scr-> 117 | server_credentials, 118 | &throwaway) 119 | ) != SEC_E_OK) { 120 | return HTTP_INTERNAL_SERVER_ERROR; 121 | } 122 | } 123 | 124 | ctx->scr->have_credentials = TRUE; 125 | 126 | return OK; 127 | } 128 | 129 | /* clean up of the sspi connection */ 130 | apr_status_t cleanup_sspi_connection(void *param) 131 | { 132 | sspi_connection_rec *scr = (sspi_connection_rec *) param; 133 | 134 | if (scr != NULL) { 135 | if (scr->client_credentials.dwLower 136 | || scr->client_credentials.dwUpper) { 137 | sspiModuleInfo.functable->FreeCredentialHandle(&scr-> 138 | client_credentials); 139 | scr->client_credentials.dwLower = 0; 140 | scr->client_credentials.dwUpper = 0; 141 | } 142 | 143 | if (scr->server_credentials.dwLower 144 | || scr->server_credentials.dwUpper) { 145 | sspiModuleInfo.functable->FreeCredentialHandle(&scr-> 146 | server_credentials); 147 | scr->server_credentials.dwLower = 0; 148 | scr->server_credentials.dwUpper = 0; 149 | } 150 | 151 | if (scr->client_context.dwLower || scr->client_context.dwUpper) { 152 | sspiModuleInfo.functable->DeleteSecurityContext(&scr-> 153 | client_context); 154 | scr->client_context.dwLower = 0; 155 | scr->client_context.dwUpper = 0; 156 | } 157 | 158 | if (scr->server_context.dwLower || scr->server_context.dwUpper) { 159 | sspiModuleInfo.functable->DeleteSecurityContext(&scr-> 160 | server_context); 161 | scr->server_context.dwLower = 0; 162 | scr->server_context.dwUpper = 0; 163 | } 164 | 165 | scr->have_credentials = FALSE; 166 | 167 | if (scr->usertoken) { 168 | CloseHandle(scr->usertoken); 169 | scr->usertoken = NULL; 170 | /* if the connection is not closed these memory are still valid thereby eating up memory 171 | and when too many connections are open, then this could lead to DOS issues */ 172 | scr->username = NULL; 173 | scr->groups = NULL; 174 | } 175 | } 176 | 177 | return APR_SUCCESS; 178 | } 179 | 180 | /* getting the username from the context handle */ 181 | static char *get_username_from_context(apr_pool_t *p, 182 | SecurityFunctionTable *functable, 183 | CtxtHandle *context) 184 | { 185 | SecPkgContext_Names names; 186 | SECURITY_STATUS ss; 187 | char *retval = NULL; 188 | 189 | /* QueryContextAttributes: Enables a transport application to query a security package 190 | for certain attributes of a security context. */ 191 | if ((ss = functable->QueryContextAttributes(context, 192 | SECPKG_ATTR_NAMES, &names) 193 | ) == SEC_E_OK) { 194 | retval = apr_pstrdup(p, names.sUserName); 195 | functable->FreeContextBuffer(names.sUserName); 196 | } 197 | 198 | return retval; 199 | } 200 | 201 | /* logging of the failures in Apache error log files */ 202 | static void log_sspi_auth_failure(request_rec *r, sspi_header_rec *hdr, 203 | apr_status_t errcode, char *reason) 204 | { 205 | if (hdr->User && hdr->Domain) { 206 | ap_log_rerror(APLOG_MARK, APLOG_ERR, errcode, r, 207 | "user %s\\%s: authentication failure for \"%s\"%s", 208 | hdr->Domain, hdr->User, r->uri, reason); 209 | } else if (hdr->User) { 210 | ap_log_rerror(APLOG_MARK, APLOG_ERR, errcode, r, 211 | "user %s: authentication failure for \"%s\"%s", 212 | hdr->User, r->uri, reason); 213 | } else { 214 | ap_log_rerror(APLOG_MARK, APLOG_ERR, errcode, r, 215 | "authentication failure for \"%s\": user unknown%s", 216 | r->uri, reason); 217 | } 218 | } 219 | 220 | /* wrapper for function log_sspi_auth_failure() to wrap different denial/invalid conditions */ 221 | static void log_sspi_logon_denied(request_rec *r, sspi_header_rec *hdr, 222 | apr_status_t errcode) 223 | { 224 | log_sspi_auth_failure(r, hdr, errcode, ""); 225 | } 226 | 227 | /* wrapper for function log_sspi_auth_failure() to wrap different denial/invalid conditions */ 228 | static void log_sspi_invalid_token(request_rec *r, sspi_header_rec *hdr, 229 | apr_status_t errcode) 230 | { 231 | log_sspi_auth_failure(r, hdr, errcode, 232 | ", reason: cannot generate context"); 233 | } 234 | 235 | /* getting the client context from the input credentials */ 236 | static SECURITY_STATUS gen_client_context(SecurityFunctionTable *functable, 237 | CredHandle *credentials, 238 | CtxtHandle *context, 239 | TimeStamp *ctxtexpiry, BYTE *in, 240 | DWORD *inlen, BYTE *out, 241 | DWORD *outlen, LPSTR package) 242 | { 243 | SecBuffer inbuf, outbuf; 244 | SecBufferDesc inbufdesc, outbufdesc; 245 | SECURITY_STATUS ss; 246 | ULONG ContextAttributes; 247 | BOOL havecontext = (context->dwLower || context->dwUpper); 248 | 249 | outbuf.cbBuffer = *outlen; 250 | outbuf.BufferType = SECBUFFER_TOKEN; 251 | outbuf.pvBuffer = out; 252 | outbufdesc.ulVersion = SECBUFFER_VERSION; 253 | outbufdesc.cBuffers = 1; 254 | outbufdesc.pBuffers = &outbuf; 255 | 256 | if (in) { 257 | inbuf.cbBuffer = *inlen; 258 | inbuf.BufferType = SECBUFFER_TOKEN; 259 | inbuf.pvBuffer = in; 260 | inbufdesc.ulVersion = SECBUFFER_VERSION; 261 | inbufdesc.cBuffers = 1; 262 | inbufdesc.pBuffers = &inbuf; 263 | } 264 | 265 | /* InitializeSecurityContext function initiates the client side, 266 | outbound security context from a credential handle */ 267 | ss = functable->InitializeSecurityContext(credentials, 268 | havecontext ? context : NULL, 269 | package, 270 | ISC_REQ_DELEGATE, 271 | 0, 272 | SECURITY_NATIVE_DREP, 273 | in ? &inbufdesc : NULL, 274 | 0, 275 | context, 276 | &outbufdesc, 277 | &ContextAttributes, 278 | ctxtexpiry); 279 | 280 | /* these are the different stages in the authentication proc */ 281 | if (ss == SEC_I_COMPLETE_NEEDED || ss == SEC_I_COMPLETE_AND_CONTINUE) { 282 | functable->CompleteAuthToken(context, &outbufdesc); 283 | } 284 | 285 | *outlen = outbuf.cbBuffer; 286 | 287 | return ss; 288 | } 289 | 290 | /* helps to generate the server context for the SSPI authentication */ 291 | static SECURITY_STATUS gen_server_context(SecurityFunctionTable *functable, 292 | CredHandle *credentials, 293 | CtxtHandle *context, 294 | TimeStamp *ctxtexpiry, BYTE *in, 295 | DWORD *inlen, BYTE *out, 296 | DWORD *outlen) 297 | { 298 | SecBuffer inbuf, outbuf; 299 | SecBufferDesc inbufdesc, outbufdesc; 300 | SECURITY_STATUS ss; 301 | ULONG ContextAttributes; 302 | BOOL havecontext = (context->dwLower || context->dwUpper); 303 | 304 | outbuf.cbBuffer = *outlen; 305 | outbuf.BufferType = SECBUFFER_TOKEN; 306 | outbuf.pvBuffer = out; 307 | outbufdesc.ulVersion = SECBUFFER_VERSION; 308 | outbufdesc.cBuffers = 1; 309 | outbufdesc.pBuffers = &outbuf; 310 | 311 | inbuf.cbBuffer = *inlen; 312 | inbuf.BufferType = SECBUFFER_TOKEN; 313 | inbuf.pvBuffer = in; 314 | inbufdesc.ulVersion = SECBUFFER_VERSION; 315 | inbufdesc.cBuffers = 1; 316 | inbufdesc.pBuffers = &inbuf; 317 | 318 | /* AcceptSecurityContext function enables the server component 319 | of a transport application to establish a security context between 320 | the server and a remote client */ 321 | ss = functable->AcceptSecurityContext(credentials, 322 | havecontext ? context : NULL, 323 | &inbufdesc, 324 | ASC_REQ_DELEGATE, 325 | SECURITY_NATIVE_DREP, 326 | context, 327 | &outbufdesc, 328 | &ContextAttributes, ctxtexpiry); 329 | 330 | if (ss == SEC_I_COMPLETE_NEEDED || ss == SEC_I_COMPLETE_AND_CONTINUE) { 331 | functable->CompleteAuthToken(context, &outbufdesc); 332 | } 333 | 334 | *outlen = outbuf.cbBuffer; 335 | 336 | return ss; 337 | } 338 | 339 | /* does the clear text authentication. called when the negotiated authentication 340 | is of type basic */ 341 | static int check_cleartext_auth(sspi_auth_ctx *ctx) 342 | { 343 | DWORD cbOut, cbIn, maxTokenSize; 344 | BYTE *clientbuf, *serverbuf; 345 | SECURITY_STATUS ss; 346 | 347 | /* follows the same way authnticate SSPI user */ 348 | maxTokenSize = 349 | get_package_max_token_size(sspiModuleInfo.pkgInfo, 350 | sspiModuleInfo.numPackages, 351 | ctx->scr->package); 352 | serverbuf = apr_palloc(ctx->r->pool, maxTokenSize); 353 | clientbuf = NULL; 354 | cbOut = 0; 355 | 356 | do { 357 | cbIn = cbOut; 358 | cbOut = maxTokenSize; 359 | 360 | ss = gen_client_context(sspiModuleInfo.functable, 361 | &ctx->scr->client_credentials, 362 | &ctx->scr->client_context, 363 | &ctx->scr->client_ctxtexpiry, clientbuf, 364 | &cbIn, serverbuf, &cbOut, 365 | ctx->scr->package); 366 | 367 | /* these 3 conditions are ok */ 368 | if (ss == SEC_E_OK || ss == SEC_I_CONTINUE_NEEDED 369 | || ss == SEC_I_COMPLETE_AND_CONTINUE) { 370 | if (clientbuf == NULL) { 371 | clientbuf = 372 | apr_palloc(ctx->r->pool, maxTokenSize); 373 | } 374 | 375 | cbIn = cbOut; 376 | cbOut = maxTokenSize; 377 | 378 | ss = gen_server_context(sspiModuleInfo.functable, 379 | &ctx->scr->server_credentials, 380 | &ctx->scr->server_context, 381 | &ctx->scr->server_ctxtexpiry, 382 | serverbuf, &cbIn, clientbuf, 383 | &cbOut); 384 | } 385 | } while (ss == SEC_I_CONTINUE_NEEDED 386 | || ss == SEC_I_COMPLETE_AND_CONTINUE); 387 | 388 | switch (ss) { 389 | case SEC_E_OK: 390 | return OK; 391 | 392 | case SEC_E_INVALID_HANDLE: 393 | case SEC_E_INTERNAL_ERROR: 394 | case SEC_E_NO_AUTHENTICATING_AUTHORITY: 395 | case SEC_E_INSUFFICIENT_MEMORY: 396 | ap_log_rerror(APLOG_MARK, APLOG_ERR, 397 | APR_FROM_OS_ERROR(GetLastError()), ctx->r, 398 | "access to %s failed, reason: cannot generate context", 399 | ctx->r->uri); 400 | return HTTP_INTERNAL_SERVER_ERROR; 401 | 402 | case SEC_E_INVALID_TOKEN: 403 | case SEC_E_LOGON_DENIED: 404 | default: 405 | log_sspi_logon_denied(ctx->r, &ctx->hdr, 406 | APR_FROM_OS_ERROR(GetLastError())); 407 | note_sspi_auth_failure(ctx->r); 408 | cleanup_sspi_connection(ctx->scr); 409 | return HTTP_UNAUTHORIZED; 410 | } 411 | } 412 | 413 | /* construct username from the HTTP header */ 414 | static void construct_username(sspi_auth_ctx *ctx) 415 | { 416 | /* removing the domain part from the username */ 417 | if (ctx->crec->sspi_omitdomain) { 418 | char *s = strchr(ctx->scr->username, '\\'); 419 | 420 | if (s) 421 | ctx->scr->username = s + 1; 422 | } 423 | 424 | if (ctx->crec->sspi_usernamecase == NULL) { 425 | } else if (!lstrcmpi(ctx->crec->sspi_usernamecase, "Lower")) { 426 | _strlwr_s(ctx->scr->username, strlen(ctx->scr->username) + 1); 427 | } else if (!lstrcmpi(ctx->crec->sspi_usernamecase, "Upper")) { 428 | _strupr_s(ctx->scr->username, strlen(ctx->scr->username) + 1); 429 | }; 430 | } 431 | 432 | /* setting up/initalizing the connection details */ 433 | static int set_connection_details(sspi_auth_ctx *ctx) 434 | { 435 | SECURITY_STATUS ss; 436 | 437 | if (ctx->scr->username == NULL) { 438 | ctx->scr->username = 439 | get_username_from_context(ctx->r->connection->pool, 440 | sspiModuleInfo.functable, 441 | &ctx->scr->server_context); 442 | } 443 | 444 | if (ctx->scr->username == NULL) 445 | return HTTP_INTERNAL_SERVER_ERROR; 446 | else 447 | construct_username(ctx); 448 | 449 | if (ctx->r->user == NULL) { 450 | ctx->r->user = ctx->scr->username; 451 | ctx->r->ap_auth_type = ctx->scr->package; 452 | } 453 | 454 | if (ctx->scr->usertoken == NULL) { 455 | if ((ss = 456 | sspiModuleInfo.functable->ImpersonateSecurityContext(&ctx-> 457 | scr-> 458 | server_context)) 459 | != SEC_E_OK) { 460 | return HTTP_INTERNAL_SERVER_ERROR; 461 | } 462 | 463 | if (!OpenThreadToken 464 | (GetCurrentThread(), TOKEN_QUERY_SOURCE | TOKEN_READ, TRUE, 465 | &ctx->scr->usertoken)) { 466 | sspiModuleInfo.functable->RevertSecurityContext(&ctx-> 467 | scr-> 468 | server_context); 469 | return HTTP_INTERNAL_SERVER_ERROR; 470 | } 471 | 472 | if ((ss = 473 | sspiModuleInfo.functable->RevertSecurityContext(&ctx->scr-> 474 | server_context)) 475 | != SEC_E_OK) { 476 | return HTTP_INTERNAL_SERVER_ERROR; 477 | } 478 | } 479 | 480 | return OK; 481 | } 482 | 483 | /** 484 | * Tell whether Internet Explorer is asking for re-authentication before 485 | * sending POST data. 486 | * 487 | * This behavior is IE specific and will cause a bug with the following 488 | * conditions: 489 | * * method is POST 490 | * * Context-Length is 0 491 | * * an SSPI connection record already exists for this connection 492 | * 493 | * Normally, this SSPI module will NOT treat this as a request for 494 | * re-authentication but as a POST request with no body (thus "dropping" the 495 | * contents of the POST, as seen in this bug: 496 | * http://sourceforge.net/tracker/index.php?func=detail&aid=1499289&group_id=162518&atid=824098 497 | * 498 | * Thanks to 'nobody' on 2007-02-01 for the details on why this occurs. 499 | * 500 | * The previous work-around was to force this module to reauthenticate 501 | * every request, which causes a lot of extra 401 errors and traffic to 502 | * your domain controller. 503 | * 504 | * Instead, we can now check for IE's behaviour and reauthenticate only when 505 | * needed. 506 | * 507 | * @param ctx The SSPI Authentication context of the current request. 508 | */ 509 | static int ie_post_needs_reauth(const sspi_auth_ctx *ctx) 510 | { 511 | 512 | const char *contentLen = 513 | apr_table_get(ctx->r->headers_in, "Content-Length"); 514 | 515 | if (lstrcmpi(ctx->r->method, "POST") == 0 && contentLen != NULL && 516 | lstrcmpi(contentLen, "0") == 0 && 517 | ctx->scr != NULL && ctx->scr->username != NULL) { 518 | return 1; 519 | } else { 520 | return 0; 521 | } 522 | } 523 | 524 | /* 525 | * IE sends POST requests without body if it insists on still using auth. 526 | * Use NTLMNotForced flag to enable scenarios where same pages can be accessed with and without NTLM auth 527 | *@param ctx The SSPI Authentication context of the current request. 528 | */ 529 | static int ie_post_empty(const sspi_auth_ctx *ctx) 530 | { 531 | 532 | const char *contentLen = 533 | apr_table_get(ctx->r->headers_in, "Content-Length"); 534 | 535 | ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ctx->r->server, 536 | "SSPI: Testing for IE bug, request %s %s", ctx->r->method, 537 | contentLen); 538 | 539 | if (lstrcmpi(ctx->r->method, "POST") == 0 && contentLen != NULL && 540 | lstrcmpi(contentLen, "0") == 0) { 541 | ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ctx->r->server, 542 | "SSPI: Found empty POST request"); 543 | return 1; 544 | } 545 | return 0; 546 | } 547 | 548 | /* Security context is negotiated between the client and server ie here between the 549 | browser and the Apache server. */ 550 | static int accept_security_context(sspi_auth_ctx *ctx) 551 | { 552 | SECURITY_STATUS ss; 553 | sspi_header_rec hdrout; 554 | 555 | hdrout.PasswordLength = 556 | get_package_max_token_size(sspiModuleInfo.pkgInfo, 557 | sspiModuleInfo.numPackages, 558 | ctx->scr->package); 559 | if (! 560 | (hdrout.Password = 561 | apr_palloc(ctx->r->pool, hdrout.PasswordLength))) { 562 | return HTTP_INTERNAL_SERVER_ERROR; 563 | } 564 | 565 | ss = gen_server_context(sspiModuleInfo.functable, 566 | &ctx->scr->server_credentials, 567 | &ctx->scr->server_context, 568 | &ctx->scr->server_ctxtexpiry, ctx->hdr.Password, 569 | &ctx->hdr.PasswordLength, hdrout.Password, 570 | &hdrout.PasswordLength); 571 | 572 | switch (ss) { 573 | case SEC_E_OK: 574 | return OK; 575 | 576 | case SEC_I_COMPLETE_NEEDED: 577 | case SEC_I_CONTINUE_NEEDED: 578 | case SEC_I_COMPLETE_AND_CONTINUE: /* already completed if 'complete and continue' */ 579 | note_sspi_auth_challenge(ctx, 580 | uuencode_binary(ctx->r->pool, 581 | hdrout.Password, 582 | hdrout. 583 | PasswordLength)); 584 | return HTTP_UNAUTHORIZED; 585 | 586 | case SEC_E_INVALID_TOKEN: 587 | log_sspi_invalid_token(ctx->r, &ctx->hdr, 588 | APR_FROM_OS_ERROR(GetLastError())); 589 | ctx->scr->sspi_failing = 1; 590 | ctx->scr->package = 0; 591 | note_sspi_auth_failure(ctx->r); 592 | cleanup_sspi_connection(ctx->scr); 593 | return HTTP_UNAUTHORIZED; 594 | 595 | case SEC_E_LOGON_DENIED: 596 | log_sspi_logon_denied(ctx->r, &ctx->hdr, 597 | APR_FROM_OS_ERROR(GetLastError())); 598 | ctx->scr->sspi_failing++; 599 | ctx->scr->package = 0; 600 | note_sspi_auth_failure(ctx->r); 601 | cleanup_sspi_connection(ctx->scr); 602 | return HTTP_UNAUTHORIZED; 603 | 604 | case SEC_E_INVALID_HANDLE: 605 | case SEC_E_INTERNAL_ERROR: 606 | case SEC_E_NO_AUTHENTICATING_AUTHORITY: 607 | case SEC_E_INSUFFICIENT_MEMORY: 608 | ap_log_rerror(APLOG_MARK, APLOG_ERR, 609 | APR_FROM_OS_ERROR(GetLastError()), ctx->r, 610 | "access to %s failed, reason: cannot generate server context", 611 | ctx->r->uri); 612 | return HTTP_INTERNAL_SERVER_ERROR; 613 | } 614 | 615 | return HTTP_INTERNAL_SERVER_ERROR; 616 | } 617 | 618 | /* similar to authenticate a basic user, here the authentication is done for the user 619 | who opted for a secure SSPI authentication */ 620 | int authenticate_sspi_user(request_rec *r) 621 | { 622 | sspi_auth_ctx ctx; 623 | const char *current_auth; 624 | int res; 625 | 626 | /* is SSPI authentication supported? */ 627 | current_auth = ap_auth_type(r); 628 | if (!current_auth || strcasecmp(current_auth, "SSPI")) { 629 | return DECLINED; 630 | } 631 | 632 | ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, 633 | SSPILOGNO(00001) "Entering authenticate_sspi_user()"); 634 | 635 | #ifdef _DEBUG 636 | if (sspiModuleInfo.currentlyDebugging == FALSE) { 637 | sspiModuleInfo.currentlyDebugging = TRUE; 638 | DebugBreak(); 639 | } 640 | #endif /* def _DEBUG */ 641 | 642 | /* securezeromemory is needed so that the password is no longer present in the memory 643 | this is needed otherwise someone else can read the decrypted password */ 644 | SecureZeroMemory(&ctx, sizeof(ctx)); 645 | 646 | ctx.r = r; 647 | ctx.crec = get_sspi_config_rec(r); 648 | 649 | if (!ctx.crec->sspi_on) { 650 | 651 | ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, r, 652 | SSPILOGNO(00007) 653 | "access to %s declined, reason: SSPIAuth is off", 654 | r->uri); 655 | 656 | return DECLINED; 657 | } 658 | 659 | /* checking all the different conditons */ 660 | if (sspiModuleInfo.supportsSSPI == FALSE) { 661 | if (ctx.crec->sspi_authoritative) { 662 | 663 | ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, 664 | r, SSPILOGNO(00002) 665 | "access to %s failed, reason: SSPI support is not available", 666 | r->uri); 667 | 668 | return HTTP_INTERNAL_SERVER_ERROR; 669 | } else { 670 | 671 | ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, 672 | r, SSPILOGNO(00008) 673 | "access to %s declined, reason: SSPIAuth support is not available", 674 | r->uri); 675 | 676 | return DECLINED; 677 | } 678 | } 679 | 680 | /* checking all the different conditons */ 681 | if (ctx.crec->sspi_package_basic == NULL) { 682 | ctx.crec->sspi_package_basic = ctx.crec->sspi_packages; 683 | 684 | if (ctx.crec->sspi_package_basic == NULL) { 685 | ctx.crec->sspi_package_basic = 686 | sspiModuleInfo.defaultPackage; 687 | } 688 | } 689 | 690 | if (ctx.crec->sspi_packages == NULL) { 691 | ctx.crec->sspi_packages = ctx.crec->sspi_package_basic; 692 | } 693 | 694 | /* 695 | * Use Basic authentication, because we have no idea how to modify 696 | * the domain on NTLMv2 response. normally, it's not safe, but we 697 | * can enable SSL I think, if we enable SSL, even Basic should be 698 | * secure enough. 699 | */ 700 | if (ctx.crec->sspi_offerbasic && ctx.crec->sspi_basicpreferred) 701 | ctx.crec->sspi_packages = "Basic"; 702 | 703 | apr_pool_userdata_get(&ctx.scr, sspiModuleInfo.userDataKeyString, 704 | r->connection->pool); 705 | 706 | if (ctx.scr == NULL) { 707 | ctx.scr = 708 | apr_pcalloc(r->connection->pool, 709 | sizeof(sspi_connection_rec)); 710 | apr_pool_userdata_setn(ctx.scr, 711 | sspiModuleInfo.userDataKeyString, 712 | cleanup_sspi_connection, 713 | r->connection->pool); 714 | } else if (ie_post_needs_reauth(&ctx)) { 715 | // Internet Explorer wants to re authenticate, not POST 716 | ctx.scr->username = NULL; 717 | 718 | if (ctx.scr->server_context.dwLower || 719 | ctx.scr->server_context.dwUpper) { 720 | sspiModuleInfo.functable->DeleteSecurityContext(&ctx. 721 | scr-> 722 | server_context); 723 | ctx.scr->server_context.dwLower = 0; 724 | ctx.scr->server_context.dwUpper = 0; 725 | 726 | ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, 727 | "SSPI: starting IE re authentication"); 728 | } 729 | } 730 | 731 | if (ctx.scr->username == NULL) { 732 | 733 | if (res = get_sspi_header(&ctx)) { 734 | if (!ie_post_empty(&ctx) && ctx.crec->sspi_optional) { 735 | ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, 736 | r->server, 737 | "SSPI: Optional auth exercised phase 1"); 738 | ctx.r->user = "NT AUTHORITY\\ANONYMOUS LOGON"; 739 | ctx.r->ap_auth_type = "Basic"; 740 | return OK; 741 | } 742 | return res; 743 | } 744 | 745 | if ((!ctx.scr->have_credentials) && 746 | (res = obtain_credentials(&ctx))) { 747 | if (!ie_post_empty(&ctx) && ctx.crec->sspi_optional) { 748 | ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, 749 | r->server, 750 | "SSPI: Optional auth exercised phase 2"); 751 | ctx.r->user = "NT AUTHORITY\\ANONYMOUS LOGON"; 752 | ctx.r->ap_auth_type = "Basic"; 753 | return OK; 754 | } 755 | return res; 756 | } 757 | 758 | if (ctx.hdr.authtype == typeSSPI) { 759 | 760 | if (res = accept_security_context(&ctx)) { 761 | if (!ie_post_empty(&ctx) && 762 | ctx.crec->sspi_optional) { 763 | ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, 764 | r->server, 765 | "SSPI: Optional auth exercised phase 3"); 766 | ctx.r->user = 767 | "NT AUTHORITY\\ANONYMOUS LOGON"; 768 | ctx.r->ap_auth_type = "Basic"; 769 | return OK; 770 | } 771 | return res; 772 | } 773 | } else if (ctx.hdr.authtype == typeBasic) { 774 | res = check_cleartext_auth(&ctx); 775 | /* don't forget to clean up open user password */ 776 | SecureZeroMemory(&ctx.hdr, sizeof(ctx.hdr)); 777 | if (res) { 778 | return res; 779 | } 780 | } 781 | 782 | /* we should stick with per-request auth - per connection can cause 783 | * problems with POSTing and would be difficult to code such that different 784 | * configs were allowed on the same connection (eg. CGI that referred to 785 | * images in another directory. */ 786 | if (ctx.crec->sspi_per_request_auth) { 787 | apr_pool_cleanup_kill(r->connection->pool, ctx.scr, 788 | cleanup_sspi_connection); 789 | apr_pool_cleanup_register(r->pool, ctx.scr, 790 | cleanup_sspi_connection, 791 | apr_pool_cleanup_null); 792 | } 793 | } 794 | 795 | if (res = set_connection_details(&ctx)) { 796 | return res; 797 | } 798 | /* logging */ 799 | ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, SSPILOGNO(00009) 800 | "Authenticated user: %s", r->user); 801 | 802 | return OK; 803 | } 804 | 805 | // common cleanup function for data 806 | int cleanup_sspi_user(request_rec *r) 807 | { 808 | sspi_config_rec * cfg = get_sspi_config_rec(r); 809 | if (!r->main && cfg) { 810 | sspi_connection_rec* conn; 811 | if (!cfg->sspi_on || !r->user) { 812 | return; 813 | } 814 | apr_pool_userdata_get(&conn, sspiModuleInfo.userDataKeyString, r->connection->pool); 815 | cleanup_sspi_connection(conn); 816 | } 817 | } -------------------------------------------------------------------------------- /bin/mod_authn_ntlm.map: -------------------------------------------------------------------------------- 1 | mod_authn_ntlm 2 | 3 | Timestamp is 5511de37 (Tue Mar 24 14:59:19 2015) 4 | 5 | Preferred load address is 6ed00000 6 | 7 | Start Length Name Class 8 | 0001:00000000 000086b1H .text CODE 9 | 0002:00000000 000001b8H .idata$5 DATA 10 | 0002:000001b8 00000004H .CRT$XCA DATA 11 | 0002:000001bc 00000004H .CRT$XCZ DATA 12 | 0002:000001c0 00000004H .CRT$XIA DATA 13 | 0002:000001c4 00000010H .CRT$XIC DATA 14 | 0002:000001d4 00000004H .CRT$XIZ DATA 15 | 0002:000001d8 00000004H .CRT$XPA DATA 16 | 0002:000001dc 00000008H .CRT$XPX DATA 17 | 0002:000001e4 00000004H .CRT$XPXA DATA 18 | 0002:000001e8 00000004H .CRT$XPZ DATA 19 | 0002:000001ec 00000004H .CRT$XTA DATA 20 | 0002:000001f0 00000004H .CRT$XTZ DATA 21 | 0002:000001f8 00004b70H .rdata DATA 22 | 0002:00004d70 0000000cH .rdata$sxdata DATA 23 | 0002:00004d7c 00000004H .rtc$IAA DATA 24 | 0002:00004d80 00000004H .rtc$IZZ DATA 25 | 0002:00004d84 00000004H .rtc$TAA DATA 26 | 0002:00004d88 00000004H .rtc$TZZ DATA 27 | 0002:00004d90 000002f4H .xdata$x DATA 28 | 0002:00005084 00000078H .idata$2 DATA 29 | 0002:000050fc 00000014H .idata$3 DATA 30 | 0002:00005110 000001b8H .idata$4 DATA 31 | 0002:000052c8 0000086eH .idata$6 DATA 32 | 0002:00005b40 00000055H .edata DATA 33 | 0003:00000000 00000dd4H .data DATA 34 | 0003:00000de0 00001e98H .bss DATA 35 | 36 | Address Publics by Value Rva+Base Lib:Object 37 | 38 | 0000:00000000 __except_list 00000000 39 | 0000:00000003 ___safe_se_handler_count 00000003 40 | 0000:00000000 ___ImageBase 6ed00000 41 | 0001:00000080 _get_sspi_config_rec 6ed01080 f mod_ntlm.obj 42 | 0001:00000550 _authenticate_sspi_user 6ed01550 f mod_ntlm_authentication.obj 43 | 0001:00000b00 _cleanup_sspi_connection 6ed01b00 f mod_ntlm_authentication.obj 44 | 0001:00001300 _is_member 6ed02300 f mod_ntlm_authorization.obj 45 | 0001:00001460 _sspi_common_authz_check 6ed02460 f mod_ntlm_authorization.obj 46 | 0001:00001550 _sspi_group_check_authorization 6ed02550 f mod_ntlm_authorization.obj 47 | 0001:000015f0 _sspi_user_check_authorization 6ed025f0 f mod_ntlm_authorization.obj 48 | 0001:000016b0 _sspi_valid_check_authorization 6ed026b0 f mod_ntlm_authorization.obj 49 | 0001:00001770 _create_sspi_dir_config 6ed02770 f mod_ntlm_interface.obj 50 | 0001:000018b0 _get_sspi_header 6ed028b0 f mod_ntlm_interface.obj 51 | 0001:00001a60 _note_sspi_auth_challenge 6ed02a60 f mod_ntlm_interface.obj 52 | 0001:00001ae0 _note_sspi_auth_failure 6ed02ae0 f mod_ntlm_interface.obj 53 | 0001:00001bf0 _uuencode_binary 6ed02bf0 f mod_ntlm_interface.obj 54 | 0001:00001c28 _ap_set_flag_slot 6ed02c28 f libhttpd:libhttpd.dll 55 | 0001:00001c2e _ap_set_string_slot 6ed02c2e f libhttpd:libhttpd.dll 56 | 0001:00001c34 @__security_check_cookie@4 6ed02c34 f LIBCMT:secchk.obj 57 | 0001:00001c50 __except_handler4 6ed02c50 f LIBCMT:chandler4.obj 58 | 0001:00001df0 __local_unwind4 6ed02df0 f LIBCMT:exsup4.obj 59 | 0001:00001ec6 __seh_longjmp_unwind4@4 6ed02ec6 f LIBCMT:exsup4.obj 60 | 0001:00001ee2 @_EH4_CallFilterFunc@8 6ed02ee2 f LIBCMT:exsup4.obj 61 | 0001:00001ef9 @_EH4_TransferToHandler@8 6ed02ef9 f LIBCMT:exsup4.obj 62 | 0001:00001f12 @_EH4_GlobalUnwind2@8 6ed02f12 f LIBCMT:exsup4.obj 63 | 0001:00001f2b @_EH4_LocalUnwind@16 6ed02f2b f LIBCMT:exsup4.obj 64 | 0001:00001f50 _memset 6ed02f50 f LIBCMT:memset.obj 65 | 0001:00001fe0 _strchr 6ed02fe0 f LIBCMT:strchr.obj 66 | 0001:0000204e ___from_strstr_to_strchr 6ed0304e LIBCMT:strchr.obj 67 | 0001:0000210b ??0_LocaleUpdate@@QAE@PAUlocaleinfo_struct@@@Z 6ed0310b f i LIBCMT:strlwr.obj 68 | 0001:00002193 ?_strlwr_s_l_stat@@YAHPADIPAUlocaleinfo_struct@@@Z 6ed03193 f LIBCMT:strlwr.obj 69 | 0001:00002305 __freea 6ed03305 f i LIBCMT:strlwr.obj 70 | 0001:00002323 __strlwr_s 6ed03323 f LIBCMT:strlwr.obj 71 | 0001:00002338 __strlwr_s_l 6ed03338 f LIBCMT:strlwr.obj 72 | 0001:000024dc __strupr_s 6ed034dc f LIBCMT:strupr.obj 73 | 0001:000024f1 __strupr_s_l 6ed034f1 f LIBCMT:strupr.obj 74 | 0001:00002523 __CRT_INIT@12 6ed03523 f LIBCMT:dllcrt0.obj 75 | 0001:00002695 __DllMainCRTStartup@12 6ed03695 f LIBCMT:dllcrt0.obj 76 | 0001:000027c6 ___DllXcptFilter 6ed037c6 f LIBCMT:dllcrt0.obj 77 | 0001:000027eb ___raise_securityfailure 6ed037eb f LIBCMT:gs_report.obj 78 | 0001:00002828 ___report_gsfailure 6ed03828 f LIBCMT:gs_report.obj 79 | 0001:00002930 __FindPESection 6ed03930 f LIBCMT:pesect.obj 80 | 0001:00002980 __IsNonwritableInCurrentImage 6ed03980 f LIBCMT:pesect.obj 81 | 0001:00002a40 __ValidateImageBase 6ed03a40 f LIBCMT:pesect.obj 82 | 0001:00002a80 __global_unwind2 6ed03a80 f LIBCMT:exsup.obj 83 | 0001:00002ae5 __local_unwind2 6ed03ae5 f LIBCMT:exsup.obj 84 | 0001:00002b69 __abnormal_termination 6ed03b69 f LIBCMT:exsup.obj 85 | 0001:00002b8c __NLG_Notify1 6ed03b8c f LIBCMT:exsup.obj 86 | 0001:00002b95 __NLG_Notify 6ed03b95 f LIBCMT:exsup.obj 87 | 0001:00002bac __NLG_Dispatch2 6ed03bac LIBCMT:exsup.obj 88 | 0001:00002bac __NLG_Dispatch 6ed03bac LIBCMT:exsup.obj 89 | 0001:00002bb4 __NLG_Call 6ed03bb4 f LIBCMT:exsup.obj 90 | 0001:00002bb6 __NLG_Return2 6ed03bb6 LIBCMT:exsup.obj 91 | 0001:00002bb7 __VEC_memset 6ed03bb7 f LIBCMT:p4_memset.obj 92 | 0001:00002c7f ___isa_available_init 6ed03c7f f LIBCMT:cpu_disp.obj 93 | 0001:00002db8 __call_reportfault 6ed03db8 f LIBCMT:invarg.obj 94 | 0001:00002edb __initp_misc_invarg 6ed03edb f LIBCMT:invarg.obj 95 | 0001:00002ee8 __invalid_parameter 6ed03ee8 f LIBCMT:invarg.obj 96 | 0001:00002f13 __invalid_parameter_noinfo 6ed03f13 f LIBCMT:invarg.obj 97 | 0001:00002f23 __invoke_watson 6ed03f23 f LIBCMT:invarg.obj 98 | 0001:00002f4e _strcpy_s 6ed03f4e f LIBCMT:strcpy_s.obj 99 | 0001:00002fa3 _strnlen 6ed03fa3 f LIBCMT:strlen_s.obj 100 | 0001:00002fbe _free 6ed03fbe f LIBCMT:free.obj 101 | 0001:00002ff6 _malloc 6ed03ff6 f LIBCMT:malloc.obj 102 | 0001:00003088 ___addlocaleref 6ed04088 f LIBCMT:localref.obj 103 | 0001:00003118 ___freetlocinfo 6ed04118 f LIBCMT:localref.obj 104 | 0001:00003272 ___removelocaleref 6ed04272 f LIBCMT:localref.obj 105 | 0001:0000330d ___updatetlocinfo 6ed0430d f LIBCMT:localref.obj 106 | 0001:00003389 __updatetlocinfoEx_nolock 6ed04389 f LIBCMT:localref.obj 107 | 0001:000033d4 ___initmbctable 6ed043d4 f LIBCMT:mbctype.obj 108 | 0001:0000368f ___updatetmbcinfo 6ed0468f f LIBCMT:mbctype.obj 109 | 0001:00003734 __setmbcp 6ed04734 f LIBCMT:mbctype.obj 110 | 0001:000038e2 __setmbcp_nolock 6ed048e2 f LIBCMT:mbctype.obj 111 | 0001:00003cc0 ___crtLCMapStringA 6ed04cc0 f LIBCMT:a_map.obj 112 | 0001:00003d04 __freefls@4 6ed04d04 f LIBCMT:tidtable.obj 113 | 0001:00003e3b __freeptd 6ed04e3b f LIBCMT:tidtable.obj 114 | 0001:00003e71 __getptd 6ed04e71 f LIBCMT:tidtable.obj 115 | 0001:00003e89 __getptd_noexit 6ed04e89 f LIBCMT:tidtable.obj 116 | 0001:00003ef8 __initptd 6ed04ef8 f LIBCMT:tidtable.obj 117 | 0001:00003fab __mtinit 6ed04fab f LIBCMT:tidtable.obj 118 | 0001:00004021 __mtterm 6ed05021 f LIBCMT:tidtable.obj 119 | 0001:0000403e ___doserrno 6ed0503e f LIBCMT:dosmap.obj 120 | 0001:00004051 __dosmaperr 6ed05051 f LIBCMT:dosmap.obj 121 | 0001:00004072 __errno 6ed05072 f LIBCMT:dosmap.obj 122 | 0001:00004085 __get_errno_from_oserr 6ed05085 f LIBCMT:dosmap.obj 123 | 0001:000040d0 __alloca_probe_16 6ed050d0 f LIBCMT:alloca16.obj 124 | 0001:000040e6 __alloca_probe_8 6ed050e6 LIBCMT:alloca16.obj 125 | 0001:000040fc __locterm 6ed050fc f LIBCMT:wsetloca.obj 126 | 0001:0000414e __XcptFilter 6ed0514e f LIBCMT:winxfltr.obj 127 | 0001:000042a9 ___CppXcptFilter 6ed052a9 f LIBCMT:winxfltr.obj 128 | 0001:000042c7 ___crtCorExitProcess 6ed052c7 f LIBCMT:crt0dat.obj 129 | 0001:000042f9 ___crtExitProcess 6ed052f9 f LIBCMT:crt0dat.obj 130 | 0001:0000430f ___freeCrtMemory 6ed0530f f LIBCMT:crt0dat.obj 131 | 0001:0000441f __amsg_exit 6ed0541f f LIBCMT:crt0dat.obj 132 | 0001:0000443b __cexit 6ed0543b f LIBCMT:crt0dat.obj 133 | 0001:0000444a __cinit 6ed0544a f LIBCMT:crt0dat.obj 134 | 0001:000044db __exit 6ed054db f LIBCMT:crt0dat.obj 135 | 0001:000044ef __init_pointers 6ed054ef f LIBCMT:crt0dat.obj 136 | 0001:00004543 __initterm_e 6ed05543 f LIBCMT:crt0dat.obj 137 | 0001:00004565 __lockexit 6ed05565 f LIBCMT:crt0dat.obj 138 | 0001:0000456e __unlockexit 6ed0556e f LIBCMT:crt0dat.obj 139 | 0001:000046a6 __heap_init 6ed056a6 f LIBCMT:heapinit.obj 140 | 0001:000046bb __heap_term 6ed056bb f LIBCMT:heapinit.obj 141 | 0001:000046c3 __ioinit 6ed056c3 f LIBCMT:ioinit.obj 142 | 0001:00004971 __ioterm 6ed05971 f LIBCMT:ioinit.obj 143 | 0001:000049c3 __setargv 6ed059c3 f LIBCMT:stdargv.obj 144 | 0001:00004bf0 __setenvp 6ed05bf0 f LIBCMT:stdenvp.obj 145 | 0001:00004cd1 ___security_init_cookie 6ed05cd1 f LIBCMT:gs_support.obj 146 | 0001:00004d6b _DllMain@12 6ed05d6b f LIBCMT:dllmain.obj 147 | 0001:00004d71 ___crtGetEnvironmentStringsA 6ed05d71 f LIBCMT:a_env.obj 148 | 0001:00004dfc ___crtFlsAlloc 6ed05dfc f LIBCMT:winapisupp.obj 149 | 0001:00004e1a ___crtFlsFree 6ed05e1a f LIBCMT:winapisupp.obj 150 | 0001:00004e39 ___crtFlsGetValue 6ed05e39 f LIBCMT:winapisupp.obj 151 | 0001:00004e58 ___crtFlsSetValue 6ed05e58 f LIBCMT:winapisupp.obj 152 | 0001:00004e7a ___crtIsPackagedApp 6ed05e7a f LIBCMT:winapisupp.obj 153 | 0001:00004eb9 ___crtLoadWinApiPointers 6ed05eb9 f LIBCMT:winapisupp.obj 154 | 0001:000050f8 ___crtTerminateProcess 6ed060f8 f LIBCMT:winapisupp.obj 155 | 0001:0000510d ___crtUnhandledException 6ed0610d f LIBCMT:winapisupp.obj 156 | 0001:00005123 __calloc_crt 6ed06123 f LIBCMT:crtheap.obj 157 | 0001:0000516d __malloc_crt 6ed0616d f LIBCMT:crtheap.obj 158 | 0001:000051b6 __realloc_crt 6ed061b6 f LIBCMT:crtheap.obj 159 | 0001:00005202 __RTC_Initialize 6ed06202 f LIBCMT:initsect.obj 160 | 0001:00005222 __RTC_Terminate 6ed06222 f LIBCMT:initsect.obj 161 | 0001:00005250 __SEH_prolog4 6ed06250 f LIBCMT:sehprolg4.obj 162 | 0001:00005295 __SEH_epilog4 6ed06295 f LIBCMT:sehprolg4.obj 163 | 0001:000052a9 __crt_debugger_hook 6ed062a9 f LIBCMT:dbghook.obj 164 | 0001:000052b1 __callnewh 6ed062b1 f LIBCMT:handler.obj 165 | 0001:000052d7 __initp_heap_handler 6ed062d7 f LIBCMT:handler.obj 166 | 0001:000052e4 __FF_MSGBANNER 6ed062e4 f LIBCMT:crt0msg.obj 167 | 0001:0000531d __GET_RTERRMSG 6ed0631d f LIBCMT:crt0msg.obj 168 | 0001:00005341 __NMSG_WRITE 6ed06341 f LIBCMT:crt0msg.obj 169 | 0001:000054fc __lock 6ed064fc f LIBCMT:mlock.obj 170 | 0001:00005530 __mtdeletelocks 6ed06530 f LIBCMT:mlock.obj 171 | 0001:00005584 __mtinitlocknum 6ed06584 f LIBCMT:mlock.obj 172 | 0001:0000562b __mtinitlocks 6ed0662b f LIBCMT:mlock.obj 173 | 0001:00005660 __unlock 6ed06660 f LIBCMT:mlock.obj 174 | 0001:00005675 ___free_lconv_mon 6ed06675 f LIBCMT:initmon.obj 175 | 0001:00005771 ___free_lconv_num 6ed06771 f LIBCMT:initnum.obj 176 | 0001:000057d8 ___free_lc_time 6ed067d8 f LIBCMT:inittime.obj 177 | 0001:00005c44 ___crtGetStringTypeA 6ed06c44 f LIBCMT:a_str.obj 178 | 0001:00005c82 _GetTableIndexFromLocaleName 6ed06c82 f LIBCMT:winapinls.obj 179 | 0001:00005cd0 ___crtDownlevelLocaleNameToLCID 6ed06cd0 f LIBCMT:winapinls.obj 180 | 0001:00005cfa ___crtLCMapStringEx 6ed06cfa f LIBCMT:winapinls.obj 181 | 0001:00005d46 ___wcsnicmp_ascii 6ed06d46 f LIBCMT:winapinls.obj 182 | 0001:00005dc0 __chkstk 6ed06dc0 f LIBCMT:chkstk.obj 183 | 0001:00005dc0 __alloca_probe 6ed06dc0 LIBCMT:chkstk.obj 184 | 0001:00005df0 _memcpy 6ed06df0 f LIBCMT:memcpy.obj 185 | 0001:00006434 _wcscat_s 6ed07434 f LIBCMT:wcscat_s.obj 186 | 0001:000064a0 _wcscpy_s 6ed074a0 f LIBCMT:wcscpy_s.obj 187 | 0001:000064fc _wcslen 6ed074fc f LIBCMT:wcslen.obj 188 | 0001:00006515 _wcsncpy_s 6ed07515 f LIBCMT:wcsncpy_s.obj 189 | 0001:000065d3 ___onexitinit 6ed075d3 f LIBCMT:onexit.obj 190 | 0001:00006602 __onexit 6ed07602 f LIBCMT:onexit.obj 191 | 0001:000066f8 _atexit 6ed076f8 f LIBCMT:onexit.obj 192 | 0001:0000670d __initp_misc_cfltcvt_tab 6ed0770d f LIBCMT:cmiscdat.obj 193 | 0001:0000672c ?terminate@@YAXXZ 6ed0772c f LIBCMT:hooks.obj 194 | 0001:00006760 __initp_eh_hooks 6ed07760 f LIBCMT:hooks.obj 195 | 0001:00006771 __initp_misc_purevirt 6ed07771 f LIBCMT:inithelp.obj 196 | 0001:0000677e __initp_misc_rand_s 6ed0777e f LIBCMT:rand_s.obj 197 | 0001:0000678b ___get_sigabrt 6ed0778b f LIBCMT:winsig.obj 198 | 0001:00006798 __initp_misc_winsig 6ed07798 f LIBCMT:winsig.obj 199 | 0001:000067b4 _raise 6ed077b4 f LIBCMT:winsig.obj 200 | 0001:000069a5 ___initstdio 6ed079a5 f LIBCMT:_file.obj 201 | 0001:00006a18 ___endstdio 6ed07a18 f LIBCMT:_file.obj 202 | 0001:00006a3f __lock_file 6ed07a3f f LIBCMT:_file.obj 203 | 0001:00006a7e __lock_file2 6ed07a7e f LIBCMT:_file.obj 204 | 0001:00006aae __unlock_file 6ed07aae f LIBCMT:_file.obj 205 | 0001:00006ae8 __unlock_file2 6ed07ae8 f LIBCMT:_file.obj 206 | 0001:00006b6b __ismbblead 6ed07b6b f LIBCMT:ismbbyte.obj 207 | 0001:00006b90 _strlen 6ed07b90 f LIBCMT:strlen.obj 208 | 0001:00006c1b _realloc 6ed07c1b f LIBCMT:realloc.obj 209 | 0001:00006cc6 __calloc_impl 6ed07cc6 f LIBCMT:calloc_impl.obj 210 | 0001:00006d40 __set_error_mode 6ed07d40 f LIBCMT:errmode.obj 211 | 0001:00006d80 ___crtMessageBoxW 6ed07d80 f LIBCMT:crtmboxw.obj 212 | 0001:00006f62 __msize 6ed07f62 f LIBCMT:msize.obj 213 | 0001:00006f93 __fptrap 6ed07f93 f LIBCMT:crt0fp.obj 214 | 0001:00006f9c _abort 6ed07f9c f LIBCMT:abort.obj 215 | 0001:00006fdf __fileno 6ed07fdf f LIBCMT:fileno.obj 216 | 0001:00007003 __isatty 6ed08003 f LIBCMT:isatty.obj 217 | 0001:00007057 __fflush_nolock 6ed08057 f LIBCMT:fflush.obj 218 | 0001:0000709d __flush 6ed0809d f LIBCMT:fflush.obj 219 | 0001:00007101 __flushall 6ed08101 f LIBCMT:fflush.obj 220 | 0001:000071ee __fcloseall 6ed081ee f LIBCMT:closeall.obj 221 | 0001:00007290 __aulldvrm 6ed08290 f LIBCMT:ulldvrm.obj 222 | 0001:00007325 __commit 6ed08325 f LIBCMT:commit.obj 223 | 0001:0000740b __write 6ed0840b f LIBCMT:write.obj 224 | 0001:000074ed __write_nolock 6ed084ed f LIBCMT:write.obj 225 | 0001:00007d17 __fclose_nolock 6ed08d17 f LIBCMT:fclose.obj 226 | 0001:00007d83 _fclose 6ed08d83 f LIBCMT:fclose.obj 227 | 0001:00007e00 __allmul 6ed08e00 f LIBCMT:llmul.obj 228 | 0001:00007e34 ___lock_fhandle 6ed08e34 f LIBCMT:osfinfo.obj 229 | 0001:00007ec0 __free_osfhnd 6ed08ec0 f LIBCMT:osfinfo.obj 230 | 0001:00007f46 __get_osfhandle 6ed08f46 f LIBCMT:osfinfo.obj 231 | 0001:00007fad __unlock_fhandle 6ed08fad f LIBCMT:osfinfo.obj 232 | 0001:00007fd3 __isleadbyte_l 6ed08fd3 f i LIBCMT:_wctype.obj 233 | 0001:00008009 _isleadbyte 6ed09009 f i LIBCMT:_wctype.obj 234 | 0001:0000801a __lseeki64_nolock 6ed0901a f LIBCMT:lseeki64.obj 235 | 0001:0000808b __mbtowc_l 6ed0908b f LIBCMT:mbtowc.obj 236 | 0001:0000817e _mbtowc 6ed0917e f LIBCMT:mbtowc.obj 237 | 0001:00008196 __putwch_nolock 6ed09196 f LIBCMT:putwch.obj 238 | 0001:000081d7 __close 6ed091d7 f LIBCMT:close.obj 239 | 0001:000082a1 __close_nolock 6ed092a1 f LIBCMT:close.obj 240 | 0001:0000833b __freebuf 6ed0933b f LIBCMT:_freebuf.obj 241 | 0001:0000836b ___termconout 6ed0936b f LIBCMT:initcon.obj 242 | 0001:00008382 ___initconout 6ed09382 f LIBCMT:initcon.obj 243 | 0001:000083a2 _RtlUnwind@16 6ed093a2 f kernel32:KERNEL32.dll 244 | 0001:000083a8 _IsProcessorFeaturePresent@4 6ed093a8 f kernel32:KERNEL32.dll 245 | 0001:000083ae ___ascii_stricmp 6ed093ae f LIBCMT:stricmp.obj 246 | 0001:000083e7 _stricmp 6ed093e7 f LIBCMT:stricmp.obj 247 | 0001:000083e7 __stricmp 6ed093e7 f LIBCMT:stricmp.obj 248 | 0001:0000842e __stricmp_l 6ed0942e f LIBCMT:stricmp.obj 249 | 0001:000084c1 __tolower_l 6ed094c1 f LIBCMT:tolower.obj 250 | 0001:00008602 __isctype_l 6ed09602 f LIBCMT:isctype.obj 251 | 0002:00000000 __imp__CheckTokenMembership@12 6ed0a000 advapi32:ADVAPI32.dll 252 | 0002:00000004 __imp__OpenThreadToken@16 6ed0a004 advapi32:ADVAPI32.dll 253 | 0002:00000008 __imp__LookupAccountNameA@28 6ed0a008 advapi32:ADVAPI32.dll 254 | 0002:0000000c \177ADVAPI32_NULL_THUNK_DATA 6ed0a00c advapi32:ADVAPI32.dll 255 | 0002:00000010 __imp__GetConsoleMode@8 6ed0a010 kernel32:KERNEL32.dll 256 | 0002:00000014 __imp__GetConsoleCP@0 6ed0a014 kernel32:KERNEL32.dll 257 | 0002:00000018 __imp__FlushFileBuffers@4 6ed0a018 kernel32:KERNEL32.dll 258 | 0002:0000001c __imp__HeapSize@12 6ed0a01c kernel32:KERNEL32.dll 259 | 0002:00000020 __imp__LoadLibraryW@4 6ed0a020 kernel32:KERNEL32.dll 260 | 0002:00000024 __imp__OutputDebugStringW@4 6ed0a024 kernel32:KERNEL32.dll 261 | 0002:00000028 __imp__HeapReAlloc@16 6ed0a028 kernel32:KERNEL32.dll 262 | 0002:0000002c __imp__LoadLibraryExW@12 6ed0a02c kernel32:KERNEL32.dll 263 | 0002:00000030 __imp__LCMapStringW@24 6ed0a030 kernel32:KERNEL32.dll 264 | 0002:00000034 __imp__SetStdHandle@8 6ed0a034 kernel32:KERNEL32.dll 265 | 0002:00000038 __imp__LeaveCriticalSection@4 6ed0a038 kernel32:KERNEL32.dll 266 | 0002:0000003c __imp__EnterCriticalSection@4 6ed0a03c kernel32:KERNEL32.dll 267 | 0002:00000040 __imp__GetModuleFileNameW@12 6ed0a040 kernel32:KERNEL32.dll 268 | 0002:00000044 __imp__WriteFile@20 6ed0a044 kernel32:KERNEL32.dll 269 | 0002:00000048 __imp__Sleep@4 6ed0a048 kernel32:KERNEL32.dll 270 | 0002:0000004c __imp__GetModuleHandleW@4 6ed0a04c kernel32:KERNEL32.dll 271 | 0002:00000050 __imp__TlsFree@4 6ed0a050 kernel32:KERNEL32.dll 272 | 0002:00000054 __imp__GetLastError@0 6ed0a054 kernel32:KERNEL32.dll 273 | 0002:00000058 __imp__GetVersionExA@4 6ed0a058 kernel32:KERNEL32.dll 274 | 0002:0000005c __imp__FreeLibrary@4 6ed0a05c kernel32:KERNEL32.dll 275 | 0002:00000060 __imp__GetProcAddress@8 6ed0a060 kernel32:KERNEL32.dll 276 | 0002:00000064 __imp__LoadLibraryA@4 6ed0a064 kernel32:KERNEL32.dll 277 | 0002:00000068 __imp__WideCharToMultiByte@32 6ed0a068 kernel32:KERNEL32.dll 278 | 0002:0000006c __imp__CloseHandle@4 6ed0a06c kernel32:KERNEL32.dll 279 | 0002:00000070 __imp__GetCurrentThread@0 6ed0a070 kernel32:KERNEL32.dll 280 | 0002:00000074 __imp__lstrcmpiA@8 6ed0a074 kernel32:KERNEL32.dll 281 | 0002:00000078 __imp__SetFilePointerEx@20 6ed0a078 kernel32:KERNEL32.dll 282 | 0002:0000007c __imp__WriteConsoleW@20 6ed0a07c kernel32:KERNEL32.dll 283 | 0002:00000080 __imp__GetStringTypeW@16 6ed0a080 kernel32:KERNEL32.dll 284 | 0002:00000084 __imp__InterlockedDecrement@4 6ed0a084 kernel32:KERNEL32.dll 285 | 0002:00000088 __imp__TlsSetValue@8 6ed0a088 kernel32:KERNEL32.dll 286 | 0002:0000008c __imp__TlsGetValue@4 6ed0a08c kernel32:KERNEL32.dll 287 | 0002:00000090 __imp__TlsAlloc@0 6ed0a090 kernel32:KERNEL32.dll 288 | 0002:00000094 __imp__TerminateProcess@8 6ed0a094 kernel32:KERNEL32.dll 289 | 0002:00000098 __imp__GetCurrentProcess@0 6ed0a098 kernel32:KERNEL32.dll 290 | 0002:0000009c __imp__RtlUnwind@16 6ed0a09c kernel32:KERNEL32.dll 291 | 0002:000000a0 __imp__GetCommandLineA@0 6ed0a0a0 kernel32:KERNEL32.dll 292 | 0002:000000a4 __imp__GetCurrentThreadId@0 6ed0a0a4 kernel32:KERNEL32.dll 293 | 0002:000000a8 __imp__IsDebuggerPresent@0 6ed0a0a8 kernel32:KERNEL32.dll 294 | 0002:000000ac __imp__IsProcessorFeaturePresent@4 6ed0a0ac kernel32:KERNEL32.dll 295 | 0002:000000b0 __imp__EncodePointer@4 6ed0a0b0 kernel32:KERNEL32.dll 296 | 0002:000000b4 __imp__DecodePointer@4 6ed0a0b4 kernel32:KERNEL32.dll 297 | 0002:000000b8 __imp__HeapFree@12 6ed0a0b8 kernel32:KERNEL32.dll 298 | 0002:000000bc __imp__HeapAlloc@12 6ed0a0bc kernel32:KERNEL32.dll 299 | 0002:000000c0 __imp__InterlockedIncrement@4 6ed0a0c0 kernel32:KERNEL32.dll 300 | 0002:000000c4 __imp__CreateFileW@28 6ed0a0c4 kernel32:KERNEL32.dll 301 | 0002:000000c8 __imp__IsValidCodePage@4 6ed0a0c8 kernel32:KERNEL32.dll 302 | 0002:000000cc __imp__GetACP@0 6ed0a0cc kernel32:KERNEL32.dll 303 | 0002:000000d0 __imp__GetOEMCP@0 6ed0a0d0 kernel32:KERNEL32.dll 304 | 0002:000000d4 __imp__GetCPInfo@8 6ed0a0d4 kernel32:KERNEL32.dll 305 | 0002:000000d8 __imp__MultiByteToWideChar@24 6ed0a0d8 kernel32:KERNEL32.dll 306 | 0002:000000dc __imp__SetLastError@4 6ed0a0dc kernel32:KERNEL32.dll 307 | 0002:000000e0 __imp__ExitProcess@4 6ed0a0e0 kernel32:KERNEL32.dll 308 | 0002:000000e4 __imp__GetModuleHandleExW@12 6ed0a0e4 kernel32:KERNEL32.dll 309 | 0002:000000e8 __imp__GetProcessHeap@0 6ed0a0e8 kernel32:KERNEL32.dll 310 | 0002:000000ec __imp__GetStdHandle@4 6ed0a0ec kernel32:KERNEL32.dll 311 | 0002:000000f0 __imp__GetFileType@4 6ed0a0f0 kernel32:KERNEL32.dll 312 | 0002:000000f4 __imp__InitializeCriticalSectionAndSpinCount@8 6ed0a0f4 kernel32:KERNEL32.dll 313 | 0002:000000f8 __imp__DeleteCriticalSection@4 6ed0a0f8 kernel32:KERNEL32.dll 314 | 0002:000000fc __imp__GetStartupInfoW@4 6ed0a0fc kernel32:KERNEL32.dll 315 | 0002:00000100 __imp__GetModuleFileNameA@12 6ed0a100 kernel32:KERNEL32.dll 316 | 0002:00000104 __imp__QueryPerformanceCounter@4 6ed0a104 kernel32:KERNEL32.dll 317 | 0002:00000108 __imp__GetCurrentProcessId@0 6ed0a108 kernel32:KERNEL32.dll 318 | 0002:0000010c __imp__GetSystemTimeAsFileTime@4 6ed0a10c kernel32:KERNEL32.dll 319 | 0002:00000110 __imp__GetEnvironmentStringsW@0 6ed0a110 kernel32:KERNEL32.dll 320 | 0002:00000114 __imp__FreeEnvironmentStringsW@4 6ed0a114 kernel32:KERNEL32.dll 321 | 0002:00000118 __imp__UnhandledExceptionFilter@4 6ed0a118 kernel32:KERNEL32.dll 322 | 0002:0000011c __imp__SetUnhandledExceptionFilter@4 6ed0a11c kernel32:KERNEL32.dll 323 | 0002:00000120 \177KERNEL32_NULL_THUNK_DATA 6ed0a120 kernel32:KERNEL32.dll 324 | 0002:00000124 __imp__apr_pool_userdata_get@12 6ed0a124 libapr-1:libapr-1.dll 325 | 0002:00000128 __imp__apr_pool_cleanup_register@16 6ed0a128 libapr-1:libapr-1.dll 326 | 0002:0000012c __imp__apr_psprintf 6ed0a12c libapr-1:libapr-1.dll 327 | 0002:00000130 __imp__apr_pool_userdata_setn@16 6ed0a130 libapr-1:libapr-1.dll 328 | 0002:00000134 __imp__apr_pool_cleanup_kill@12 6ed0a134 libapr-1:libapr-1.dll 329 | 0002:00000138 __imp__apr_pool_cleanup_null 6ed0a138 libapr-1:libapr-1.dll 330 | 0002:0000013c __imp__apr_table_get@8 6ed0a13c libapr-1:libapr-1.dll 331 | 0002:00000140 __imp__apr_pstrdup@8 6ed0a140 libapr-1:libapr-1.dll 332 | 0002:00000144 __imp__apr_table_setn@12 6ed0a144 libapr-1:libapr-1.dll 333 | 0002:00000148 __imp__apr_table_unset@8 6ed0a148 libapr-1:libapr-1.dll 334 | 0002:0000014c __imp__apr_table_addn@12 6ed0a14c libapr-1:libapr-1.dll 335 | 0002:00000150 __imp__apr_palloc@8 6ed0a150 libapr-1:libapr-1.dll 336 | 0002:00000154 \177libapr-1_NULL_THUNK_DATA 6ed0a154 libapr-1:libapr-1.dll 337 | 0002:00000158 __imp__apr_base64_encode_binary@12 6ed0a158 libaprutil-1:libaprutil-1.dll 338 | 0002:0000015c __imp__apr_base64_decode_len@4 6ed0a15c libaprutil-1:libaprutil-1.dll 339 | 0002:00000160 __imp__apr_base64_decode_binary@8 6ed0a160 libaprutil-1:libaprutil-1.dll 340 | 0002:00000164 __imp__apr_base64_encode_len@4 6ed0a164 libaprutil-1:libaprutil-1.dll 341 | 0002:00000168 \177libaprutil-1_NULL_THUNK_DATA 6ed0a168 libaprutil-1:libaprutil-1.dll 342 | 0002:0000016c __imp__ap_hook_post_config@16 6ed0a16c libhttpd:libhttpd.dll 343 | 0002:00000170 __imp__ap_add_version_component@8 6ed0a170 libhttpd:libhttpd.dll 344 | 0002:00000174 __imp__ap_set_string_slot 6ed0a174 libhttpd:libhttpd.dll 345 | 0002:00000178 __imp__ap_log_error_ 6ed0a178 libhttpd:libhttpd.dll 346 | 0002:0000017c __imp__ap_set_flag_slot 6ed0a17c libhttpd:libhttpd.dll 347 | 0002:00000180 __imp__ap_auth_name@4 6ed0a180 libhttpd:libhttpd.dll 348 | 0002:00000184 __imp__ap_getword_nulls@12 6ed0a184 libhttpd:libhttpd.dll 349 | 0002:00000188 __imp__ap_getword_white@8 6ed0a188 libhttpd:libhttpd.dll 350 | 0002:0000018c __imp__ap_getword_conf@8 6ed0a18c libhttpd:libhttpd.dll 351 | 0002:00000190 __imp__ap_log_rerror_ 6ed0a190 libhttpd:libhttpd.dll 352 | 0002:00000194 __imp__ap_auth_type@4 6ed0a194 libhttpd:libhttpd.dll 353 | 0002:00000198 __imp__ap_hook_check_authn@20 6ed0a198 libhttpd:libhttpd.dll 354 | 0002:0000019c __imp__ap_register_auth_provider@24 6ed0a19c libhttpd:libhttpd.dll 355 | 0002:000001a0 \177libhttpd_NULL_THUNK_DATA 6ed0a1a0 libhttpd:libhttpd.dll 356 | 0002:000001a4 __imp__CoInitializeEx@8 6ed0a1a4 ole32:ole32.dll 357 | 0002:000001a8 __imp__StringFromGUID2@12 6ed0a1a8 ole32:ole32.dll 358 | 0002:000001ac __imp__CoCreateGuid@4 6ed0a1ac ole32:ole32.dll 359 | 0002:000001b0 __imp__CoUninitialize@0 6ed0a1b0 ole32:ole32.dll 360 | 0002:000001b4 \177ole32_NULL_THUNK_DATA 6ed0a1b4 ole32:ole32.dll 361 | 0002:000001b8 ___xc_a 6ed0a1b8 LIBCMT:crt0init.obj 362 | 0002:000001bc ___xc_z 6ed0a1bc LIBCMT:crt0init.obj 363 | 0002:000001c0 ___xi_a 6ed0a1c0 LIBCMT:crt0init.obj 364 | 0002:000001d4 ___xi_z 6ed0a1d4 LIBCMT:crt0init.obj 365 | 0002:000001d8 ___xp_a 6ed0a1d8 LIBCMT:crt0init.obj 366 | 0002:000001e8 ___xp_z 6ed0a1e8 LIBCMT:crt0init.obj 367 | 0002:000001ec ___xt_a 6ed0a1ec LIBCMT:crt0init.obj 368 | 0002:000001f0 ___xt_z 6ed0a1f0 LIBCMT:crt0init.obj 369 | 0002:000001f8 ??_C@_0GI@EJLBJGBA@set?5to?5?8on?8?5if?5you?5want?5an?5alter@ 6ed0a1f8 mod_ntlm.obj 370 | 0002:00000260 ??_C@_0O@FFCGIANN@NTLMNotForced?$AA@ 6ed0a260 mod_ntlm.obj 371 | 0002:00000270 ??_C@_0JA@MOJFMJGN@Set?5to?5on?5to?5allow?5requests?5pass@ 6ed0a270 mod_ntlm.obj 372 | 0002:00000300 ??_C@_0DC@BACNAMII@C?3?2Apache_24_Module?2mod_authn_nt@ 6ed0a300 mod_ntlm.obj 373 | 0002:000004c0 ??_C@_08CJAJMIDD@NTLMAuth?$AA@ 6ed0a4c0 mod_ntlm.obj 374 | 0002:000004cc ??_C@_0DB@GGLJODGG@set?5to?5?8on?8?5to?5activate?5NTLM?5aut@ 6ed0a4cc mod_ntlm.obj 375 | 0002:00000500 ??_C@_0O@BDDDCOLB@NTLMOfferNTLM?$AA@ 6ed0a500 mod_ntlm.obj 376 | 0002:00000510 ??_C@_0HD@CCPCGOLD@set?5to?5?8off?8?5to?5allow?5access?5con@ 6ed0a510 mod_ntlm.obj 377 | 0002:00000584 ??_C@_0BC@ODNMODMH@NTLMAuthoritative?$AA@ 6ed0a584 mod_ntlm.obj 378 | 0002:00000598 ??_C@_0P@HLKKHJBG@NTLMOfferBasic?$AA@ 6ed0a598 mod_ntlm.obj 379 | 0002:000005a8 ??_C@_0HK@NGPAFFBG@set?5to?5?8on?8?5to?5allow?5the?5client?5@ 6ed0a5a8 mod_ntlm.obj 380 | 0002:00000624 ??_C@_0M@PAKJKNLI@NTLMPackage?$AA@ 6ed0a624 mod_ntlm.obj 381 | 0002:00000630 ??_C@_0EF@OEGKMLKI@set?5to?5the?5name?5of?5the?5package?5y@ 6ed0a630 mod_ntlm.obj 382 | 0002:00000678 ??_C@_0N@MBFILICG@NTLMPackages?$AA@ 6ed0a678 mod_ntlm.obj 383 | 0002:00000688 ??_C@_0L@DNCBAEBO@NTLMDomain?$AA@ 6ed0a688 mod_ntlm.obj 384 | 0002:00000698 ??_C@_0KA@FIJHFPFC@set?5to?5the?5domain?5you?5want?5users@ 6ed0a698 mod_ntlm.obj 385 | 0002:00000738 ??_C@_0P@BGCNPGFN@NTLMOmitDomain?$AA@ 6ed0a738 mod_ntlm.obj 386 | 0002:00000748 ??_C@_0GG@GIKHGEKP@set?5to?5?8on?8?5if?5you?5want?5the?5user@ 6ed0a748 mod_ntlm.obj 387 | 0002:000007b0 ??_C@_0BB@DDFFEIIC@NTLMUsernameCase?$AA@ 6ed0a7b0 mod_ntlm.obj 388 | 0002:000007c8 ??_C@_0MK@FGCMAICB@set?5to?5?8lower?8?5if?5you?5want?5the?5u@ 6ed0a7c8 mod_ntlm.obj 389 | 0002:00000894 ??_C@_0BD@MGIOMECN@NTLMBasicPreferred?$AA@ 6ed0a894 mod_ntlm.obj 390 | 0002:000008a8 ??_C@_0EH@LOKPLKFB@set?5to?5?8on?8?5if?5you?5want?5basic?5au@ 6ed0a8a8 mod_ntlm.obj 391 | 0002:000008f0 ??_C@_0O@OAPFJEHE@NTLMMSIE3Hack?$AA@ 6ed0a8f0 mod_ntlm.obj 392 | 0002:00000900 ??_C@_0EB@HDBCBLOJ@set?5to?5?8on?8?5if?5you?5expect?5MSIE?53@ 6ed0a900 mod_ntlm.obj 393 | 0002:00000944 ??_C@_0BD@JAMLPPPA@NTLMPerRequestAuth?$AA@ 6ed0a944 mod_ntlm.obj 394 | 0002:00000958 ??_C@_0EM@IJBEANLG@set?5to?5?8on?8?5if?5you?5want?5authoriz@ 6ed0a958 mod_ntlm.obj 395 | 0002:000009a4 ??_C@_0O@CAOJIPGF@NTLMChainAuth?$AA@ 6ed0a9a4 mod_ntlm.obj 396 | 0002:000009b4 ??_C@_04KGCGDDND@NTLM?$AA@ 6ed0a9b4 mod_ntlm.obj 397 | 0002:000009bc ??_C@_0N@CFDKBOMP@SECURITY?4DLL?$AA@ 6ed0a9bc mod_ntlm.obj 398 | 0002:000009cc ??_C@_0M@KNGJHLCL@SECUR32?4DLL?$AA@ 6ed0a9cc mod_ntlm.obj 399 | 0002:000009d8 ??_C@_0P@JGBLPPLN@mod_authn_ntlm?$AA@ 6ed0a9d8 mod_ntlm.obj 400 | 0002:000009e8 ??_C@_0DB@DNGJOEMJ@?$CFs?3?5could?5not?5load?5security?5supp@ 6ed0a9e8 mod_ntlm.obj 401 | 0002:00000a1c ??_C@_0BH@COAKKLLC@InitSecurityInterfaceA?$AA@ 6ed0aa1c mod_ntlm.obj 402 | 0002:00000a38 ??_C@_0EB@DLLDHBB@?$CFs?3?5could?5not?5locate?5security?5su@ 6ed0aa38 mod_ntlm.obj 403 | 0002:00000a80 ??_C@_0FI@DMPPIFOF@?$CFs?3?5could?5not?5get?5security?5suppo@ 6ed0aa80 mod_ntlm.obj 404 | 0002:00000ad8 ??_C@_0M@JKECGFBG@?$CFs?1?$CFd?4?$CFd?4?$CFd?$AA@ 6ed0aad8 mod_ntlm.obj 405 | 0002:00000ae4 ??_C@_01GBGANLPD@0?$AA@ 6ed0aae4 mod_ntlm.obj 406 | 0002:00000ae8 ??_C@_09NKMEKKDO@sspi?9user?$AA@ 6ed0aae8 mod_ntlm.obj 407 | 0002:00000af4 ??_C@_05MLOONBDD@authz?$AA@ 6ed0aaf4 mod_ntlm.obj 408 | 0002:00000afc ??_C@_0L@PHAINMDG@sspi?9group?$AA@ 6ed0aafc mod_ntlm.obj 409 | 0002:00000b08 ??_C@_0BA@OLNFJGPO@valid?9sspi?9user?$AA@ 6ed0ab08 mod_ntlm.obj 410 | 0002:00000b20 ??_C@_0EC@BAKCMLJN@access?5to?5?$CFs?5failed?0?5reason?3?5una@ 6ed0ab20 mod_ntlm_authentication.obj 411 | 0002:00000b68 ??_C@_0EB@HEHBMFIL@C?3?2Apache_24_Module?2mod_authn_nt@ 6ed0ab68 mod_ntlm_authentication.obj 412 | 0002:00000bac ??_C@_0CO@OHDFEEKP@user?5?$CFs?2?$CFs?3?5authentication?5failu@ 6ed0abac mod_ntlm_authentication.obj 413 | 0002:00000bdc ??_C@_0CL@MMFLFAJG@user?5?$CFs?3?5authentication?5failure?5@ 6ed0abdc mod_ntlm_authentication.obj 414 | 0002:00000c08 ??_C@_0DA@PBANOMLG@authentication?5failure?5for?5?$CC?$CFs?$CC?3@ 6ed0ac08 mod_ntlm_authentication.obj 415 | 0002:00000c38 ??_C@_00CNPNBAHC@?$AA@ 6ed0ac38 mod_ntlm_authentication.obj 416 | 0002:00000c3c ??_C@_0CC@JJBDPPLA@?0?5reason?3?5cannot?5generate?5contex@ 6ed0ac3c mod_ntlm_authentication.obj 417 | 0002:00000c60 ??_C@_0DF@EJCDKGML@access?5to?5?$CFs?5failed?0?5reason?3?5can@ 6ed0ac60 mod_ntlm_authentication.obj 418 | 0002:00000c98 ??_C@_05IIDIPOEN@Lower?$AA@ 6ed0ac98 mod_ntlm_authentication.obj 419 | 0002:00000ca0 ??_C@_05NDIGJFPE@Upper?$AA@ 6ed0aca0 mod_ntlm_authentication.obj 420 | 0002:00000ca8 ??_C@_0P@HOJGPHBA@Content?9Length?$AA@ 6ed0aca8 mod_ntlm_authentication.obj 421 | 0002:00000cb8 ??_C@_04HCJEIHPL@POST?$AA@ 6ed0acb8 mod_ntlm_authentication.obj 422 | 0002:00000cc0 ??_C@_0CI@CLEHMFKK@SSPI?3?5Testing?5for?5IE?5bug?0?5reques@ 6ed0acc0 mod_ntlm_authentication.obj 423 | 0002:00000ce8 ??_C@_0BP@ODGFBAEK@SSPI?3?5Found?5empty?5POST?5request?$AA@ 6ed0ace8 mod_ntlm_authentication.obj 424 | 0002:00000d08 ??_C@_0DM@NBCAOGC@access?5to?5?$CFs?5failed?0?5reason?3?5can@ 6ed0ad08 mod_ntlm_authentication.obj 425 | 0002:00000d44 ??_C@_04NCNBMHEJ@SSPI?$AA@ 6ed0ad44 mod_ntlm_authentication.obj 426 | 0002:00000d4c ??_C@_0CN@DJCPMHNP@SSPI00001?3?5Entering?5authenticate@ 6ed0ad4c mod_ntlm_authentication.obj 427 | 0002:00000d7c ??_C@_0DK@HEMEDLDL@SSPI00007?3?5access?5to?5?$CFs?5declined@ 6ed0ad7c mod_ntlm_authentication.obj 428 | 0002:00000db8 ??_C@_0EG@HAOICFIN@SSPI00002?3?5access?5to?5?$CFs?5failed?0?5@ 6ed0adb8 mod_ntlm_authentication.obj 429 | 0002:00000e00 ??_C@_0EM@KFLEGFLB@SSPI00008?3?5access?5to?5?$CFs?5declined@ 6ed0ae00 mod_ntlm_authentication.obj 430 | 0002:00000e4c ??_C@_0CE@CDLGEGNN@SSPI?3?7starting?5IE?5re?5authenticat@ 6ed0ae4c mod_ntlm_authentication.obj 431 | 0002:00000e70 ??_C@_0CG@JJJCFBNO@SSPI?3?5Optional?5auth?5exercised?5ph@ 6ed0ae70 mod_ntlm_authentication.obj 432 | 0002:00000e98 ??_C@_0BN@OHJBCHDO@NT?5AUTHORITY?2ANONYMOUS?5LOGON?$AA@ 6ed0ae98 mod_ntlm_authentication.obj 433 | 0002:00000eb8 ??_C@_05NIKDGMHP@Basic?$AA@ 6ed0aeb8 mod_ntlm_authentication.obj 434 | 0002:00000ec0 ??_C@_0CG@LCLPACBN@SSPI?3?5Optional?5auth?5exercised?5ph@ 6ed0aec0 mod_ntlm_authentication.obj 435 | 0002:00000ee8 ??_C@_0CG@KLKEDDFM@SSPI?3?5Optional?5auth?5exercised?5ph@ 6ed0aee8 mod_ntlm_authentication.obj 436 | 0002:00000f10 ??_C@_0CC@KBIGCAHF@SSPI00009?3?5Authenticated?5user?3?5?$CF@ 6ed0af10 mod_ntlm_authentication.obj 437 | 0002:00000f38 ??_C@_0CB@PJJBNJIA@CheckTokenMembership?$CI?$CJ?3?5error?5?$CFd@ 6ed0af38 mod_ntlm_authorization.obj 438 | 0002:00000f60 ??_C@_0EA@NHFAGAPM@C?3?2Apache_24_Module?2mod_authn_nt@ 6ed0af60 mod_ntlm_authorization.obj 439 | 0002:00000fa0 ??_C@_0BP@DNNKCMBJ@LookupAccountName?$CI2?$CJ?3?5error?5?$CFd?$AA@ 6ed0afa0 mod_ntlm_authorization.obj 440 | 0002:00000fc0 ??_C@_0DG@GIAMODNB@An?5error?5occured?5in?5is_member?$CI?$CJ?3@ 6ed0afc0 mod_ntlm_authorization.obj 441 | 0002:00000ff8 ??_C@_0BP@IABAEANH@LookupAccountName?$CI1?$CJ?3?5error?5?$CFd?$AA@ 6ed0aff8 mod_ntlm_authorization.obj 442 | 0002:00001018 ??_C@_0DI@NKLIDADG@SSPI00004?3?5Access?5to?5?$CFs?5failed?0?5@ 6ed0b018 mod_ntlm_authorization.obj 443 | 0002:00001050 ??_C@_0DO@FAJLOKHK@SSPI00005?3?5Access?5to?5?$CFs?5failed?0?5@ 6ed0b050 mod_ntlm_authorization.obj 444 | 0002:00001090 ??_C@_0EB@CMKGJHBD@SSPI00006?3?5Access?5to?5?$CFs?5failed?0?5@ 6ed0b090 mod_ntlm_authorization.obj 445 | 0002:000010d8 ??_C@_0GN@HEDGGILG@SSPI00003?3?5access?5to?5?$CFs?5failed?0?5@ 6ed0b0d8 mod_ntlm_authorization.obj 446 | 0002:0000114c ??_C@_0BE@DCLKKIPG@Proxy?9Authorization?$AA@ 6ed0b14c mod_ntlm_interface.obj 447 | 0002:00001160 ??_C@_0O@NAFGPKMI@Authorization?$AA@ 6ed0b160 mod_ntlm_interface.obj 448 | 0002:00001170 ??_C@_0BD@GKJFGNG@Proxy?9Authenticate?$AA@ 6ed0b170 mod_ntlm_interface.obj 449 | 0002:00001184 ??_C@_0BB@KEDJJIFI@WWW?9Authenticate?$AA@ 6ed0b184 mod_ntlm_interface.obj 450 | 0002:00001198 ??_C@_0DP@NFFGPLN@client?5used?5wrong?5authentication@ 6ed0b198 mod_ntlm_interface.obj 451 | 0002:000011d8 ??_C@_0DM@BLDICKBA@C?3?2Apache_24_Module?2mod_authn_nt@ 6ed0b1d8 mod_ntlm_interface.obj 452 | 0002:00001214 ??_C@_0BB@GEFAMELB@Basic?5realm?$DN?$CC?$CFs?$CC?$AA@ 6ed0b214 mod_ntlm_interface.obj 453 | 0002:00001228 ??_C@_05DNIIFBMG@?$CFs?5?$CFs?$AA@ 6ed0b228 mod_ntlm_interface.obj 454 | 0002:00001230 __pRawDllMain 6ed0b230 LIBCMT:dllcrt0.obj 455 | 0002:00001230 __pDefaultRawDllMain 6ed0b230 LIBCMT:dllcrt0.obj 456 | 0002:0000124c ??_C@_1M@HPNHIDJI@?$AAj?$AAa?$AA?9?$AAJ?$AAP?$AA?$AA@ 6ed0b24c LIBCMT:mbctype.obj 457 | 0002:00001258 ??_C@_1M@BIBDDEMK@?$AAz?$AAh?$AA?9?$AAC?$AAN?$AA?$AA@ 6ed0b258 LIBCMT:mbctype.obj 458 | 0002:00001264 ??_C@_1M@JLOOOEGK@?$AAk?$AAo?$AA?9?$AAK?$AAR?$AA?$AA@ 6ed0b264 LIBCMT:mbctype.obj 459 | 0002:00001270 ??_C@_1M@CLNBBOPM@?$AAz?$AAh?$AA?9?$AAT?$AAW?$AA?$AA@ 6ed0b270 LIBCMT:mbctype.obj 460 | 0002:0000127c ??_C@_03KOEHGMDN@Sun?$AA@ 6ed0b27c LIBCMT:nlsdata.obj 461 | 0002:00001280 ??_C@_03PDAGKDH@Mon?$AA@ 6ed0b280 LIBCMT:nlsdata.obj 462 | 0002:00001284 ??_C@_03NAGEINEP@Tue?$AA@ 6ed0b284 LIBCMT:nlsdata.obj 463 | 0002:00001288 ??_C@_03MHOMLAJA@Wed?$AA@ 6ed0b288 LIBCMT:nlsdata.obj 464 | 0002:0000128c ??_C@_03IOFIKPDN@Thu?$AA@ 6ed0b28c LIBCMT:nlsdata.obj 465 | 0002:00001290 ??_C@_03IDIOELNC@Fri?$AA@ 6ed0b290 LIBCMT:nlsdata.obj 466 | 0002:00001294 ??_C@_03FEFJNEK@Sat?$AA@ 6ed0b294 LIBCMT:nlsdata.obj 467 | 0002:00001298 ??_C@_06OOPIFAJ@Sunday?$AA@ 6ed0b298 LIBCMT:nlsdata.obj 468 | 0002:000012a0 ??_C@_06JLEDEDGH@Monday?$AA@ 6ed0b2a0 LIBCMT:nlsdata.obj 469 | 0002:000012a8 ??_C@_07BAAGCFCM@Tuesday?$AA@ 6ed0b2a8 LIBCMT:nlsdata.obj 470 | 0002:000012b0 ??_C@_09DLIGFAKA@Wednesday?$AA@ 6ed0b2b0 LIBCMT:nlsdata.obj 471 | 0002:000012bc ??_C@_08HACCIKIA@Thursday?$AA@ 6ed0b2bc LIBCMT:nlsdata.obj 472 | 0002:000012c8 ??_C@_06JECMNKMI@Friday?$AA@ 6ed0b2c8 LIBCMT:nlsdata.obj 473 | 0002:000012d0 ??_C@_08INBOOONO@Saturday?$AA@ 6ed0b2d0 LIBCMT:nlsdata.obj 474 | 0002:000012dc ??_C@_03JIHJHPIE@Jan?$AA@ 6ed0b2dc LIBCMT:nlsdata.obj 475 | 0002:000012e0 ??_C@_03HJBDCHOM@Feb?$AA@ 6ed0b2e0 LIBCMT:nlsdata.obj 476 | 0002:000012e4 ??_C@_03ODNJBKGA@Mar?$AA@ 6ed0b2e4 LIBCMT:nlsdata.obj 477 | 0002:000012e8 ??_C@_03LEOLGMJP@Apr?$AA@ 6ed0b2e8 LIBCMT:nlsdata.obj 478 | 0002:000012ec ??_C@_03CNMDKL@May?$AA@ 6ed0b2ec LIBCMT:nlsdata.obj 479 | 0002:000012f0 ??_C@_03IDFGHECI@Jun?$AA@ 6ed0b2f0 LIBCMT:nlsdata.obj 480 | 0002:000012f4 ??_C@_03LBGABGKK@Jul?$AA@ 6ed0b2f4 LIBCMT:nlsdata.obj 481 | 0002:000012f8 ??_C@_03IFJFEIGA@Aug?$AA@ 6ed0b2f8 LIBCMT:nlsdata.obj 482 | 0002:000012fc ??_C@_03GGCAPAJC@Sep?$AA@ 6ed0b2fc LIBCMT:nlsdata.obj 483 | 0002:00001300 ??_C@_03BMAOKBAD@Oct?$AA@ 6ed0b300 LIBCMT:nlsdata.obj 484 | 0002:00001304 ??_C@_03JPJOFNIA@Nov?$AA@ 6ed0b304 LIBCMT:nlsdata.obj 485 | 0002:00001308 ??_C@_03MKABNOCG@Dec?$AA@ 6ed0b308 LIBCMT:nlsdata.obj 486 | 0002:0000130c ??_C@_07CGJPFGJA@January?$AA@ 6ed0b30c LIBCMT:nlsdata.obj 487 | 0002:00001314 ??_C@_08GNJGEPFN@February?$AA@ 6ed0b314 LIBCMT:nlsdata.obj 488 | 0002:00001320 ??_C@_05HPCKOFNC@March?$AA@ 6ed0b320 LIBCMT:nlsdata.obj 489 | 0002:00001328 ??_C@_05DMJDNLEJ@April?$AA@ 6ed0b328 LIBCMT:nlsdata.obj 490 | 0002:00001330 ??_C@_04CNLMGBGM@June?$AA@ 6ed0b330 LIBCMT:nlsdata.obj 491 | 0002:00001338 ??_C@_04MIEPOIFP@July?$AA@ 6ed0b338 LIBCMT:nlsdata.obj 492 | 0002:00001340 ??_C@_06LBBHFDDG@August?$AA@ 6ed0b340 LIBCMT:nlsdata.obj 493 | 0002:00001348 ??_C@_09BHHEALKD@September?$AA@ 6ed0b348 LIBCMT:nlsdata.obj 494 | 0002:00001354 ??_C@_07JJNFCEND@October?$AA@ 6ed0b354 LIBCMT:nlsdata.obj 495 | 0002:0000135c ??_C@_08HCHEGEOA@November?$AA@ 6ed0b35c LIBCMT:nlsdata.obj 496 | 0002:00001368 ??_C@_08EDHMEBNP@December?$AA@ 6ed0b368 LIBCMT:nlsdata.obj 497 | 0002:00001374 ??_C@_02DEDBPAFC@AM?$AA@ 6ed0b374 LIBCMT:nlsdata.obj 498 | 0002:00001378 ??_C@_02CJNFDJBF@PM?$AA@ 6ed0b378 LIBCMT:nlsdata.obj 499 | 0002:0000137c ??_C@_08BPBNCDIB@MM?1dd?1yy?$AA@ 6ed0b37c LIBCMT:nlsdata.obj 500 | 0002:00001388 ??_C@_0BE@CKGJFCPC@dddd?0?5MMMM?5dd?0?5yyyy?$AA@ 6ed0b388 LIBCMT:nlsdata.obj 501 | 0002:0000139c ??_C@_08JCCMCCIL@HH?3mm?3ss?$AA@ 6ed0b39c LIBCMT:nlsdata.obj 502 | 0002:000013a8 ??_C@_17MBGCMIPB@?$AAS?$AAu?$AAn?$AA?$AA@ 6ed0b3a8 LIBCMT:nlsdata.obj 503 | 0002:000013b0 ??_C@_17KBOMKBF@?$AAM?$AAo?$AAn?$AA?$AA@ 6ed0b3b0 LIBCMT:nlsdata.obj 504 | 0002:000013b8 ??_C@_17BMKGEGOJ@?$AAT?$AAu?$AAe?$AA?$AA@ 6ed0b3b8 LIBCMT:nlsdata.obj 505 | 0002:000013c0 ??_C@_17CJEDCEPE@?$AAW?$AAe?$AAd?$AA?$AA@ 6ed0b3c0 LIBCMT:nlsdata.obj 506 | 0002:000013c8 ??_C@_17PDPHAADD@?$AAT?$AAh?$AAu?$AA?$AA@ 6ed0b3c8 LIBCMT:nlsdata.obj 507 | 0002:000013d0 ??_C@_17HFOLPPLP@?$AAF?$AAr?$AAi?$AA?$AA@ 6ed0b3d0 LIBCMT:nlsdata.obj 508 | 0002:000013d8 ??_C@_17GGIBDPIH@?$AAS?$AAa?$AAt?$AA?$AA@ 6ed0b3d8 LIBCMT:nlsdata.obj 509 | 0002:000013e0 ??_C@_1O@IHNHDHPB@?$AAS?$AAu?$AAn?$AAd?$AAa?$AAy?$AA?$AA@ 6ed0b3e0 LIBCMT:nlsdata.obj 510 | 0002:000013f0 ??_C@_1O@MMNBFLIA@?$AAM?$AAo?$AAn?$AAd?$AAa?$AAy?$AA?$AA@ 6ed0b3f0 LIBCMT:nlsdata.obj 511 | 0002:00001400 ??_C@_1BA@ENFBFFEK@?$AAT?$AAu?$AAe?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 6ed0b400 LIBCMT:nlsdata.obj 512 | 0002:00001410 ??_C@_1BE@EBOGMDOH@?$AAW?$AAe?$AAd?$AAn?$AAe?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 6ed0b410 LIBCMT:nlsdata.obj 513 | 0002:00001424 ??_C@_1BC@HHMNLIHE@?$AAT?$AAh?$AAu?$AAr?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 6ed0b424 LIBCMT:nlsdata.obj 514 | 0002:00001438 ??_C@_1O@PDICJHAG@?$AAF?$AAr?$AAi?$AAd?$AAa?$AAy?$AA?$AA@ 6ed0b438 LIBCMT:nlsdata.obj 515 | 0002:00001448 ??_C@_1BC@ENMNNPAJ@?$AAS?$AAa?$AAt?$AAu?$AAr?$AAd?$AAa?$AAy?$AA?$AA@ 6ed0b448 LIBCMT:nlsdata.obj 516 | 0002:0000145c ??_C@_17DKNBKCHM@?$AAJ?$AAa?$AAn?$AA?$AA@ 6ed0b45c LIBCMT:nlsdata.obj 517 | 0002:00001464 ??_C@_17LMDJEKJN@?$AAF?$AAe?$AAb?$AA?$AA@ 6ed0b464 LIBCMT:nlsdata.obj 518 | 0002:0000146c ??_C@_17CKNLEDEC@?$AAM?$AAa?$AAr?$AA?$AA@ 6ed0b46c LIBCMT:nlsdata.obj 519 | 0002:00001474 ??_C@_17LFPOIHDD@?$AAA?$AAp?$AAr?$AA?$AA@ 6ed0b474 LIBCMT:nlsdata.obj 520 | 0002:0000147c ??_C@_17PNNKMEED@?$AAM?$AAa?$AAy?$AA?$AA@ 6ed0b47c LIBCMT:nlsdata.obj 521 | 0002:00001484 ??_C@_17KCJGOCPB@?$AAJ?$AAu?$AAn?$AA?$AA@ 6ed0b484 LIBCMT:nlsdata.obj 522 | 0002:0000148c ??_C@_17IJPCKHK@?$AAJ?$AAu?$AAl?$AA?$AA@ 6ed0b48c LIBCMT:nlsdata.obj 523 | 0002:00001494 ??_C@_17ICPELBCN@?$AAA?$AAu?$AAg?$AA?$AA@ 6ed0b494 LIBCMT:nlsdata.obj 524 | 0002:0000149c ??_C@_17HCHCOKMG@?$AAS?$AAe?$AAp?$AA?$AA@ 6ed0b49c LIBCMT:nlsdata.obj 525 | 0002:000014a4 ??_C@_17FNLKOI@?$AAO?$AAc?$AAt?$AA?$AA@ 6ed0b4a4 LIBCMT:nlsdata.obj 526 | 0002:000014ac ??_C@_17BBDMLCIG@?$AAN?$AAo?$AAv?$AA?$AA@ 6ed0b4ac LIBCMT:nlsdata.obj 527 | 0002:000014b4 ??_C@_17EGKACKIF@?$AAD?$AAe?$AAc?$AA?$AA@ 6ed0b4b4 LIBCMT:nlsdata.obj 528 | 0002:000014bc ??_C@_1BA@EFMEIEBA@?$AAJ?$AAa?$AAn?$AAu?$AAa?$AAr?$AAy?$AA?$AA@ 6ed0b4bc LIBCMT:nlsdata.obj 529 | 0002:000014cc ??_C@_1BC@JGDDFFAM@?$AAF?$AAe?$AAb?$AAr?$AAu?$AAa?$AAr?$AAy?$AA?$AA@ 6ed0b4cc LIBCMT:nlsdata.obj 530 | 0002:000014e0 ??_C@_1M@IKEENEDF@?$AAM?$AAa?$AAr?$AAc?$AAh?$AA?$AA@ 6ed0b4e0 LIBCMT:nlsdata.obj 531 | 0002:000014ec ??_C@_1M@GJNLMHFD@?$AAA?$AAp?$AAr?$AAi?$AAl?$AA?$AA@ 6ed0b4ec LIBCMT:nlsdata.obj 532 | 0002:000014f8 ??_C@_19EPFLPGAP@?$AAJ?$AAu?$AAn?$AAe?$AA?$AA@ 6ed0b4f8 LIBCMT:nlsdata.obj 533 | 0002:00001504 ??_C@_19BIFMLPCD@?$AAJ?$AAu?$AAl?$AAy?$AA?$AA@ 6ed0b504 LIBCMT:nlsdata.obj 534 | 0002:00001510 ??_C@_1O@PAHLKOAC@?$AAA?$AAu?$AAg?$AAu?$AAs?$AAt?$AA?$AA@ 6ed0b510 LIBCMT:nlsdata.obj 535 | 0002:00001520 ??_C@_1BE@DKAAMBJL@?$AAS?$AAe?$AAp?$AAt?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 6ed0b520 LIBCMT:nlsdata.obj 536 | 0002:00001534 ??_C@_1BA@EPANDLNG@?$AAO?$AAc?$AAt?$AAo?$AAb?$AAe?$AAr?$AA?$AA@ 6ed0b534 LIBCMT:nlsdata.obj 537 | 0002:00001544 ??_C@_1BC@BGLIFPF@?$AAN?$AAo?$AAv?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 6ed0b544 LIBCMT:nlsdata.obj 538 | 0002:00001558 ??_C@_1BC@FEMKIFH@?$AAD?$AAe?$AAc?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 6ed0b558 LIBCMT:nlsdata.obj 539 | 0002:0000156c ??_C@_15ODEHAHHF@?$AAA?$AAM?$AA?$AA@ 6ed0b56c LIBCMT:nlsdata.obj 540 | 0002:00001574 ??_C@_15CLMNNGEL@?$AAP?$AAM?$AA?$AA@ 6ed0b574 LIBCMT:nlsdata.obj 541 | 0002:0000157c ??_C@_1BC@IEBCMHCM@?$AAM?$AAM?$AA?1?$AAd?$AAd?$AA?1?$AAy?$AAy?$AA?$AA@ 6ed0b57c LIBCMT:nlsdata.obj 542 | 0002:00001590 ??_C@_1CI@KNAKOEBC@?$AAd?$AAd?$AAd?$AAd?$AA?0?$AA?5?$AAM?$AAM?$AAM?$AAM?$AA?5?$AAd?$AAd?$AA?0?$AA?5?$AAy?$AAy?$AAy?$AAy?$AA?$AA@ 6ed0b590 LIBCMT:nlsdata.obj 543 | 0002:000015b8 ??_C@_1BC@GDGBMEMK@?$AAH?$AAH?$AA?3?$AAm?$AAm?$AA?3?$AAs?$AAs?$AA?$AA@ 6ed0b5b8 LIBCMT:nlsdata.obj 544 | 0002:000015cc ??_C@_1M@BMHNFIME@?$AAe?$AAn?$AA?9?$AAU?$AAS?$AA?$AA@ 6ed0b5cc LIBCMT:nlsdata.obj 545 | 0002:00001658 __XcptActTab 6ed0b658 LIBCMT:winxfltr.obj 546 | 0002:000016e8 __XcptActTabCount 6ed0b6e8 LIBCMT:winxfltr.obj 547 | 0002:000016ec __XcptActTabSize 6ed0b6ec LIBCMT:winxfltr.obj 548 | 0002:000016f0 __First_FPE_Indx 6ed0b6f0 LIBCMT:winxfltr.obj 549 | 0002:000016f4 __Num_FPE 6ed0b6f4 LIBCMT:winxfltr.obj 550 | 0002:000016f8 ??_C@_1BI@BGOHAHKC@?$AAm?$AAs?$AAc?$AAo?$AAr?$AAe?$AAe?$AA?4?$AAd?$AAl?$AAl?$AA?$AA@ 6ed0b6f8 LIBCMT:crt0dat.obj 551 | 0002:00001710 ??_C@_0P@MIGLKIOC@CorExitProcess?$AA@ 6ed0b710 LIBCMT:crt0dat.obj 552 | 0002:00001720 ??_C@_1BK@MGMFAEKH@?$AAk?$AAe?$AAr?$AAn?$AAe?$AAl?$AA3?$AA2?$AA?4?$AAd?$AAl?$AAl?$AA?$AA@ 6ed0b720 LIBCMT:winapisupp.obj 553 | 0002:0000173c ??_C@_08KNHFBNJ@FlsAlloc?$AA@ 6ed0b73c LIBCMT:winapisupp.obj 554 | 0002:00001748 ??_C@_07PEJMOBNF@FlsFree?$AA@ 6ed0b748 LIBCMT:winapisupp.obj 555 | 0002:00001750 ??_C@_0M@GDNOONDI@FlsGetValue?$AA@ 6ed0b750 LIBCMT:winapisupp.obj 556 | 0002:0000175c ??_C@_0M@JCPCPOEF@FlsSetValue?$AA@ 6ed0b75c LIBCMT:winapisupp.obj 557 | 0002:00001768 ??_C@_0BM@HCFOFFN@InitializeCriticalSectionEx?$AA@ 6ed0b768 LIBCMT:winapisupp.obj 558 | 0002:00001784 ??_C@_0BD@KIEEOEEH@CreateSemaphoreExW?$AA@ 6ed0b784 LIBCMT:winapisupp.obj 559 | 0002:00001798 ??_C@_0BI@BKLFFAPO@SetThreadStackGuarantee?$AA@ 6ed0b798 LIBCMT:winapisupp.obj 560 | 0002:000017b0 ??_C@_0BG@OGFAJCKC@CreateThreadpoolTimer?$AA@ 6ed0b7b0 LIBCMT:winapisupp.obj 561 | 0002:000017c8 ??_C@_0BD@LPLEMMDI@SetThreadpoolTimer?$AA@ 6ed0b7c8 LIBCMT:winapisupp.obj 562 | 0002:000017dc ??_C@_0CA@FMNJENH@WaitForThreadpoolTimerCallbacks?$AA@ 6ed0b7dc LIBCMT:winapisupp.obj 563 | 0002:000017fc ??_C@_0BF@DCFCCNOC@CloseThreadpoolTimer?$AA@ 6ed0b7fc LIBCMT:winapisupp.obj 564 | 0002:00001814 ??_C@_0BF@FLABGKKM@CreateThreadpoolWait?$AA@ 6ed0b814 LIBCMT:winapisupp.obj 565 | 0002:0000182c ??_C@_0BC@MGCOHNA@SetThreadpoolWait?$AA@ 6ed0b82c LIBCMT:winapisupp.obj 566 | 0002:00001840 ??_C@_0BE@OCIOMIMP@CloseThreadpoolWait?$AA@ 6ed0b840 LIBCMT:winapisupp.obj 567 | 0002:00001854 ??_C@_0BJ@LKGHFHBO@FlushProcessWriteBuffers?$AA@ 6ed0b854 LIBCMT:winapisupp.obj 568 | 0002:00001870 ??_C@_0BP@KALKKPMO@FreeLibraryWhenCallbackReturns?$AA@ 6ed0b870 LIBCMT:winapisupp.obj 569 | 0002:00001890 ??_C@_0BK@DFNBACLA@GetCurrentProcessorNumber?$AA@ 6ed0b890 LIBCMT:winapisupp.obj 570 | 0002:000018ac ??_C@_0BP@KHGALBC@GetLogicalProcessorInformation?$AA@ 6ed0b8ac LIBCMT:winapisupp.obj 571 | 0002:000018cc ??_C@_0BE@FKKLLFLM@CreateSymbolicLinkW?$AA@ 6ed0b8cc LIBCMT:winapisupp.obj 572 | 0002:000018e0 ??_C@_0BJ@OHNKDLIJ@SetDefaultDllDirectories?$AA@ 6ed0b8e0 LIBCMT:winapisupp.obj 573 | 0002:000018fc ??_C@_0BE@LJANKFHF@EnumSystemLocalesEx?$AA@ 6ed0b8fc LIBCMT:winapisupp.obj 574 | 0002:00001910 ??_C@_0BA@IHGNDAEB@CompareStringEx?$AA@ 6ed0b910 LIBCMT:winapisupp.obj 575 | 0002:00001920 ??_C@_0BA@EPCJIIPD@GetDateFormatEx?$AA@ 6ed0b920 LIBCMT:winapisupp.obj 576 | 0002:00001930 ??_C@_0BA@ONOKGCMP@GetLocaleInfoEx?$AA@ 6ed0b930 LIBCMT:winapisupp.obj 577 | 0002:00001940 ??_C@_0BA@CIJJKCJJ@GetTimeFormatEx?$AA@ 6ed0b940 LIBCMT:winapisupp.obj 578 | 0002:00001950 ??_C@_0BJ@PBCCBIPI@GetUserDefaultLocaleName?$AA@ 6ed0b950 LIBCMT:winapisupp.obj 579 | 0002:0000196c ??_C@_0BC@CELBKLLA@IsValidLocaleName?$AA@ 6ed0b96c LIBCMT:winapisupp.obj 580 | 0002:00001980 ??_C@_0O@KKBNKAPF@LCMapStringEx?$AA@ 6ed0b980 LIBCMT:winapisupp.obj 581 | 0002:00001990 ??_C@_0BE@JOGNEJCI@GetCurrentPackageId?$AA@ 6ed0b990 LIBCMT:winapisupp.obj 582 | 0002:000019a8 ??_C@_1FE@LLNEDJMD@?$AAR?$AA6?$AA0?$AA0?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAa?$AAr@ 6ed0b9a8 LIBCMT:crt0msg.obj 583 | 0002:00001a00 ??_C@_1FI@HONFMGBI@?$AAR?$AA6?$AA0?$AA0?$AA9?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAe?$AAn@ 6ed0ba00 LIBCMT:crt0msg.obj 584 | 0002:00001a58 ??_C@_1EG@BEHAGFJD@?$AAR?$AA6?$AA0?$AA1?$AA0?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAa?$AAb?$AAo?$AAr?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAh?$AAa?$AAs?$AA?5?$AAb?$AAe?$AAe?$AAn?$AA?5?$AAc?$AAa?$AAl?$AAl?$AAe?$AAd@ 6ed0ba58 LIBCMT:crt0msg.obj 585 | 0002:00001aa0 ??_C@_1FI@LOGNIKDM@?$AAR?$AA6?$AA0?$AA1?$AA6?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAt?$AAh@ 6ed0baa0 LIBCMT:crt0msg.obj 586 | 0002:00001af8 ??_C@_1FK@BEOGODMC@?$AAR?$AA6?$AA0?$AA1?$AA7?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAe?$AAx?$AAp?$AAe?$AAc?$AAt?$AAe?$AAd?$AA?5?$AAm?$AAu?$AAl?$AAt?$AAi?$AAt?$AAh?$AAr?$AAe?$AAa?$AAd?$AA?5@ 6ed0baf8 LIBCMT:crt0msg.obj 587 | 0002:00001b58 ??_C@_1EC@JIBHAOPH@?$AAR?$AA6?$AA0?$AA1?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAe?$AAx?$AAp?$AAe?$AAc?$AAt?$AAe?$AAd?$AA?5?$AAh?$AAe?$AAa?$AAp?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6@ 6ed0bb58 LIBCMT:crt0msg.obj 588 | 0002:00001ba0 ??_C@_1FC@ECHBIFBC@?$AAR?$AA6?$AA0?$AA1?$AA9?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAt?$AAo?$AA?5?$AAo?$AAp?$AAe?$AAn?$AA?5?$AAc?$AAo?$AAn?$AAs?$AAo?$AAl?$AAe?$AA?5@ 6ed0bba0 LIBCMT:crt0msg.obj 589 | 0002:00001bf8 ??_C@_1GK@FHCKBEFA@?$AAR?$AA6?$AA0?$AA2?$AA4?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AA_?$AAo@ 6ed0bbf8 LIBCMT:crt0msg.obj 590 | 0002:00001c68 ??_C@_1EM@MAADIHMB@?$AAR?$AA6?$AA0?$AA2?$AA5?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAp?$AAu?$AAr?$AAe?$AA?5?$AAv?$AAi?$AAr?$AAt?$AAu?$AAa?$AAl?$AA?5?$AAf?$AAu?$AAn?$AAc?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAc@ 6ed0bc68 LIBCMT:crt0msg.obj 591 | 0002:00001cb8 ??_C@_1GK@MCAAGJMO@?$AAR?$AA6?$AA0?$AA2?$AA6?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAs?$AAt@ 6ed0bcb8 LIBCMT:crt0msg.obj 592 | 0002:00001d28 ??_C@_1GK@MFGOKLAG@?$AAR?$AA6?$AA0?$AA2?$AA7?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAl?$AAo@ 6ed0bd28 LIBCMT:crt0msg.obj 593 | 0002:00001d98 ??_C@_1EK@HHFLMAOL@?$AAR?$AA6?$AA0?$AA2?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAt?$AAo?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AA?5?$AAh?$AAe@ 6ed0bd98 LIBCMT:crt0msg.obj 594 | 0002:00001de4 ??_C@_1DO@BMFCDCD@?$AAR?$AA6?$AA0?$AA3?$AA0?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAC?$AAR?$AAT?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AAd?$AA?$AN?$AA?6?$AA?$AA@ 6ed0bde4 LIBCMT:crt0msg.obj 595 | 0002:00001e28 ??_C@_1MG@ENCOOIDF@?$AAR?$AA6?$AA0?$AA3?$AA1?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAA?$AAt?$AAt?$AAe?$AAm?$AAp?$AAt?$AA?5?$AAt?$AAo?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AA?5?$AAt@ 6ed0be28 LIBCMT:crt0msg.obj 596 | 0002:00001ef0 ??_C@_1GG@GOPILAJP@?$AAR?$AA6?$AA0?$AA3?$AA2?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAl?$AAo@ 6ed0bef0 LIBCMT:crt0msg.obj 597 | 0002:00001f58 ??_C@_1BOO@KGEDBGAJ@?$AAR?$AA6?$AA0?$AA3?$AA3?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAA?$AAt?$AAt?$AAe?$AAm?$AAp?$AAt?$AA?5?$AAt?$AAo?$AA?5?$AAu?$AAs?$AAe?$AA?5?$AAM?$AAS?$AAI?$AAL?$AA?5?$AAc?$AAo?$AAd@ 6ed0bf58 LIBCMT:crt0msg.obj 598 | 0002:00002148 ??_C@_1GG@MKFPEKFO@?$AAR?$AA6?$AA0?$AA3?$AA4?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAi?$AAn?$AAc?$AAo?$AAn?$AAs?$AAi?$AAs?$AAt?$AAe?$AAn?$AAt?$AA?5?$AAo?$AAn?$AAe?$AAx?$AAi?$AAt?$AA?5?$AAb?$AAe?$AAg@ 6ed0c148 LIBCMT:crt0msg.obj 599 | 0002:000021b0 ??_C@_1BO@BFCDCGC@?$AAD?$AAO?$AAM?$AAA?$AAI?$AAN?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 6ed0c1b0 LIBCMT:crt0msg.obj 600 | 0002:000021d0 ??_C@_1BK@KMOMNAAI@?$AAS?$AAI?$AAN?$AAG?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 6ed0c1d0 LIBCMT:crt0msg.obj 601 | 0002:000021ec ??_C@_1BM@JBBEPPHI@?$AAT?$AAL?$AAO?$AAS?$AAS?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 6ed0c1ec LIBCMT:crt0msg.obj 602 | 0002:00002208 ??_C@_15JNBOKNOG@?$AA?$AN?$AA?6?$AA?$AA@ 6ed0c208 LIBCMT:crt0msg.obj 603 | 0002:00002210 ??_C@_1BO@BKOMIGKJ@?$AAr?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?5?$AA?$AA@ 6ed0c210 LIBCMT:crt0msg.obj 604 | 0002:000022e8 ??_C@_1FK@PGACCAFB@?$AAR?$AA6?$AA0?$AA0?$AA2?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAf?$AAl?$AAo?$AAa?$AAt?$AAi?$AAn?$AAg?$AA?5?$AAp?$AAo?$AAi?$AAn?$AAt?$AA?5?$AAs?$AAu?$AAp?$AAp?$AAo?$AAr?$AAt?$AA?5@ 6ed0c2e8 LIBCMT:crt0msg.obj 605 | 0002:00002344 ??_C@_1DE@JNGNBFGO@?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?$CB?$AA?6?$AA?6?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?3?$AA?5?$AA?$AA@ 6ed0c344 LIBCMT:crt0msg.obj 606 | 0002:00002378 ??_C@_1CO@EAEJAADC@?$AA?$DM?$AAp?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAn?$AAa?$AAm?$AAe?$AA?5?$AAu?$AAn?$AAk?$AAn?$AAo?$AAw?$AAn?$AA?$DO?$AA?$AA@ 6ed0c378 LIBCMT:crt0msg.obj 607 | 0002:000023a8 ??_C@_17LGKOMLJ@?$AA?4?$AA?4?$AA?4?$AA?$AA@ 6ed0c3a8 LIBCMT:crt0msg.obj 608 | 0002:000023b0 ??_C@_15IABLJNFO@?$AA?6?$AA?6?$AA?$AA@ 6ed0c3b0 LIBCMT:crt0msg.obj 609 | 0002:000023b8 ??_C@_1EK@MBDPDCGA@?$AAM?$AAi?$AAc?$AAr?$AAo?$AAs?$AAo?$AAf?$AAt?$AA?5?$AAV?$AAi?$AAs?$AAu?$AAa?$AAl?$AA?5?$AAC?$AA?$CL?$AA?$CL?$AA?5?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAL?$AAi?$AAb@ 6ed0c3b8 LIBCMT:crt0msg.obj 610 | 0002:00002408 _LcidToLocaleNameTable 6ed0c408 LIBCMT:winapinls.obj 611 | 0002:00002b28 _LocaleNameToIndexTable 6ed0cb28 LIBCMT:winapinls.obj 612 | 0002:00003248 ??_C@_15EMKDOKLE@?$AAa?$AAr?$AA?$AA@ 6ed0d248 LIBCMT:winapinls.obj 613 | 0002:00003250 ??_C@_15KNPADPLH@?$AAb?$AAg?$AA?$AA@ 6ed0d250 LIBCMT:winapinls.obj 614 | 0002:00003258 ??_C@_15EDMHLDMO@?$AAc?$AAa?$AA?$AA@ 6ed0d258 LIBCMT:winapinls.obj 615 | 0002:00003260 ??_C@_1O@BPEAJADD@?$AAz?$AAh?$AA?9?$AAC?$AAH?$AAS?$AA?$AA@ 6ed0d260 LIBCMT:winapinls.obj 616 | 0002:00003270 ??_C@_15LJNHCMNK@?$AAc?$AAs?$AA?$AA@ 6ed0d270 LIBCMT:winapinls.obj 617 | 0002:00003278 ??_C@_15FOMCIDHG@?$AAd?$AAa?$AA?$AA@ 6ed0d278 LIBCMT:winapinls.obj 618 | 0002:00003280 ??_C@_15NBKABECB@?$AAd?$AAe?$AA?$AA@ 6ed0d280 LIBCMT:winapinls.obj 619 | 0002:00003288 ??_C@_15GHPEIIAO@?$AAe?$AAl?$AA?$AA@ 6ed0d288 LIBCMT:winapinls.obj 620 | 0002:00003290 ??_C@_15MNPNEAIF@?$AAe?$AAn?$AA?$AA@ 6ed0d290 LIBCMT:winapinls.obj 621 | 0002:00003298 ??_C@_15GPIOMPMH@?$AAe?$AAs?$AA?$AA@ 6ed0d298 LIBCMT:winapinls.obj 622 | 0002:000032a0 ??_C@_15NGLOAKJC@?$AAf?$AAi?$AA?$AA@ 6ed0d2a0 LIBCMT:winapinls.obj 623 | 0002:000032a8 ??_C@_15FBKGNKAM@?$AAf?$AAr?$AA?$AA@ 6ed0d2a8 LIBCMT:winapinls.obj 624 | 0002:000032b0 ??_C@_15KGGCNEFK@?$AAh?$AAe?$AA?$AA@ 6ed0d2b0 LIBCMT:winapinls.obj 625 | 0002:000032b8 ??_C@_15PGHLIDMF@?$AAh?$AAu?$AA?$AA@ 6ed0d2b8 LIBCMT:winapinls.obj 626 | 0002:000032c0 ??_C@_15BIEMAPLM@?$AAi?$AAs?$AA?$AA@ 6ed0d2c0 LIBCMT:winapinls.obj 627 | 0002:000032c8 ??_C@_15IFJLDHAF@?$AAi?$AAt?$AA?$AA@ 6ed0d2c8 LIBCMT:winapinls.obj 628 | 0002:000032d0 ??_C@_15GEMIOCAG@?$AAj?$AAa?$AA?$AA@ 6ed0d2d0 LIBCMT:winapinls.obj 629 | 0002:000032d8 ??_C@_15EPELEGJA@?$AAk?$AAo?$AA?$AA@ 6ed0d2d8 LIBCMT:winapinls.obj 630 | 0002:000032e0 ??_C@_15NDDHIMN@?$AAn?$AAl?$AA?$AA@ 6ed0d2e0 LIBCMT:winapinls.obj 631 | 0002:000032e8 ??_C@_15BPIGNHCD@?$AAn?$AAo?$AA?$AA@ 6ed0d2e8 LIBCMT:winapinls.obj 632 | 0002:000032f0 ??_C@_15DEOPBLCG@?$AAp?$AAl?$AA?$AA@ 6ed0d2f0 LIBCMT:winapinls.obj 633 | 0002:000032f8 ??_C@_15KBECGEFG@?$AAp?$AAt?$AA?$AA@ 6ed0d2f8 LIBCMT:winapinls.obj 634 | 0002:00003300 ??_C@_15GLJCBFMD@?$AAr?$AAo?$AA?$AA@ 6ed0d300 LIBCMT:winapinls.obj 635 | 0002:00003308 ??_C@_15FEDGKCDI@?$AAr?$AAu?$AA?$AA@ 6ed0d308 LIBCMT:winapinls.obj 636 | 0002:00003310 ??_C@_15GLKMLLHM@?$AAh?$AAr?$AA?$AA@ 6ed0d310 LIBCMT:winapinls.obj 637 | 0002:00003318 ??_C@_15CPKMFBDB@?$AAs?$AAk?$AA?$AA@ 6ed0d318 LIBCMT:winapinls.obj 638 | 0002:00003320 ??_C@_15BAAIOGMK@?$AAs?$AAq?$AA?$AA@ 6ed0d320 LIBCMT:winapinls.obj 639 | 0002:00003328 ??_C@_15INNPNOHD@?$AAs?$AAv?$AA?$AA@ 6ed0d328 LIBCMT:winapinls.obj 640 | 0002:00003330 ??_C@_15CABMMOGH@?$AAt?$AAh?$AA?$AA@ 6ed0d330 LIBCMT:winapinls.obj 641 | 0002:00003338 ??_C@_15BPLIHJJM@?$AAt?$AAr?$AA?$AA@ 6ed0d338 LIBCMT:winapinls.obj 642 | 0002:00003340 ??_C@_15NEOEKKDJ@?$AAu?$AAr?$AA?$AA@ 6ed0d340 LIBCMT:winapinls.obj 643 | 0002:00003348 ??_C@_15NFICGAJK@?$AAi?$AAd?$AA?$AA@ 6ed0d348 LIBCMT:winapinls.obj 644 | 0002:00003350 ??_C@_15PJPFLCCM@?$AAu?$AAk?$AA?$AA@ 6ed0d350 LIBCMT:winapinls.obj 645 | 0002:00003358 ??_C@_15HPJPHDM@?$AAb?$AAe?$AA?$AA@ 6ed0d358 LIBCMT:winapinls.obj 646 | 0002:00003360 ??_C@_15LCHLGJII@?$AAs?$AAl?$AA?$AA@ 6ed0d360 LIBCMT:winapinls.obj 647 | 0002:00003368 ??_C@_15PCFJPHHO@?$AAe?$AAt?$AA?$AA@ 6ed0d368 LIBCMT:winapinls.obj 648 | 0002:00003370 ??_C@_15HPFPGODN@?$AAl?$AAv?$AA?$AA@ 6ed0d370 LIBCMT:winapinls.obj 649 | 0002:00003378 ??_C@_15NFFGKGLG@?$AAl?$AAt?$AA?$AA@ 6ed0d378 LIBCMT:winapinls.obj 650 | 0002:00003380 ??_C@_15BDAKCCHN@?$AAf?$AAa?$AA?$AA@ 6ed0d380 LIBCMT:winapinls.obj 651 | 0002:00003388 ??_C@_15NFGIAIAJ@?$AAv?$AAi?$AA?$AA@ 6ed0d388 LIBCMT:winapinls.obj 652 | 0002:00003390 ??_C@_15LMKNDMHN@?$AAh?$AAy?$AA?$AA@ 6ed0d390 LIBCMT:winapinls.obj 653 | 0002:00003398 ??_C@_15IJBHMCFL@?$AAa?$AAz?$AA?$AA@ 6ed0d398 LIBCMT:winapinls.obj 654 | 0002:000033a0 ??_C@_15EKOFJABL@?$AAe?$AAu?$AA?$AA@ 6ed0d3a0 LIBCMT:winapinls.obj 655 | 0002:000033a8 ??_C@_15BGHADCNK@?$AAm?$AAk?$AA?$AA@ 6ed0d3a8 LIBCMT:winapinls.obj 656 | 0002:000033b0 ??_C@_15JDNICKHM@?$AAa?$AAf?$AA?$AA@ 6ed0d3b0 LIBCMT:winapinls.obj 657 | 0002:000033b8 ??_C@_15KPJEDBKD@?$AAk?$AAa?$AA?$AA@ 6ed0d3b8 LIBCMT:winapinls.obj 658 | 0002:000033c0 ??_C@_15PDNFFFEO@?$AAf?$AAo?$AA?$AA@ 6ed0d3c0 LIBCMT:winapinls.obj 659 | 0002:000033c8 ??_C@_15OMLEGLOC@?$AAh?$AAi?$AA?$AA@ 6ed0d3c8 LIBCMT:winapinls.obj 660 | 0002:000033d0 ??_C@_15IDNNENKK@?$AAm?$AAs?$AA?$AA@ 6ed0d3d0 LIBCMT:winapinls.obj 661 | 0002:000033d8 ??_C@_15MACJNBMH@?$AAk?$AAk?$AA?$AA@ 6ed0d3d8 LIBCMT:winapinls.obj 662 | 0002:000033e0 ??_C@_15DKDJEOND@?$AAk?$AAy?$AA?$AA@ 6ed0d3e0 LIBCMT:winapinls.obj 663 | 0002:000033e8 ??_C@_15DFGDLJBG@?$AAs?$AAw?$AA?$AA@ 6ed0d3e8 LIBCMT:winapinls.obj 664 | 0002:000033f0 ??_C@_15BBFAICNG@?$AAu?$AAz?$AA?$AA@ 6ed0d3f0 LIBCMT:winapinls.obj 665 | 0002:000033f8 ??_C@_15DKNDCGEA@?$AAt?$AAt?$AA?$AA@ 6ed0d3f8 LIBCMT:winapinls.obj 666 | 0002:00003400 ??_C@_15MGIFMDPL@?$AAp?$AAa?$AA?$AA@ 6ed0d400 LIBCMT:winapinls.obj 667 | 0002:00003408 ??_C@_15HCNDBBA@?$AAg?$AAu?$AA?$AA@ 6ed0d408 LIBCMT:winapinls.obj 668 | 0002:00003410 ??_C@_15FNBEIBON@?$AAt?$AAa?$AA?$AA@ 6ed0d410 LIBCMT:winapinls.obj 669 | 0002:00003418 ??_C@_15NCHGBGLK@?$AAt?$AAe?$AA?$AA@ 6ed0d418 LIBCMT:winapinls.obj 670 | 0002:00003420 ??_C@_15PHPHCBPF@?$AAk?$AAn?$AA?$AA@ 6ed0d420 LIBCMT:winapinls.obj 671 | 0002:00003428 ??_C@_15DLGBCKMP@?$AAm?$AAr?$AA?$AA@ 6ed0d428 LIBCMT:winapinls.obj 672 | 0002:00003430 ??_C@_15EABBLBFF@?$AAs?$AAa?$AA?$AA@ 6ed0d430 LIBCMT:winapinls.obj 673 | 0002:00003438 ??_C@_15CBKOMCOI@?$AAm?$AAn?$AA?$AA@ 6ed0d438 LIBCMT:winapinls.obj 674 | 0002:00003440 ??_C@_15CKDMCJAF@?$AAg?$AAl?$AA?$AA@ 6ed0d440 LIBCMT:winapinls.obj 675 | 0002:00003448 ??_C@_17CNJFBPG@?$AAk?$AAo?$AAk?$AA?$AA@ 6ed0d448 LIBCMT:winapinls.obj 676 | 0002:00003450 ??_C@_17FFBJICPL@?$AAs?$AAy?$AAr?$AA?$AA@ 6ed0d450 LIBCMT:winapinls.obj 677 | 0002:00003458 ??_C@_17KPNDCPAF@?$AAd?$AAi?$AAv?$AA?$AA@ 6ed0d458 LIBCMT:winapinls.obj 678 | 0002:00003460 ??_C@_11LOCGONAA@?$AA?$AA@ 6ed0d460 LIBCMT:winapinls.obj 679 | 0002:00003464 ??_C@_1M@OKAHONE@?$AAa?$AAr?$AA?9?$AAS?$AAA?$AA?$AA@ 6ed0d464 LIBCMT:winapinls.obj 680 | 0002:00003470 ??_C@_1M@FFFIGIGK@?$AAb?$AAg?$AA?9?$AAB?$AAG?$AA?$AA@ 6ed0d470 LIBCMT:winapinls.obj 681 | 0002:0000347c ??_C@_1M@BJNKEDC@?$AAc?$AAa?$AA?9?$AAE?$AAS?$AA?$AA@ 6ed0d47c LIBCMT:winapinls.obj 682 | 0002:00003488 ??_C@_1M@IJJHFJHA@?$AAc?$AAs?$AA?9?$AAC?$AAZ?$AA?$AA@ 6ed0d488 LIBCMT:winapinls.obj 683 | 0002:00003494 ??_C@_1M@CLPEOBGI@?$AAd?$AAa?$AA?9?$AAD?$AAK?$AA?$AA@ 6ed0d494 LIBCMT:winapinls.obj 684 | 0002:000034a0 ??_C@_1M@MCMADGCB@?$AAd?$AAe?$AA?9?$AAD?$AAE?$AA?$AA@ 6ed0d4a0 LIBCMT:winapinls.obj 685 | 0002:000034ac ??_C@_1M@OOCKEMAM@?$AAe?$AAl?$AA?9?$AAG?$AAR?$AA?$AA@ 6ed0d4ac LIBCMT:winapinls.obj 686 | 0002:000034b8 ??_C@_1M@DDNJFGID@?$AAf?$AAi?$AA?9?$AAF?$AAI?$AA?$AA@ 6ed0d4b8 LIBCMT:winapinls.obj 687 | 0002:000034c4 ??_C@_1M@GLIPPMAC@?$AAf?$AAr?$AA?9?$AAF?$AAR?$AA?$AA@ 6ed0d4c4 LIBCMT:winapinls.obj 688 | 0002:000034d0 ??_C@_1M@GFMCHPE@?$AAh?$AAe?$AA?9?$AAI?$AAL?$AA?$AA@ 6ed0d4d0 LIBCMT:winapinls.obj 689 | 0002:000034dc ??_C@_1M@MHLPGNKM@?$AAh?$AAu?$AA?9?$AAH?$AAU?$AA?$AA@ 6ed0d4dc LIBCMT:winapinls.obj 690 | 0002:000034e8 ??_C@_1M@LPDDNNPN@?$AAi?$AAs?$AA?9?$AAI?$AAS?$AA?$AA@ 6ed0d4e8 LIBCMT:winapinls.obj 691 | 0002:000034f4 ??_C@_1M@MADIPODN@?$AAi?$AAt?$AA?9?$AAI?$AAT?$AA?$AA@ 6ed0d4f4 LIBCMT:winapinls.obj 692 | 0002:00003500 ??_C@_1M@IHBJJGG@?$AAn?$AAl?$AA?9?$AAN?$AAL?$AA?$AA@ 6ed0d500 LIBCMT:winapinls.obj 693 | 0002:0000350c ??_C@_1M@EANAGDL@?$AAn?$AAb?$AA?9?$AAN?$AAO?$AA?$AA@ 6ed0d50c LIBCMT:winapinls.obj 694 | 0002:00003518 ??_C@_1M@NEIEMEGP@?$AAp?$AAl?$AA?9?$AAP?$AAL?$AA?$AA@ 6ed0d518 LIBCMT:winapinls.obj 695 | 0002:00003524 ??_C@_1M@BOCFIGEP@?$AAp?$AAt?$AA?9?$AAB?$AAR?$AA?$AA@ 6ed0d524 LIBCMT:winapinls.obj 696 | 0002:00003530 ??_C@_1M@IMPFOPBG@?$AAr?$AAo?$AA?9?$AAR?$AAO?$AA?$AA@ 6ed0d530 LIBCMT:winapinls.obj 697 | 0002:0000353c ??_C@_1M@IDNNEJMM@?$AAr?$AAu?$AA?9?$AAR?$AAU?$AA?$AA@ 6ed0d53c LIBCMT:winapinls.obj 698 | 0002:00003548 ??_C@_1M@LILEEOGM@?$AAh?$AAr?$AA?9?$AAH?$AAR?$AA?$AA@ 6ed0d548 LIBCMT:winapinls.obj 699 | 0002:00003554 ??_C@_1M@FKIFEHPB@?$AAs?$AAk?$AA?9?$AAS?$AAK?$AA?$AA@ 6ed0d554 LIBCMT:winapinls.obj 700 | 0002:00003560 ??_C@_1M@LJMAMNPJ@?$AAs?$AAq?$AA?9?$AAA?$AAL?$AA?$AA@ 6ed0d560 LIBCMT:winapinls.obj 701 | 0002:0000356c ??_C@_1M@GIAKDKJK@?$AAs?$AAv?$AA?9?$AAS?$AAE?$AA?$AA@ 6ed0d56c LIBCMT:winapinls.obj 702 | 0002:00003578 ??_C@_1M@MKJKIKCL@?$AAt?$AAh?$AA?9?$AAT?$AAH?$AA?$AA@ 6ed0d578 LIBCMT:winapinls.obj 703 | 0002:00003584 ??_C@_1M@MFLCCMPB@?$AAt?$AAr?$AA?9?$AAT?$AAR?$AA?$AA@ 6ed0d584 LIBCMT:winapinls.obj 704 | 0002:00003590 ??_C@_1M@OIJHDKJN@?$AAu?$AAr?$AA?9?$AAP?$AAK?$AA?$AA@ 6ed0d590 LIBCMT:winapinls.obj 705 | 0002:0000359c ??_C@_1M@LHIPCIEK@?$AAi?$AAd?$AA?9?$AAI?$AAD?$AA?$AA@ 6ed0d59c LIBCMT:winapinls.obj 706 | 0002:000035a8 ??_C@_1M@MFMOBGI@?$AAu?$AAk?$AA?9?$AAU?$AAA?$AA?$AA@ 6ed0d5a8 LIBCMT:winapinls.obj 707 | 0002:000035b4 ??_C@_1M@OBGLJIPL@?$AAb?$AAe?$AA?9?$AAB?$AAY?$AA?$AA@ 6ed0d5b4 LIBCMT:winapinls.obj 708 | 0002:000035c0 ??_C@_1M@BCFAJEAD@?$AAs?$AAl?$AA?9?$AAS?$AAI?$AA?$AA@ 6ed0d5c0 LIBCMT:winapinls.obj 709 | 0002:000035cc ??_C@_1M@FKFFEDDN@?$AAe?$AAt?$AA?9?$AAE?$AAE?$AA?$AA@ 6ed0d5cc LIBCMT:winapinls.obj 710 | 0002:000035d8 ??_C@_1M@KGKKAACI@?$AAl?$AAv?$AA?9?$AAL?$AAV?$AA?$AA@ 6ed0d5d8 LIBCMT:winapinls.obj 711 | 0002:000035e4 ??_C@_1M@IFGBIJO@?$AAl?$AAt?$AA?9?$AAL?$AAT?$AA?$AA@ 6ed0d5e4 LIBCMT:winapinls.obj 712 | 0002:000035f0 ??_C@_1M@FGEAHEDM@?$AAf?$AAa?$AA?9?$AAI?$AAR?$AA?$AA@ 6ed0d5f0 LIBCMT:winapinls.obj 713 | 0002:000035fc ??_C@_1M@KBMAIBFN@?$AAv?$AAi?$AA?9?$AAV?$AAN?$AA?$AA@ 6ed0d5fc LIBCMT:winapinls.obj 714 | 0002:00003608 ??_C@_1M@GPCBKDJK@?$AAh?$AAy?$AA?9?$AAA?$AAM?$AA?$AA@ 6ed0d608 LIBCMT:winapinls.obj 715 | 0002:00003614 ??_C@_1BG@BECMDDJB@?$AAa?$AAz?$AA?9?$AAA?$AAZ?$AA?9?$AAL?$AAa?$AAt?$AAn?$AA?$AA@ 6ed0d614 LIBCMT:winapinls.obj 716 | 0002:0000362c ??_C@_1M@MAOFCAEA@?$AAe?$AAu?$AA?9?$AAE?$AAS?$AA?$AA@ 6ed0d62c LIBCMT:winapinls.obj 717 | 0002:00003638 ??_C@_1M@IGHABKPI@?$AAm?$AAk?$AA?9?$AAM?$AAK?$AA?$AA@ 6ed0d638 LIBCMT:winapinls.obj 718 | 0002:00003644 ??_C@_1M@IAIGNEJG@?$AAt?$AAn?$AA?9?$AAZ?$AAA?$AA?$AA@ 6ed0d644 LIBCMT:winapinls.obj 719 | 0002:00003650 ??_C@_1M@IIJCOJFA@?$AAx?$AAh?$AA?9?$AAZ?$AAA?$AA?$AA@ 6ed0d650 LIBCMT:winapinls.obj 720 | 0002:0000365c ??_C@_1M@LGPJHNJH@?$AAz?$AAu?$AA?9?$AAZ?$AAA?$AA?$AA@ 6ed0d65c LIBCMT:winapinls.obj 721 | 0002:00003668 ??_C@_1M@HOKAOIO@?$AAa?$AAf?$AA?9?$AAZ?$AAA?$AA?$AA@ 6ed0d668 LIBCMT:winapinls.obj 722 | 0002:00003674 ??_C@_1M@DPCLHLIE@?$AAk?$AAa?$AA?9?$AAG?$AAE?$AA?$AA@ 6ed0d674 LIBCMT:winapinls.obj 723 | 0002:00003680 ??_C@_1M@BLKMHJBI@?$AAf?$AAo?$AA?9?$AAF?$AAO?$AA?$AA@ 6ed0d680 LIBCMT:winapinls.obj 724 | 0002:0000368c ??_C@_1M@LGGJAPPB@?$AAh?$AAi?$AA?9?$AAI?$AAN?$AA?$AA@ 6ed0d68c LIBCMT:winapinls.obj 725 | 0002:00003698 ??_C@_1M@FIKPIHFE@?$AAm?$AAt?$AA?9?$AAM?$AAT?$AA?$AA@ 6ed0d698 LIBCMT:winapinls.obj 726 | 0002:000036a4 ??_C@_1M@HEGGPBFA@?$AAs?$AAe?$AA?9?$AAN?$AAO?$AA?$AA@ 6ed0d6a4 LIBCMT:winapinls.obj 727 | 0002:000036b0 ??_C@_1M@EIBJEEPA@?$AAm?$AAs?$AA?9?$AAM?$AAY?$AA?$AA@ 6ed0d6b0 LIBCMT:winapinls.obj 728 | 0002:000036bc ??_C@_1M@FHLBGMPP@?$AAk?$AAk?$AA?9?$AAK?$AAZ?$AA?$AA@ 6ed0d6bc LIBCMT:winapinls.obj 729 | 0002:000036c8 ??_C@_1M@NGJJLCGI@?$AAk?$AAy?$AA?9?$AAK?$AAG?$AA?$AA@ 6ed0d6c8 LIBCMT:winapinls.obj 730 | 0002:000036d4 ??_C@_1M@GIENNBFC@?$AAs?$AAw?$AA?9?$AAK?$AAE?$AA?$AA@ 6ed0d6d4 LIBCMT:winapinls.obj 731 | 0002:000036e0 ??_C@_1BG@NDGMJIMJ@?$AAu?$AAz?$AA?9?$AAU?$AAZ?$AA?9?$AAL?$AAa?$AAt?$AAn?$AA?$AA@ 6ed0d6e0 LIBCMT:winapinls.obj 732 | 0002:000036f8 ??_C@_1M@IDCCIHBC@?$AAt?$AAt?$AA?9?$AAR?$AAU?$AA?$AA@ 6ed0d6f8 LIBCMT:winapinls.obj 733 | 0002:00003704 ??_C@_1M@LOICPMOJ@?$AAb?$AAn?$AA?9?$AAI?$AAN?$AA?$AA@ 6ed0d704 LIBCMT:winapinls.obj 734 | 0002:00003710 ??_C@_1M@KPKKNEAH@?$AAp?$AAa?$AA?9?$AAI?$AAN?$AA?$AA@ 6ed0d710 LIBCMT:winapinls.obj 735 | 0002:0000371c ??_C@_1M@PJGPPBOG@?$AAg?$AAu?$AA?9?$AAI?$AAN?$AA?$AA@ 6ed0d71c LIBCMT:winapinls.obj 736 | 0002:00003728 ??_C@_1M@KMKMOPHI@?$AAt?$AAa?$AA?9?$AAI?$AAN?$AA?$AA@ 6ed0d728 LIBCMT:winapinls.obj 737 | 0002:00003734 ??_C@_1M@KFEHEPAC@?$AAt?$AAe?$AA?9?$AAI?$AAN?$AA?$AA@ 6ed0d734 LIBCMT:winapinls.obj 738 | 0002:00003740 ??_C@_1M@CDCLMGHI@?$AAk?$AAn?$AA?9?$AAI?$AAN?$AA?$AA@ 6ed0d740 LIBCMT:winapinls.obj 739 | 0002:0000374c ??_C@_1M@MIODLDKF@?$AAm?$AAl?$AA?9?$AAI?$AAN?$AA?$AA@ 6ed0d74c LIBCMT:winapinls.obj 740 | 0002:00003758 ??_C@_1M@PBIEACPO@?$AAm?$AAr?$AA?9?$AAI?$AAN?$AA?$AA@ 6ed0d758 LIBCMT:winapinls.obj 741 | 0002:00003764 ??_C@_1M@NIDEAGPH@?$AAs?$AAa?$AA?9?$AAI?$AAN?$AA?$AA@ 6ed0d764 LIBCMT:winapinls.obj 742 | 0002:00003770 ??_C@_1M@FHIHCBIO@?$AAm?$AAn?$AA?9?$AAM?$AAN?$AA?$AA@ 6ed0d770 LIBCMT:winapinls.obj 743 | 0002:0000377c ??_C@_1M@JAIJPENP@?$AAc?$AAy?$AA?9?$AAG?$AAB?$AA?$AA@ 6ed0d77c LIBCMT:winapinls.obj 744 | 0002:00003788 ??_C@_1M@PHGFBEPN@?$AAg?$AAl?$AA?9?$AAE?$AAS?$AA?$AA@ 6ed0d788 LIBCMT:winapinls.obj 745 | 0002:00003794 ??_C@_1O@KPIPDNCP@?$AAk?$AAo?$AAk?$AA?9?$AAI?$AAN?$AA?$AA@ 6ed0d794 LIBCMT:winapinls.obj 746 | 0002:000037a4 ??_C@_1O@KNHJLDJA@?$AAs?$AAy?$AAr?$AA?9?$AAS?$AAY?$AA?$AA@ 6ed0d7a4 LIBCMT:winapinls.obj 747 | 0002:000037b4 ??_C@_1O@MKEKBLAH@?$AAd?$AAi?$AAv?$AA?9?$AAM?$AAV?$AA?$AA@ 6ed0d7b4 LIBCMT:winapinls.obj 748 | 0002:000037c4 ??_C@_1O@OHDCKDDF@?$AAq?$AAu?$AAz?$AA?9?$AAB?$AAO?$AA?$AA@ 6ed0d7c4 LIBCMT:winapinls.obj 749 | 0002:000037d4 ??_C@_1M@LEPJNLFD@?$AAn?$AAs?$AA?9?$AAZ?$AAA?$AA?$AA@ 6ed0d7d4 LIBCMT:winapinls.obj 750 | 0002:000037e0 ??_C@_1M@OMLEIIJB@?$AAm?$AAi?$AA?9?$AAN?$AAZ?$AA?$AA@ 6ed0d7e0 LIBCMT:winapinls.obj 751 | 0002:000037ec ??_C@_1M@PMPEAILG@?$AAa?$AAr?$AA?9?$AAI?$AAQ?$AA?$AA@ 6ed0d7ec LIBCMT:winapinls.obj 752 | 0002:000037f8 ??_C@_1M@CNKPNOEE@?$AAd?$AAe?$AA?9?$AAC?$AAH?$AA?$AA@ 6ed0d7f8 LIBCMT:winapinls.obj 753 | 0002:00003804 ??_C@_1M@LKMGMLKO@?$AAe?$AAn?$AA?9?$AAG?$AAB?$AA?$AA@ 6ed0d804 LIBCMT:winapinls.obj 754 | 0002:00003810 ??_C@_1M@PGKJFFGL@?$AAe?$AAs?$AA?9?$AAM?$AAX?$AA?$AA@ 6ed0d810 LIBCMT:winapinls.obj 755 | 0002:0000381c ??_C@_1M@DNNANBDC@?$AAf?$AAr?$AA?9?$AAB?$AAE?$AA?$AA@ 6ed0d81c LIBCMT:winapinls.obj 756 | 0002:00003828 ??_C@_1M@HLGMDFHM@?$AAi?$AAt?$AA?9?$AAC?$AAH?$AA?$AA@ 6ed0d828 LIBCMT:winapinls.obj 757 | 0002:00003834 ??_C@_1M@CLLBGJH@?$AAn?$AAl?$AA?9?$AAB?$AAE?$AA?$AA@ 6ed0d834 LIBCMT:winapinls.obj 758 | 0002:00003840 ??_C@_1M@BODBOGLF@?$AAn?$AAn?$AA?9?$AAN?$AAO?$AA?$AA@ 6ed0d840 LIBCMT:winapinls.obj 759 | 0002:0000384c ??_C@_1M@HFFAHKAD@?$AAp?$AAt?$AA?9?$AAP?$AAT?$AA?$AA@ 6ed0d84c LIBCMT:winapinls.obj 760 | 0002:00003858 ??_C@_1BG@LNOAKHIE@?$AAs?$AAr?$AA?9?$AAS?$AAP?$AA?9?$AAL?$AAa?$AAt?$AAn?$AA?$AA@ 6ed0d858 LIBCMT:winapinls.obj 761 | 0002:00003870 ??_C@_1M@HBMHBGAK@?$AAs?$AAv?$AA?9?$AAF?$AAI?$AA?$AA@ 6ed0d870 LIBCMT:winapinls.obj 762 | 0002:0000387c ??_C@_1BG@DGCJGJBE@?$AAa?$AAz?$AA?9?$AAA?$AAZ?$AA?9?$AAC?$AAy?$AAr?$AAl?$AA?$AA@ 6ed0d87c LIBCMT:winapinls.obj 763 | 0002:00003894 ??_C@_1M@KEJDAAHB@?$AAs?$AAe?$AA?9?$AAS?$AAE?$AA?$AA@ 6ed0d894 LIBCMT:winapinls.obj 764 | 0002:000038a0 ??_C@_1M@HEIBJJAD@?$AAm?$AAs?$AA?9?$AAB?$AAN?$AA?$AA@ 6ed0d8a0 LIBCMT:winapinls.obj 765 | 0002:000038ac ??_C@_1BG@PBGJMCEM@?$AAu?$AAz?$AA?9?$AAU?$AAZ?$AA?9?$AAC?$AAy?$AAr?$AAl?$AA?$AA@ 6ed0d8ac LIBCMT:winapinls.obj 766 | 0002:000038c4 ??_C@_1O@LAOBCMDF@?$AAq?$AAu?$AAz?$AA?9?$AAE?$AAC?$AA?$AA@ 6ed0d8c4 LIBCMT:winapinls.obj 767 | 0002:000038d4 ??_C@_1M@POEEMAIO@?$AAa?$AAr?$AA?9?$AAE?$AAG?$AA?$AA@ 6ed0d8d4 LIBCMT:winapinls.obj 768 | 0002:000038e0 ??_C@_1M@EFAKDEDL@?$AAz?$AAh?$AA?9?$AAH?$AAK?$AA?$AA@ 6ed0d8e0 LIBCMT:winapinls.obj 769 | 0002:000038ec ??_C@_1M@HKKIJHGI@?$AAd?$AAe?$AA?9?$AAA?$AAT?$AA?$AA@ 6ed0d8ec LIBCMT:winapinls.obj 770 | 0002:000038f8 ??_C@_1M@KBFBEHJF@?$AAe?$AAn?$AA?9?$AAA?$AAU?$AA?$AA@ 6ed0d8f8 LIBCMT:winapinls.obj 771 | 0002:00003904 ??_C@_1M@MNPLFAAH@?$AAe?$AAs?$AA?9?$AAE?$AAS?$AA?$AA@ 6ed0d904 LIBCMT:winapinls.obj 772 | 0002:00003910 ??_C@_1M@HJOOJFMA@?$AAf?$AAr?$AA?9?$AAC?$AAA?$AA?$AA@ 6ed0d910 LIBCMT:winapinls.obj 773 | 0002:0000391c ??_C@_1BG@JPOFPNAB@?$AAs?$AAr?$AA?9?$AAS?$AAP?$AA?9?$AAC?$AAy?$AAr?$AAl?$AA?$AA@ 6ed0d91c LIBCMT:winapinls.obj 774 | 0002:00003934 ??_C@_1M@LNFOCMOB@?$AAs?$AAe?$AA?9?$AAF?$AAI?$AA?$AA@ 6ed0d934 LIBCMT:winapinls.obj 775 | 0002:00003940 ??_C@_1O@MGJBOAMB@?$AAq?$AAu?$AAz?$AA?9?$AAP?$AAE?$AA?$AA@ 6ed0d940 LIBCMT:winapinls.obj 776 | 0002:00003950 ??_C@_1M@GJINLBOK@?$AAa?$AAr?$AA?9?$AAL?$AAY?$AA?$AA@ 6ed0d950 LIBCMT:winapinls.obj 777 | 0002:0000395c ??_C@_1M@GGMNHJNL@?$AAz?$AAh?$AA?9?$AAS?$AAG?$AA?$AA@ 6ed0d95c LIBCMT:winapinls.obj 778 | 0002:00003968 ??_C@_1M@HOIKODND@?$AAd?$AAe?$AA?9?$AAL?$AAU?$AA?$AA@ 6ed0d968 LIBCMT:winapinls.obj 779 | 0002:00003974 ??_C@_1M@DDOCCGFG@?$AAe?$AAn?$AA?9?$AAC?$AAA?$AA?$AA@ 6ed0d974 LIBCMT:winapinls.obj 780 | 0002:00003980 ??_C@_1M@BNOEMJLF@?$AAe?$AAs?$AA?9?$AAG?$AAT?$AA?$AA@ 6ed0d980 LIBCMT:winapinls.obj 781 | 0002:0000398c ??_C@_1M@EOGNKEK@?$AAf?$AAr?$AA?9?$AAC?$AAH?$AA?$AA@ 6ed0d98c LIBCMT:winapinls.obj 782 | 0002:00003998 ??_C@_1M@FLIDJFHL@?$AAh?$AAr?$AA?9?$AAB?$AAA?$AA?$AA@ 6ed0d998 LIBCMT:winapinls.obj 783 | 0002:000039a4 ??_C@_1O@FMCELNAJ@?$AAs?$AAm?$AAj?$AA?9?$AAN?$AAO?$AA?$AA@ 6ed0d9a4 LIBCMT:winapinls.obj 784 | 0002:000039b4 ??_C@_1M@JHGLJMGJ@?$AAa?$AAr?$AA?9?$AAD?$AAZ?$AA?$AA@ 6ed0d9b4 LIBCMT:winapinls.obj 785 | 0002:000039c0 ??_C@_1M@JKKFDCNP@?$AAz?$AAh?$AA?9?$AAM?$AAO?$AA?$AA@ 6ed0d9c0 LIBCMT:winapinls.obj 786 | 0002:000039cc ??_C@_1M@GEEFALPE@?$AAd?$AAe?$AA?9?$AAL?$AAI?$AA?$AA@ 6ed0d9cc LIBCMT:winapinls.obj 787 | 0002:000039d8 ??_C@_1M@IGEOFBG@?$AAe?$AAn?$AA?9?$AAN?$AAZ?$AA?$AA@ 6ed0d9d8 LIBCMT:winapinls.obj 788 | 0002:000039e4 ??_C@_1M@KDBONEHP@?$AAe?$AAs?$AA?9?$AAC?$AAR?$AA?$AA@ 6ed0d9e4 LIBCMT:winapinls.obj 789 | 0002:000039f0 ??_C@_1M@FHMDOHNN@?$AAf?$AAr?$AA?9?$AAL?$AAU?$AA?$AA@ 6ed0d9f0 LIBCMT:winapinls.obj 790 | 0002:000039fc ??_C@_1BG@NFKKMAFG@?$AAb?$AAs?$AA?9?$AAB?$AAA?$AA?9?$AAL?$AAa?$AAt?$AAn?$AA?$AA@ 6ed0d9fc LIBCMT:winapinls.obj 791 | 0002:00003a14 ??_C@_1O@IMNBEMCI@?$AAs?$AAm?$AAj?$AA?9?$AAS?$AAE?$AA?$AA@ 6ed0da14 LIBCMT:winapinls.obj 792 | 0002:00003a24 ??_C@_1M@DHHMBNDP@?$AAa?$AAr?$AA?9?$AAM?$AAA?$AA?$AA@ 6ed0da24 LIBCMT:winapinls.obj 793 | 0002:00003a30 ??_C@_1M@BNBLJCGH@?$AAe?$AAn?$AA?9?$AAI?$AAE?$AA?$AA@ 6ed0da30 LIBCMT:winapinls.obj 794 | 0002:00003a3c ??_C@_1M@GEPAFMDL@?$AAe?$AAs?$AA?9?$AAP?$AAA?$AA?$AA@ 6ed0da3c LIBCMT:winapinls.obj 795 | 0002:00003a48 ??_C@_1M@OJONDMDL@?$AAf?$AAr?$AA?9?$AAM?$AAC?$AA?$AA@ 6ed0da48 LIBCMT:winapinls.obj 796 | 0002:00003a54 ??_C@_1BG@OBCNFJB@?$AAs?$AAr?$AA?9?$AAB?$AAA?$AA?9?$AAL?$AAa?$AAt?$AAn?$AA?$AA@ 6ed0da54 LIBCMT:winapinls.obj 797 | 0002:00003a6c ??_C@_1O@KEMEEGPO@?$AAs?$AAm?$AAa?$AA?9?$AAN?$AAO?$AA?$AA@ 6ed0da6c LIBCMT:winapinls.obj 798 | 0002:00003a7c ??_C@_1M@ELMGFODK@?$AAa?$AAr?$AA?9?$AAT?$AAN?$AA?$AA@ 6ed0da7c LIBCMT:winapinls.obj 799 | 0002:00003a88 ??_C@_1M@BHDLHFAF@?$AAe?$AAn?$AA?9?$AAZ?$AAA?$AA?$AA@ 6ed0da88 LIBCMT:winapinls.obj 800 | 0002:00003a94 ??_C@_1M@BMGIGLIF@?$AAe?$AAs?$AA?9?$AAD?$AAO?$AA?$AA@ 6ed0da94 LIBCMT:winapinls.obj 801 | 0002:00003aa0 ??_C@_1BG@CMBHIPBE@?$AAs?$AAr?$AA?9?$AAB?$AAA?$AA?9?$AAC?$AAy?$AAr?$AAl?$AA?$AA@ 6ed0daa0 LIBCMT:winapinls.obj 802 | 0002:00003ab8 ??_C@_1O@HEDBLHNP@?$AAs?$AAm?$AAa?$AA?9?$AAS?$AAE?$AA?$AA@ 6ed0dab8 LIBCMT:winapinls.obj 803 | 0002:00003ac8 ??_C@_1M@DAGCADIM@?$AAa?$AAr?$AA?9?$AAO?$AAM?$AA?$AA@ 6ed0dac8 LIBCMT:winapinls.obj 804 | 0002:00003ad4 ??_C@_1M@FODLMICG@?$AAe?$AAn?$AA?9?$AAJ?$AAM?$AA?$AA@ 6ed0dad4 LIBCMT:winapinls.obj 805 | 0002:00003ae0 ??_C@_1M@DNMLCIHB@?$AAe?$AAs?$AA?9?$AAV?$AAE?$AA?$AA@ 6ed0dae0 LIBCMT:winapinls.obj 806 | 0002:00003aec ??_C@_1O@EOKHMKJK@?$AAs?$AAm?$AAs?$AA?9?$AAF?$AAI?$AA?$AA@ 6ed0daec LIBCMT:winapinls.obj 807 | 0002:00003afc ??_C@_1M@CAFJMKOF@?$AAa?$AAr?$AA?9?$AAY?$AAE?$AA?$AA@ 6ed0dafc LIBCMT:winapinls.obj 808 | 0002:00003b08 ??_C@_1M@CBFHIJLI@?$AAe?$AAn?$AA?9?$AAC?$AAB?$AA?$AA@ 6ed0db08 LIBCMT:winapinls.obj 809 | 0002:00003b14 ??_C@_1M@BGNFLDN@?$AAe?$AAs?$AA?9?$AAC?$AAO?$AA?$AA@ 6ed0db14 LIBCMT:winapinls.obj 810 | 0002:00003b20 ??_C@_1O@JMPHMAMC@?$AAs?$AAm?$AAn?$AA?9?$AAF?$AAI?$AA?$AA@ 6ed0db20 LIBCMT:winapinls.obj 811 | 0002:00003b30 ??_C@_1M@JLANABKE@?$AAa?$AAr?$AA?9?$AAS?$AAY?$AA?$AA@ 6ed0db30 LIBCMT:winapinls.obj 812 | 0002:00003b3c ??_C@_1M@HPKGCFGN@?$AAe?$AAn?$AA?9?$AAB?$AAZ?$AA?$AA@ 6ed0db3c LIBCMT:winapinls.obj 813 | 0002:00003b48 ??_C@_1M@OLJCMLGM@?$AAe?$AAs?$AA?9?$AAP?$AAE?$AA?$AA@ 6ed0db48 LIBCMT:winapinls.obj 814 | 0002:00003b54 ??_C@_1M@MKKGFKLE@?$AAa?$AAr?$AA?9?$AAJ?$AAO?$AA?$AA@ 6ed0db54 LIBCMT:winapinls.obj 815 | 0002:00003b60 ??_C@_1M@EKPGLDNI@?$AAe?$AAn?$AA?9?$AAT?$AAT?$AA?$AA@ 6ed0db60 LIBCMT:winapinls.obj 816 | 0002:00003b6c ??_C@_1M@OONGHFHE@?$AAe?$AAs?$AA?9?$AAA?$AAR?$AA?$AA@ 6ed0db6c LIBCMT:winapinls.obj 817 | 0002:00003b78 ??_C@_1M@OOJFGBHE@?$AAa?$AAr?$AA?9?$AAL?$AAB?$AA?$AA@ 6ed0db78 LIBCMT:winapinls.obj 818 | 0002:00003b84 ??_C@_1M@GCEJHNEG@?$AAe?$AAn?$AA?9?$AAZ?$AAW?$AA?$AA@ 6ed0db84 LIBCMT:winapinls.obj 819 | 0002:00003b90 ??_C@_1M@JNOCAHJI@?$AAe?$AAs?$AA?9?$AAE?$AAC?$AA?$AA@ 6ed0db90 LIBCMT:winapinls.obj 820 | 0002:00003b9c ??_C@_1M@JEFHPGGB@?$AAa?$AAr?$AA?9?$AAK?$AAW?$AA?$AA@ 6ed0db9c LIBCMT:winapinls.obj 821 | 0002:00003ba8 ??_C@_1M@MLKIBJOJ@?$AAe?$AAn?$AA?9?$AAP?$AAH?$AA?$AA@ 6ed0dba8 LIBCMT:winapinls.obj 822 | 0002:00003bb4 ??_C@_1M@BDNIPEND@?$AAe?$AAs?$AA?9?$AAC?$AAL?$AA?$AA@ 6ed0dbb4 LIBCMT:winapinls.obj 823 | 0002:00003bc0 ??_C@_1M@MPNMEKBD@?$AAa?$AAr?$AA?9?$AAA?$AAE?$AA?$AA@ 6ed0dbc0 LIBCMT:winapinls.obj 824 | 0002:00003bcc ??_C@_1M@KBJALCPI@?$AAe?$AAs?$AA?9?$AAU?$AAY?$AA?$AA@ 6ed0dbcc LIBCMT:winapinls.obj 825 | 0002:00003bd8 ??_C@_1M@LLCCOAGA@?$AAa?$AAr?$AA?9?$AAB?$AAH?$AA?$AA@ 6ed0dbd8 LIBCMT:winapinls.obj 826 | 0002:00003be4 ??_C@_1M@PBFNCDEL@?$AAe?$AAs?$AA?9?$AAP?$AAY?$AA?$AA@ 6ed0dbe4 LIBCMT:winapinls.obj 827 | 0002:00003bf0 ??_C@_1M@EDGINPNP@?$AAa?$AAr?$AA?9?$AAQ?$AAA?$AA?$AA@ 6ed0dbf0 LIBCMT:winapinls.obj 828 | 0002:00003bfc ??_C@_1M@MKDBIIJI@?$AAe?$AAs?$AA?9?$AAB?$AAO?$AA?$AA@ 6ed0dbfc LIBCMT:winapinls.obj 829 | 0002:00003c08 ??_C@_1M@CPKKEBLD@?$AAe?$AAs?$AA?9?$AAS?$AAV?$AA?$AA@ 6ed0dc08 LIBCMT:winapinls.obj 830 | 0002:00003c14 ??_C@_1M@NDBGMMJL@?$AAe?$AAs?$AA?9?$AAH?$AAN?$AA?$AA@ 6ed0dc14 LIBCMT:winapinls.obj 831 | 0002:00003c20 ??_C@_1M@JIJIBHDP@?$AAe?$AAs?$AA?9?$AAN?$AAI?$AA?$AA@ 6ed0dc20 LIBCMT:winapinls.obj 832 | 0002:00003c2c ??_C@_1M@CGFMKEEK@?$AAe?$AAs?$AA?9?$AAP?$AAR?$AA?$AA@ 6ed0dc2c LIBCMT:winapinls.obj 833 | 0002:00003c38 ??_C@_1O@ICJHKIIK@?$AAz?$AAh?$AA?9?$AAC?$AAH?$AAT?$AA?$AA@ 6ed0dc38 LIBCMT:winapinls.obj 834 | 0002:00003c48 ??_C@_15CLNEJCE@?$AAs?$AAr?$AA?$AA@ 6ed0dc48 LIBCMT:winapinls.obj 835 | 0002:00003c50 ??_C@_1M@KAHEKEIG@?$AAa?$AAf?$AA?9?$AAz?$AAa?$AA?$AA@ 6ed0dc50 LIBCMT:winapinls.obj 836 | 0002:00003c5c ??_C@_1M@GIECOABL@?$AAa?$AAr?$AA?9?$AAa?$AAe?$AA?$AA@ 6ed0dc5c LIBCMT:winapinls.obj 837 | 0002:00003c68 ??_C@_1M@BMLMEKGI@?$AAa?$AAr?$AA?9?$AAb?$AAh?$AA?$AA@ 6ed0dc68 LIBCMT:winapinls.obj 838 | 0002:00003c74 ??_C@_1M@DAPFDGGB@?$AAa?$AAr?$AA?9?$AAd?$AAz?$AA?$AA@ 6ed0dc74 LIBCMT:winapinls.obj 839 | 0002:00003c80 ??_C@_1M@FJNKGKIG@?$AAa?$AAr?$AA?9?$AAe?$AAg?$AA?$AA@ 6ed0dc80 LIBCMT:winapinls.obj 840 | 0002:00003c8c ??_C@_1M@FLGKKCLO@?$AAa?$AAr?$AA?9?$AAi?$AAq?$AA?$AA@ 6ed0dc8c LIBCMT:winapinls.obj 841 | 0002:00003c98 ??_C@_1M@GNDIPALM@?$AAa?$AAr?$AA?9?$AAj?$AAo?$AA?$AA@ 6ed0dc98 LIBCMT:winapinls.obj 842 | 0002:00003ca4 ??_C@_1M@DDMJFMGJ@?$AAa?$AAr?$AA?9?$AAk?$AAw?$AA?$AA@ 6ed0dca4 LIBCMT:winapinls.obj 843 | 0002:00003cb0 ??_C@_1M@EJALMLHM@?$AAa?$AAr?$AA?9?$AAl?$AAb?$AA?$AA@ 6ed0dcb0 LIBCMT:winapinls.obj 844 | 0002:00003cbc ??_C@_1M@MOBDBLOC@?$AAa?$AAr?$AA?9?$AAl?$AAy?$AA?$AA@ 6ed0dcbc LIBCMT:winapinls.obj 845 | 0002:00003cc8 ??_C@_1M@JAOCLHDH@?$AAa?$AAr?$AA?9?$AAm?$AAa?$AA?$AA@ 6ed0dcc8 LIBCMT:winapinls.obj 846 | 0002:00003cd4 ??_C@_1M@JHPMKJIE@?$AAa?$AAr?$AA?9?$AAo?$AAm?$AA?$AA@ 6ed0dcd4 LIBCMT:winapinls.obj 847 | 0002:00003ce0 ??_C@_1M@OEPGHFNH@?$AAa?$AAr?$AA?9?$AAq?$AAa?$AA?$AA@ 6ed0dce0 LIBCMT:winapinls.obj 848 | 0002:00003cec ??_C@_1M@KJDONENM@?$AAa?$AAr?$AA?9?$AAs?$AAa?$AA?$AA@ 6ed0dcec LIBCMT:winapinls.obj 849 | 0002:00003cf8 ??_C@_1M@DMJDKLKM@?$AAa?$AAr?$AA?9?$AAs?$AAy?$AA?$AA@ 6ed0dcf8 LIBCMT:winapinls.obj 850 | 0002:00003d04 ??_C@_1M@OMFIPEDC@?$AAa?$AAr?$AA?9?$AAt?$AAn?$AA?$AA@ 6ed0dd04 LIBCMT:winapinls.obj 851 | 0002:00003d10 ??_C@_1M@IHMHGAON@?$AAa?$AAr?$AA?9?$AAy?$AAe?$AA?$AA@ 6ed0dd10 LIBCMT:winapinls.obj 852 | 0002:00003d1c ??_C@_1BG@KDCPGJGB@?$AAa?$AAz?$AA?9?$AAa?$AAz?$AA?9?$AAc?$AAy?$AAr?$AAl?$AA?$AA@ 6ed0dd1c LIBCMT:winapinls.obj 853 | 0002:00003d34 ??_C@_1BG@IBCKDDOE@?$AAa?$AAz?$AA?9?$AAa?$AAz?$AA?9?$AAl?$AAa?$AAt?$AAn?$AA?$AA@ 6ed0dd34 LIBCMT:winapinls.obj 854 | 0002:00003d4c ??_C@_1M@EGPFDCPD@?$AAb?$AAe?$AA?9?$AAb?$AAy?$AA?$AA@ 6ed0dd4c LIBCMT:winapinls.obj 855 | 0002:00003d58 ??_C@_1M@PCMGMCGC@?$AAb?$AAg?$AA?9?$AAb?$AAg?$AA?$AA@ 6ed0dd58 LIBCMT:winapinls.obj 856 | 0002:00003d64 ??_C@_1M@BJBMFGOB@?$AAb?$AAn?$AA?9?$AAi?$AAn?$AA?$AA@ 6ed0dd64 LIBCMT:winapinls.obj 857 | 0002:00003d70 ??_C@_1BG@EAKMMACD@?$AAb?$AAs?$AA?9?$AAb?$AAa?$AA?9?$AAl?$AAa?$AAt?$AAn?$AA?$AA@ 6ed0dd70 LIBCMT:winapinls.obj 858 | 0002:00003d88 ??_C@_1M@KGADAODK@?$AAc?$AAa?$AA?9?$AAe?$AAs?$AA?$AA@ 6ed0dd88 LIBCMT:winapinls.obj 859 | 0002:00003d94 ??_C@_1M@COAJPDHI@?$AAc?$AAs?$AA?9?$AAc?$AAz?$AA?$AA@ 6ed0dd94 LIBCMT:winapinls.obj 860 | 0002:00003da0 ??_C@_1M@DHBHFONH@?$AAc?$AAy?$AA?9?$AAg?$AAb?$AA?$AA@ 6ed0dda0 LIBCMT:winapinls.obj 861 | 0002:00003dac ??_C@_1M@IMGKELGA@?$AAd?$AAa?$AA?9?$AAd?$AAk?$AA?$AA@ 6ed0ddac LIBCMT:winapinls.obj 862 | 0002:00003db8 ??_C@_1M@NNDGDNGA@?$AAd?$AAe?$AA?9?$AAa?$AAt?$AA?$AA@ 6ed0ddb8 LIBCMT:winapinls.obj 863 | 0002:00003dc4 ??_C@_1M@IKDBHEEM@?$AAd?$AAe?$AA?9?$AAc?$AAh?$AA?$AA@ 6ed0ddc4 LIBCMT:winapinls.obj 864 | 0002:00003dd0 ??_C@_1M@GFFOJMCJ@?$AAd?$AAe?$AA?9?$AAd?$AAe?$AA?$AA@ 6ed0ddd0 LIBCMT:winapinls.obj 865 | 0002:00003ddc ??_C@_1M@MDNLKBPM@?$AAd?$AAe?$AA?9?$AAl?$AAi?$AA?$AA@ 6ed0dddc LIBCMT:winapinls.obj 866 | 0002:00003de8 ??_C@_1M@NJBEEJNL@?$AAd?$AAe?$AA?9?$AAl?$AAu?$AA?$AA@ 6ed0dde8 LIBCMT:winapinls.obj 867 | 0002:00003df4 ??_C@_1O@GNNELBAP@?$AAd?$AAi?$AAv?$AA?9?$AAm?$AAv?$AA?$AA@ 6ed0ddf4 LIBCMT:winapinls.obj 868 | 0002:00003e04 ??_C@_1M@EJLEOGAE@?$AAe?$AAl?$AA?9?$AAg?$AAr?$AA?$AA@ 6ed0de04 LIBCMT:winapinls.obj 869 | 0002:00003e10 ??_C@_1M@GMPONJN@?$AAe?$AAn?$AA?9?$AAa?$AAu?$AA?$AA@ 6ed0de10 LIBCMT:winapinls.obj 870 | 0002:00003e1c ??_C@_1M@NIDIIPGF@?$AAe?$AAn?$AA?9?$AAb?$AAz?$AA?$AA@ 6ed0de1c LIBCMT:winapinls.obj 871 | 0002:00003e28 ??_C@_1M@JEHMIMFO@?$AAe?$AAn?$AA?9?$AAc?$AAa?$AA?$AA@ 6ed0de28 LIBCMT:winapinls.obj 872 | 0002:00003e34 ??_C@_1M@IGMJCDLA@?$AAe?$AAn?$AA?9?$AAc?$AAb?$AA?$AA@ 6ed0de34 LIBCMT:winapinls.obj 873 | 0002:00003e40 ??_C@_1M@BNFIGBKG@?$AAe?$AAn?$AA?9?$AAg?$AAb?$AA?$AA@ 6ed0de40 LIBCMT:winapinls.obj 874 | 0002:00003e4c ??_C@_1M@LKIFDIGP@?$AAe?$AAn?$AA?9?$AAi?$AAe?$AA?$AA@ 6ed0de4c LIBCMT:winapinls.obj 875 | 0002:00003e58 ??_C@_1M@PJKFGCCO@?$AAe?$AAn?$AA?9?$AAj?$AAm?$AA?$AA@ 6ed0de58 LIBCMT:winapinls.obj 876 | 0002:00003e64 ??_C@_1M@KPPKEPBO@?$AAe?$AAn?$AA?9?$AAn?$AAz?$AA?$AA@ 6ed0de64 LIBCMT:winapinls.obj 877 | 0002:00003e70 ??_C@_1M@GMDGLDOB@?$AAe?$AAn?$AA?9?$AAp?$AAh?$AA?$AA@ 6ed0de70 LIBCMT:winapinls.obj 878 | 0002:00003e7c ??_C@_1M@ONGIBJNA@?$AAe?$AAn?$AA?9?$AAt?$AAt?$AA?$AA@ 6ed0de7c LIBCMT:winapinls.obj 879 | 0002:00003e88 ??_C@_1M@LLODPCMM@?$AAe?$AAn?$AA?9?$AAu?$AAs?$AA?$AA@ 6ed0de88 LIBCMT:winapinls.obj 880 | 0002:00003e94 ??_C@_1M@LAKFNPAN@?$AAe?$AAn?$AA?9?$AAz?$AAa?$AA?$AA@ 6ed0de94 LIBCMT:winapinls.obj 881 | 0002:00003ea0 ??_C@_1M@MFNHNHEO@?$AAe?$AAn?$AA?9?$AAz?$AAw?$AA?$AA@ 6ed0dea0 LIBCMT:winapinls.obj 882 | 0002:00003eac ??_C@_1M@EJEINPHM@?$AAe?$AAs?$AA?9?$AAa?$AAr?$AA?$AA@ 6ed0deac LIBCMT:winapinls.obj 883 | 0002:00003eb8 ??_C@_1M@GNKPCCJA@?$AAe?$AAs?$AA?9?$AAb?$AAo?$AA?$AA@ 6ed0deb8 LIBCMT:winapinls.obj 884 | 0002:00003ec4 ??_C@_1M@LEEGFONL@?$AAe?$AAs?$AA?9?$AAc?$AAl?$AA?$AA@ 6ed0dec4 LIBCMT:winapinls.obj 885 | 0002:00003ed0 ??_C@_1M@KGPDPBDF@?$AAe?$AAs?$AA?9?$AAc?$AAo?$AA?$AA@ 6ed0ded0 LIBCMT:winapinls.obj 886 | 0002:00003edc ??_C@_1M@EIAHOHH@?$AAe?$AAs?$AA?9?$AAc?$AAr?$AA?$AA@ 6ed0dedc LIBCMT:winapinls.obj 887 | 0002:00003ee8 ??_C@_1M@LLPGMBIN@?$AAe?$AAs?$AA?9?$AAd?$AAo?$AA?$AA@ 6ed0dee8 LIBCMT:winapinls.obj 888 | 0002:00003ef4 ??_C@_1M@DKHMKNJA@?$AAe?$AAs?$AA?9?$AAe?$AAc?$AA?$AA@ 6ed0def4 LIBCMT:winapinls.obj 889 | 0002:00003f00 ??_C@_1M@GKGFPKAP@?$AAe?$AAs?$AA?9?$AAe?$AAs?$AA?$AA@ 6ed0df00 LIBCMT:winapinls.obj 890 | 0002:00003f0c ??_C@_1M@LKHKGDLN@?$AAe?$AAs?$AA?9?$AAg?$AAt?$AA?$AA@ 6ed0df0c LIBCMT:winapinls.obj 891 | 0002:00003f18 ??_C@_1M@HEIIGGJD@?$AAe?$AAs?$AA?9?$AAh?$AAn?$AA?$AA@ 6ed0df18 LIBCMT:winapinls.obj 892 | 0002:00003f24 ??_C@_1M@FBDHPPGD@?$AAe?$AAs?$AA?9?$AAm?$AAx?$AA?$AA@ 6ed0df24 LIBCMT:winapinls.obj 893 | 0002:00003f30 ??_C@_1M@DPAGLNDH@?$AAe?$AAs?$AA?9?$AAn?$AAi?$AA?$AA@ 6ed0df30 LIBCMT:winapinls.obj 894 | 0002:00003f3c ??_C@_1M@MDGOPGDD@?$AAe?$AAs?$AA?9?$AAp?$AAa?$AA?$AA@ 6ed0df3c LIBCMT:winapinls.obj 895 | 0002:00003f48 ??_C@_1M@EMAMGBGE@?$AAe?$AAs?$AA?9?$AAp?$AAe?$AA?$AA@ 6ed0df48 LIBCMT:winapinls.obj 896 | 0002:00003f54 ??_C@_1M@IBMCAOEC@?$AAe?$AAs?$AA?9?$AAp?$AAr?$AA?$AA@ 6ed0df54 LIBCMT:winapinls.obj 897 | 0002:00003f60 ??_C@_1M@FGMDIJED@?$AAe?$AAs?$AA?9?$AAp?$AAy?$AA?$AA@ 6ed0df60 LIBCMT:winapinls.obj 898 | 0002:00003f6c ??_C@_1M@IIDEOLLL@?$AAe?$AAs?$AA?9?$AAs?$AAv?$AA?$AA@ 6ed0df6c LIBCMT:winapinls.obj 899 | 0002:00003f78 ??_C@_1M@GAOBIPA@?$AAe?$AAs?$AA?9?$AAu?$AAy?$AA?$AA@ 6ed0df78 LIBCMT:winapinls.obj 900 | 0002:00003f84 ??_C@_1M@JKFFICHJ@?$AAe?$AAs?$AA?9?$AAv?$AAe?$AA?$AA@ 6ed0df84 LIBCMT:winapinls.obj 901 | 0002:00003f90 ??_C@_1M@PNMLOJDF@?$AAe?$AAt?$AA?9?$AAe?$AAe?$AA?$AA@ 6ed0df90 LIBCMT:winapinls.obj 902 | 0002:00003f9c ??_C@_1M@GHHLIKEI@?$AAe?$AAu?$AA?9?$AAe?$AAs?$AA?$AA@ 6ed0df9c LIBCMT:winapinls.obj 903 | 0002:00003fa8 ??_C@_1M@PBNONODE@?$AAf?$AAa?$AA?9?$AAi?$AAr?$AA?$AA@ 6ed0dfa8 LIBCMT:winapinls.obj 904 | 0002:00003fb4 ??_C@_1M@JEEHPMIL@?$AAf?$AAi?$AA?9?$AAf?$AAi?$AA?$AA@ 6ed0dfb4 LIBCMT:winapinls.obj 905 | 0002:00003fc0 ??_C@_1M@LMDCNDBA@?$AAf?$AAo?$AA?9?$AAf?$AAo?$AA?$AA@ 6ed0dfc0 LIBCMT:winapinls.obj 906 | 0002:00003fcc ??_C@_1M@JKEOHLDK@?$AAf?$AAr?$AA?9?$AAb?$AAe?$AA?$AA@ 6ed0dfcc LIBCMT:winapinls.obj 907 | 0002:00003fd8 ??_C@_1M@NOHADPMI@?$AAf?$AAr?$AA?9?$AAc?$AAa?$AA?$AA@ 6ed0dfd8 LIBCMT:winapinls.obj 908 | 0002:00003fe4 ??_C@_1M@KDHIHAEC@?$AAf?$AAr?$AA?9?$AAc?$AAh?$AA?$AA@ 6ed0dfe4 LIBCMT:winapinls.obj 909 | 0002:00003ff0 ??_C@_1M@MMBBFGAK@?$AAf?$AAr?$AA?9?$AAf?$AAr?$AA?$AA@ 6ed0dff0 LIBCMT:winapinls.obj 910 | 0002:00003ffc ??_C@_1M@PAFNENNF@?$AAf?$AAr?$AA?9?$AAl?$AAu?$AA?$AA@ 6ed0dffc LIBCMT:winapinls.obj 911 | 0002:00004008 ??_C@_1M@EOHDJGDD@?$AAf?$AAr?$AA?9?$AAm?$AAc?$AA?$AA@ 6ed0e008 LIBCMT:winapinls.obj 912 | 0002:00004014 ??_C@_1M@FAPLLOPF@?$AAg?$AAl?$AA?9?$AAe?$AAs?$AA?$AA@ 6ed0e014 LIBCMT:winapinls.obj 913 | 0002:00004020 ??_C@_1M@FOPBFLOO@?$AAg?$AAu?$AA?9?$AAi?$AAn?$AA?$AA@ 6ed0e020 LIBCMT:winapinls.obj 914 | 0002:0000402c ??_C@_1M@KBMCINPM@?$AAh?$AAe?$AA?9?$AAi?$AAl?$AA?$AA@ 6ed0e02c LIBCMT:winapinls.obj 915 | 0002:00004038 ??_C@_1M@BBPHKFPJ@?$AAh?$AAi?$AA?9?$AAi?$AAn?$AA?$AA@ 6ed0e038 LIBCMT:winapinls.obj 916 | 0002:00004044 ??_C@_1M@PMBNDPHD@?$AAh?$AAr?$AA?9?$AAb?$AAa?$AA?$AA@ 6ed0e044 LIBCMT:winapinls.obj 917 | 0002:00004050 ??_C@_1M@BPCKOEGE@?$AAh?$AAr?$AA?9?$AAh?$AAr?$AA?$AA@ 6ed0e050 LIBCMT:winapinls.obj 918 | 0002:0000405c ??_C@_1M@GACBMHKE@?$AAh?$AAu?$AA?9?$AAh?$AAu?$AA?$AA@ 6ed0e05c LIBCMT:winapinls.obj 919 | 0002:00004068 ??_C@_1M@MILPAJJC@?$AAh?$AAy?$AA?9?$AAa?$AAm?$AA?$AA@ 6ed0e068 LIBCMT:winapinls.obj 920 | 0002:00004074 ??_C@_1M@BABBICEC@?$AAi?$AAd?$AA?9?$AAi?$AAd?$AA?$AA@ 6ed0e074 LIBCMT:winapinls.obj 921 | 0002:00004080 ??_C@_1M@BIKNHHPF@?$AAi?$AAs?$AA?9?$AAi?$AAs?$AA?$AA@ 6ed0e080 LIBCMT:winapinls.obj 922 | 0002:0000408c ??_C@_1M@NMPCJPHE@?$AAi?$AAt?$AA?9?$AAc?$AAh?$AA?$AA@ 6ed0e08c LIBCMT:winapinls.obj 923 | 0002:00004098 ??_C@_1M@GHKGFEDF@?$AAi?$AAt?$AA?9?$AAi?$AAt?$AA?$AA@ 6ed0e098 LIBCMT:winapinls.obj 924 | 0002:000040a4 ??_C@_1M@NIEJCJJA@?$AAj?$AAa?$AA?9?$AAj?$AAp?$AA?$AA@ 6ed0e0a4 LIBCMT:winapinls.obj 925 | 0002:000040b0 ??_C@_1M@JILFNBIM@?$AAk?$AAa?$AA?9?$AAg?$AAe?$AA?$AA@ 6ed0e0b0 LIBCMT:winapinls.obj 926 | 0002:000040bc ??_C@_1M@PACPMGPH@?$AAk?$AAk?$AA?9?$AAk?$AAz?$AA?$AA@ 6ed0e0bc LIBCMT:winapinls.obj 927 | 0002:000040c8 ??_C@_1M@IELFGMHA@?$AAk?$AAn?$AA?9?$AAi?$AAn?$AA?$AA@ 6ed0e0c8 LIBCMT:winapinls.obj 928 | 0002:000040d4 ??_C@_1O@IBBJHCH@?$AAk?$AAo?$AAk?$AA?9?$AAi?$AAn?$AA?$AA@ 6ed0e0d4 LIBCMT:winapinls.obj 929 | 0002:000040e4 ??_C@_1M@DMHAEOGC@?$AAk?$AAo?$AA?9?$AAk?$AAr?$AA?$AA@ 6ed0e0e4 LIBCMT:winapinls.obj 930 | 0002:000040f0 ??_C@_1M@HBAHBIGA@?$AAk?$AAy?$AA?9?$AAk?$AAg?$AA?$AA@ 6ed0e0f0 LIBCMT:winapinls.obj 931 | 0002:000040fc ??_C@_1M@KPMILCJG@?$AAl?$AAt?$AA?9?$AAl?$AAt?$AA?$AA@ 6ed0e0fc LIBCMT:winapinls.obj 932 | 0002:00004108 ??_C@_1M@BDEKKCA@?$AAl?$AAv?$AA?9?$AAl?$AAv?$AA?$AA@ 6ed0e108 LIBCMT:winapinls.obj 933 | 0002:00004114 ??_C@_1M@ELCKCCJJ@?$AAm?$AAi?$AA?9?$AAn?$AAz?$AA?$AA@ 6ed0e114 LIBCMT:winapinls.obj 934 | 0002:00004120 ??_C@_1M@CBOOLAPA@?$AAm?$AAk?$AA?9?$AAm?$AAk?$AA?$AA@ 6ed0e120 LIBCMT:winapinls.obj 935 | 0002:0000412c ??_C@_1M@GPHNBJKN@?$AAm?$AAl?$AA?9?$AAi?$AAn?$AA?$AA@ 6ed0e12c LIBCMT:winapinls.obj 936 | 0002:00004138 ??_C@_1M@PABJILIG@?$AAm?$AAn?$AA?9?$AAm?$AAn?$AA?$AA@ 6ed0e138 LIBCMT:winapinls.obj 937 | 0002:00004144 ??_C@_1M@FGBKKIPG@?$AAm?$AAr?$AA?9?$AAi?$AAn?$AA?$AA@ 6ed0e144 LIBCMT:winapinls.obj 938 | 0002:00004150 ??_C@_1M@NDBPDDAL@?$AAm?$AAs?$AA?9?$AAb?$AAn?$AA?$AA@ 6ed0e150 LIBCMT:winapinls.obj 939 | 0002:0000415c ??_C@_1M@OPIHOOPI@?$AAm?$AAs?$AA?9?$AAm?$AAy?$AA?$AA@ 6ed0e15c LIBCMT:winapinls.obj 940 | 0002:00004168 ??_C@_1M@PPDBCNFM@?$AAm?$AAt?$AA?9?$AAm?$AAt?$AA?$AA@ 6ed0e168 LIBCMT:winapinls.obj 941 | 0002:00004174 ??_C@_1M@KDJDKMDD@?$AAn?$AAb?$AA?9?$AAn?$AAo?$AA?$AA@ 6ed0e174 LIBCMT:winapinls.obj 942 | 0002:00004180 ??_C@_1M@KFCFLMJP@?$AAn?$AAl?$AA?9?$AAb?$AAe?$AA?$AA@ 6ed0e180 LIBCMT:winapinls.obj 943 | 0002:0000418c ??_C@_1M@KPOPDDGO@?$AAn?$AAl?$AA?9?$AAn?$AAl?$AA?$AA@ 6ed0e18c LIBCMT:winapinls.obj 944 | 0002:00004198 ??_C@_1M@LJKPEMLN@?$AAn?$AAn?$AA?9?$AAn?$AAo?$AA?$AA@ 6ed0e198 LIBCMT:winapinls.obj 945 | 0002:000041a4 ??_C@_1M@BDGHHBFL@?$AAn?$AAs?$AA?9?$AAz?$AAa?$AA?$AA@ 6ed0e1a4 LIBCMT:winapinls.obj 946 | 0002:000041b0 ??_C@_1M@IDEHOAP@?$AAp?$AAa?$AA?9?$AAi?$AAn?$AA?$AA@ 6ed0e1b0 LIBCMT:winapinls.obj 947 | 0002:000041bc ??_C@_1M@HDBKGOGH@?$AAp?$AAl?$AA?9?$AAp?$AAl?$AA?$AA@ 6ed0e1bc LIBCMT:winapinls.obj 948 | 0002:000041c8 ??_C@_1M@LJLLCMEH@?$AAp?$AAt?$AA?9?$AAb?$AAr?$AA?$AA@ 6ed0e1c8 LIBCMT:winapinls.obj 949 | 0002:000041d4 ??_C@_1M@NCMONAAL@?$AAp?$AAt?$AA?9?$AAp?$AAt?$AA?$AA@ 6ed0e1d4 LIBCMT:winapinls.obj 950 | 0002:000041e0 ??_C@_1O@EAKMAJDN@?$AAq?$AAu?$AAz?$AA?9?$AAb?$AAo?$AA?$AA@ 6ed0e1e0 LIBCMT:winapinls.obj 951 | 0002:000041f0 ??_C@_1O@BHHPIGDN@?$AAq?$AAu?$AAz?$AA?9?$AAe?$AAc?$AA?$AA@ 6ed0e1f0 LIBCMT:winapinls.obj 952 | 0002:00004200 ??_C@_1O@GBAPEKMJ@?$AAq?$AAu?$AAz?$AA?9?$AAp?$AAe?$AA?$AA@ 6ed0e200 LIBCMT:winapinls.obj 953 | 0002:00004210 ??_C@_1M@CLGLEFBO@?$AAr?$AAo?$AA?9?$AAr?$AAo?$AA?$AA@ 6ed0e210 LIBCMT:winapinls.obj 954 | 0002:0000421c ??_C@_1M@CEEDODME@?$AAr?$AAu?$AA?9?$AAr?$AAu?$AA?$AA@ 6ed0e21c LIBCMT:winapinls.obj 955 | 0002:00004228 ??_C@_1M@HPKKKMPP@?$AAs?$AAa?$AA?9?$AAi?$AAn?$AA?$AA@ 6ed0e228 LIBCMT:winapinls.obj 956 | 0002:00004234 ??_C@_1M@BKMAIGOJ@?$AAs?$AAe?$AA?9?$AAf?$AAi?$AA?$AA@ 6ed0e234 LIBCMT:winapinls.obj 957 | 0002:00004240 ??_C@_1M@NDPIFLFI@?$AAs?$AAe?$AA?9?$AAn?$AAo?$AA?$AA@ 6ed0e240 LIBCMT:winapinls.obj 958 | 0002:0000424c ??_C@_1M@DANKKHJ@?$AAs?$AAe?$AA?9?$AAs?$AAe?$AA?$AA@ 6ed0e24c LIBCMT:winapinls.obj 959 | 0002:00004258 ??_C@_1M@PNBLONPJ@?$AAs?$AAk?$AA?9?$AAs?$AAk?$AA?$AA@ 6ed0e258 LIBCMT:winapinls.obj 960 | 0002:00004264 ??_C@_1M@LFMODOAL@?$AAs?$AAl?$AA?9?$AAs?$AAi?$AA?$AA@ 6ed0e264 LIBCMT:winapinls.obj 961 | 0002:00004270 ??_C@_1O@DFKOMPG@?$AAs?$AAm?$AAa?$AA?9?$AAn?$AAo?$AA?$AA@ 6ed0e270 LIBCMT:winapinls.obj 962 | 0002:00004280 ??_C@_1O@NDKPBNNH@?$AAs?$AAm?$AAa?$AA?9?$AAs?$AAe?$AA?$AA@ 6ed0e280 LIBCMT:winapinls.obj 963 | 0002:00004290 ??_C@_1O@PLLKBHAB@?$AAs?$AAm?$AAj?$AA?9?$AAn?$AAo?$AA?$AA@ 6ed0e290 LIBCMT:winapinls.obj 964 | 0002:000042a0 ??_C@_1O@CLEPOGCA@?$AAs?$AAm?$AAj?$AA?9?$AAs?$AAe?$AA?$AA@ 6ed0e2a0 LIBCMT:winapinls.obj 965 | 0002:000042b0 ??_C@_1O@DLGJGKMK@?$AAs?$AAm?$AAn?$AA?9?$AAf?$AAi?$AA?$AA@ 6ed0e2b0 LIBCMT:winapinls.obj 966 | 0002:000042c0 ??_C@_1O@OJDJGAJC@?$AAs?$AAm?$AAs?$AA?9?$AAf?$AAi?$AA?$AA@ 6ed0e2c0 LIBCMT:winapinls.obj 967 | 0002:000042d0 ??_C@_1M@BOFOGHPB@?$AAs?$AAq?$AA?9?$AAa?$AAl?$AA?$AA@ 6ed0e2d0 LIBCMT:winapinls.obj 968 | 0002:000042dc ??_C@_1BG@LJBBIPGB@?$AAs?$AAr?$AA?9?$AAb?$AAa?$AA?9?$AAc?$AAy?$AAr?$AAl?$AA?$AA@ 6ed0e2dc LIBCMT:winapinls.obj 969 | 0002:000042f4 ??_C@_1BG@JLBENFOE@?$AAs?$AAr?$AA?9?$AAb?$AAa?$AA?9?$AAl?$AAa?$AAt?$AAn?$AA?$AA@ 6ed0e2f4 LIBCMT:winapinls.obj 970 | 0002:0000430c ??_C@_1BG@KODPNHE@?$AAs?$AAr?$AA?9?$AAs?$AAp?$AA?9?$AAc?$AAy?$AAr?$AAl?$AA?$AA@ 6ed0e30c LIBCMT:winapinls.obj 971 | 0002:00004324 ??_C@_1BG@CIOGKHPB@?$AAs?$AAr?$AA?9?$AAs?$AAp?$AA?9?$AAl?$AAa?$AAt?$AAn?$AA?$AA@ 6ed0e324 LIBCMT:winapinls.obj 972 | 0002:0000433c ??_C@_1M@NGFJLMAC@?$AAs?$AAv?$AA?9?$AAf?$AAi?$AA?$AA@ 6ed0e33c LIBCMT:winapinls.obj 973 | 0002:00004348 ??_C@_1M@MPJEJAJC@?$AAs?$AAv?$AA?9?$AAs?$AAe?$AA?$AA@ 6ed0e348 LIBCMT:winapinls.obj 974 | 0002:00004354 ??_C@_1M@MPNDHLFK@?$AAs?$AAw?$AA?9?$AAk?$AAe?$AA?$AA@ 6ed0e354 LIBCMT:winapinls.obj 975 | 0002:00004360 ??_C@_1O@KOHBJJI@?$AAs?$AAy?$AAr?$AA?9?$AAs?$AAy?$AA?$AA@ 6ed0e360 LIBCMT:winapinls.obj 976 | 0002:00004370 ??_C@_1M@LDCEFHA@?$AAt?$AAa?$AA?9?$AAi?$AAn?$AA?$AA@ 6ed0e370 LIBCMT:winapinls.obj 977 | 0002:0000437c ??_C@_1M@CNJOFAK@?$AAt?$AAe?$AA?9?$AAi?$AAn?$AA?$AA@ 6ed0e37c LIBCMT:winapinls.obj 978 | 0002:00004388 ??_C@_1M@GNAECACD@?$AAt?$AAh?$AA?9?$AAt?$AAh?$AA?$AA@ 6ed0e388 LIBCMT:winapinls.obj 979 | 0002:00004394 ??_C@_1M@CHBIHOJO@?$AAt?$AAn?$AA?9?$AAz?$AAa?$AA?$AA@ 6ed0e394 LIBCMT:winapinls.obj 980 | 0002:000043a0 ??_C@_1M@GCCMIGPJ@?$AAt?$AAr?$AA?9?$AAt?$AAr?$AA?$AA@ 6ed0e3a0 LIBCMT:winapinls.obj 981 | 0002:000043ac ??_C@_1M@CELMCNBK@?$AAt?$AAt?$AA?9?$AAr?$AAu?$AA?$AA@ 6ed0e3ac LIBCMT:winapinls.obj 982 | 0002:000043b8 ??_C@_1M@KLMCELGA@?$AAu?$AAk?$AA?9?$AAu?$AAa?$AA?$AA@ 6ed0e3b8 LIBCMT:winapinls.obj 983 | 0002:000043c4 ??_C@_1M@EPAJJAJF@?$AAu?$AAr?$AA?9?$AAp?$AAk?$AA?$AA@ 6ed0e3c4 LIBCMT:winapinls.obj 984 | 0002:000043d0 ??_C@_1BG@GEGPMCDJ@?$AAu?$AAz?$AA?9?$AAu?$AAz?$AA?9?$AAc?$AAy?$AAr?$AAl?$AA?$AA@ 6ed0e3d0 LIBCMT:winapinls.obj 985 | 0002:000043e8 ??_C@_1BG@EGGKJILM@?$AAu?$AAz?$AA?9?$AAu?$AAz?$AA?9?$AAl?$AAa?$AAt?$AAn?$AA?$AA@ 6ed0e3e8 LIBCMT:winapinls.obj 986 | 0002:00004400 ??_C@_1M@GFOCLFF@?$AAv?$AAi?$AA?9?$AAv?$AAn?$AA?$AA@ 6ed0e400 LIBCMT:winapinls.obj 987 | 0002:0000440c ??_C@_1M@CPAMEDFI@?$AAx?$AAh?$AA?9?$AAz?$AAa?$AA?$AA@ 6ed0e40c LIBCMT:winapinls.obj 988 | 0002:00004418 ??_C@_1O@EBKIFIGN@?$AAz?$AAh?$AA?9?$AAc?$AAh?$AAs?$AA?$AA@ 6ed0e418 LIBCMT:winapinls.obj 989 | 0002:00004428 ??_C@_1O@NMHPGANE@?$AAz?$AAh?$AA?9?$AAc?$AAh?$AAt?$AA?$AA@ 6ed0e428 LIBCMT:winapinls.obj 990 | 0002:00004438 ??_C@_1M@LPINJOMC@?$AAz?$AAh?$AA?9?$AAc?$AAn?$AA?$AA@ 6ed0e438 LIBCMT:winapinls.obj 991 | 0002:00004444 ??_C@_1M@OCJEJODD@?$AAz?$AAh?$AA?9?$AAh?$AAk?$AA?$AA@ 6ed0e444 LIBCMT:winapinls.obj 992 | 0002:00004450 ??_C@_1M@DNDLJINH@?$AAz?$AAh?$AA?9?$AAm?$AAo?$AA?$AA@ 6ed0e450 LIBCMT:winapinls.obj 993 | 0002:0000445c ??_C@_1M@MBFDNDND@?$AAz?$AAh?$AA?9?$AAs?$AAg?$AA?$AA@ 6ed0e45c LIBCMT:winapinls.obj 994 | 0002:00004468 ??_C@_1M@IMEPLEPE@?$AAz?$AAh?$AA?9?$AAt?$AAw?$AA?$AA@ 6ed0e468 LIBCMT:winapinls.obj 995 | 0002:00004474 ??_C@_1M@BBGHNHJP@?$AAz?$AAu?$AA?9?$AAz?$AAa?$AA?$AA@ 6ed0e474 LIBCMT:winapinls.obj 996 | 0002:00004480 ___newctype 6ed0e480 LIBCMT:ctype.obj 997 | 0002:00004780 __wctype 6ed0e780 LIBCMT:ctype.obj 998 | 0002:00004988 ___newclmap 6ed0e988 LIBCMT:ctype.obj 999 | 0002:00004b08 ___newcumap 6ed0eb08 LIBCMT:ctype.obj 1000 | 0002:00004c88 ___rg_language_count 6ed0ec88 LIBCMT:getqloc.obj 1001 | 0002:00004c8c ___rg_country_count 6ed0ec8c LIBCMT:getqloc.obj 1002 | 0002:00004c90 ??_C@_1BG@GOEBHBDC@?$AAU?$AAS?$AAE?$AAR?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 6ed0ec90 LIBCMT:crtmboxw.obj 1003 | 0002:00004ca8 ??_C@_0M@DLDCCGNP@MessageBoxW?$AA@ 6ed0eca8 LIBCMT:crtmboxw.obj 1004 | 0002:00004cb4 ??_C@_0BA@HNOPNCHB@GetActiveWindow?$AA@ 6ed0ecb4 LIBCMT:crtmboxw.obj 1005 | 0002:00004cc4 ??_C@_0BD@HHGDFDBJ@GetLastActivePopup?$AA@ 6ed0ecc4 LIBCMT:crtmboxw.obj 1006 | 0002:00004cd8 ??_C@_0BK@DEKFELLI@GetUserObjectInformationW?$AA@ 6ed0ecd8 LIBCMT:crtmboxw.obj 1007 | 0002:00004cf4 ??_C@_0BI@DFKBFLJE@GetProcessWindowStation?$AA@ 6ed0ecf4 LIBCMT:crtmboxw.obj 1008 | 0002:00004d0c ??_C@_1BA@BALFACEM@?$AAC?$AAO?$AAN?$AAO?$AAU?$AAT?$AA$?$AA?$AA@ 6ed0ed0c LIBCMT:initcon.obj 1009 | 0002:00004d20 __load_config_used 6ed0ed20 LIBCMT:loadcfg.obj 1010 | 0002:00004d70 ___safe_se_handler_table 6ed0ed70 1011 | 0002:00004d7c ___rtc_iaa 6ed0ed7c LIBCMT:initsect.obj 1012 | 0002:00004d80 ___rtc_izz 6ed0ed80 LIBCMT:initsect.obj 1013 | 0002:00004d84 ___rtc_taa 6ed0ed84 LIBCMT:initsect.obj 1014 | 0002:00004d88 ___rtc_tzz 6ed0ed88 LIBCMT:initsect.obj 1015 | 0002:00005084 __IMPORT_DESCRIPTOR_libhttpd 6ed0f084 libhttpd:libhttpd.dll 1016 | 0002:00005098 __IMPORT_DESCRIPTOR_libapr-1 6ed0f098 libapr-1:libapr-1.dll 1017 | 0002:000050ac __IMPORT_DESCRIPTOR_libaprutil-1 6ed0f0ac libaprutil-1:libaprutil-1.dll 1018 | 0002:000050c0 __IMPORT_DESCRIPTOR_KERNEL32 6ed0f0c0 kernel32:KERNEL32.dll 1019 | 0002:000050d4 __IMPORT_DESCRIPTOR_ADVAPI32 6ed0f0d4 advapi32:ADVAPI32.dll 1020 | 0002:000050e8 __IMPORT_DESCRIPTOR_ole32 6ed0f0e8 ole32:ole32.dll 1021 | 0002:000050fc __NULL_IMPORT_DESCRIPTOR 6ed0f0fc libhttpd:libhttpd.dll 1022 | 0003:00000000 _auth_ntlm_module 6ed10000 mod_ntlm.obj 1023 | 0003:00000040 ___security_cookie 6ed10040 LIBCMT:gs_cookie.obj 1024 | 0003:00000044 ___security_cookie_complement 6ed10044 LIBCMT:gs_cookie.obj 1025 | 0003:00000050 __NLG_Destination 6ed10050 LIBCMT:exsup.obj 1026 | 0003:00000060 ___isa_enabled 6ed10060 LIBCMT:cpu_disp.obj 1027 | 0003:00000068 ___ptmbcinfo 6ed10068 LIBCMT:mbctype.obj 1028 | 0003:00000160 __mbctype 6ed10160 LIBCMT:mbctype.obj 1029 | 0003:00000268 __mbcasemap 6ed10268 LIBCMT:mbctype.obj 1030 | 0003:00000368 ___initialmbcinfo 6ed10368 LIBCMT:mbctype.obj 1031 | 0003:00000588 ___flsindex 6ed10588 LIBCMT:tidtable.obj 1032 | 0003:00000700 ___wclocalestr 6ed10700 LIBCMT:nlsdata.obj 1033 | 0003:00000708 ___lc_time_c 6ed10708 LIBCMT:nlsdata.obj 1034 | 0003:0000086c ___ptlocinfo 6ed1086c LIBCMT:nlsdata.obj 1035 | 0003:00000870 ___initiallocinfo 6ed10870 LIBCMT:nlsdata.obj 1036 | 0003:00000928 ___mb_cur_max 6ed10928 LIBCMT:nlsdata.obj 1037 | 0003:0000092c ___globallocalestatus 6ed1092c LIBCMT:glstatus.obj 1038 | 0003:00000938 ___badioinfo 6ed10938 LIBCMT:ioinit.obj 1039 | 0003:00000aa0 ___lconv 6ed10aa0 LIBCMT:lconv.obj 1040 | 0003:00000aa4 ___lconv_static_decimal 6ed10aa4 LIBCMT:lconv.obj 1041 | 0003:00000aa8 ___lconv_c 6ed10aa8 LIBCMT:lconv.obj 1042 | 0003:00000af8 ___lconv_static_W_decimal 6ed10af8 LIBCMT:lconv.obj 1043 | 0003:00000b00 __pctype 6ed10b00 LIBCMT:ctype.obj 1044 | 0003:00000b04 __pwctype 6ed10b04 LIBCMT:ctype.obj 1045 | 0003:00000b10 __cfltcvt_tab 6ed10b10 LIBCMT:cmiscdat.obj 1046 | 0003:00000b38 __iob 6ed10b38 LIBCMT:_file.obj 1047 | 0003:00000dc0 ___abort_behavior 6ed10dc0 LIBCMT:abort.obj 1048 | 0003:00000dd0 __confh 6ed10dd0 LIBCMT:initcon.obj 1049 | 0003:00000de0 _sspiModuleInfo 6ed10de0 mod_ntlm.obj 1050 | 0003:00000e40 __aenvptr 6ed10e40 LIBCMT:dllcrt0.obj 1051 | 0003:00000e44 __wenvptr 6ed10e44 LIBCMT:dllcrt0.obj 1052 | 0003:00001168 ___isa_available 6ed11168 LIBCMT:cpu_disp.obj 1053 | 0003:0000116c ___favor 6ed1116c LIBCMT:cpu_disp.obj 1054 | 0003:00001170 ___pInvalidArgHandler 6ed11170 LIBCMT:invarg.obj 1055 | 0003:00001174 ___mblocalename 6ed11174 LIBCMT:mbctype.obj 1056 | 0003:00001178 ___mbcodepage 6ed11178 LIBCMT:mbctype.obj 1057 | 0003:0000117c ___ismbcodepage 6ed1117c LIBCMT:mbctype.obj 1058 | 0003:00001180 ___mbulinfo 6ed11180 LIBCMT:mbctype.obj 1059 | 0003:00001190 ___locale_changed 6ed11190 LIBCMT:wsetloca.obj 1060 | 0003:00001194 __umaskval 6ed11194 LIBCMT:crt0dat.obj 1061 | 0003:00001198 __exitflag 6ed11198 LIBCMT:crt0dat.obj 1062 | 0003:0000119c __C_Termination_Done 6ed1119c LIBCMT:crt0dat.obj 1063 | 0003:000011a0 ___winitenv 6ed111a0 LIBCMT:crt0dat.obj 1064 | 0003:000011a4 ___initenv 6ed111a4 LIBCMT:crt0dat.obj 1065 | 0003:000011a8 __C_Exit_Done 6ed111a8 LIBCMT:crt0dat.obj 1066 | 0003:000011ac ___argc 6ed111ac LIBCMT:crt0dat.obj 1067 | 0003:000011b0 ___argv 6ed111b0 LIBCMT:crt0dat.obj 1068 | 0003:000011b4 ___wargv 6ed111b4 LIBCMT:crt0dat.obj 1069 | 0003:000011b8 __environ 6ed111b8 LIBCMT:crt0dat.obj 1070 | 0003:000011bc __wenviron 6ed111bc LIBCMT:crt0dat.obj 1071 | 0003:000011c0 __pgmptr 6ed111c0 LIBCMT:crt0dat.obj 1072 | 0003:000011c4 __wpgmptr 6ed111c4 LIBCMT:crt0dat.obj 1073 | 0003:000011c8 __crtheap 6ed111c8 LIBCMT:heapinit.obj 1074 | 0003:000011d0 ___pioinfo 6ed111d0 LIBCMT:ioinit.obj 1075 | 0003:000013d8 __maxwait 6ed113d8 LIBCMT:crtheap.obj 1076 | 0003:000013dc ?_pnhHeap@@3P6AHI@ZA 6ed113dc LIBCMT:handler.obj 1077 | 0003:000013e0 ___app_type 6ed113e0 LIBCMT:crt0msg.obj 1078 | 0003:00001a10 __newmode 6ed11a10 LIBCMT:_newmode.obj 1079 | 0003:00001b68 ___lconv_static_null 6ed11b68 LIBCMT:lconv.obj 1080 | 0003:00001b6c ___lconv_static_W_null 6ed11b6c LIBCMT:lconv.obj 1081 | 0003:00001b74 ?__pInconsistency@@3P6AXXZA 6ed11b74 LIBCMT:hooks.obj 1082 | 0003:00001b78 ___pPurecall 6ed11b78 LIBCMT:inithelp.obj 1083 | 0003:00001b94 __stdbuf 6ed11b94 LIBCMT:_sftbuf.obj 1084 | 0003:00001b9c __cflush 6ed11b9c LIBCMT:_file.obj 1085 | 0003:00001ba0 ___error_mode 6ed11ba0 LIBCMT:errmode.obj 1086 | 0003:00001bb8 ___piob 6ed11bb8 1087 | 0003:00001bbc __nstream 6ed11bbc 1088 | 0003:00001bc0 __bufin 6ed11bc0 1089 | 0003:00002bc0 __debugger_hook_dummy 6ed12bc0 1090 | 0003:00002be0 _encodedKERNEL32Functions 6ed12be0 1091 | 0003:00002c54 __nhandle 6ed12c54 1092 | 0003:00002c58 ___dyn_tls_init_callback 6ed12c58 1093 | 0003:00002c5c ___onexitend 6ed12c5c 1094 | 0003:00002c60 ___onexitbegin 6ed12c60 1095 | 0003:00002c64 __FPinit 6ed12c64 1096 | 0003:00002c68 ___mbctype_initialized 6ed12c68 1097 | 0003:00002c6c ___env_initialized 6ed12c6c 1098 | 0003:00002c70 __acmdln 6ed12c70 1099 | 0003:00002c74 __pDestructExceptionObject 6ed12c74 1100 | 1101 | entry point at 0001:00002695 1102 | 1103 | Static symbols 1104 | 1105 | 0001:00000000 _register_hooks 6ed01000 f mod_ntlm.obj 1106 | 0001:000000a0 _init_module 6ed010a0 f mod_ntlm.obj 1107 | 0001:00000330 _sspi_module_cleanup 6ed01330 f mod_ntlm.obj 1108 | 0001:00000360 _accept_security_context 6ed01360 f mod_ntlm_authentication.obj 1109 | 0001:0000052c $LN28 6ed0152c mod_ntlm_authentication.obj 1110 | 0001:00000538 $LN25 6ed01538 mod_ntlm_authentication.obj 1111 | 0001:00000950 _check_cleartext_auth 6ed01950 f mod_ntlm_authentication.obj 1112 | 0001:00000be0 _construct_username 6ed01be0 f mod_ntlm_authentication.obj 1113 | 0001:00000c80 _gen_client_context 6ed01c80 f mod_ntlm_authentication.obj 1114 | 0001:00000d80 _gen_server_context 6ed01d80 f mod_ntlm_authentication.obj 1115 | 0001:00000e70 _get_package_max_token_size 6ed01e70 f mod_ntlm_authentication.obj 1116 | 0001:00000ee0 _ie_post_empty 6ed01ee0 f mod_ntlm_authentication.obj 1117 | 0001:00000f90 _ie_post_needs_reauth 6ed01f90 f mod_ntlm_authentication.obj 1118 | 0001:00000ff0 _log_sspi_auth_failure 6ed01ff0 f mod_ntlm_authentication.obj 1119 | 0001:00001090 _obtain_credentials 6ed02090 f mod_ntlm_authentication.obj 1120 | 0001:000011b0 _set_connection_details 6ed021b0 f mod_ntlm_authentication.obj 1121 | 0001:000012b0 _common_deny_actions 6ed022b0 f mod_ntlm_authorization.obj 1122 | 0001:000016f0 _check_package_valid 6ed026f0 f mod_ntlm_interface.obj 1123 | 0001:000017a0 _get_basic_userpass 6ed027a0 f mod_ntlm_interface.obj 1124 | 0001:000019d0 _get_sspi_userpass 6ed029d0 f mod_ntlm_interface.obj 1125 | 0001:00001df0 $$000000 6ed02df0 LIBCMT:exsup4.obj 1126 | 0001:00001e80 __unwind_handler4 6ed02e80 f LIBCMT:exsup4.obj 1127 | 0001:00001f50 $$000000 6ed02f50 LIBCMT:memset.obj 1128 | 0001:00001fe0 $$000000 6ed02fe0 LIBCMT:strchr.obj 1129 | 0001:0000236a ?_strupr_s_l_stat@@YAHPADIPAUlocaleinfo_struct@@@Z 6ed0336a f LIBCMT:strupr.obj 1130 | 0001:000026b8 ___DllMainCRTStartup 6ed036b8 f LIBCMT:dllcrt0.obj 1131 | 0001:00002a80 $$000000 6ed03a80 LIBCMT:exsup.obj 1132 | 0001:00002aa0 __unwind_handler 6ed03aa0 f LIBCMT:exsup.obj 1133 | 0001:000033f2 ?CPtoLocaleName@@YAPB_WH@Z 6ed043f2 f LIBCMT:mbctype.obj 1134 | 0001:0000342c ?getSystemCP@@YAHH@Z 6ed0442c f LIBCMT:mbctype.obj 1135 | 0001:00003498 ?setSBCS@@YAXPAUthreadmbcinfostruct@@@Z 6ed04498 f LIBCMT:mbctype.obj 1136 | 0001:00003501 ?setSBUpLow@@YAXPAUthreadmbcinfostruct@@@Z 6ed04501 f LIBCMT:mbctype.obj 1137 | 0001:00003ad7 ?__crtLCMapStringA_stat@@YAHPAUlocaleinfo_struct@@PB_WKPBDHPADHHH@Z 6ed04ad7 f LIBCMT:a_map.obj 1138 | 0001:000040d0 $$000000 6ed050d0 LIBCMT:alloca16.obj 1139 | 0001:00004527 __initterm 6ed05527 f LIBCMT:crt0dat.obj 1140 | 0001:00004577 _doexit 6ed05577 f LIBCMT:crt0dat.obj 1141 | 0001:00004a74 _parse_cmdline 6ed05a74 f LIBCMT:stdargv.obj 1142 | 0001:00005250 $$000000 6ed06250 LIBCMT:sehprolg4.obj 1143 | 0001:00005b58 ?__crtGetStringTypeA_stat@@YAHPAUlocaleinfo_struct@@KPBDHPAGHH@Z 6ed06b58 f LIBCMT:a_str.obj 1144 | 0001:00005dc0 $$000000 6ed06dc0 LIBCMT:chkstk.obj 1145 | 0001:00005df0 $$000000 6ed06df0 LIBCMT:memcpy.obj 1146 | 0001:00006040 LeadUpVec 6ed07040 LIBCMT:memcpy.obj 1147 | 0001:000060bc UnwindUpVec 6ed070bc LIBCMT:memcpy.obj 1148 | 0001:00006128 TrailUpVec 6ed07128 LIBCMT:memcpy.obj 1149 | 0001:000061cc LeadDownVec 6ed071cc LIBCMT:memcpy.obj 1150 | 0001:00006258 UnwindDownVec 6ed07258 LIBCMT:memcpy.obj 1151 | 0001:000062c4 TrailDownVec 6ed072c4 LIBCMT:memcpy.obj 1152 | 0001:00006642 __onexit_nolock 6ed07642 f LIBCMT:onexit.obj 1153 | 0001:00006969 _siglookup 6ed07969 f LIBCMT:winsig.obj 1154 | 0001:00006b15 ?x_ismbbtype_l@@YAHPAUlocaleinfo_struct@@IHH@Z 6ed07b15 f LIBCMT:ismbbyte.obj 1155 | 0001:00006b90 $$000000 6ed07b90 LIBCMT:strlen.obj 1156 | 0001:0000710a _flsall 6ed0810a f LIBCMT:fflush.obj 1157 | 0001:00007290 $$000000 6ed08290 LIBCMT:ulldvrm.obj 1158 | 0001:00007e00 $$000000 6ed08e00 LIBCMT:llmul.obj 1159 | 0002:000001c4 _pinit 6ed0a1c4 LIBCMT:cpu_disp.obj 1160 | 0002:000001c8 _pinit 6ed0a1c8 LIBCMT:mbctype.obj 1161 | 0002:000001cc _pinit 6ed0a1cc LIBCMT:onexit.obj 1162 | 0002:000001d0 _pinit 6ed0a1d0 LIBCMT:_file.obj 1163 | 0002:000001dc _pterm 6ed0a1dc LIBCMT:wsetloca.obj 1164 | 0002:000001e0 _pterm 6ed0a1e0 LIBCMT:initcon.obj 1165 | 0002:000001e4 _pterm 6ed0a1e4 LIBCMT:_file.obj 1166 | 0002:00000338 _authz_sspi_user_provider 6ed0a338 mod_ntlm.obj 1167 | 0002:00000340 _authz_sspi_group_provider 6ed0a340 mod_ntlm.obj 1168 | 0002:00000348 _authz_sspi_valid_provider 6ed0a348 mod_ntlm.obj 1169 | 0002:00000350 _aplog_module_index 6ed0a350 mod_ntlm.obj 1170 | 0002:00000358 _sspi_cmds 6ed0a358 mod_ntlm.obj 1171 | 0002:00000b18 _aplog_module_index 6ed0ab18 mod_ntlm_authentication.obj 1172 | 0002:00000f34 _aplog_module_index 6ed0af34 mod_ntlm_authorization.obj 1173 | 0002:00001148 _aplog_module_index 6ed0b148 mod_ntlm_interface.obj 1174 | 0002:00001234 _GS_ExceptionPointers 6ed0b234 LIBCMT:gs_report.obj 1175 | 0002:0000123c __mb_locale_names 6ed0b23c LIBCMT:mbctype.obj 1176 | 0002:000015d8 __first_127char 6ed0b5d8 LIBCMT:wsetloca.obj 1177 | 0002:00002230 _rterrs 6ed0c230 LIBCMT:crt0msg.obj 1178 | 0002:00004d90 __sehtable$_init_module 6ed0ed90 mod_ntlm.obj 1179 | 0002:00004db0 __sehtable$__CRT_INIT@12 6ed0edb0 LIBCMT:dllcrt0.obj 1180 | 0002:00004dd0 __sehtable$___DllMainCRTStartup 6ed0edd0 LIBCMT:dllcrt0.obj 1181 | 0002:00004df0 __sehtable$__IsNonwritableInCurrentImage 6ed0edf0 LIBCMT:pesect.obj 1182 | 0002:00004e10 __sehtable$___updatetlocinfo 6ed0ee10 LIBCMT:localref.obj 1183 | 0002:00004e30 __sehtable$___updatetmbcinfo 6ed0ee30 LIBCMT:mbctype.obj 1184 | 0002:00004e50 __sehtable$__setmbcp 6ed0ee50 LIBCMT:mbctype.obj 1185 | 0002:00004e70 __sehtable$__freefls@4 6ed0ee70 LIBCMT:tidtable.obj 1186 | 0002:00004e98 __sehtable$__initptd 6ed0ee98 LIBCMT:tidtable.obj 1187 | 0002:00004ec0 __sehtable$__locterm 6ed0eec0 LIBCMT:wsetloca.obj 1188 | 0002:00004ee0 __sehtable$_doexit 6ed0eee0 LIBCMT:crt0dat.obj 1189 | 0002:00004f00 __sehtable$__ioinit 6ed0ef00 LIBCMT:ioinit.obj 1190 | 0002:00004f20 __sehtable$__mtinitlocknum 6ed0ef20 LIBCMT:mlock.obj 1191 | 0002:00004f40 __sehtable$__onexit 6ed0ef40 LIBCMT:onexit.obj 1192 | 0002:00004f60 __sehtable$?terminate@@YAXXZ 6ed0ef60 LIBCMT:hooks.obj 1193 | 0002:00004f80 __sehtable$_raise 6ed0ef80 LIBCMT:winsig.obj 1194 | 0002:00004fa0 __sehtable$_flsall 6ed0efa0 LIBCMT:fflush.obj 1195 | 0002:00004fc8 __sehtable$__fcloseall 6ed0efc8 LIBCMT:closeall.obj 1196 | 0002:00004fe8 __sehtable$__commit 6ed0efe8 LIBCMT:commit.obj 1197 | 0002:00005008 __sehtable$__write 6ed0f008 LIBCMT:write.obj 1198 | 0002:00005028 __sehtable$_fclose 6ed0f028 LIBCMT:fclose.obj 1199 | 0002:00005048 __sehtable$___lock_fhandle 6ed0f048 LIBCMT:osfinfo.obj 1200 | 0002:00005068 __sehtable$__close 6ed0f068 LIBCMT:close.obj 1201 | 0002:000053ee .idata$6 6ed0f3ee libhttpd:libhttpd.dll 1202 | 0002:00005512 .idata$6 6ed0f512 libapr-1:libapr-1.dll 1203 | 0002:00005596 .idata$6 6ed0f596 libaprutil-1:libaprutil-1.dll 1204 | 0002:0000563c .idata$6 6ed0f63c kernel32:KERNEL32.dll 1205 | 0002:0000568a .idata$6 6ed0f68a advapi32:ADVAPI32.dll 1206 | 0002:000056de .idata$6 6ed0f6de ole32:ole32.dll 1207 | 0002:00005b40 .edata 6ed0fb40 mod_authn_ntlm.exp 1208 | 0002:00005b68 rgpv 6ed0fb68 mod_authn_ntlm.exp 1209 | 0002:00005b6c rgszName 6ed0fb6c mod_authn_ntlm.exp 1210 | 0002:00005b70 rgwOrd 6ed0fb70 mod_authn_ntlm.exp 1211 | 0002:00005b72 szName 6ed0fb72 mod_authn_ntlm.exp 1212 | 0002:00005b84 $N00001 6ed0fb84 mod_authn_ntlm.exp 1213 | 0003:0000006c ___rgctypeflag 6ed1006c LIBCMT:mbctype.obj 1214 | 0003:00000070 ___rgcode_page_info 6ed10070 LIBCMT:mbctype.obj 1215 | 0003:00000590 _errtable 6ed10590 LIBCMT:dosmap.obj 1216 | 0003:000006f8 _ErrnoNoMem 6ed106f8 LIBCMT:dosmap.obj 1217 | 0003:000006fc _DoserrorNoMem 6ed106fc LIBCMT:dosmap.obj 1218 | 0003:00000930 __ctype_loc_style 6ed10930 LIBCMT:wsetloca.obj 1219 | 0003:00000978 ?isPackaged@?1??__crtIsPackagedApp@@9@9 6ed10978 LIBCMT:winapisupp.obj 1220 | 0003:00000980 __locktable 6ed10980 LIBCMT:mlock.obj 1221 | 0003:00000e3c ___proc_attached 6ed10e3c LIBCMT:dllcrt0.obj 1222 | 0003:00000e48 _GS_ExceptionRecord 6ed10e48 LIBCMT:gs_report.obj 1223 | 0003:00000e98 _GS_ContextRecord 6ed10e98 LIBCMT:gs_report.obj 1224 | 0003:00001164 _DebuggerWasPresent 6ed11164 LIBCMT:gs_report.obj 1225 | 0003:0000118c _fSystemSet 6ed1118c LIBCMT:mbctype.obj 1226 | 0003:000012d0 ?_pgmname@?1??_setargv@@9@9 6ed112d0 LIBCMT:stdargv.obj 1227 | 0003:000013e8 ?outmsg@?8??_NMSG_WRITE@@9@9 6ed113e8 LIBCMT:crt0msg.obj 1228 | 0003:00001a18 _lclcritsects 6ed11a18 LIBCMT:mlock.obj 1229 | 0003:00001b70 ___crtCallProc 6ed11b70 LIBCMT:winapinls.obj 1230 | 0003:00001b7c _g_pfnRtlGenRandom 6ed11b7c LIBCMT:rand_s.obj 1231 | 0003:00001b80 _ctrlc_action 6ed11b80 LIBCMT:winsig.obj 1232 | 0003:00001b84 _ctrlbreak_action 6ed11b84 LIBCMT:winsig.obj 1233 | 0003:00001b88 _abort_action 6ed11b88 LIBCMT:winsig.obj 1234 | 0003:00001b8c _term_action 6ed11b8c LIBCMT:winsig.obj 1235 | 0003:00001b90 _ConsoleCtrlHandler_Installed 6ed11b90 LIBCMT:winsig.obj 1236 | 0003:00001ba4 ?pfnMessageBox@?1??__crtMessageBoxW@@9@9 6ed11ba4 LIBCMT:crtmboxw.obj 1237 | 0003:00001ba8 ?pfnGetActiveWindow@?1??__crtMessageBoxW@@9@9 6ed11ba8 LIBCMT:crtmboxw.obj 1238 | 0003:00001bac ?pfnGetLastActivePopup@?1??__crtMessageBoxW@@9@9 6ed11bac LIBCMT:crtmboxw.obj 1239 | 0003:00001bb0 ?pfnGetProcessWindowStation@?1??__crtMessageBoxW@@9@9 6ed11bb0 LIBCMT:crtmboxw.obj 1240 | 0003:00001bb4 ?pfnGetUserObjectInformation@?1??__crtMessageBoxW@@9@9 6ed11bb4 LIBCMT:crtmboxw.obj 1241 | --------------------------------------------------------------------------------