├── .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 |
--------------------------------------------------------------------------------