├── LICENSE ├── vcpkg.json ├── src ├── thread.cpp ├── framework.h ├── CMakeLists.txt ├── pch.cpp ├── pch.h └── dllmain.cpp ├── .gitmodules ├── .gitignore ├── CMakeLists.txt ├── vcpkg-configuration.json ├── CMakeSettings.json ├── .github └── workflows │ └── build.yml ├── README.md └── chromium └── net └── base └── net_error_list.h /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kazutoiris/cef-hook/HEAD/LICENSE -------------------------------------------------------------------------------- /vcpkg.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | "detours" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /src/thread.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kazutoiris/cef-hook/HEAD/src/thread.cpp -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "cef"] 2 | path = cef 3 | url = https://github.com/chromiumembedded/cef 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vs/ 2 | *.user 3 | *.suo 4 | *.aps 5 | build/ 6 | obj/ 7 | vcpkg_installed/ 8 | external/ 9 | out/ -------------------------------------------------------------------------------- /src/framework.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 4 | // Windows 头文件 5 | #include 6 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required (VERSION 3.10) 2 | project(CefHook) 3 | 4 | add_definitions(-DUNICODE -D_UNICODE) 5 | include_directories(${CMAKE_SOURCE_DIR}/cef) 6 | include_directories(${CMAKE_SOURCE_DIR}/chromium) 7 | add_subdirectory(src) 8 | -------------------------------------------------------------------------------- /vcpkg-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "default-registry": { 3 | "kind": "git", 4 | "baseline": "6f1ddd6b6878e7e66fcc35c65ba1d8feec2e01f8", 5 | "repository": "https://github.com/microsoft/vcpkg" 6 | }, 7 | "registries": [ 8 | { 9 | "kind": "artifact", 10 | "location": "https://github.com/microsoft/vcpkg-ce-catalog/archive/refs/heads/main.zip", 11 | "name": "microsoft" 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | find_path(DETOURS_INCLUDE_DIRS "detours/detours.h") 2 | find_library(DETOURS_LIBRARY detours REQUIRED) 3 | 4 | file(GLOB SOURCES "*.cpp" "*.c") 5 | add_library(CefHook SHARED ${SOURCES}) 6 | set_target_properties(CefHook PROPERTIES 7 | LINKER_LANGUAGE C 8 | OUTPUT_NAME "winmm" 9 | PREFIX "" 10 | ) 11 | target_include_directories(CefHook PRIVATE ${DETOURS_INCLUDE_DIRS}) 12 | target_link_libraries(CefHook PRIVATE ${DETOURS_LIBRARY}) 13 | -------------------------------------------------------------------------------- /CMakeSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "x86-Debug", 5 | "generator": "Visual Studio 17 2022", 6 | "configurationType": "Debug", 7 | "inheritEnvironments": [ "msvc_x86" ], 8 | "buildRoot": "${projectDir}\\out\\build\\${name}", 9 | "installRoot": "${projectDir}\\out\\install\\${name}", 10 | "cmakeCommandArgs": "", 11 | "buildCommandArgs": "", 12 | "ctestCommandArgs": "" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /src/pch.cpp: -------------------------------------------------------------------------------- 1 | // pch.cpp: 与预编译标头对应的源文件 2 | 3 | #include "pch.h" 4 | 5 | // 当使用预编译的头时,需要使用此源文件,编译才能成功。 6 | 7 | bool endsWith(const TCHAR* szCurName, const TCHAR* szAppName) { 8 | size_t lenCur = _tcslen(szCurName); 9 | size_t lenApp = _tcslen(szAppName); 10 | 11 | if (lenCur < lenApp) { 12 | return false; 13 | } 14 | 15 | return StrCmpI(szCurName + lenCur - lenApp, szAppName) == 0; 16 | } 17 | 18 | string_t IntToString(int value) { 19 | #ifdef UNICODE 20 | return std::to_wstring(value); 21 | #elif 22 | return std::to_string(value); 23 | #endif 24 | } 25 | -------------------------------------------------------------------------------- /src/pch.h: -------------------------------------------------------------------------------- 1 | // pch.h: 这是预编译标头文件。 2 | // 下方列出的文件仅编译一次,提高了将来生成的生成性能。 3 | // 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 4 | // 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 5 | // 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 6 | 7 | #ifndef PCH_H 8 | #define PCH_H 9 | 10 | // 添加要在此处预编译的标头 11 | #include "framework.h" 12 | #include 13 | #include 14 | #include 15 | 16 | #ifdef UNICODE 17 | typedef std::wstring string_t; 18 | #elif 19 | typedef std::string string_t; 20 | #endif 21 | 22 | extern bool endsWith(const TCHAR* szCurName, const TCHAR* szAppName); 23 | 24 | extern string_t IntToString(int value); 25 | 26 | #endif //PCH_H 27 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | push: 5 | workflow_dispatch: 6 | pull_request: 7 | 8 | jobs: 9 | build: 10 | runs-on: windows-latest 11 | 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@v4 15 | with: 16 | submodules: true 17 | fetch-depth: 0 18 | 19 | - name: Setup msbuild 20 | uses: microsoft/setup-msbuild@v2 21 | 22 | - name: Build 23 | run: | 24 | mkdir build 25 | cd build 26 | cmake -G "Visual Studio 17 2022" -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -A Win32 -DCMAKE_BUILD_TYPE=Release .. 27 | cmake --build . --config Release 28 | 29 | - name: Upload artifact 30 | uses: actions/upload-artifact@v4 31 | with: 32 | path: 'build/src/Release/*.dll' 33 | 34 | release: 35 | name: Release 36 | if: startsWith(github.ref, 'refs/tags/v') 37 | needs: build 38 | runs-on: ubuntu-latest 39 | permissions: 40 | contents: write 41 | id-token: write 42 | attestations: write 43 | steps: 44 | - name: Download from build 45 | uses: actions/download-artifact@v4 46 | with: 47 | merge-multiple: true 48 | - name: Publish release 49 | id: publish 50 | uses: softprops/action-gh-release@v1 51 | with: 52 | fail_on_unmatched_files: true 53 | files: | 54 | *.dll 55 | - name: Attest Release Files 56 | id: attest 57 | uses: actions/attest-build-provenance@v1 58 | with: 59 | subject-path: | 60 | *.dll 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CefHook 2 | 3 | `CefHook` is an example project that demonstrates how to hook functions in applications based on the [Chromium Embedded Framework (CEF)](https://bitbucket.org/chromiumembedded/cef/). 4 | 5 | ## Features 6 | 7 | This project hooks the following functions: 8 | 9 | 1. `on_key_event` and `on_load_end` events in `libcef.dll`. 10 | 2. The `SetWindowDisplayAffinity` function in `user32.dll`. 11 | 12 | ## How to Build 13 | 14 | The project is organized using [CMake](https://cmake.org/), and it can be compiled using various build tools. Below are the options for compiling the project: 15 | 16 | 1. **Visual Studio (2019 or newer)** 17 | 18 | Simply open the project folder in Visual Studio, and it will automatically detect the CMake configuration. You can then build the solution as usual. 19 | 20 | 2. **Vanilla** 21 | 22 | You can also build the project directly from the command line. After configuring CMake, you can use your preferred build system to compile the project. 23 | 24 | ## Dependencies 25 | 26 | - **vcpkg**: A package manager for C and C++ libraries, used for managing third-party dependencies. It simplifies the process of acquiring libraries such as CEF and Detours. You can install it from the [microsoft/vcpkg](https://github.com/microsoft/vcpkg). 27 | - **Detours** (Automatically downloaded by vcpkg): A library for intercepting and modifying function calls, which is used for hooking. You can find more information on the [microsoft/Detours](https://github.com/microsoft/Detours). 28 | - **Visual Studio** / **Microsoft Visual C++ Build Tools**: Recommended for Windows-based development. 29 | - **CMake** (Bundled with Visual Studio): A tool for configuring and managing the build process of the project. 30 | - **Chromium Embedded Framework (CEF)** (Embedded as a submodule): CEF must be available in your development environment. Ensure that the CEF binaries and include files are correctly configured. 31 | 32 | ## License 33 | 34 | This project is licensed under the Anti-996 License. See the [LICENSE](LICENSE) file for more details. -------------------------------------------------------------------------------- /chromium/net/base/net_error_list.h: -------------------------------------------------------------------------------- 1 | // Copyright 2012 The Chromium Authors 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | // This file intentionally does not have header guards, it's included 6 | // inside a macro to generate enum values. The following line silences a 7 | // presubmit and Tricium warning that would otherwise be triggered by this: 8 | // no-include-guard-because-multiply-included 9 | // NOLINT(build/header_guard) 10 | 11 | // This file contains the list of network errors. 12 | 13 | // 14 | // Ranges: 15 | // 0- 99 System related errors 16 | // 100-199 Connection related errors 17 | // 200-299 Certificate errors 18 | // 300-399 HTTP errors 19 | // 400-499 Cache errors 20 | // 500-599 ? 21 | // 600-699 22 | // 700-799 Certificate manager errors 23 | // 800-899 DNS resolver errors 24 | 25 | // An asynchronous IO operation is not yet complete. This usually does not 26 | // indicate a fatal error. Typically this error will be generated as a 27 | // notification to wait for some external notification that the IO operation 28 | // finally completed. 29 | NET_ERROR(IO_PENDING, -1) 30 | 31 | // A generic failure occurred. 32 | NET_ERROR(FAILED, -2) 33 | 34 | // An operation was aborted (due to user action). 35 | NET_ERROR(ABORTED, -3) 36 | 37 | // An argument to the function is incorrect. 38 | NET_ERROR(INVALID_ARGUMENT, -4) 39 | 40 | // The handle or file descriptor is invalid. 41 | NET_ERROR(INVALID_HANDLE, -5) 42 | 43 | // The file or directory cannot be found. 44 | NET_ERROR(FILE_NOT_FOUND, -6) 45 | 46 | // An operation timed out. 47 | NET_ERROR(TIMED_OUT, -7) 48 | 49 | // The file is too large. 50 | NET_ERROR(FILE_TOO_BIG, -8) 51 | 52 | // An unexpected error. This may be caused by a programming mistake or an 53 | // invalid assumption. 54 | NET_ERROR(UNEXPECTED, -9) 55 | 56 | // Permission to access a resource, other than the network, was denied. 57 | NET_ERROR(ACCESS_DENIED, -10) 58 | 59 | // The operation failed because of unimplemented functionality. 60 | NET_ERROR(NOT_IMPLEMENTED, -11) 61 | 62 | // There were not enough resources to complete the operation. 63 | NET_ERROR(INSUFFICIENT_RESOURCES, -12) 64 | 65 | // Memory allocation failed. 66 | NET_ERROR(OUT_OF_MEMORY, -13) 67 | 68 | // The file upload failed because the file's modification time was different 69 | // from the expectation. 70 | NET_ERROR(UPLOAD_FILE_CHANGED, -14) 71 | 72 | // The socket is not connected. 73 | NET_ERROR(SOCKET_NOT_CONNECTED, -15) 74 | 75 | // The file already exists. 76 | NET_ERROR(FILE_EXISTS, -16) 77 | 78 | // The path or file name is too long. 79 | NET_ERROR(FILE_PATH_TOO_LONG, -17) 80 | 81 | // Not enough room left on the disk. 82 | NET_ERROR(FILE_NO_SPACE, -18) 83 | 84 | // The file has a virus. 85 | NET_ERROR(FILE_VIRUS_INFECTED, -19) 86 | 87 | // The client chose to block the request. 88 | NET_ERROR(BLOCKED_BY_CLIENT, -20) 89 | 90 | // The network changed. 91 | NET_ERROR(NETWORK_CHANGED, -21) 92 | 93 | // The request was blocked by the URL block list configured by the domain 94 | // administrator. 95 | NET_ERROR(BLOCKED_BY_ADMINISTRATOR, -22) 96 | 97 | // The socket is already connected. 98 | NET_ERROR(SOCKET_IS_CONNECTED, -23) 99 | 100 | // Error -24 was removed (BLOCKED_ENROLLMENT_CHECK_PENDING) 101 | 102 | // The upload failed because the upload stream needed to be re-read, due to a 103 | // retry or a redirect, but the upload stream doesn't support that operation. 104 | NET_ERROR(UPLOAD_STREAM_REWIND_NOT_SUPPORTED, -25) 105 | 106 | // The request failed because the URLRequestContext is shutting down, or has 107 | // been shut down. 108 | NET_ERROR(CONTEXT_SHUT_DOWN, -26) 109 | 110 | // The request failed because the response was delivered along with requirements 111 | // which are not met ('X-Frame-Options' and 'Content-Security-Policy' ancestor 112 | // checks and 'Cross-Origin-Resource-Policy' for instance). 113 | NET_ERROR(BLOCKED_BY_RESPONSE, -27) 114 | 115 | // Error -28 was removed (BLOCKED_BY_XSS_AUDITOR). 116 | 117 | // The request was blocked by system policy disallowing some or all cleartext 118 | // requests. Used for NetworkSecurityPolicy on Android. 119 | NET_ERROR(CLEARTEXT_NOT_PERMITTED, -29) 120 | 121 | // The request was blocked by a Content Security Policy 122 | NET_ERROR(BLOCKED_BY_CSP, -30) 123 | 124 | // The request was blocked because of no H/2 or QUIC session. 125 | NET_ERROR(H2_OR_QUIC_REQUIRED, -31) 126 | 127 | // The request was blocked by CORB or ORB. 128 | NET_ERROR(BLOCKED_BY_ORB, -32) 129 | 130 | // The request was blocked because it originated from a frame that has disabled 131 | // network access. 132 | NET_ERROR(NETWORK_ACCESS_REVOKED, -33) 133 | 134 | // A connection was closed (corresponding to a TCP FIN). 135 | NET_ERROR(CONNECTION_CLOSED, -100) 136 | 137 | // A connection was reset (corresponding to a TCP RST). 138 | NET_ERROR(CONNECTION_RESET, -101) 139 | 140 | // A connection attempt was refused. 141 | NET_ERROR(CONNECTION_REFUSED, -102) 142 | 143 | // A connection timed out as a result of not receiving an ACK for data sent. 144 | // This can include a FIN packet that did not get ACK'd. 145 | NET_ERROR(CONNECTION_ABORTED, -103) 146 | 147 | // A connection attempt failed. 148 | NET_ERROR(CONNECTION_FAILED, -104) 149 | 150 | // The host name could not be resolved. 151 | NET_ERROR(NAME_NOT_RESOLVED, -105) 152 | 153 | // The Internet connection has been lost. 154 | NET_ERROR(INTERNET_DISCONNECTED, -106) 155 | 156 | // An SSL protocol error occurred. 157 | NET_ERROR(SSL_PROTOCOL_ERROR, -107) 158 | 159 | // The IP address or port number is invalid (e.g., cannot connect to the IP 160 | // address 0 or the port 0). 161 | NET_ERROR(ADDRESS_INVALID, -108) 162 | 163 | // The IP address is unreachable. This usually means that there is no route to 164 | // the specified host or network. 165 | NET_ERROR(ADDRESS_UNREACHABLE, -109) 166 | 167 | // The server requested a client certificate for SSL client authentication. 168 | NET_ERROR(SSL_CLIENT_AUTH_CERT_NEEDED, -110) 169 | 170 | // A tunnel connection through the proxy could not be established. 171 | NET_ERROR(TUNNEL_CONNECTION_FAILED, -111) 172 | 173 | // No SSL protocol versions are enabled. 174 | NET_ERROR(NO_SSL_VERSIONS_ENABLED, -112) 175 | 176 | // The client and server don't support a common SSL protocol version or 177 | // cipher suite. 178 | NET_ERROR(SSL_VERSION_OR_CIPHER_MISMATCH, -113) 179 | 180 | // The server requested a renegotiation (rehandshake). 181 | NET_ERROR(SSL_RENEGOTIATION_REQUESTED, -114) 182 | 183 | // The proxy requested authentication (for tunnel establishment) with an 184 | // unsupported method. 185 | NET_ERROR(PROXY_AUTH_UNSUPPORTED, -115) 186 | 187 | // Error -116 was removed (CERT_ERROR_IN_SSL_RENEGOTIATION) 188 | 189 | // The SSL handshake failed because of a bad or missing client certificate. 190 | NET_ERROR(BAD_SSL_CLIENT_AUTH_CERT, -117) 191 | 192 | // A connection attempt timed out. 193 | NET_ERROR(CONNECTION_TIMED_OUT, -118) 194 | 195 | // There are too many pending DNS resolves, so a request in the queue was 196 | // aborted. 197 | NET_ERROR(HOST_RESOLVER_QUEUE_TOO_LARGE, -119) 198 | 199 | // Failed establishing a connection to the SOCKS proxy server for a target host. 200 | NET_ERROR(SOCKS_CONNECTION_FAILED, -120) 201 | 202 | // The SOCKS proxy server failed establishing connection to the target host 203 | // because that host is unreachable. 204 | NET_ERROR(SOCKS_CONNECTION_HOST_UNREACHABLE, -121) 205 | 206 | // The request to negotiate an alternate protocol failed. 207 | NET_ERROR(ALPN_NEGOTIATION_FAILED, -122) 208 | 209 | // The peer sent an SSL no_renegotiation alert message. 210 | NET_ERROR(SSL_NO_RENEGOTIATION, -123) 211 | 212 | // Winsock sometimes reports more data written than passed. This is probably 213 | // due to a broken LSP. 214 | NET_ERROR(WINSOCK_UNEXPECTED_WRITTEN_BYTES, -124) 215 | 216 | // An SSL peer sent us a fatal decompression_failure alert. This typically 217 | // occurs when a peer selects DEFLATE compression in the mistaken belief that 218 | // it supports it. 219 | NET_ERROR(SSL_DECOMPRESSION_FAILURE_ALERT, -125) 220 | 221 | // An SSL peer sent us a fatal bad_record_mac alert. This has been observed 222 | // from servers with buggy DEFLATE support. 223 | NET_ERROR(SSL_BAD_RECORD_MAC_ALERT, -126) 224 | 225 | // The proxy requested authentication (for tunnel establishment). 226 | NET_ERROR(PROXY_AUTH_REQUESTED, -127) 227 | 228 | // Error -129 was removed (SSL_WEAK_SERVER_EPHEMERAL_DH_KEY). 229 | 230 | // Could not create a connection to the proxy server. An error occurred 231 | // either in resolving its name, or in connecting a socket to it. 232 | // Note that this does NOT include failures during the actual "CONNECT" method 233 | // of an HTTP proxy. 234 | NET_ERROR(PROXY_CONNECTION_FAILED, -130) 235 | 236 | // A mandatory proxy configuration could not be used. Currently this means 237 | // that a mandatory PAC script could not be fetched, parsed or executed. 238 | NET_ERROR(MANDATORY_PROXY_CONFIGURATION_FAILED, -131) 239 | 240 | // -132 was formerly ERR_ESET_ANTI_VIRUS_SSL_INTERCEPTION 241 | 242 | // We've hit the max socket limit for the socket pool while preconnecting. We 243 | // don't bother trying to preconnect more sockets. 244 | NET_ERROR(PRECONNECT_MAX_SOCKET_LIMIT, -133) 245 | 246 | // The permission to use the SSL client certificate's private key was denied. 247 | NET_ERROR(SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED, -134) 248 | 249 | // The SSL client certificate has no private key. 250 | NET_ERROR(SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY, -135) 251 | 252 | // The certificate presented by the HTTPS Proxy was invalid. 253 | NET_ERROR(PROXY_CERTIFICATE_INVALID, -136) 254 | 255 | // An error occurred when trying to do a name resolution (DNS). 256 | NET_ERROR(NAME_RESOLUTION_FAILED, -137) 257 | 258 | // Permission to access the network was denied. This is used to distinguish 259 | // errors that were most likely caused by a firewall from other access denied 260 | // errors. See also ERR_ACCESS_DENIED. 261 | NET_ERROR(NETWORK_ACCESS_DENIED, -138) 262 | 263 | // The request throttler module cancelled this request to avoid DDOS. 264 | NET_ERROR(TEMPORARILY_THROTTLED, -139) 265 | 266 | // A request to create an SSL tunnel connection through the HTTPS proxy 267 | // received a 302 (temporary redirect) response. The response body might 268 | // include a description of why the request failed. 269 | // 270 | // TODO(crbug.com/40093955): This is deprecated and should not be used by 271 | // new code. 272 | NET_ERROR(HTTPS_PROXY_TUNNEL_RESPONSE_REDIRECT, -140) 273 | 274 | // We were unable to sign the CertificateVerify data of an SSL client auth 275 | // handshake with the client certificate's private key. 276 | // 277 | // Possible causes for this include the user implicitly or explicitly 278 | // denying access to the private key, the private key may not be valid for 279 | // signing, the key may be relying on a cached handle which is no longer 280 | // valid, or the CSP won't allow arbitrary data to be signed. 281 | NET_ERROR(SSL_CLIENT_AUTH_SIGNATURE_FAILED, -141) 282 | 283 | // The message was too large for the transport. (for example a UDP message 284 | // which exceeds size threshold). 285 | NET_ERROR(MSG_TOO_BIG, -142) 286 | 287 | // Error -143 was removed (SPDY_SESSION_ALREADY_EXISTS) 288 | 289 | // Error -144 was removed (LIMIT_VIOLATION). 290 | 291 | // Websocket protocol error. Indicates that we are terminating the connection 292 | // due to a malformed frame or other protocol violation. 293 | NET_ERROR(WS_PROTOCOL_ERROR, -145) 294 | 295 | // Error -146 was removed (PROTOCOL_SWITCHED) 296 | 297 | // Returned when attempting to bind an address that is already in use. 298 | NET_ERROR(ADDRESS_IN_USE, -147) 299 | 300 | // An operation failed because the SSL handshake has not completed. 301 | NET_ERROR(SSL_HANDSHAKE_NOT_COMPLETED, -148) 302 | 303 | // SSL peer's public key is invalid. 304 | NET_ERROR(SSL_BAD_PEER_PUBLIC_KEY, -149) 305 | 306 | // The certificate didn't match the built-in public key pins for the host name. 307 | // The pins are set in net/http/transport_security_state.cc and require that 308 | // one of a set of public keys exist on the path from the leaf to the root. 309 | NET_ERROR(SSL_PINNED_KEY_NOT_IN_CERT_CHAIN, -150) 310 | 311 | // Server request for client certificate did not contain any types we support. 312 | NET_ERROR(CLIENT_AUTH_CERT_TYPE_UNSUPPORTED, -151) 313 | 314 | // Error -152 was removed (ORIGIN_BOUND_CERT_GENERATION_TYPE_MISMATCH) 315 | 316 | // An SSL peer sent us a fatal decrypt_error alert. This typically occurs when 317 | // a peer could not correctly verify a signature (in CertificateVerify or 318 | // ServerKeyExchange) or validate a Finished message. 319 | NET_ERROR(SSL_DECRYPT_ERROR_ALERT, -153) 320 | 321 | // There are too many pending WebSocketJob instances, so the new job was not 322 | // pushed to the queue. 323 | NET_ERROR(WS_THROTTLE_QUEUE_TOO_LARGE, -154) 324 | 325 | // Error -155 was removed (TOO_MANY_SOCKET_STREAMS) 326 | 327 | // The SSL server certificate changed in a renegotiation. 328 | NET_ERROR(SSL_SERVER_CERT_CHANGED, -156) 329 | 330 | // Error -157 was removed (SSL_INAPPROPRIATE_FALLBACK). 331 | 332 | // Error -158 was removed (CT_NO_SCTS_VERIFIED_OK). 333 | 334 | // The SSL server sent us a fatal unrecognized_name alert. 335 | NET_ERROR(SSL_UNRECOGNIZED_NAME_ALERT, -159) 336 | 337 | // Failed to set the socket's receive buffer size as requested. 338 | NET_ERROR(SOCKET_SET_RECEIVE_BUFFER_SIZE_ERROR, -160) 339 | 340 | // Failed to set the socket's send buffer size as requested. 341 | NET_ERROR(SOCKET_SET_SEND_BUFFER_SIZE_ERROR, -161) 342 | 343 | // Failed to set the socket's receive buffer size as requested, despite success 344 | // return code from setsockopt. 345 | NET_ERROR(SOCKET_RECEIVE_BUFFER_SIZE_UNCHANGEABLE, -162) 346 | 347 | // Failed to set the socket's send buffer size as requested, despite success 348 | // return code from setsockopt. 349 | NET_ERROR(SOCKET_SEND_BUFFER_SIZE_UNCHANGEABLE, -163) 350 | 351 | // Failed to import a client certificate from the platform store into the SSL 352 | // library. 353 | NET_ERROR(SSL_CLIENT_AUTH_CERT_BAD_FORMAT, -164) 354 | 355 | // Error -165 was removed (SSL_FALLBACK_BEYOND_MINIMUM_VERSION). 356 | 357 | // Resolving a hostname to an IP address list included the IPv4 address 358 | // "127.0.53.53". This is a special IP address which ICANN has recommended to 359 | // indicate there was a name collision, and alert admins to a potential 360 | // problem. 361 | NET_ERROR(ICANN_NAME_COLLISION, -166) 362 | 363 | // The SSL server presented a certificate which could not be decoded. This is 364 | // not a certificate error code as no X509Certificate object is available. This 365 | // error is fatal. 366 | NET_ERROR(SSL_SERVER_CERT_BAD_FORMAT, -167) 367 | 368 | // Certificate Transparency: Received a signed tree head that failed to parse. 369 | NET_ERROR(CT_STH_PARSING_FAILED, -168) 370 | 371 | // Certificate Transparency: Received a signed tree head whose JSON parsing was 372 | // OK but was missing some of the fields. 373 | NET_ERROR(CT_STH_INCOMPLETE, -169) 374 | 375 | // The attempt to reuse a connection to send proxy auth credentials failed 376 | // before the AuthController was used to generate credentials. The caller should 377 | // reuse the controller with a new connection. This error is only used 378 | // internally by the network stack. 379 | NET_ERROR(UNABLE_TO_REUSE_CONNECTION_FOR_PROXY_AUTH, -170) 380 | 381 | // Certificate Transparency: Failed to parse the received consistency proof. 382 | NET_ERROR(CT_CONSISTENCY_PROOF_PARSING_FAILED, -171) 383 | 384 | // The SSL server required an unsupported cipher suite that has since been 385 | // removed. This error will temporarily be signaled on a fallback for one or two 386 | // releases immediately following a cipher suite's removal, after which the 387 | // fallback will be removed. 388 | NET_ERROR(SSL_OBSOLETE_CIPHER, -172) 389 | 390 | // When a WebSocket handshake is done successfully and the connection has been 391 | // upgraded, the URLRequest is cancelled with this error code. 392 | NET_ERROR(WS_UPGRADE, -173) 393 | 394 | // Socket ReadIfReady support is not implemented. This error should not be user 395 | // visible, because the normal Read() method is used as a fallback. 396 | NET_ERROR(READ_IF_READY_NOT_IMPLEMENTED, -174) 397 | 398 | // Error -175 was removed (SSL_VERSION_INTERFERENCE). 399 | 400 | // No socket buffer space is available. 401 | NET_ERROR(NO_BUFFER_SPACE, -176) 402 | 403 | // There were no common signature algorithms between our client certificate 404 | // private key and the server's preferences. 405 | NET_ERROR(SSL_CLIENT_AUTH_NO_COMMON_ALGORITHMS, -177) 406 | 407 | // TLS 1.3 early data was rejected by the server. This will be received before 408 | // any data is returned from the socket. The request should be retried with 409 | // early data disabled. 410 | NET_ERROR(EARLY_DATA_REJECTED, -178) 411 | 412 | // TLS 1.3 early data was offered, but the server responded with TLS 1.2 or 413 | // earlier. This is an internal error code to account for a 414 | // backwards-compatibility issue with early data and TLS 1.2. It will be 415 | // received before any data is returned from the socket. The request should be 416 | // retried with early data disabled. 417 | // 418 | // See https://tools.ietf.org/html/rfc8446#appendix-D.3 for details. 419 | NET_ERROR(WRONG_VERSION_ON_EARLY_DATA, -179) 420 | 421 | // TLS 1.3 was enabled, but a lower version was negotiated and the server 422 | // returned a value indicating it supported TLS 1.3. This is part of a security 423 | // check in TLS 1.3, but it may also indicate the user is behind a buggy 424 | // TLS-terminating proxy which implemented TLS 1.2 incorrectly. (See 425 | // https://crbug.com/boringssl/226.) 426 | NET_ERROR(TLS13_DOWNGRADE_DETECTED, -180) 427 | 428 | // The server's certificate has a keyUsage extension incompatible with the 429 | // negotiated TLS key exchange method. 430 | NET_ERROR(SSL_KEY_USAGE_INCOMPATIBLE, -181) 431 | 432 | // The ECHConfigList fetched over DNS cannot be parsed. 433 | NET_ERROR(INVALID_ECH_CONFIG_LIST, -182) 434 | 435 | // ECH was enabled, but the server was unable to decrypt the encrypted 436 | // ClientHello. 437 | NET_ERROR(ECH_NOT_NEGOTIATED, -183) 438 | 439 | // ECH was enabled, the server was unable to decrypt the encrypted ClientHello, 440 | // and additionally did not present a certificate valid for the public name. 441 | NET_ERROR(ECH_FALLBACK_CERTIFICATE_INVALID, -184) 442 | 443 | // Certificate error codes 444 | // 445 | // The values of certificate error codes must be consecutive. 446 | 447 | // The server responded with a certificate whose common name did not match 448 | // the host name. This could mean: 449 | // 450 | // 1. An attacker has redirected our traffic to their server and is 451 | // presenting a certificate for which they know the private key. 452 | // 453 | // 2. The server is misconfigured and responding with the wrong cert. 454 | // 455 | // 3. The user is on a wireless network and is being redirected to the 456 | // network's login page. 457 | // 458 | // 4. The OS has used a DNS search suffix and the server doesn't have 459 | // a certificate for the abbreviated name in the address bar. 460 | // 461 | NET_ERROR(CERT_COMMON_NAME_INVALID, -200) 462 | 463 | // The server responded with a certificate that, by our clock, appears to 464 | // either not yet be valid or to have expired. This could mean: 465 | // 466 | // 1. An attacker is presenting an old certificate for which they have 467 | // managed to obtain the private key. 468 | // 469 | // 2. The server is misconfigured and is not presenting a valid cert. 470 | // 471 | // 3. Our clock is wrong. 472 | // 473 | NET_ERROR(CERT_DATE_INVALID, -201) 474 | 475 | // The server responded with a certificate that is signed by an authority 476 | // we don't trust. The could mean: 477 | // 478 | // 1. An attacker has substituted the real certificate for a cert that 479 | // contains their public key and is signed by their cousin. 480 | // 481 | // 2. The server operator has a legitimate certificate from a CA we don't 482 | // know about, but should trust. 483 | // 484 | // 3. The server is presenting a self-signed certificate, providing no 485 | // defense against active attackers (but foiling passive attackers). 486 | // 487 | NET_ERROR(CERT_AUTHORITY_INVALID, -202) 488 | 489 | // The server responded with a certificate that contains errors. 490 | // This error is not recoverable. 491 | // 492 | // MSDN describes this error as follows: 493 | // "The SSL certificate contains errors." 494 | // NOTE: It's unclear how this differs from ERR_CERT_INVALID. For consistency, 495 | // use that code instead of this one from now on. 496 | // 497 | NET_ERROR(CERT_CONTAINS_ERRORS, -203) 498 | 499 | // The certificate has no mechanism for determining if it is revoked. In 500 | // effect, this certificate cannot be revoked. 501 | NET_ERROR(CERT_NO_REVOCATION_MECHANISM, -204) 502 | 503 | // Revocation information for the security certificate for this site is not 504 | // available. This could mean: 505 | // 506 | // 1. An attacker has compromised the private key in the certificate and is 507 | // blocking our attempt to find out that the cert was revoked. 508 | // 509 | // 2. The certificate is unrevoked, but the revocation server is busy or 510 | // unavailable. 511 | // 512 | NET_ERROR(CERT_UNABLE_TO_CHECK_REVOCATION, -205) 513 | 514 | // The server responded with a certificate has been revoked. 515 | // We have the capability to ignore this error, but it is probably not the 516 | // thing to do. 517 | NET_ERROR(CERT_REVOKED, -206) 518 | 519 | // The server responded with a certificate that is invalid. 520 | // This error is not recoverable. 521 | // 522 | // MSDN describes this error as follows: 523 | // "The SSL certificate is invalid." 524 | // 525 | NET_ERROR(CERT_INVALID, -207) 526 | 527 | // The server responded with a certificate that is signed using a weak 528 | // signature algorithm. 529 | NET_ERROR(CERT_WEAK_SIGNATURE_ALGORITHM, -208) 530 | 531 | // -209 is available: was CERT_NOT_IN_DNS. 532 | 533 | // The host name specified in the certificate is not unique. 534 | NET_ERROR(CERT_NON_UNIQUE_NAME, -210) 535 | 536 | // The server responded with a certificate that contains a weak key (e.g. 537 | // a too-small RSA key). 538 | NET_ERROR(CERT_WEAK_KEY, -211) 539 | 540 | // The certificate claimed DNS names that are in violation of name constraints. 541 | NET_ERROR(CERT_NAME_CONSTRAINT_VIOLATION, -212) 542 | 543 | // The certificate's validity period is too long. 544 | NET_ERROR(CERT_VALIDITY_TOO_LONG, -213) 545 | 546 | // Certificate Transparency was required for this connection, but the server 547 | // did not provide CT information that complied with the policy. 548 | NET_ERROR(CERTIFICATE_TRANSPARENCY_REQUIRED, -214) 549 | 550 | // The certificate chained to a legacy Symantec root that is no longer trusted. 551 | // https://g.co/chrome/symantecpkicerts 552 | NET_ERROR(CERT_SYMANTEC_LEGACY, -215) 553 | 554 | // -216 was QUIC_CERT_ROOT_NOT_KNOWN which has been renumbered to not be in the 555 | // certificate error range. 556 | 557 | // The certificate is known to be used for interception by an entity other 558 | // the device owner. 559 | NET_ERROR(CERT_KNOWN_INTERCEPTION_BLOCKED, -217) 560 | 561 | // -218 was SSL_OBSOLETE_VERSION which is not longer used. TLS 1.0/1.1 instead 562 | // cause SSL_VERSION_OR_CIPHER_MISMATCH now. 563 | 564 | // Add new certificate error codes here. 565 | // 566 | // Update the value of CERT_END whenever you add a new certificate error 567 | // code. 568 | 569 | // The value immediately past the last certificate error code. 570 | NET_ERROR(CERT_END, -219) 571 | 572 | // The URL is invalid. 573 | NET_ERROR(INVALID_URL, -300) 574 | 575 | // The scheme of the URL is disallowed. 576 | NET_ERROR(DISALLOWED_URL_SCHEME, -301) 577 | 578 | // The scheme of the URL is unknown. 579 | NET_ERROR(UNKNOWN_URL_SCHEME, -302) 580 | 581 | // Attempting to load an URL resulted in a redirect to an invalid URL. 582 | NET_ERROR(INVALID_REDIRECT, -303) 583 | 584 | // Attempting to load an URL resulted in too many redirects. 585 | NET_ERROR(TOO_MANY_REDIRECTS, -310) 586 | 587 | // Attempting to load an URL resulted in an unsafe redirect (e.g., a redirect 588 | // to file:// is considered unsafe). 589 | NET_ERROR(UNSAFE_REDIRECT, -311) 590 | 591 | // Attempting to load an URL with an unsafe port number. These are port 592 | // numbers that correspond to services, which are not robust to spurious input 593 | // that may be constructed as a result of an allowed web construct (e.g., HTTP 594 | // looks a lot like SMTP, so form submission to port 25 is denied). 595 | NET_ERROR(UNSAFE_PORT, -312) 596 | 597 | // The server's response was invalid. 598 | NET_ERROR(INVALID_RESPONSE, -320) 599 | 600 | // Error in chunked transfer encoding. 601 | NET_ERROR(INVALID_CHUNKED_ENCODING, -321) 602 | 603 | // The server did not support the request method. 604 | NET_ERROR(METHOD_NOT_SUPPORTED, -322) 605 | 606 | // The response was 407 (Proxy Authentication Required), yet we did not send 607 | // the request to a proxy. 608 | NET_ERROR(UNEXPECTED_PROXY_AUTH, -323) 609 | 610 | // The server closed the connection without sending any data. 611 | NET_ERROR(EMPTY_RESPONSE, -324) 612 | 613 | // The headers section of the response is too large. 614 | NET_ERROR(RESPONSE_HEADERS_TOO_BIG, -325) 615 | 616 | // Error -326 was removed (PAC_STATUS_NOT_OK) 617 | 618 | // The evaluation of the PAC script failed. 619 | NET_ERROR(PAC_SCRIPT_FAILED, -327) 620 | 621 | // The response was 416 (Requested range not satisfiable) and the server cannot 622 | // satisfy the range requested. 623 | NET_ERROR(REQUEST_RANGE_NOT_SATISFIABLE, -328) 624 | 625 | // The identity used for authentication is invalid. 626 | NET_ERROR(MALFORMED_IDENTITY, -329) 627 | 628 | // Content decoding of the response body failed. 629 | NET_ERROR(CONTENT_DECODING_FAILED, -330) 630 | 631 | // An operation could not be completed because all network IO 632 | // is suspended. 633 | NET_ERROR(NETWORK_IO_SUSPENDED, -331) 634 | 635 | // FLIP data received without receiving a SYN_REPLY on the stream. 636 | NET_ERROR(SYN_REPLY_NOT_RECEIVED, -332) 637 | 638 | // Converting the response to target encoding failed. 639 | NET_ERROR(ENCODING_CONVERSION_FAILED, -333) 640 | 641 | // The server sent an FTP directory listing in a format we do not understand. 642 | NET_ERROR(UNRECOGNIZED_FTP_DIRECTORY_LISTING_FORMAT, -334) 643 | 644 | // Obsolete. Was only logged in NetLog when an HTTP/2 pushed stream expired. 645 | // NET_ERROR(INVALID_SPDY_STREAM, -335) 646 | 647 | // There are no supported proxies in the provided list. 648 | NET_ERROR(NO_SUPPORTED_PROXIES, -336) 649 | 650 | // There is an HTTP/2 protocol error. 651 | NET_ERROR(HTTP2_PROTOCOL_ERROR, -337) 652 | 653 | // Credentials could not be established during HTTP Authentication. 654 | NET_ERROR(INVALID_AUTH_CREDENTIALS, -338) 655 | 656 | // An HTTP Authentication scheme was tried which is not supported on this 657 | // machine. 658 | NET_ERROR(UNSUPPORTED_AUTH_SCHEME, -339) 659 | 660 | // Detecting the encoding of the response failed. 661 | NET_ERROR(ENCODING_DETECTION_FAILED, -340) 662 | 663 | // (GSSAPI) No Kerberos credentials were available during HTTP Authentication. 664 | NET_ERROR(MISSING_AUTH_CREDENTIALS, -341) 665 | 666 | // An unexpected, but documented, SSPI or GSSAPI status code was returned. 667 | NET_ERROR(UNEXPECTED_SECURITY_LIBRARY_STATUS, -342) 668 | 669 | // The environment was not set up correctly for authentication (for 670 | // example, no KDC could be found or the principal is unknown. 671 | NET_ERROR(MISCONFIGURED_AUTH_ENVIRONMENT, -343) 672 | 673 | // An undocumented SSPI or GSSAPI status code was returned. 674 | NET_ERROR(UNDOCUMENTED_SECURITY_LIBRARY_STATUS, -344) 675 | 676 | // The HTTP response was too big to drain. 677 | NET_ERROR(RESPONSE_BODY_TOO_BIG_TO_DRAIN, -345) 678 | 679 | // The HTTP response contained multiple distinct Content-Length headers. 680 | NET_ERROR(RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, -346) 681 | 682 | // HTTP/2 headers have been received, but not all of them - status or version 683 | // headers are missing, so we're expecting additional frames to complete them. 684 | NET_ERROR(INCOMPLETE_HTTP2_HEADERS, -347) 685 | 686 | // No PAC URL configuration could be retrieved from DHCP. This can indicate 687 | // either a failure to retrieve the DHCP configuration, or that there was no 688 | // PAC URL configured in DHCP. 689 | NET_ERROR(PAC_NOT_IN_DHCP, -348) 690 | 691 | // The HTTP response contained multiple Content-Disposition headers. 692 | NET_ERROR(RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION, -349) 693 | 694 | // The HTTP response contained multiple Location headers. 695 | NET_ERROR(RESPONSE_HEADERS_MULTIPLE_LOCATION, -350) 696 | 697 | // HTTP/2 server refused the request without processing, and sent either a 698 | // GOAWAY frame with error code NO_ERROR and Last-Stream-ID lower than the 699 | // stream id corresponding to the request indicating that this request has not 700 | // been processed yet, or a RST_STREAM frame with error code REFUSED_STREAM. 701 | // Client MAY retry (on a different connection). See RFC7540 Section 8.1.4. 702 | NET_ERROR(HTTP2_SERVER_REFUSED_STREAM, -351) 703 | 704 | // HTTP/2 server didn't respond to the PING message. 705 | NET_ERROR(HTTP2_PING_FAILED, -352) 706 | 707 | // Obsolete. Kept here to avoid reuse, as the old error can still appear on 708 | // histograms. 709 | // NET_ERROR(PIPELINE_EVICTION, -353) 710 | 711 | // The HTTP response body transferred fewer bytes than were advertised by the 712 | // Content-Length header when the connection is closed. 713 | NET_ERROR(CONTENT_LENGTH_MISMATCH, -354) 714 | 715 | // The HTTP response body is transferred with Chunked-Encoding, but the 716 | // terminating zero-length chunk was never sent when the connection is closed. 717 | NET_ERROR(INCOMPLETE_CHUNKED_ENCODING, -355) 718 | 719 | // There is a QUIC protocol error. 720 | NET_ERROR(QUIC_PROTOCOL_ERROR, -356) 721 | 722 | // The HTTP headers were truncated by an EOF. 723 | NET_ERROR(RESPONSE_HEADERS_TRUNCATED, -357) 724 | 725 | // The QUIC crypto handshake failed. This means that the server was unable 726 | // to read any requests sent, so they may be resent. 727 | NET_ERROR(QUIC_HANDSHAKE_FAILED, -358) 728 | 729 | // Obsolete. Kept here to avoid reuse, as the old error can still appear on 730 | // histograms. 731 | // NET_ERROR(REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC, -359) 732 | 733 | // Transport security is inadequate for the HTTP/2 version. 734 | NET_ERROR(HTTP2_INADEQUATE_TRANSPORT_SECURITY, -360) 735 | 736 | // The peer violated HTTP/2 flow control. 737 | NET_ERROR(HTTP2_FLOW_CONTROL_ERROR, -361) 738 | 739 | // The peer sent an improperly sized HTTP/2 frame. 740 | NET_ERROR(HTTP2_FRAME_SIZE_ERROR, -362) 741 | 742 | // Decoding or encoding of compressed HTTP/2 headers failed. 743 | NET_ERROR(HTTP2_COMPRESSION_ERROR, -363) 744 | 745 | // Proxy Auth Requested without a valid Client Socket Handle. 746 | NET_ERROR(PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION, -364) 747 | 748 | // HTTP_1_1_REQUIRED error code received on HTTP/2 session. 749 | NET_ERROR(HTTP_1_1_REQUIRED, -365) 750 | 751 | // HTTP_1_1_REQUIRED error code received on HTTP/2 session to proxy. 752 | NET_ERROR(PROXY_HTTP_1_1_REQUIRED, -366) 753 | 754 | // The PAC script terminated fatally and must be reloaded. 755 | NET_ERROR(PAC_SCRIPT_TERMINATED, -367) 756 | 757 | // Obsolete. Kept here to avoid reuse. 758 | // Request is throttled because of a Backoff header. 759 | // See: crbug.com/486891. 760 | // NET_ERROR(TEMPORARY_BACKOFF, -369) 761 | 762 | // The server was expected to return an HTTP/1.x response, but did not. Rather 763 | // than treat it as HTTP/0.9, this error is returned. 764 | NET_ERROR(INVALID_HTTP_RESPONSE, -370) 765 | 766 | // Initializing content decoding failed. 767 | NET_ERROR(CONTENT_DECODING_INIT_FAILED, -371) 768 | 769 | // Received HTTP/2 RST_STREAM frame with NO_ERROR error code. This error should 770 | // be handled internally by HTTP/2 code, and should not make it above the 771 | // SpdyStream layer. 772 | NET_ERROR(HTTP2_RST_STREAM_NO_ERROR_RECEIVED, -372) 773 | 774 | // Obsolete. HTTP/2 push is removed. 775 | // NET_ERROR(HTTP2_PUSHED_STREAM_NOT_AVAILABLE, -373) 776 | 777 | // Obsolete. HTTP/2 push is removed. 778 | // NET_ERROR(HTTP2_CLAIMED_PUSHED_STREAM_RESET_BY_SERVER, -374) 779 | 780 | // An HTTP transaction was retried too many times due for authentication or 781 | // invalid certificates. This may be due to a bug in the net stack that would 782 | // otherwise infinite loop, or if the server or proxy continually requests fresh 783 | // credentials or presents a fresh invalid certificate. 784 | NET_ERROR(TOO_MANY_RETRIES, -375) 785 | 786 | // Received an HTTP/2 frame on a closed stream. 787 | NET_ERROR(HTTP2_STREAM_CLOSED, -376) 788 | 789 | // Obsolete. HTTP/2 push is removed. 790 | // NET_ERROR(HTTP2_CLIENT_REFUSED_STREAM, -377) 791 | 792 | // Obsolete. HTTP/2 push is removed. 793 | // NET_ERROR(HTTP2_PUSHED_RESPONSE_DOES_NOT_MATCH, -378) 794 | 795 | // The server returned a non-2xx HTTP response code. 796 | // 797 | // Note that this error is only used by certain APIs that interpret the HTTP 798 | // response itself. URLRequest for instance just passes most non-2xx 799 | // response back as success. 800 | NET_ERROR(HTTP_RESPONSE_CODE_FAILURE, -379) 801 | 802 | // The certificate presented on a QUIC connection does not chain to a known root 803 | // and the origin connected to is not on a list of domains where unknown roots 804 | // are allowed. 805 | NET_ERROR(QUIC_CERT_ROOT_NOT_KNOWN, -380) 806 | 807 | // A GOAWAY frame has been received indicating that the request has not been 808 | // processed and is therefore safe to retry on a different connection. 809 | NET_ERROR(QUIC_GOAWAY_REQUEST_CAN_BE_RETRIED, -381) 810 | 811 | // The ACCEPT_CH restart has been triggered too many times 812 | NET_ERROR(TOO_MANY_ACCEPT_CH_RESTARTS, -382) 813 | 814 | // The IP address space of the remote endpoint differed from the previous 815 | // observed value during the same request. Any cache entry for the affected 816 | // request should be invalidated. 817 | NET_ERROR(INCONSISTENT_IP_ADDRESS_SPACE, -383) 818 | 819 | // The IP address space of the cached remote endpoint is blocked by private 820 | // network access check. 821 | NET_ERROR(CACHED_IP_ADDRESS_SPACE_BLOCKED_BY_PRIVATE_NETWORK_ACCESS_POLICY, 822 | -384) 823 | 824 | // The connection is blocked by private network access checks. 825 | NET_ERROR(BLOCKED_BY_PRIVATE_NETWORK_ACCESS_CHECKS, -385) 826 | 827 | // Content decoding failed due to the zstd window size being too big (over 8MB). 828 | NET_ERROR(ZSTD_WINDOW_SIZE_TOO_BIG, -386) 829 | 830 | // The compression dictionary cannot be loaded. 831 | NET_ERROR(DICTIONARY_LOAD_FAILED, -387) 832 | 833 | // The header of dictionary compressed stream does not match the expected value. 834 | NET_ERROR(UNEXPECTED_CONTENT_DICTIONARY_HEADER, -388) 835 | 836 | // The cache does not have the requested entry. 837 | NET_ERROR(CACHE_MISS, -400) 838 | 839 | // Unable to read from the disk cache. 840 | NET_ERROR(CACHE_READ_FAILURE, -401) 841 | 842 | // Unable to write to the disk cache. 843 | NET_ERROR(CACHE_WRITE_FAILURE, -402) 844 | 845 | // The operation is not supported for this entry. 846 | NET_ERROR(CACHE_OPERATION_NOT_SUPPORTED, -403) 847 | 848 | // The disk cache is unable to open this entry. 849 | NET_ERROR(CACHE_OPEN_FAILURE, -404) 850 | 851 | // The disk cache is unable to create this entry. 852 | NET_ERROR(CACHE_CREATE_FAILURE, -405) 853 | 854 | // Multiple transactions are racing to create disk cache entries. This is an 855 | // internal error returned from the HttpCache to the HttpCacheTransaction that 856 | // tells the transaction to restart the entry-creation logic because the state 857 | // of the cache has changed. 858 | NET_ERROR(CACHE_RACE, -406) 859 | 860 | // The cache was unable to read a checksum record on an entry. This can be 861 | // returned from attempts to read from the cache. It is an internal error, 862 | // returned by the SimpleCache backend, but not by any URLRequest methods 863 | // or members. 864 | NET_ERROR(CACHE_CHECKSUM_READ_FAILURE, -407) 865 | 866 | // The cache found an entry with an invalid checksum. This can be returned from 867 | // attempts to read from the cache. It is an internal error, returned by the 868 | // SimpleCache backend, but not by any URLRequest methods or members. 869 | NET_ERROR(CACHE_CHECKSUM_MISMATCH, -408) 870 | 871 | // Internal error code for the HTTP cache. The cache lock timeout has fired. 872 | NET_ERROR(CACHE_LOCK_TIMEOUT, -409) 873 | 874 | // Received a challenge after the transaction has read some data, and the 875 | // credentials aren't available. There isn't a way to get them at that point. 876 | NET_ERROR(CACHE_AUTH_FAILURE_AFTER_READ, -410) 877 | 878 | // Internal not-quite error code for the HTTP cache. In-memory hints suggest 879 | // that the cache entry would not have been usable with the transaction's 880 | // current configuration (e.g. load flags, mode, etc.) 881 | NET_ERROR(CACHE_ENTRY_NOT_SUITABLE, -411) 882 | 883 | // The disk cache is unable to doom this entry. 884 | NET_ERROR(CACHE_DOOM_FAILURE, -412) 885 | 886 | // The disk cache is unable to open or create this entry. 887 | NET_ERROR(CACHE_OPEN_OR_CREATE_FAILURE, -413) 888 | 889 | // The server's response was insecure (e.g. there was a cert error). 890 | NET_ERROR(INSECURE_RESPONSE, -501) 891 | 892 | // An attempt to import a client certificate failed, as the user's key 893 | // database lacked a corresponding private key. 894 | NET_ERROR(NO_PRIVATE_KEY_FOR_CERT, -502) 895 | 896 | // An error adding a certificate to the OS certificate database. 897 | NET_ERROR(ADD_USER_CERT_FAILED, -503) 898 | 899 | // An error occurred while handling a signed exchange. 900 | NET_ERROR(INVALID_SIGNED_EXCHANGE, -504) 901 | 902 | // An error occurred while handling a Web Bundle source. 903 | NET_ERROR(INVALID_WEB_BUNDLE, -505) 904 | 905 | // A Trust Tokens protocol operation-executing request failed for one of a 906 | // number of reasons (precondition failure, internal error, bad response). 907 | NET_ERROR(TRUST_TOKEN_OPERATION_FAILED, -506) 908 | 909 | // When handling a Trust Tokens protocol operation-executing request, the system 910 | // was able to execute the request's Trust Tokens operation without sending the 911 | // request to its destination: for instance, the results could have been present 912 | // in a local cache (for redemption) or the operation could have been diverted 913 | // to a local provider (for "platform-provided" issuance). 914 | NET_ERROR(TRUST_TOKEN_OPERATION_SUCCESS_WITHOUT_SENDING_REQUEST, -507) 915 | 916 | // *** Code -600 is reserved (was FTP_PASV_COMMAND_FAILED). *** 917 | // *** Code -601 is reserved (was FTP_FAILED). *** 918 | // *** Code -602 is reserved (was FTP_SERVICE_UNAVAILABLE). *** 919 | // *** Code -603 is reserved (was FTP_TRANSFER_ABORTED). *** 920 | // *** Code -604 is reserved (was FTP_FILE_BUSY). *** 921 | // *** Code -605 is reserved (was FTP_SYNTAX_ERROR). *** 922 | // *** Code -606 is reserved (was FTP_COMMAND_NOT_SUPPORTED). *** 923 | // *** Code -607 is reserved (was FTP_BAD_COMMAND_SEQUENCE). *** 924 | 925 | // PKCS #12 import failed due to incorrect password. 926 | NET_ERROR(PKCS12_IMPORT_BAD_PASSWORD, -701) 927 | 928 | // PKCS #12 import failed due to other error. 929 | NET_ERROR(PKCS12_IMPORT_FAILED, -702) 930 | 931 | // CA import failed - not a CA cert. 932 | NET_ERROR(IMPORT_CA_CERT_NOT_CA, -703) 933 | 934 | // Import failed - certificate already exists in database. 935 | // Note it's a little weird this is an error but reimporting a PKCS12 is ok 936 | // (no-op). That's how Mozilla does it, though. 937 | NET_ERROR(IMPORT_CERT_ALREADY_EXISTS, -704) 938 | 939 | // CA import failed due to some other error. 940 | NET_ERROR(IMPORT_CA_CERT_FAILED, -705) 941 | 942 | // Server certificate import failed due to some internal error. 943 | NET_ERROR(IMPORT_SERVER_CERT_FAILED, -706) 944 | 945 | // PKCS #12 import failed due to invalid MAC. 946 | NET_ERROR(PKCS12_IMPORT_INVALID_MAC, -707) 947 | 948 | // PKCS #12 import failed due to invalid/corrupt file. 949 | NET_ERROR(PKCS12_IMPORT_INVALID_FILE, -708) 950 | 951 | // PKCS #12 import failed due to unsupported features. 952 | NET_ERROR(PKCS12_IMPORT_UNSUPPORTED, -709) 953 | 954 | // Key generation failed. 955 | NET_ERROR(KEY_GENERATION_FAILED, -710) 956 | 957 | // Error -711 was removed (ORIGIN_BOUND_CERT_GENERATION_FAILED) 958 | 959 | // Failure to export private key. 960 | NET_ERROR(PRIVATE_KEY_EXPORT_FAILED, -712) 961 | 962 | // Self-signed certificate generation failed. 963 | NET_ERROR(SELF_SIGNED_CERT_GENERATION_FAILED, -713) 964 | 965 | // The certificate database changed in some way. 966 | NET_ERROR(CERT_DATABASE_CHANGED, -714) 967 | 968 | // Error -715 was removed (CHANNEL_ID_IMPORT_FAILED) 969 | 970 | // The certificate verifier configuration changed in some way. 971 | NET_ERROR(CERT_VERIFIER_CHANGED, -716) 972 | 973 | // DNS error codes. 974 | 975 | // DNS resolver received a malformed response. 976 | NET_ERROR(DNS_MALFORMED_RESPONSE, -800) 977 | 978 | // DNS server requires TCP 979 | NET_ERROR(DNS_SERVER_REQUIRES_TCP, -801) 980 | 981 | // DNS server failed. This error is returned for all of the following 982 | // error conditions: 983 | // 1 - Format error - The name server was unable to interpret the query. 984 | // 2 - Server failure - The name server was unable to process this query 985 | // due to a problem with the name server. 986 | // 4 - Not Implemented - The name server does not support the requested 987 | // kind of query. 988 | // 5 - Refused - The name server refuses to perform the specified 989 | // operation for policy reasons. 990 | NET_ERROR(DNS_SERVER_FAILED, -802) 991 | 992 | // DNS transaction timed out. 993 | NET_ERROR(DNS_TIMED_OUT, -803) 994 | 995 | // The entry was not found in cache or other local sources, for lookups where 996 | // only local sources were queried. 997 | // TODO(ericorth): Consider renaming to DNS_LOCAL_MISS or something like that as 998 | // the cache is not necessarily queried either. 999 | NET_ERROR(DNS_CACHE_MISS, -804) 1000 | 1001 | // Suffix search list rules prevent resolution of the given host name. 1002 | NET_ERROR(DNS_SEARCH_EMPTY, -805) 1003 | 1004 | // Failed to sort addresses according to RFC3484. 1005 | NET_ERROR(DNS_SORT_ERROR, -806) 1006 | 1007 | // Error -807 was removed (DNS_HTTP_FAILED) 1008 | 1009 | // Failed to resolve the hostname of a DNS-over-HTTPS server. 1010 | NET_ERROR(DNS_SECURE_RESOLVER_HOSTNAME_RESOLUTION_FAILED, -808) 1011 | 1012 | // DNS identified the request as disallowed for insecure connection (http/ws). 1013 | // Error should be handled as if an HTTP redirect was received to redirect to 1014 | // https or wss. 1015 | NET_ERROR(DNS_NAME_HTTPS_ONLY, -809) 1016 | 1017 | // All DNS requests associated with this job have been cancelled. 1018 | NET_ERROR(DNS_REQUEST_CANCELLED, -810) 1019 | 1020 | // The hostname resolution of HTTPS record was expected to be resolved with 1021 | // alpn values of supported protocols, but did not. 1022 | NET_ERROR(DNS_NO_MATCHING_SUPPORTED_ALPN, -811) 1023 | 1024 | // Error -812 was removed 1025 | // Error -813 was removed 1026 | 1027 | // When checking whether secure DNS can be used, the response returned for the 1028 | // requested probe record either had no answer or was invalid. 1029 | NET_ERROR(DNS_SECURE_PROBE_RECORD_INVALID, -814) 1030 | 1031 | // CAUTION: Before adding errors here, please check the ranges of errors written 1032 | // in the top of this file. 1033 | -------------------------------------------------------------------------------- /src/dllmain.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // created by AheadLib 3 | // github:https://github.com/strivexjun/AheadLib-x86-x64 4 | // 5 | 6 | #include "pch.h" 7 | #include 8 | #include 9 | 10 | #pragma comment( lib, "Shlwapi.lib") 11 | 12 | #pragma comment(linker, "/EXPORT:Noname2=_AheadLib_Unnamed2,@2,NONAME") 13 | #pragma comment(linker, "/EXPORT:mciExecute=_AheadLib_mciExecute,@3") 14 | #pragma comment(linker, "/EXPORT:CloseDriver=_AheadLib_CloseDriver,@4") 15 | #pragma comment(linker, "/EXPORT:DefDriverProc=_AheadLib_DefDriverProc,@5") 16 | #pragma comment(linker, "/EXPORT:DriverCallback=_AheadLib_DriverCallback,@6") 17 | #pragma comment(linker, "/EXPORT:DrvGetModuleHandle=_AheadLib_DrvGetModuleHandle,@7") 18 | #pragma comment(linker, "/EXPORT:GetDriverModuleHandle=_AheadLib_GetDriverModuleHandle,@8") 19 | #pragma comment(linker, "/EXPORT:NotifyCallbackData=_AheadLib_NotifyCallbackData,@9") 20 | #pragma comment(linker, "/EXPORT:OpenDriver=_AheadLib_OpenDriver,@10") 21 | #pragma comment(linker, "/EXPORT:PlaySound=_AheadLib_PlaySound,@11") 22 | #pragma comment(linker, "/EXPORT:PlaySoundA=_AheadLib_PlaySoundA,@12") 23 | #pragma comment(linker, "/EXPORT:PlaySoundW=_AheadLib_PlaySoundW,@13") 24 | #pragma comment(linker, "/EXPORT:SendDriverMessage=_AheadLib_SendDriverMessage,@14") 25 | #pragma comment(linker, "/EXPORT:WOW32DriverCallback=_AheadLib_WOW32DriverCallback,@15") 26 | #pragma comment(linker, "/EXPORT:WOW32ResolveMultiMediaHandle=_AheadLib_WOW32ResolveMultiMediaHandle,@16") 27 | #pragma comment(linker, "/EXPORT:WOWAppExit=_AheadLib_WOWAppExit,@17") 28 | #pragma comment(linker, "/EXPORT:aux32Message=_AheadLib_aux32Message,@18") 29 | #pragma comment(linker, "/EXPORT:auxGetDevCapsA=_AheadLib_auxGetDevCapsA,@19") 30 | #pragma comment(linker, "/EXPORT:auxGetDevCapsW=_AheadLib_auxGetDevCapsW,@20") 31 | #pragma comment(linker, "/EXPORT:auxGetNumDevs=_AheadLib_auxGetNumDevs,@21") 32 | #pragma comment(linker, "/EXPORT:auxGetVolume=_AheadLib_auxGetVolume,@22") 33 | #pragma comment(linker, "/EXPORT:auxOutMessage=_AheadLib_auxOutMessage,@23") 34 | #pragma comment(linker, "/EXPORT:auxSetVolume=_AheadLib_auxSetVolume,@24") 35 | #pragma comment(linker, "/EXPORT:joy32Message=_AheadLib_joy32Message,@25") 36 | #pragma comment(linker, "/EXPORT:joyConfigChanged=_AheadLib_joyConfigChanged,@26") 37 | #pragma comment(linker, "/EXPORT:joyGetDevCapsA=_AheadLib_joyGetDevCapsA,@27") 38 | #pragma comment(linker, "/EXPORT:joyGetDevCapsW=_AheadLib_joyGetDevCapsW,@28") 39 | #pragma comment(linker, "/EXPORT:joyGetNumDevs=_AheadLib_joyGetNumDevs,@29") 40 | #pragma comment(linker, "/EXPORT:joyGetPos=_AheadLib_joyGetPos,@30") 41 | #pragma comment(linker, "/EXPORT:joyGetPosEx=_AheadLib_joyGetPosEx,@31") 42 | #pragma comment(linker, "/EXPORT:joyGetThreshold=_AheadLib_joyGetThreshold,@32") 43 | #pragma comment(linker, "/EXPORT:joyReleaseCapture=_AheadLib_joyReleaseCapture,@33") 44 | #pragma comment(linker, "/EXPORT:joySetCapture=_AheadLib_joySetCapture,@34") 45 | #pragma comment(linker, "/EXPORT:joySetThreshold=_AheadLib_joySetThreshold,@35") 46 | #pragma comment(linker, "/EXPORT:mci32Message=_AheadLib_mci32Message,@36") 47 | #pragma comment(linker, "/EXPORT:mciDriverNotify=_AheadLib_mciDriverNotify,@37") 48 | #pragma comment(linker, "/EXPORT:mciDriverYield=_AheadLib_mciDriverYield,@38") 49 | #pragma comment(linker, "/EXPORT:mciFreeCommandResource=_AheadLib_mciFreeCommandResource,@39") 50 | #pragma comment(linker, "/EXPORT:mciGetCreatorTask=_AheadLib_mciGetCreatorTask,@40") 51 | #pragma comment(linker, "/EXPORT:mciGetDeviceIDA=_AheadLib_mciGetDeviceIDA,@41") 52 | #pragma comment(linker, "/EXPORT:mciGetDeviceIDFromElementIDA=_AheadLib_mciGetDeviceIDFromElementIDA,@42") 53 | #pragma comment(linker, "/EXPORT:mciGetDeviceIDFromElementIDW=_AheadLib_mciGetDeviceIDFromElementIDW,@43") 54 | #pragma comment(linker, "/EXPORT:mciGetDeviceIDW=_AheadLib_mciGetDeviceIDW,@44") 55 | #pragma comment(linker, "/EXPORT:mciGetDriverData=_AheadLib_mciGetDriverData,@45") 56 | #pragma comment(linker, "/EXPORT:mciGetErrorStringA=_AheadLib_mciGetErrorStringA,@46") 57 | #pragma comment(linker, "/EXPORT:mciGetErrorStringW=_AheadLib_mciGetErrorStringW,@47") 58 | #pragma comment(linker, "/EXPORT:mciGetYieldProc=_AheadLib_mciGetYieldProc,@48") 59 | #pragma comment(linker, "/EXPORT:mciLoadCommandResource=_AheadLib_mciLoadCommandResource,@49") 60 | #pragma comment(linker, "/EXPORT:mciSendCommandA=_AheadLib_mciSendCommandA,@50") 61 | #pragma comment(linker, "/EXPORT:mciSendCommandW=_AheadLib_mciSendCommandW,@51") 62 | #pragma comment(linker, "/EXPORT:mciSendStringA=_AheadLib_mciSendStringA,@52") 63 | #pragma comment(linker, "/EXPORT:mciSendStringW=_AheadLib_mciSendStringW,@53") 64 | #pragma comment(linker, "/EXPORT:mciSetDriverData=_AheadLib_mciSetDriverData,@54") 65 | #pragma comment(linker, "/EXPORT:mciSetYieldProc=_AheadLib_mciSetYieldProc,@55") 66 | #pragma comment(linker, "/EXPORT:mid32Message=_AheadLib_mid32Message,@56") 67 | #pragma comment(linker, "/EXPORT:midiConnect=_AheadLib_midiConnect,@57") 68 | #pragma comment(linker, "/EXPORT:midiDisconnect=_AheadLib_midiDisconnect,@58") 69 | #pragma comment(linker, "/EXPORT:midiInAddBuffer=_AheadLib_midiInAddBuffer,@59") 70 | #pragma comment(linker, "/EXPORT:midiInClose=_AheadLib_midiInClose,@60") 71 | #pragma comment(linker, "/EXPORT:midiInGetDevCapsA=_AheadLib_midiInGetDevCapsA,@61") 72 | #pragma comment(linker, "/EXPORT:midiInGetDevCapsW=_AheadLib_midiInGetDevCapsW,@62") 73 | #pragma comment(linker, "/EXPORT:midiInGetErrorTextA=_AheadLib_midiInGetErrorTextA,@63") 74 | #pragma comment(linker, "/EXPORT:midiInGetErrorTextW=_AheadLib_midiInGetErrorTextW,@64") 75 | #pragma comment(linker, "/EXPORT:midiInGetID=_AheadLib_midiInGetID,@65") 76 | #pragma comment(linker, "/EXPORT:midiInGetNumDevs=_AheadLib_midiInGetNumDevs,@66") 77 | #pragma comment(linker, "/EXPORT:midiInMessage=_AheadLib_midiInMessage,@67") 78 | #pragma comment(linker, "/EXPORT:midiInOpen=_AheadLib_midiInOpen,@68") 79 | #pragma comment(linker, "/EXPORT:midiInPrepareHeader=_AheadLib_midiInPrepareHeader,@69") 80 | #pragma comment(linker, "/EXPORT:midiInReset=_AheadLib_midiInReset,@70") 81 | #pragma comment(linker, "/EXPORT:midiInStart=_AheadLib_midiInStart,@71") 82 | #pragma comment(linker, "/EXPORT:midiInStop=_AheadLib_midiInStop,@72") 83 | #pragma comment(linker, "/EXPORT:midiInUnprepareHeader=_AheadLib_midiInUnprepareHeader,@73") 84 | #pragma comment(linker, "/EXPORT:midiOutCacheDrumPatches=_AheadLib_midiOutCacheDrumPatches,@74") 85 | #pragma comment(linker, "/EXPORT:midiOutCachePatches=_AheadLib_midiOutCachePatches,@75") 86 | #pragma comment(linker, "/EXPORT:midiOutClose=_AheadLib_midiOutClose,@76") 87 | #pragma comment(linker, "/EXPORT:midiOutGetDevCapsA=_AheadLib_midiOutGetDevCapsA,@77") 88 | #pragma comment(linker, "/EXPORT:midiOutGetDevCapsW=_AheadLib_midiOutGetDevCapsW,@78") 89 | #pragma comment(linker, "/EXPORT:midiOutGetErrorTextA=_AheadLib_midiOutGetErrorTextA,@79") 90 | #pragma comment(linker, "/EXPORT:midiOutGetErrorTextW=_AheadLib_midiOutGetErrorTextW,@80") 91 | #pragma comment(linker, "/EXPORT:midiOutGetID=_AheadLib_midiOutGetID,@81") 92 | #pragma comment(linker, "/EXPORT:midiOutGetNumDevs=_AheadLib_midiOutGetNumDevs,@82") 93 | #pragma comment(linker, "/EXPORT:midiOutGetVolume=_AheadLib_midiOutGetVolume,@83") 94 | #pragma comment(linker, "/EXPORT:midiOutLongMsg=_AheadLib_midiOutLongMsg,@84") 95 | #pragma comment(linker, "/EXPORT:midiOutMessage=_AheadLib_midiOutMessage,@85") 96 | #pragma comment(linker, "/EXPORT:midiOutOpen=_AheadLib_midiOutOpen,@86") 97 | #pragma comment(linker, "/EXPORT:midiOutPrepareHeader=_AheadLib_midiOutPrepareHeader,@87") 98 | #pragma comment(linker, "/EXPORT:midiOutReset=_AheadLib_midiOutReset,@88") 99 | #pragma comment(linker, "/EXPORT:midiOutSetVolume=_AheadLib_midiOutSetVolume,@89") 100 | #pragma comment(linker, "/EXPORT:midiOutShortMsg=_AheadLib_midiOutShortMsg,@90") 101 | #pragma comment(linker, "/EXPORT:midiOutUnprepareHeader=_AheadLib_midiOutUnprepareHeader,@91") 102 | #pragma comment(linker, "/EXPORT:midiStreamClose=_AheadLib_midiStreamClose,@92") 103 | #pragma comment(linker, "/EXPORT:midiStreamOpen=_AheadLib_midiStreamOpen,@93") 104 | #pragma comment(linker, "/EXPORT:midiStreamOut=_AheadLib_midiStreamOut,@94") 105 | #pragma comment(linker, "/EXPORT:midiStreamPause=_AheadLib_midiStreamPause,@95") 106 | #pragma comment(linker, "/EXPORT:midiStreamPosition=_AheadLib_midiStreamPosition,@96") 107 | #pragma comment(linker, "/EXPORT:midiStreamProperty=_AheadLib_midiStreamProperty,@97") 108 | #pragma comment(linker, "/EXPORT:midiStreamRestart=_AheadLib_midiStreamRestart,@98") 109 | #pragma comment(linker, "/EXPORT:midiStreamStop=_AheadLib_midiStreamStop,@99") 110 | #pragma comment(linker, "/EXPORT:mixerClose=_AheadLib_mixerClose,@100") 111 | #pragma comment(linker, "/EXPORT:mixerGetControlDetailsA=_AheadLib_mixerGetControlDetailsA,@101") 112 | #pragma comment(linker, "/EXPORT:mixerGetControlDetailsW=_AheadLib_mixerGetControlDetailsW,@102") 113 | #pragma comment(linker, "/EXPORT:mixerGetDevCapsA=_AheadLib_mixerGetDevCapsA,@103") 114 | #pragma comment(linker, "/EXPORT:mixerGetDevCapsW=_AheadLib_mixerGetDevCapsW,@104") 115 | #pragma comment(linker, "/EXPORT:mixerGetID=_AheadLib_mixerGetID,@105") 116 | #pragma comment(linker, "/EXPORT:mixerGetLineControlsA=_AheadLib_mixerGetLineControlsA,@106") 117 | #pragma comment(linker, "/EXPORT:mixerGetLineControlsW=_AheadLib_mixerGetLineControlsW,@107") 118 | #pragma comment(linker, "/EXPORT:mixerGetLineInfoA=_AheadLib_mixerGetLineInfoA,@108") 119 | #pragma comment(linker, "/EXPORT:mixerGetLineInfoW=_AheadLib_mixerGetLineInfoW,@109") 120 | #pragma comment(linker, "/EXPORT:mixerGetNumDevs=_AheadLib_mixerGetNumDevs,@110") 121 | #pragma comment(linker, "/EXPORT:mixerMessage=_AheadLib_mixerMessage,@111") 122 | #pragma comment(linker, "/EXPORT:mixerOpen=_AheadLib_mixerOpen,@112") 123 | #pragma comment(linker, "/EXPORT:mixerSetControlDetails=_AheadLib_mixerSetControlDetails,@113") 124 | #pragma comment(linker, "/EXPORT:mmDrvInstall=_AheadLib_mmDrvInstall,@114") 125 | #pragma comment(linker, "/EXPORT:mmGetCurrentTask=_AheadLib_mmGetCurrentTask,@115") 126 | #pragma comment(linker, "/EXPORT:mmTaskBlock=_AheadLib_mmTaskBlock,@116") 127 | #pragma comment(linker, "/EXPORT:mmTaskCreate=_AheadLib_mmTaskCreate,@117") 128 | #pragma comment(linker, "/EXPORT:mmTaskSignal=_AheadLib_mmTaskSignal,@118") 129 | #pragma comment(linker, "/EXPORT:mmTaskYield=_AheadLib_mmTaskYield,@119") 130 | #pragma comment(linker, "/EXPORT:mmioAdvance=_AheadLib_mmioAdvance,@120") 131 | #pragma comment(linker, "/EXPORT:mmioAscend=_AheadLib_mmioAscend,@121") 132 | #pragma comment(linker, "/EXPORT:mmioClose=_AheadLib_mmioClose,@122") 133 | #pragma comment(linker, "/EXPORT:mmioCreateChunk=_AheadLib_mmioCreateChunk,@123") 134 | #pragma comment(linker, "/EXPORT:mmioDescend=_AheadLib_mmioDescend,@124") 135 | #pragma comment(linker, "/EXPORT:mmioFlush=_AheadLib_mmioFlush,@125") 136 | #pragma comment(linker, "/EXPORT:mmioGetInfo=_AheadLib_mmioGetInfo,@126") 137 | #pragma comment(linker, "/EXPORT:mmioInstallIOProcA=_AheadLib_mmioInstallIOProcA,@127") 138 | #pragma comment(linker, "/EXPORT:mmioInstallIOProcW=_AheadLib_mmioInstallIOProcW,@128") 139 | #pragma comment(linker, "/EXPORT:mmioOpenA=_AheadLib_mmioOpenA,@129") 140 | #pragma comment(linker, "/EXPORT:mmioOpenW=_AheadLib_mmioOpenW,@130") 141 | #pragma comment(linker, "/EXPORT:mmioRead=_AheadLib_mmioRead,@131") 142 | #pragma comment(linker, "/EXPORT:mmioRenameA=_AheadLib_mmioRenameA,@132") 143 | #pragma comment(linker, "/EXPORT:mmioRenameW=_AheadLib_mmioRenameW,@133") 144 | #pragma comment(linker, "/EXPORT:mmioSeek=_AheadLib_mmioSeek,@134") 145 | #pragma comment(linker, "/EXPORT:mmioSendMessage=_AheadLib_mmioSendMessage,@135") 146 | #pragma comment(linker, "/EXPORT:mmioSetBuffer=_AheadLib_mmioSetBuffer,@136") 147 | #pragma comment(linker, "/EXPORT:mmioSetInfo=_AheadLib_mmioSetInfo,@137") 148 | #pragma comment(linker, "/EXPORT:mmioStringToFOURCCA=_AheadLib_mmioStringToFOURCCA,@138") 149 | #pragma comment(linker, "/EXPORT:mmioStringToFOURCCW=_AheadLib_mmioStringToFOURCCW,@139") 150 | #pragma comment(linker, "/EXPORT:mmioWrite=_AheadLib_mmioWrite,@140") 151 | #pragma comment(linker, "/EXPORT:mmsystemGetVersion=_AheadLib_mmsystemGetVersion,@141") 152 | #pragma comment(linker, "/EXPORT:mod32Message=_AheadLib_mod32Message,@142") 153 | #pragma comment(linker, "/EXPORT:mxd32Message=_AheadLib_mxd32Message,@143") 154 | #pragma comment(linker, "/EXPORT:sndPlaySoundA=_AheadLib_sndPlaySoundA,@144") 155 | #pragma comment(linker, "/EXPORT:sndPlaySoundW=_AheadLib_sndPlaySoundW,@145") 156 | #pragma comment(linker, "/EXPORT:tid32Message=_AheadLib_tid32Message,@146") 157 | #pragma comment(linker, "/EXPORT:timeBeginPeriod=_AheadLib_timeBeginPeriod,@147") 158 | #pragma comment(linker, "/EXPORT:timeEndPeriod=_AheadLib_timeEndPeriod,@148") 159 | #pragma comment(linker, "/EXPORT:timeGetDevCaps=_AheadLib_timeGetDevCaps,@149") 160 | #pragma comment(linker, "/EXPORT:timeGetSystemTime=_AheadLib_timeGetSystemTime,@150") 161 | #pragma comment(linker, "/EXPORT:timeGetTime=_AheadLib_timeGetTime,@151") 162 | #pragma comment(linker, "/EXPORT:timeKillEvent=_AheadLib_timeKillEvent,@152") 163 | #pragma comment(linker, "/EXPORT:timeSetEvent=_AheadLib_timeSetEvent,@153") 164 | #pragma comment(linker, "/EXPORT:waveInAddBuffer=_AheadLib_waveInAddBuffer,@154") 165 | #pragma comment(linker, "/EXPORT:waveInClose=_AheadLib_waveInClose,@155") 166 | #pragma comment(linker, "/EXPORT:waveInGetDevCapsA=_AheadLib_waveInGetDevCapsA,@156") 167 | #pragma comment(linker, "/EXPORT:waveInGetDevCapsW=_AheadLib_waveInGetDevCapsW,@157") 168 | #pragma comment(linker, "/EXPORT:waveInGetErrorTextA=_AheadLib_waveInGetErrorTextA,@158") 169 | #pragma comment(linker, "/EXPORT:waveInGetErrorTextW=_AheadLib_waveInGetErrorTextW,@159") 170 | #pragma comment(linker, "/EXPORT:waveInGetID=_AheadLib_waveInGetID,@160") 171 | #pragma comment(linker, "/EXPORT:waveInGetNumDevs=_AheadLib_waveInGetNumDevs,@161") 172 | #pragma comment(linker, "/EXPORT:waveInGetPosition=_AheadLib_waveInGetPosition,@162") 173 | #pragma comment(linker, "/EXPORT:waveInMessage=_AheadLib_waveInMessage,@163") 174 | #pragma comment(linker, "/EXPORT:waveInOpen=_AheadLib_waveInOpen,@164") 175 | #pragma comment(linker, "/EXPORT:waveInPrepareHeader=_AheadLib_waveInPrepareHeader,@165") 176 | #pragma comment(linker, "/EXPORT:waveInReset=_AheadLib_waveInReset,@166") 177 | #pragma comment(linker, "/EXPORT:waveInStart=_AheadLib_waveInStart,@167") 178 | #pragma comment(linker, "/EXPORT:waveInStop=_AheadLib_waveInStop,@168") 179 | #pragma comment(linker, "/EXPORT:waveInUnprepareHeader=_AheadLib_waveInUnprepareHeader,@169") 180 | #pragma comment(linker, "/EXPORT:waveOutBreakLoop=_AheadLib_waveOutBreakLoop,@170") 181 | #pragma comment(linker, "/EXPORT:waveOutClose=_AheadLib_waveOutClose,@171") 182 | #pragma comment(linker, "/EXPORT:waveOutGetDevCapsA=_AheadLib_waveOutGetDevCapsA,@172") 183 | #pragma comment(linker, "/EXPORT:waveOutGetDevCapsW=_AheadLib_waveOutGetDevCapsW,@173") 184 | #pragma comment(linker, "/EXPORT:waveOutGetErrorTextA=_AheadLib_waveOutGetErrorTextA,@174") 185 | #pragma comment(linker, "/EXPORT:waveOutGetErrorTextW=_AheadLib_waveOutGetErrorTextW,@175") 186 | #pragma comment(linker, "/EXPORT:waveOutGetID=_AheadLib_waveOutGetID,@176") 187 | #pragma comment(linker, "/EXPORT:waveOutGetNumDevs=_AheadLib_waveOutGetNumDevs,@177") 188 | #pragma comment(linker, "/EXPORT:waveOutGetPitch=_AheadLib_waveOutGetPitch,@178") 189 | #pragma comment(linker, "/EXPORT:waveOutGetPlaybackRate=_AheadLib_waveOutGetPlaybackRate,@179") 190 | #pragma comment(linker, "/EXPORT:waveOutGetPosition=_AheadLib_waveOutGetPosition,@180") 191 | #pragma comment(linker, "/EXPORT:waveOutGetVolume=_AheadLib_waveOutGetVolume,@181") 192 | #pragma comment(linker, "/EXPORT:waveOutMessage=_AheadLib_waveOutMessage,@182") 193 | #pragma comment(linker, "/EXPORT:waveOutOpen=_AheadLib_waveOutOpen,@183") 194 | #pragma comment(linker, "/EXPORT:waveOutPause=_AheadLib_waveOutPause,@184") 195 | #pragma comment(linker, "/EXPORT:waveOutPrepareHeader=_AheadLib_waveOutPrepareHeader,@185") 196 | #pragma comment(linker, "/EXPORT:waveOutReset=_AheadLib_waveOutReset,@186") 197 | #pragma comment(linker, "/EXPORT:waveOutRestart=_AheadLib_waveOutRestart,@187") 198 | #pragma comment(linker, "/EXPORT:waveOutSetPitch=_AheadLib_waveOutSetPitch,@188") 199 | #pragma comment(linker, "/EXPORT:waveOutSetPlaybackRate=_AheadLib_waveOutSetPlaybackRate,@189") 200 | #pragma comment(linker, "/EXPORT:waveOutSetVolume=_AheadLib_waveOutSetVolume,@190") 201 | #pragma comment(linker, "/EXPORT:waveOutUnprepareHeader=_AheadLib_waveOutUnprepareHeader,@191") 202 | #pragma comment(linker, "/EXPORT:waveOutWrite=_AheadLib_waveOutWrite,@192") 203 | #pragma comment(linker, "/EXPORT:wid32Message=_AheadLib_wid32Message,@193") 204 | #pragma comment(linker, "/EXPORT:wod32Message=_AheadLib_wod32Message,@194") 205 | 206 | 207 | FARPROC pfnAheadLib_Unnamed2; 208 | FARPROC pfnAheadLib_mciExecute; 209 | FARPROC pfnAheadLib_CloseDriver; 210 | FARPROC pfnAheadLib_DefDriverProc; 211 | FARPROC pfnAheadLib_DriverCallback; 212 | FARPROC pfnAheadLib_DrvGetModuleHandle; 213 | FARPROC pfnAheadLib_GetDriverModuleHandle; 214 | FARPROC pfnAheadLib_NotifyCallbackData; 215 | FARPROC pfnAheadLib_OpenDriver; 216 | FARPROC pfnAheadLib_PlaySound; 217 | FARPROC pfnAheadLib_PlaySoundA; 218 | FARPROC pfnAheadLib_PlaySoundW; 219 | FARPROC pfnAheadLib_SendDriverMessage; 220 | FARPROC pfnAheadLib_WOW32DriverCallback; 221 | FARPROC pfnAheadLib_WOW32ResolveMultiMediaHandle; 222 | FARPROC pfnAheadLib_WOWAppExit; 223 | FARPROC pfnAheadLib_aux32Message; 224 | FARPROC pfnAheadLib_auxGetDevCapsA; 225 | FARPROC pfnAheadLib_auxGetDevCapsW; 226 | FARPROC pfnAheadLib_auxGetNumDevs; 227 | FARPROC pfnAheadLib_auxGetVolume; 228 | FARPROC pfnAheadLib_auxOutMessage; 229 | FARPROC pfnAheadLib_auxSetVolume; 230 | FARPROC pfnAheadLib_joy32Message; 231 | FARPROC pfnAheadLib_joyConfigChanged; 232 | FARPROC pfnAheadLib_joyGetDevCapsA; 233 | FARPROC pfnAheadLib_joyGetDevCapsW; 234 | FARPROC pfnAheadLib_joyGetNumDevs; 235 | FARPROC pfnAheadLib_joyGetPos; 236 | FARPROC pfnAheadLib_joyGetPosEx; 237 | FARPROC pfnAheadLib_joyGetThreshold; 238 | FARPROC pfnAheadLib_joyReleaseCapture; 239 | FARPROC pfnAheadLib_joySetCapture; 240 | FARPROC pfnAheadLib_joySetThreshold; 241 | FARPROC pfnAheadLib_mci32Message; 242 | FARPROC pfnAheadLib_mciDriverNotify; 243 | FARPROC pfnAheadLib_mciDriverYield; 244 | FARPROC pfnAheadLib_mciFreeCommandResource; 245 | FARPROC pfnAheadLib_mciGetCreatorTask; 246 | FARPROC pfnAheadLib_mciGetDeviceIDA; 247 | FARPROC pfnAheadLib_mciGetDeviceIDFromElementIDA; 248 | FARPROC pfnAheadLib_mciGetDeviceIDFromElementIDW; 249 | FARPROC pfnAheadLib_mciGetDeviceIDW; 250 | FARPROC pfnAheadLib_mciGetDriverData; 251 | FARPROC pfnAheadLib_mciGetErrorStringA; 252 | FARPROC pfnAheadLib_mciGetErrorStringW; 253 | FARPROC pfnAheadLib_mciGetYieldProc; 254 | FARPROC pfnAheadLib_mciLoadCommandResource; 255 | FARPROC pfnAheadLib_mciSendCommandA; 256 | FARPROC pfnAheadLib_mciSendCommandW; 257 | FARPROC pfnAheadLib_mciSendStringA; 258 | FARPROC pfnAheadLib_mciSendStringW; 259 | FARPROC pfnAheadLib_mciSetDriverData; 260 | FARPROC pfnAheadLib_mciSetYieldProc; 261 | FARPROC pfnAheadLib_mid32Message; 262 | FARPROC pfnAheadLib_midiConnect; 263 | FARPROC pfnAheadLib_midiDisconnect; 264 | FARPROC pfnAheadLib_midiInAddBuffer; 265 | FARPROC pfnAheadLib_midiInClose; 266 | FARPROC pfnAheadLib_midiInGetDevCapsA; 267 | FARPROC pfnAheadLib_midiInGetDevCapsW; 268 | FARPROC pfnAheadLib_midiInGetErrorTextA; 269 | FARPROC pfnAheadLib_midiInGetErrorTextW; 270 | FARPROC pfnAheadLib_midiInGetID; 271 | FARPROC pfnAheadLib_midiInGetNumDevs; 272 | FARPROC pfnAheadLib_midiInMessage; 273 | FARPROC pfnAheadLib_midiInOpen; 274 | FARPROC pfnAheadLib_midiInPrepareHeader; 275 | FARPROC pfnAheadLib_midiInReset; 276 | FARPROC pfnAheadLib_midiInStart; 277 | FARPROC pfnAheadLib_midiInStop; 278 | FARPROC pfnAheadLib_midiInUnprepareHeader; 279 | FARPROC pfnAheadLib_midiOutCacheDrumPatches; 280 | FARPROC pfnAheadLib_midiOutCachePatches; 281 | FARPROC pfnAheadLib_midiOutClose; 282 | FARPROC pfnAheadLib_midiOutGetDevCapsA; 283 | FARPROC pfnAheadLib_midiOutGetDevCapsW; 284 | FARPROC pfnAheadLib_midiOutGetErrorTextA; 285 | FARPROC pfnAheadLib_midiOutGetErrorTextW; 286 | FARPROC pfnAheadLib_midiOutGetID; 287 | FARPROC pfnAheadLib_midiOutGetNumDevs; 288 | FARPROC pfnAheadLib_midiOutGetVolume; 289 | FARPROC pfnAheadLib_midiOutLongMsg; 290 | FARPROC pfnAheadLib_midiOutMessage; 291 | FARPROC pfnAheadLib_midiOutOpen; 292 | FARPROC pfnAheadLib_midiOutPrepareHeader; 293 | FARPROC pfnAheadLib_midiOutReset; 294 | FARPROC pfnAheadLib_midiOutSetVolume; 295 | FARPROC pfnAheadLib_midiOutShortMsg; 296 | FARPROC pfnAheadLib_midiOutUnprepareHeader; 297 | FARPROC pfnAheadLib_midiStreamClose; 298 | FARPROC pfnAheadLib_midiStreamOpen; 299 | FARPROC pfnAheadLib_midiStreamOut; 300 | FARPROC pfnAheadLib_midiStreamPause; 301 | FARPROC pfnAheadLib_midiStreamPosition; 302 | FARPROC pfnAheadLib_midiStreamProperty; 303 | FARPROC pfnAheadLib_midiStreamRestart; 304 | FARPROC pfnAheadLib_midiStreamStop; 305 | FARPROC pfnAheadLib_mixerClose; 306 | FARPROC pfnAheadLib_mixerGetControlDetailsA; 307 | FARPROC pfnAheadLib_mixerGetControlDetailsW; 308 | FARPROC pfnAheadLib_mixerGetDevCapsA; 309 | FARPROC pfnAheadLib_mixerGetDevCapsW; 310 | FARPROC pfnAheadLib_mixerGetID; 311 | FARPROC pfnAheadLib_mixerGetLineControlsA; 312 | FARPROC pfnAheadLib_mixerGetLineControlsW; 313 | FARPROC pfnAheadLib_mixerGetLineInfoA; 314 | FARPROC pfnAheadLib_mixerGetLineInfoW; 315 | FARPROC pfnAheadLib_mixerGetNumDevs; 316 | FARPROC pfnAheadLib_mixerMessage; 317 | FARPROC pfnAheadLib_mixerOpen; 318 | FARPROC pfnAheadLib_mixerSetControlDetails; 319 | FARPROC pfnAheadLib_mmDrvInstall; 320 | FARPROC pfnAheadLib_mmGetCurrentTask; 321 | FARPROC pfnAheadLib_mmTaskBlock; 322 | FARPROC pfnAheadLib_mmTaskCreate; 323 | FARPROC pfnAheadLib_mmTaskSignal; 324 | FARPROC pfnAheadLib_mmTaskYield; 325 | FARPROC pfnAheadLib_mmioAdvance; 326 | FARPROC pfnAheadLib_mmioAscend; 327 | FARPROC pfnAheadLib_mmioClose; 328 | FARPROC pfnAheadLib_mmioCreateChunk; 329 | FARPROC pfnAheadLib_mmioDescend; 330 | FARPROC pfnAheadLib_mmioFlush; 331 | FARPROC pfnAheadLib_mmioGetInfo; 332 | FARPROC pfnAheadLib_mmioInstallIOProcA; 333 | FARPROC pfnAheadLib_mmioInstallIOProcW; 334 | FARPROC pfnAheadLib_mmioOpenA; 335 | FARPROC pfnAheadLib_mmioOpenW; 336 | FARPROC pfnAheadLib_mmioRead; 337 | FARPROC pfnAheadLib_mmioRenameA; 338 | FARPROC pfnAheadLib_mmioRenameW; 339 | FARPROC pfnAheadLib_mmioSeek; 340 | FARPROC pfnAheadLib_mmioSendMessage; 341 | FARPROC pfnAheadLib_mmioSetBuffer; 342 | FARPROC pfnAheadLib_mmioSetInfo; 343 | FARPROC pfnAheadLib_mmioStringToFOURCCA; 344 | FARPROC pfnAheadLib_mmioStringToFOURCCW; 345 | FARPROC pfnAheadLib_mmioWrite; 346 | FARPROC pfnAheadLib_mmsystemGetVersion; 347 | FARPROC pfnAheadLib_mod32Message; 348 | FARPROC pfnAheadLib_mxd32Message; 349 | FARPROC pfnAheadLib_sndPlaySoundA; 350 | FARPROC pfnAheadLib_sndPlaySoundW; 351 | FARPROC pfnAheadLib_tid32Message; 352 | FARPROC pfnAheadLib_timeBeginPeriod; 353 | FARPROC pfnAheadLib_timeEndPeriod; 354 | FARPROC pfnAheadLib_timeGetDevCaps; 355 | FARPROC pfnAheadLib_timeGetSystemTime; 356 | FARPROC pfnAheadLib_timeGetTime; 357 | FARPROC pfnAheadLib_timeKillEvent; 358 | FARPROC pfnAheadLib_timeSetEvent; 359 | FARPROC pfnAheadLib_waveInAddBuffer; 360 | FARPROC pfnAheadLib_waveInClose; 361 | FARPROC pfnAheadLib_waveInGetDevCapsA; 362 | FARPROC pfnAheadLib_waveInGetDevCapsW; 363 | FARPROC pfnAheadLib_waveInGetErrorTextA; 364 | FARPROC pfnAheadLib_waveInGetErrorTextW; 365 | FARPROC pfnAheadLib_waveInGetID; 366 | FARPROC pfnAheadLib_waveInGetNumDevs; 367 | FARPROC pfnAheadLib_waveInGetPosition; 368 | FARPROC pfnAheadLib_waveInMessage; 369 | FARPROC pfnAheadLib_waveInOpen; 370 | FARPROC pfnAheadLib_waveInPrepareHeader; 371 | FARPROC pfnAheadLib_waveInReset; 372 | FARPROC pfnAheadLib_waveInStart; 373 | FARPROC pfnAheadLib_waveInStop; 374 | FARPROC pfnAheadLib_waveInUnprepareHeader; 375 | FARPROC pfnAheadLib_waveOutBreakLoop; 376 | FARPROC pfnAheadLib_waveOutClose; 377 | FARPROC pfnAheadLib_waveOutGetDevCapsA; 378 | FARPROC pfnAheadLib_waveOutGetDevCapsW; 379 | FARPROC pfnAheadLib_waveOutGetErrorTextA; 380 | FARPROC pfnAheadLib_waveOutGetErrorTextW; 381 | FARPROC pfnAheadLib_waveOutGetID; 382 | FARPROC pfnAheadLib_waveOutGetNumDevs; 383 | FARPROC pfnAheadLib_waveOutGetPitch; 384 | FARPROC pfnAheadLib_waveOutGetPlaybackRate; 385 | FARPROC pfnAheadLib_waveOutGetPosition; 386 | FARPROC pfnAheadLib_waveOutGetVolume; 387 | FARPROC pfnAheadLib_waveOutMessage; 388 | FARPROC pfnAheadLib_waveOutOpen; 389 | FARPROC pfnAheadLib_waveOutPause; 390 | FARPROC pfnAheadLib_waveOutPrepareHeader; 391 | FARPROC pfnAheadLib_waveOutReset; 392 | FARPROC pfnAheadLib_waveOutRestart; 393 | FARPROC pfnAheadLib_waveOutSetPitch; 394 | FARPROC pfnAheadLib_waveOutSetPlaybackRate; 395 | FARPROC pfnAheadLib_waveOutSetVolume; 396 | FARPROC pfnAheadLib_waveOutUnprepareHeader; 397 | FARPROC pfnAheadLib_waveOutWrite; 398 | FARPROC pfnAheadLib_wid32Message; 399 | FARPROC pfnAheadLib_wod32Message; 400 | 401 | 402 | static 403 | HMODULE g_OldModule = NULL; 404 | 405 | VOID WINAPI Free() 406 | { 407 | if (g_OldModule) 408 | { 409 | FreeLibrary(g_OldModule); 410 | } 411 | } 412 | 413 | 414 | BOOL WINAPI Load() 415 | { 416 | TCHAR tzPath[MAX_PATH]; 417 | TCHAR tzTemp[MAX_PATH * 2]; 418 | 419 | // 420 | // 这里是否从系统目录或当前目录加载原始DLL 421 | // 422 | //GetModuleFileName(NULL,tzPath,MAX_PATH); //获取本目录下的 423 | //PathRemoveFileSpec(tzPath); 424 | 425 | GetSystemDirectory(tzPath, MAX_PATH); //默认获取系统目录的 426 | 427 | lstrcat(tzPath, TEXT("\\winmm.dll")); 428 | 429 | g_OldModule = LoadLibrary(tzPath); 430 | if (g_OldModule == NULL) 431 | { 432 | wsprintf(tzTemp, TEXT("无法找到模块 %s,程序无法正常运行"), tzPath); 433 | MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP); 434 | } 435 | 436 | return (g_OldModule != NULL); 437 | 438 | } 439 | 440 | 441 | FARPROC WINAPI GetAddress(PCSTR pszProcName) 442 | { 443 | FARPROC fpAddress; 444 | CHAR szProcName[64]; 445 | TCHAR tzTemp[MAX_PATH]; 446 | 447 | fpAddress = GetProcAddress(g_OldModule, pszProcName); 448 | if (fpAddress == NULL) 449 | { 450 | if (HIWORD(pszProcName) == 0) 451 | { 452 | wsprintfA(szProcName, "#%s", pszProcName); 453 | pszProcName = szProcName; 454 | } 455 | 456 | wsprintf(tzTemp, TEXT("无法找到函数 %hs,程序无法正常运行"), pszProcName); 457 | MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP); 458 | ExitProcess(UINT(-2)); 459 | } 460 | return fpAddress; 461 | } 462 | 463 | BOOL WINAPI Init() 464 | { 465 | pfnAheadLib_Unnamed2 = GetAddress(MAKEINTRESOURCEA(2)); 466 | pfnAheadLib_mciExecute = GetAddress("mciExecute"); 467 | pfnAheadLib_CloseDriver = GetAddress("CloseDriver"); 468 | pfnAheadLib_DefDriverProc = GetAddress("DefDriverProc"); 469 | pfnAheadLib_DriverCallback = GetAddress("DriverCallback"); 470 | pfnAheadLib_DrvGetModuleHandle = GetAddress("DrvGetModuleHandle"); 471 | pfnAheadLib_GetDriverModuleHandle = GetAddress("GetDriverModuleHandle"); 472 | pfnAheadLib_NotifyCallbackData = GetAddress("NotifyCallbackData"); 473 | pfnAheadLib_OpenDriver = GetAddress("OpenDriver"); 474 | pfnAheadLib_PlaySound = GetAddress("PlaySound"); 475 | pfnAheadLib_PlaySoundA = GetAddress("PlaySoundA"); 476 | pfnAheadLib_PlaySoundW = GetAddress("PlaySoundW"); 477 | pfnAheadLib_SendDriverMessage = GetAddress("SendDriverMessage"); 478 | pfnAheadLib_WOW32DriverCallback = GetAddress("WOW32DriverCallback"); 479 | pfnAheadLib_WOW32ResolveMultiMediaHandle = GetAddress("WOW32ResolveMultiMediaHandle"); 480 | pfnAheadLib_WOWAppExit = GetAddress("WOWAppExit"); 481 | pfnAheadLib_aux32Message = GetAddress("aux32Message"); 482 | pfnAheadLib_auxGetDevCapsA = GetAddress("auxGetDevCapsA"); 483 | pfnAheadLib_auxGetDevCapsW = GetAddress("auxGetDevCapsW"); 484 | pfnAheadLib_auxGetNumDevs = GetAddress("auxGetNumDevs"); 485 | pfnAheadLib_auxGetVolume = GetAddress("auxGetVolume"); 486 | pfnAheadLib_auxOutMessage = GetAddress("auxOutMessage"); 487 | pfnAheadLib_auxSetVolume = GetAddress("auxSetVolume"); 488 | pfnAheadLib_joy32Message = GetAddress("joy32Message"); 489 | pfnAheadLib_joyConfigChanged = GetAddress("joyConfigChanged"); 490 | pfnAheadLib_joyGetDevCapsA = GetAddress("joyGetDevCapsA"); 491 | pfnAheadLib_joyGetDevCapsW = GetAddress("joyGetDevCapsW"); 492 | pfnAheadLib_joyGetNumDevs = GetAddress("joyGetNumDevs"); 493 | pfnAheadLib_joyGetPos = GetAddress("joyGetPos"); 494 | pfnAheadLib_joyGetPosEx = GetAddress("joyGetPosEx"); 495 | pfnAheadLib_joyGetThreshold = GetAddress("joyGetThreshold"); 496 | pfnAheadLib_joyReleaseCapture = GetAddress("joyReleaseCapture"); 497 | pfnAheadLib_joySetCapture = GetAddress("joySetCapture"); 498 | pfnAheadLib_joySetThreshold = GetAddress("joySetThreshold"); 499 | pfnAheadLib_mci32Message = GetAddress("mci32Message"); 500 | pfnAheadLib_mciDriverNotify = GetAddress("mciDriverNotify"); 501 | pfnAheadLib_mciDriverYield = GetAddress("mciDriverYield"); 502 | pfnAheadLib_mciFreeCommandResource = GetAddress("mciFreeCommandResource"); 503 | pfnAheadLib_mciGetCreatorTask = GetAddress("mciGetCreatorTask"); 504 | pfnAheadLib_mciGetDeviceIDA = GetAddress("mciGetDeviceIDA"); 505 | pfnAheadLib_mciGetDeviceIDFromElementIDA = GetAddress("mciGetDeviceIDFromElementIDA"); 506 | pfnAheadLib_mciGetDeviceIDFromElementIDW = GetAddress("mciGetDeviceIDFromElementIDW"); 507 | pfnAheadLib_mciGetDeviceIDW = GetAddress("mciGetDeviceIDW"); 508 | pfnAheadLib_mciGetDriverData = GetAddress("mciGetDriverData"); 509 | pfnAheadLib_mciGetErrorStringA = GetAddress("mciGetErrorStringA"); 510 | pfnAheadLib_mciGetErrorStringW = GetAddress("mciGetErrorStringW"); 511 | pfnAheadLib_mciGetYieldProc = GetAddress("mciGetYieldProc"); 512 | pfnAheadLib_mciLoadCommandResource = GetAddress("mciLoadCommandResource"); 513 | pfnAheadLib_mciSendCommandA = GetAddress("mciSendCommandA"); 514 | pfnAheadLib_mciSendCommandW = GetAddress("mciSendCommandW"); 515 | pfnAheadLib_mciSendStringA = GetAddress("mciSendStringA"); 516 | pfnAheadLib_mciSendStringW = GetAddress("mciSendStringW"); 517 | pfnAheadLib_mciSetDriverData = GetAddress("mciSetDriverData"); 518 | pfnAheadLib_mciSetYieldProc = GetAddress("mciSetYieldProc"); 519 | pfnAheadLib_mid32Message = GetAddress("mid32Message"); 520 | pfnAheadLib_midiConnect = GetAddress("midiConnect"); 521 | pfnAheadLib_midiDisconnect = GetAddress("midiDisconnect"); 522 | pfnAheadLib_midiInAddBuffer = GetAddress("midiInAddBuffer"); 523 | pfnAheadLib_midiInClose = GetAddress("midiInClose"); 524 | pfnAheadLib_midiInGetDevCapsA = GetAddress("midiInGetDevCapsA"); 525 | pfnAheadLib_midiInGetDevCapsW = GetAddress("midiInGetDevCapsW"); 526 | pfnAheadLib_midiInGetErrorTextA = GetAddress("midiInGetErrorTextA"); 527 | pfnAheadLib_midiInGetErrorTextW = GetAddress("midiInGetErrorTextW"); 528 | pfnAheadLib_midiInGetID = GetAddress("midiInGetID"); 529 | pfnAheadLib_midiInGetNumDevs = GetAddress("midiInGetNumDevs"); 530 | pfnAheadLib_midiInMessage = GetAddress("midiInMessage"); 531 | pfnAheadLib_midiInOpen = GetAddress("midiInOpen"); 532 | pfnAheadLib_midiInPrepareHeader = GetAddress("midiInPrepareHeader"); 533 | pfnAheadLib_midiInReset = GetAddress("midiInReset"); 534 | pfnAheadLib_midiInStart = GetAddress("midiInStart"); 535 | pfnAheadLib_midiInStop = GetAddress("midiInStop"); 536 | pfnAheadLib_midiInUnprepareHeader = GetAddress("midiInUnprepareHeader"); 537 | pfnAheadLib_midiOutCacheDrumPatches = GetAddress("midiOutCacheDrumPatches"); 538 | pfnAheadLib_midiOutCachePatches = GetAddress("midiOutCachePatches"); 539 | pfnAheadLib_midiOutClose = GetAddress("midiOutClose"); 540 | pfnAheadLib_midiOutGetDevCapsA = GetAddress("midiOutGetDevCapsA"); 541 | pfnAheadLib_midiOutGetDevCapsW = GetAddress("midiOutGetDevCapsW"); 542 | pfnAheadLib_midiOutGetErrorTextA = GetAddress("midiOutGetErrorTextA"); 543 | pfnAheadLib_midiOutGetErrorTextW = GetAddress("midiOutGetErrorTextW"); 544 | pfnAheadLib_midiOutGetID = GetAddress("midiOutGetID"); 545 | pfnAheadLib_midiOutGetNumDevs = GetAddress("midiOutGetNumDevs"); 546 | pfnAheadLib_midiOutGetVolume = GetAddress("midiOutGetVolume"); 547 | pfnAheadLib_midiOutLongMsg = GetAddress("midiOutLongMsg"); 548 | pfnAheadLib_midiOutMessage = GetAddress("midiOutMessage"); 549 | pfnAheadLib_midiOutOpen = GetAddress("midiOutOpen"); 550 | pfnAheadLib_midiOutPrepareHeader = GetAddress("midiOutPrepareHeader"); 551 | pfnAheadLib_midiOutReset = GetAddress("midiOutReset"); 552 | pfnAheadLib_midiOutSetVolume = GetAddress("midiOutSetVolume"); 553 | pfnAheadLib_midiOutShortMsg = GetAddress("midiOutShortMsg"); 554 | pfnAheadLib_midiOutUnprepareHeader = GetAddress("midiOutUnprepareHeader"); 555 | pfnAheadLib_midiStreamClose = GetAddress("midiStreamClose"); 556 | pfnAheadLib_midiStreamOpen = GetAddress("midiStreamOpen"); 557 | pfnAheadLib_midiStreamOut = GetAddress("midiStreamOut"); 558 | pfnAheadLib_midiStreamPause = GetAddress("midiStreamPause"); 559 | pfnAheadLib_midiStreamPosition = GetAddress("midiStreamPosition"); 560 | pfnAheadLib_midiStreamProperty = GetAddress("midiStreamProperty"); 561 | pfnAheadLib_midiStreamRestart = GetAddress("midiStreamRestart"); 562 | pfnAheadLib_midiStreamStop = GetAddress("midiStreamStop"); 563 | pfnAheadLib_mixerClose = GetAddress("mixerClose"); 564 | pfnAheadLib_mixerGetControlDetailsA = GetAddress("mixerGetControlDetailsA"); 565 | pfnAheadLib_mixerGetControlDetailsW = GetAddress("mixerGetControlDetailsW"); 566 | pfnAheadLib_mixerGetDevCapsA = GetAddress("mixerGetDevCapsA"); 567 | pfnAheadLib_mixerGetDevCapsW = GetAddress("mixerGetDevCapsW"); 568 | pfnAheadLib_mixerGetID = GetAddress("mixerGetID"); 569 | pfnAheadLib_mixerGetLineControlsA = GetAddress("mixerGetLineControlsA"); 570 | pfnAheadLib_mixerGetLineControlsW = GetAddress("mixerGetLineControlsW"); 571 | pfnAheadLib_mixerGetLineInfoA = GetAddress("mixerGetLineInfoA"); 572 | pfnAheadLib_mixerGetLineInfoW = GetAddress("mixerGetLineInfoW"); 573 | pfnAheadLib_mixerGetNumDevs = GetAddress("mixerGetNumDevs"); 574 | pfnAheadLib_mixerMessage = GetAddress("mixerMessage"); 575 | pfnAheadLib_mixerOpen = GetAddress("mixerOpen"); 576 | pfnAheadLib_mixerSetControlDetails = GetAddress("mixerSetControlDetails"); 577 | pfnAheadLib_mmDrvInstall = GetAddress("mmDrvInstall"); 578 | pfnAheadLib_mmGetCurrentTask = GetAddress("mmGetCurrentTask"); 579 | pfnAheadLib_mmTaskBlock = GetAddress("mmTaskBlock"); 580 | pfnAheadLib_mmTaskCreate = GetAddress("mmTaskCreate"); 581 | pfnAheadLib_mmTaskSignal = GetAddress("mmTaskSignal"); 582 | pfnAheadLib_mmTaskYield = GetAddress("mmTaskYield"); 583 | pfnAheadLib_mmioAdvance = GetAddress("mmioAdvance"); 584 | pfnAheadLib_mmioAscend = GetAddress("mmioAscend"); 585 | pfnAheadLib_mmioClose = GetAddress("mmioClose"); 586 | pfnAheadLib_mmioCreateChunk = GetAddress("mmioCreateChunk"); 587 | pfnAheadLib_mmioDescend = GetAddress("mmioDescend"); 588 | pfnAheadLib_mmioFlush = GetAddress("mmioFlush"); 589 | pfnAheadLib_mmioGetInfo = GetAddress("mmioGetInfo"); 590 | pfnAheadLib_mmioInstallIOProcA = GetAddress("mmioInstallIOProcA"); 591 | pfnAheadLib_mmioInstallIOProcW = GetAddress("mmioInstallIOProcW"); 592 | pfnAheadLib_mmioOpenA = GetAddress("mmioOpenA"); 593 | pfnAheadLib_mmioOpenW = GetAddress("mmioOpenW"); 594 | pfnAheadLib_mmioRead = GetAddress("mmioRead"); 595 | pfnAheadLib_mmioRenameA = GetAddress("mmioRenameA"); 596 | pfnAheadLib_mmioRenameW = GetAddress("mmioRenameW"); 597 | pfnAheadLib_mmioSeek = GetAddress("mmioSeek"); 598 | pfnAheadLib_mmioSendMessage = GetAddress("mmioSendMessage"); 599 | pfnAheadLib_mmioSetBuffer = GetAddress("mmioSetBuffer"); 600 | pfnAheadLib_mmioSetInfo = GetAddress("mmioSetInfo"); 601 | pfnAheadLib_mmioStringToFOURCCA = GetAddress("mmioStringToFOURCCA"); 602 | pfnAheadLib_mmioStringToFOURCCW = GetAddress("mmioStringToFOURCCW"); 603 | pfnAheadLib_mmioWrite = GetAddress("mmioWrite"); 604 | pfnAheadLib_mmsystemGetVersion = GetAddress("mmsystemGetVersion"); 605 | pfnAheadLib_mod32Message = GetAddress("mod32Message"); 606 | pfnAheadLib_mxd32Message = GetAddress("mxd32Message"); 607 | pfnAheadLib_sndPlaySoundA = GetAddress("sndPlaySoundA"); 608 | pfnAheadLib_sndPlaySoundW = GetAddress("sndPlaySoundW"); 609 | pfnAheadLib_tid32Message = GetAddress("tid32Message"); 610 | pfnAheadLib_timeBeginPeriod = GetAddress("timeBeginPeriod"); 611 | pfnAheadLib_timeEndPeriod = GetAddress("timeEndPeriod"); 612 | pfnAheadLib_timeGetDevCaps = GetAddress("timeGetDevCaps"); 613 | pfnAheadLib_timeGetSystemTime = GetAddress("timeGetSystemTime"); 614 | pfnAheadLib_timeGetTime = GetAddress("timeGetTime"); 615 | pfnAheadLib_timeKillEvent = GetAddress("timeKillEvent"); 616 | pfnAheadLib_timeSetEvent = GetAddress("timeSetEvent"); 617 | pfnAheadLib_waveInAddBuffer = GetAddress("waveInAddBuffer"); 618 | pfnAheadLib_waveInClose = GetAddress("waveInClose"); 619 | pfnAheadLib_waveInGetDevCapsA = GetAddress("waveInGetDevCapsA"); 620 | pfnAheadLib_waveInGetDevCapsW = GetAddress("waveInGetDevCapsW"); 621 | pfnAheadLib_waveInGetErrorTextA = GetAddress("waveInGetErrorTextA"); 622 | pfnAheadLib_waveInGetErrorTextW = GetAddress("waveInGetErrorTextW"); 623 | pfnAheadLib_waveInGetID = GetAddress("waveInGetID"); 624 | pfnAheadLib_waveInGetNumDevs = GetAddress("waveInGetNumDevs"); 625 | pfnAheadLib_waveInGetPosition = GetAddress("waveInGetPosition"); 626 | pfnAheadLib_waveInMessage = GetAddress("waveInMessage"); 627 | pfnAheadLib_waveInOpen = GetAddress("waveInOpen"); 628 | pfnAheadLib_waveInPrepareHeader = GetAddress("waveInPrepareHeader"); 629 | pfnAheadLib_waveInReset = GetAddress("waveInReset"); 630 | pfnAheadLib_waveInStart = GetAddress("waveInStart"); 631 | pfnAheadLib_waveInStop = GetAddress("waveInStop"); 632 | pfnAheadLib_waveInUnprepareHeader = GetAddress("waveInUnprepareHeader"); 633 | pfnAheadLib_waveOutBreakLoop = GetAddress("waveOutBreakLoop"); 634 | pfnAheadLib_waveOutClose = GetAddress("waveOutClose"); 635 | pfnAheadLib_waveOutGetDevCapsA = GetAddress("waveOutGetDevCapsA"); 636 | pfnAheadLib_waveOutGetDevCapsW = GetAddress("waveOutGetDevCapsW"); 637 | pfnAheadLib_waveOutGetErrorTextA = GetAddress("waveOutGetErrorTextA"); 638 | pfnAheadLib_waveOutGetErrorTextW = GetAddress("waveOutGetErrorTextW"); 639 | pfnAheadLib_waveOutGetID = GetAddress("waveOutGetID"); 640 | pfnAheadLib_waveOutGetNumDevs = GetAddress("waveOutGetNumDevs"); 641 | pfnAheadLib_waveOutGetPitch = GetAddress("waveOutGetPitch"); 642 | pfnAheadLib_waveOutGetPlaybackRate = GetAddress("waveOutGetPlaybackRate"); 643 | pfnAheadLib_waveOutGetPosition = GetAddress("waveOutGetPosition"); 644 | pfnAheadLib_waveOutGetVolume = GetAddress("waveOutGetVolume"); 645 | pfnAheadLib_waveOutMessage = GetAddress("waveOutMessage"); 646 | pfnAheadLib_waveOutOpen = GetAddress("waveOutOpen"); 647 | pfnAheadLib_waveOutPause = GetAddress("waveOutPause"); 648 | pfnAheadLib_waveOutPrepareHeader = GetAddress("waveOutPrepareHeader"); 649 | pfnAheadLib_waveOutReset = GetAddress("waveOutReset"); 650 | pfnAheadLib_waveOutRestart = GetAddress("waveOutRestart"); 651 | pfnAheadLib_waveOutSetPitch = GetAddress("waveOutSetPitch"); 652 | pfnAheadLib_waveOutSetPlaybackRate = GetAddress("waveOutSetPlaybackRate"); 653 | pfnAheadLib_waveOutSetVolume = GetAddress("waveOutSetVolume"); 654 | pfnAheadLib_waveOutUnprepareHeader = GetAddress("waveOutUnprepareHeader"); 655 | pfnAheadLib_waveOutWrite = GetAddress("waveOutWrite"); 656 | pfnAheadLib_wid32Message = GetAddress("wid32Message"); 657 | pfnAheadLib_wod32Message = GetAddress("wod32Message"); 658 | return TRUE; 659 | } 660 | 661 | extern DWORD WINAPI ThreadProc(LPVOID lpThreadParameter); 662 | 663 | BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved) 664 | { 665 | (void)pvReserved; 666 | if (dwReason == DLL_PROCESS_ATTACH) 667 | { 668 | DisableThreadLibraryCalls(hModule); 669 | 670 | if (Load() && Init()) 671 | { 672 | TCHAR szCurName[MAX_PATH]; 673 | 674 | GetModuleFileName(NULL, szCurName, MAX_PATH); 675 | PathStripPath(szCurName); 676 | 677 | //是否判断宿主进程名 678 | if (endsWith(szCurName, TEXT(".exe"))) 679 | { 680 | //启动补丁线程或者其他操作 681 | HANDLE hThread = CreateThread(NULL, NULL, ThreadProc, NULL, NULL, NULL); 682 | if (hThread) 683 | { 684 | CloseHandle(hThread); 685 | } 686 | } 687 | } 688 | } 689 | else if (dwReason == DLL_PROCESS_DETACH) 690 | { 691 | Free(); 692 | } 693 | 694 | return TRUE; 695 | } 696 | 697 | 698 | EXTERN_C __declspec(naked) void __cdecl AheadLib_Unnamed2(void) 699 | { 700 | __asm jmp pfnAheadLib_Unnamed2; 701 | } 702 | 703 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciExecute(void) 704 | { 705 | __asm jmp pfnAheadLib_mciExecute; 706 | } 707 | 708 | EXTERN_C __declspec(naked) void __cdecl AheadLib_CloseDriver(void) 709 | { 710 | __asm jmp pfnAheadLib_CloseDriver; 711 | } 712 | 713 | EXTERN_C __declspec(naked) void __cdecl AheadLib_DefDriverProc(void) 714 | { 715 | __asm jmp pfnAheadLib_DefDriverProc; 716 | } 717 | 718 | EXTERN_C __declspec(naked) void __cdecl AheadLib_DriverCallback(void) 719 | { 720 | __asm jmp pfnAheadLib_DriverCallback; 721 | } 722 | 723 | EXTERN_C __declspec(naked) void __cdecl AheadLib_DrvGetModuleHandle(void) 724 | { 725 | __asm jmp pfnAheadLib_DrvGetModuleHandle; 726 | } 727 | 728 | EXTERN_C __declspec(naked) void __cdecl AheadLib_GetDriverModuleHandle(void) 729 | { 730 | __asm jmp pfnAheadLib_GetDriverModuleHandle; 731 | } 732 | 733 | EXTERN_C __declspec(naked) void __cdecl AheadLib_NotifyCallbackData(void) 734 | { 735 | __asm jmp pfnAheadLib_NotifyCallbackData; 736 | } 737 | 738 | EXTERN_C __declspec(naked) void __cdecl AheadLib_OpenDriver(void) 739 | { 740 | __asm jmp pfnAheadLib_OpenDriver; 741 | } 742 | 743 | EXTERN_C __declspec(naked) void __cdecl AheadLib_PlaySound(void) 744 | { 745 | __asm jmp pfnAheadLib_PlaySound; 746 | } 747 | 748 | EXTERN_C __declspec(naked) void __cdecl AheadLib_PlaySoundA(void) 749 | { 750 | __asm jmp pfnAheadLib_PlaySoundA; 751 | } 752 | 753 | EXTERN_C __declspec(naked) void __cdecl AheadLib_PlaySoundW(void) 754 | { 755 | __asm jmp pfnAheadLib_PlaySoundW; 756 | } 757 | 758 | EXTERN_C __declspec(naked) void __cdecl AheadLib_SendDriverMessage(void) 759 | { 760 | __asm jmp pfnAheadLib_SendDriverMessage; 761 | } 762 | 763 | EXTERN_C __declspec(naked) void __cdecl AheadLib_WOW32DriverCallback(void) 764 | { 765 | __asm jmp pfnAheadLib_WOW32DriverCallback; 766 | } 767 | 768 | EXTERN_C __declspec(naked) void __cdecl AheadLib_WOW32ResolveMultiMediaHandle(void) 769 | { 770 | __asm jmp pfnAheadLib_WOW32ResolveMultiMediaHandle; 771 | } 772 | 773 | EXTERN_C __declspec(naked) void __cdecl AheadLib_WOWAppExit(void) 774 | { 775 | __asm jmp pfnAheadLib_WOWAppExit; 776 | } 777 | 778 | EXTERN_C __declspec(naked) void __cdecl AheadLib_aux32Message(void) 779 | { 780 | __asm jmp pfnAheadLib_aux32Message; 781 | } 782 | 783 | EXTERN_C __declspec(naked) void __cdecl AheadLib_auxGetDevCapsA(void) 784 | { 785 | __asm jmp pfnAheadLib_auxGetDevCapsA; 786 | } 787 | 788 | EXTERN_C __declspec(naked) void __cdecl AheadLib_auxGetDevCapsW(void) 789 | { 790 | __asm jmp pfnAheadLib_auxGetDevCapsW; 791 | } 792 | 793 | EXTERN_C __declspec(naked) void __cdecl AheadLib_auxGetNumDevs(void) 794 | { 795 | __asm jmp pfnAheadLib_auxGetNumDevs; 796 | } 797 | 798 | EXTERN_C __declspec(naked) void __cdecl AheadLib_auxGetVolume(void) 799 | { 800 | __asm jmp pfnAheadLib_auxGetVolume; 801 | } 802 | 803 | EXTERN_C __declspec(naked) void __cdecl AheadLib_auxOutMessage(void) 804 | { 805 | __asm jmp pfnAheadLib_auxOutMessage; 806 | } 807 | 808 | EXTERN_C __declspec(naked) void __cdecl AheadLib_auxSetVolume(void) 809 | { 810 | __asm jmp pfnAheadLib_auxSetVolume; 811 | } 812 | 813 | EXTERN_C __declspec(naked) void __cdecl AheadLib_joy32Message(void) 814 | { 815 | __asm jmp pfnAheadLib_joy32Message; 816 | } 817 | 818 | EXTERN_C __declspec(naked) void __cdecl AheadLib_joyConfigChanged(void) 819 | { 820 | __asm jmp pfnAheadLib_joyConfigChanged; 821 | } 822 | 823 | EXTERN_C __declspec(naked) void __cdecl AheadLib_joyGetDevCapsA(void) 824 | { 825 | __asm jmp pfnAheadLib_joyGetDevCapsA; 826 | } 827 | 828 | EXTERN_C __declspec(naked) void __cdecl AheadLib_joyGetDevCapsW(void) 829 | { 830 | __asm jmp pfnAheadLib_joyGetDevCapsW; 831 | } 832 | 833 | EXTERN_C __declspec(naked) void __cdecl AheadLib_joyGetNumDevs(void) 834 | { 835 | __asm jmp pfnAheadLib_joyGetNumDevs; 836 | } 837 | 838 | EXTERN_C __declspec(naked) void __cdecl AheadLib_joyGetPos(void) 839 | { 840 | __asm jmp pfnAheadLib_joyGetPos; 841 | } 842 | 843 | EXTERN_C __declspec(naked) void __cdecl AheadLib_joyGetPosEx(void) 844 | { 845 | __asm jmp pfnAheadLib_joyGetPosEx; 846 | } 847 | 848 | EXTERN_C __declspec(naked) void __cdecl AheadLib_joyGetThreshold(void) 849 | { 850 | __asm jmp pfnAheadLib_joyGetThreshold; 851 | } 852 | 853 | EXTERN_C __declspec(naked) void __cdecl AheadLib_joyReleaseCapture(void) 854 | { 855 | __asm jmp pfnAheadLib_joyReleaseCapture; 856 | } 857 | 858 | EXTERN_C __declspec(naked) void __cdecl AheadLib_joySetCapture(void) 859 | { 860 | __asm jmp pfnAheadLib_joySetCapture; 861 | } 862 | 863 | EXTERN_C __declspec(naked) void __cdecl AheadLib_joySetThreshold(void) 864 | { 865 | __asm jmp pfnAheadLib_joySetThreshold; 866 | } 867 | 868 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mci32Message(void) 869 | { 870 | __asm jmp pfnAheadLib_mci32Message; 871 | } 872 | 873 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciDriverNotify(void) 874 | { 875 | __asm jmp pfnAheadLib_mciDriverNotify; 876 | } 877 | 878 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciDriverYield(void) 879 | { 880 | __asm jmp pfnAheadLib_mciDriverYield; 881 | } 882 | 883 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciFreeCommandResource(void) 884 | { 885 | __asm jmp pfnAheadLib_mciFreeCommandResource; 886 | } 887 | 888 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciGetCreatorTask(void) 889 | { 890 | __asm jmp pfnAheadLib_mciGetCreatorTask; 891 | } 892 | 893 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciGetDeviceIDA(void) 894 | { 895 | __asm jmp pfnAheadLib_mciGetDeviceIDA; 896 | } 897 | 898 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciGetDeviceIDFromElementIDA(void) 899 | { 900 | __asm jmp pfnAheadLib_mciGetDeviceIDFromElementIDA; 901 | } 902 | 903 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciGetDeviceIDFromElementIDW(void) 904 | { 905 | __asm jmp pfnAheadLib_mciGetDeviceIDFromElementIDW; 906 | } 907 | 908 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciGetDeviceIDW(void) 909 | { 910 | __asm jmp pfnAheadLib_mciGetDeviceIDW; 911 | } 912 | 913 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciGetDriverData(void) 914 | { 915 | __asm jmp pfnAheadLib_mciGetDriverData; 916 | } 917 | 918 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciGetErrorStringA(void) 919 | { 920 | __asm jmp pfnAheadLib_mciGetErrorStringA; 921 | } 922 | 923 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciGetErrorStringW(void) 924 | { 925 | __asm jmp pfnAheadLib_mciGetErrorStringW; 926 | } 927 | 928 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciGetYieldProc(void) 929 | { 930 | __asm jmp pfnAheadLib_mciGetYieldProc; 931 | } 932 | 933 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciLoadCommandResource(void) 934 | { 935 | __asm jmp pfnAheadLib_mciLoadCommandResource; 936 | } 937 | 938 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciSendCommandA(void) 939 | { 940 | __asm jmp pfnAheadLib_mciSendCommandA; 941 | } 942 | 943 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciSendCommandW(void) 944 | { 945 | __asm jmp pfnAheadLib_mciSendCommandW; 946 | } 947 | 948 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciSendStringA(void) 949 | { 950 | __asm jmp pfnAheadLib_mciSendStringA; 951 | } 952 | 953 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciSendStringW(void) 954 | { 955 | __asm jmp pfnAheadLib_mciSendStringW; 956 | } 957 | 958 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciSetDriverData(void) 959 | { 960 | __asm jmp pfnAheadLib_mciSetDriverData; 961 | } 962 | 963 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mciSetYieldProc(void) 964 | { 965 | __asm jmp pfnAheadLib_mciSetYieldProc; 966 | } 967 | 968 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mid32Message(void) 969 | { 970 | __asm jmp pfnAheadLib_mid32Message; 971 | } 972 | 973 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiConnect(void) 974 | { 975 | __asm jmp pfnAheadLib_midiConnect; 976 | } 977 | 978 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiDisconnect(void) 979 | { 980 | __asm jmp pfnAheadLib_midiDisconnect; 981 | } 982 | 983 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInAddBuffer(void) 984 | { 985 | __asm jmp pfnAheadLib_midiInAddBuffer; 986 | } 987 | 988 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInClose(void) 989 | { 990 | __asm jmp pfnAheadLib_midiInClose; 991 | } 992 | 993 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInGetDevCapsA(void) 994 | { 995 | __asm jmp pfnAheadLib_midiInGetDevCapsA; 996 | } 997 | 998 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInGetDevCapsW(void) 999 | { 1000 | __asm jmp pfnAheadLib_midiInGetDevCapsW; 1001 | } 1002 | 1003 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInGetErrorTextA(void) 1004 | { 1005 | __asm jmp pfnAheadLib_midiInGetErrorTextA; 1006 | } 1007 | 1008 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInGetErrorTextW(void) 1009 | { 1010 | __asm jmp pfnAheadLib_midiInGetErrorTextW; 1011 | } 1012 | 1013 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInGetID(void) 1014 | { 1015 | __asm jmp pfnAheadLib_midiInGetID; 1016 | } 1017 | 1018 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInGetNumDevs(void) 1019 | { 1020 | __asm jmp pfnAheadLib_midiInGetNumDevs; 1021 | } 1022 | 1023 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInMessage(void) 1024 | { 1025 | __asm jmp pfnAheadLib_midiInMessage; 1026 | } 1027 | 1028 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInOpen(void) 1029 | { 1030 | __asm jmp pfnAheadLib_midiInOpen; 1031 | } 1032 | 1033 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInPrepareHeader(void) 1034 | { 1035 | __asm jmp pfnAheadLib_midiInPrepareHeader; 1036 | } 1037 | 1038 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInReset(void) 1039 | { 1040 | __asm jmp pfnAheadLib_midiInReset; 1041 | } 1042 | 1043 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInStart(void) 1044 | { 1045 | __asm jmp pfnAheadLib_midiInStart; 1046 | } 1047 | 1048 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInStop(void) 1049 | { 1050 | __asm jmp pfnAheadLib_midiInStop; 1051 | } 1052 | 1053 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiInUnprepareHeader(void) 1054 | { 1055 | __asm jmp pfnAheadLib_midiInUnprepareHeader; 1056 | } 1057 | 1058 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutCacheDrumPatches(void) 1059 | { 1060 | __asm jmp pfnAheadLib_midiOutCacheDrumPatches; 1061 | } 1062 | 1063 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutCachePatches(void) 1064 | { 1065 | __asm jmp pfnAheadLib_midiOutCachePatches; 1066 | } 1067 | 1068 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutClose(void) 1069 | { 1070 | __asm jmp pfnAheadLib_midiOutClose; 1071 | } 1072 | 1073 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutGetDevCapsA(void) 1074 | { 1075 | __asm jmp pfnAheadLib_midiOutGetDevCapsA; 1076 | } 1077 | 1078 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutGetDevCapsW(void) 1079 | { 1080 | __asm jmp pfnAheadLib_midiOutGetDevCapsW; 1081 | } 1082 | 1083 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutGetErrorTextA(void) 1084 | { 1085 | __asm jmp pfnAheadLib_midiOutGetErrorTextA; 1086 | } 1087 | 1088 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutGetErrorTextW(void) 1089 | { 1090 | __asm jmp pfnAheadLib_midiOutGetErrorTextW; 1091 | } 1092 | 1093 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutGetID(void) 1094 | { 1095 | __asm jmp pfnAheadLib_midiOutGetID; 1096 | } 1097 | 1098 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutGetNumDevs(void) 1099 | { 1100 | __asm jmp pfnAheadLib_midiOutGetNumDevs; 1101 | } 1102 | 1103 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutGetVolume(void) 1104 | { 1105 | __asm jmp pfnAheadLib_midiOutGetVolume; 1106 | } 1107 | 1108 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutLongMsg(void) 1109 | { 1110 | __asm jmp pfnAheadLib_midiOutLongMsg; 1111 | } 1112 | 1113 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutMessage(void) 1114 | { 1115 | __asm jmp pfnAheadLib_midiOutMessage; 1116 | } 1117 | 1118 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutOpen(void) 1119 | { 1120 | __asm jmp pfnAheadLib_midiOutOpen; 1121 | } 1122 | 1123 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutPrepareHeader(void) 1124 | { 1125 | __asm jmp pfnAheadLib_midiOutPrepareHeader; 1126 | } 1127 | 1128 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutReset(void) 1129 | { 1130 | __asm jmp pfnAheadLib_midiOutReset; 1131 | } 1132 | 1133 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutSetVolume(void) 1134 | { 1135 | __asm jmp pfnAheadLib_midiOutSetVolume; 1136 | } 1137 | 1138 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutShortMsg(void) 1139 | { 1140 | __asm jmp pfnAheadLib_midiOutShortMsg; 1141 | } 1142 | 1143 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiOutUnprepareHeader(void) 1144 | { 1145 | __asm jmp pfnAheadLib_midiOutUnprepareHeader; 1146 | } 1147 | 1148 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiStreamClose(void) 1149 | { 1150 | __asm jmp pfnAheadLib_midiStreamClose; 1151 | } 1152 | 1153 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiStreamOpen(void) 1154 | { 1155 | __asm jmp pfnAheadLib_midiStreamOpen; 1156 | } 1157 | 1158 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiStreamOut(void) 1159 | { 1160 | __asm jmp pfnAheadLib_midiStreamOut; 1161 | } 1162 | 1163 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiStreamPause(void) 1164 | { 1165 | __asm jmp pfnAheadLib_midiStreamPause; 1166 | } 1167 | 1168 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiStreamPosition(void) 1169 | { 1170 | __asm jmp pfnAheadLib_midiStreamPosition; 1171 | } 1172 | 1173 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiStreamProperty(void) 1174 | { 1175 | __asm jmp pfnAheadLib_midiStreamProperty; 1176 | } 1177 | 1178 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiStreamRestart(void) 1179 | { 1180 | __asm jmp pfnAheadLib_midiStreamRestart; 1181 | } 1182 | 1183 | EXTERN_C __declspec(naked) void __cdecl AheadLib_midiStreamStop(void) 1184 | { 1185 | __asm jmp pfnAheadLib_midiStreamStop; 1186 | } 1187 | 1188 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerClose(void) 1189 | { 1190 | __asm jmp pfnAheadLib_mixerClose; 1191 | } 1192 | 1193 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerGetControlDetailsA(void) 1194 | { 1195 | __asm jmp pfnAheadLib_mixerGetControlDetailsA; 1196 | } 1197 | 1198 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerGetControlDetailsW(void) 1199 | { 1200 | __asm jmp pfnAheadLib_mixerGetControlDetailsW; 1201 | } 1202 | 1203 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerGetDevCapsA(void) 1204 | { 1205 | __asm jmp pfnAheadLib_mixerGetDevCapsA; 1206 | } 1207 | 1208 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerGetDevCapsW(void) 1209 | { 1210 | __asm jmp pfnAheadLib_mixerGetDevCapsW; 1211 | } 1212 | 1213 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerGetID(void) 1214 | { 1215 | __asm jmp pfnAheadLib_mixerGetID; 1216 | } 1217 | 1218 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerGetLineControlsA(void) 1219 | { 1220 | __asm jmp pfnAheadLib_mixerGetLineControlsA; 1221 | } 1222 | 1223 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerGetLineControlsW(void) 1224 | { 1225 | __asm jmp pfnAheadLib_mixerGetLineControlsW; 1226 | } 1227 | 1228 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerGetLineInfoA(void) 1229 | { 1230 | __asm jmp pfnAheadLib_mixerGetLineInfoA; 1231 | } 1232 | 1233 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerGetLineInfoW(void) 1234 | { 1235 | __asm jmp pfnAheadLib_mixerGetLineInfoW; 1236 | } 1237 | 1238 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerGetNumDevs(void) 1239 | { 1240 | __asm jmp pfnAheadLib_mixerGetNumDevs; 1241 | } 1242 | 1243 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerMessage(void) 1244 | { 1245 | __asm jmp pfnAheadLib_mixerMessage; 1246 | } 1247 | 1248 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerOpen(void) 1249 | { 1250 | __asm jmp pfnAheadLib_mixerOpen; 1251 | } 1252 | 1253 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mixerSetControlDetails(void) 1254 | { 1255 | __asm jmp pfnAheadLib_mixerSetControlDetails; 1256 | } 1257 | 1258 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmDrvInstall(void) 1259 | { 1260 | __asm jmp pfnAheadLib_mmDrvInstall; 1261 | } 1262 | 1263 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmGetCurrentTask(void) 1264 | { 1265 | __asm jmp pfnAheadLib_mmGetCurrentTask; 1266 | } 1267 | 1268 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmTaskBlock(void) 1269 | { 1270 | __asm jmp pfnAheadLib_mmTaskBlock; 1271 | } 1272 | 1273 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmTaskCreate(void) 1274 | { 1275 | __asm jmp pfnAheadLib_mmTaskCreate; 1276 | } 1277 | 1278 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmTaskSignal(void) 1279 | { 1280 | __asm jmp pfnAheadLib_mmTaskSignal; 1281 | } 1282 | 1283 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmTaskYield(void) 1284 | { 1285 | __asm jmp pfnAheadLib_mmTaskYield; 1286 | } 1287 | 1288 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioAdvance(void) 1289 | { 1290 | __asm jmp pfnAheadLib_mmioAdvance; 1291 | } 1292 | 1293 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioAscend(void) 1294 | { 1295 | __asm jmp pfnAheadLib_mmioAscend; 1296 | } 1297 | 1298 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioClose(void) 1299 | { 1300 | __asm jmp pfnAheadLib_mmioClose; 1301 | } 1302 | 1303 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioCreateChunk(void) 1304 | { 1305 | __asm jmp pfnAheadLib_mmioCreateChunk; 1306 | } 1307 | 1308 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioDescend(void) 1309 | { 1310 | __asm jmp pfnAheadLib_mmioDescend; 1311 | } 1312 | 1313 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioFlush(void) 1314 | { 1315 | __asm jmp pfnAheadLib_mmioFlush; 1316 | } 1317 | 1318 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioGetInfo(void) 1319 | { 1320 | __asm jmp pfnAheadLib_mmioGetInfo; 1321 | } 1322 | 1323 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioInstallIOProcA(void) 1324 | { 1325 | __asm jmp pfnAheadLib_mmioInstallIOProcA; 1326 | } 1327 | 1328 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioInstallIOProcW(void) 1329 | { 1330 | __asm jmp pfnAheadLib_mmioInstallIOProcW; 1331 | } 1332 | 1333 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioOpenA(void) 1334 | { 1335 | __asm jmp pfnAheadLib_mmioOpenA; 1336 | } 1337 | 1338 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioOpenW(void) 1339 | { 1340 | __asm jmp pfnAheadLib_mmioOpenW; 1341 | } 1342 | 1343 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioRead(void) 1344 | { 1345 | __asm jmp pfnAheadLib_mmioRead; 1346 | } 1347 | 1348 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioRenameA(void) 1349 | { 1350 | __asm jmp pfnAheadLib_mmioRenameA; 1351 | } 1352 | 1353 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioRenameW(void) 1354 | { 1355 | __asm jmp pfnAheadLib_mmioRenameW; 1356 | } 1357 | 1358 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioSeek(void) 1359 | { 1360 | __asm jmp pfnAheadLib_mmioSeek; 1361 | } 1362 | 1363 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioSendMessage(void) 1364 | { 1365 | __asm jmp pfnAheadLib_mmioSendMessage; 1366 | } 1367 | 1368 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioSetBuffer(void) 1369 | { 1370 | __asm jmp pfnAheadLib_mmioSetBuffer; 1371 | } 1372 | 1373 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioSetInfo(void) 1374 | { 1375 | __asm jmp pfnAheadLib_mmioSetInfo; 1376 | } 1377 | 1378 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioStringToFOURCCA(void) 1379 | { 1380 | __asm jmp pfnAheadLib_mmioStringToFOURCCA; 1381 | } 1382 | 1383 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioStringToFOURCCW(void) 1384 | { 1385 | __asm jmp pfnAheadLib_mmioStringToFOURCCW; 1386 | } 1387 | 1388 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmioWrite(void) 1389 | { 1390 | __asm jmp pfnAheadLib_mmioWrite; 1391 | } 1392 | 1393 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mmsystemGetVersion(void) 1394 | { 1395 | __asm jmp pfnAheadLib_mmsystemGetVersion; 1396 | } 1397 | 1398 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mod32Message(void) 1399 | { 1400 | __asm jmp pfnAheadLib_mod32Message; 1401 | } 1402 | 1403 | EXTERN_C __declspec(naked) void __cdecl AheadLib_mxd32Message(void) 1404 | { 1405 | __asm jmp pfnAheadLib_mxd32Message; 1406 | } 1407 | 1408 | EXTERN_C __declspec(naked) void __cdecl AheadLib_sndPlaySoundA(void) 1409 | { 1410 | __asm jmp pfnAheadLib_sndPlaySoundA; 1411 | } 1412 | 1413 | EXTERN_C __declspec(naked) void __cdecl AheadLib_sndPlaySoundW(void) 1414 | { 1415 | __asm jmp pfnAheadLib_sndPlaySoundW; 1416 | } 1417 | 1418 | EXTERN_C __declspec(naked) void __cdecl AheadLib_tid32Message(void) 1419 | { 1420 | __asm jmp pfnAheadLib_tid32Message; 1421 | } 1422 | 1423 | EXTERN_C __declspec(naked) void __cdecl AheadLib_timeBeginPeriod(void) 1424 | { 1425 | __asm jmp pfnAheadLib_timeBeginPeriod; 1426 | } 1427 | 1428 | EXTERN_C __declspec(naked) void __cdecl AheadLib_timeEndPeriod(void) 1429 | { 1430 | __asm jmp pfnAheadLib_timeEndPeriod; 1431 | } 1432 | 1433 | EXTERN_C __declspec(naked) void __cdecl AheadLib_timeGetDevCaps(void) 1434 | { 1435 | __asm jmp pfnAheadLib_timeGetDevCaps; 1436 | } 1437 | 1438 | EXTERN_C __declspec(naked) void __cdecl AheadLib_timeGetSystemTime(void) 1439 | { 1440 | __asm jmp pfnAheadLib_timeGetSystemTime; 1441 | } 1442 | 1443 | EXTERN_C __declspec(naked) void __cdecl AheadLib_timeGetTime(void) 1444 | { 1445 | __asm jmp pfnAheadLib_timeGetTime; 1446 | } 1447 | 1448 | EXTERN_C __declspec(naked) void __cdecl AheadLib_timeKillEvent(void) 1449 | { 1450 | __asm jmp pfnAheadLib_timeKillEvent; 1451 | } 1452 | 1453 | EXTERN_C __declspec(naked) void __cdecl AheadLib_timeSetEvent(void) 1454 | { 1455 | __asm jmp pfnAheadLib_timeSetEvent; 1456 | } 1457 | 1458 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInAddBuffer(void) 1459 | { 1460 | __asm jmp pfnAheadLib_waveInAddBuffer; 1461 | } 1462 | 1463 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInClose(void) 1464 | { 1465 | __asm jmp pfnAheadLib_waveInClose; 1466 | } 1467 | 1468 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInGetDevCapsA(void) 1469 | { 1470 | __asm jmp pfnAheadLib_waveInGetDevCapsA; 1471 | } 1472 | 1473 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInGetDevCapsW(void) 1474 | { 1475 | __asm jmp pfnAheadLib_waveInGetDevCapsW; 1476 | } 1477 | 1478 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInGetErrorTextA(void) 1479 | { 1480 | __asm jmp pfnAheadLib_waveInGetErrorTextA; 1481 | } 1482 | 1483 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInGetErrorTextW(void) 1484 | { 1485 | __asm jmp pfnAheadLib_waveInGetErrorTextW; 1486 | } 1487 | 1488 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInGetID(void) 1489 | { 1490 | __asm jmp pfnAheadLib_waveInGetID; 1491 | } 1492 | 1493 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInGetNumDevs(void) 1494 | { 1495 | __asm jmp pfnAheadLib_waveInGetNumDevs; 1496 | } 1497 | 1498 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInGetPosition(void) 1499 | { 1500 | __asm jmp pfnAheadLib_waveInGetPosition; 1501 | } 1502 | 1503 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInMessage(void) 1504 | { 1505 | __asm jmp pfnAheadLib_waveInMessage; 1506 | } 1507 | 1508 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInOpen(void) 1509 | { 1510 | __asm jmp pfnAheadLib_waveInOpen; 1511 | } 1512 | 1513 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInPrepareHeader(void) 1514 | { 1515 | __asm jmp pfnAheadLib_waveInPrepareHeader; 1516 | } 1517 | 1518 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInReset(void) 1519 | { 1520 | __asm jmp pfnAheadLib_waveInReset; 1521 | } 1522 | 1523 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInStart(void) 1524 | { 1525 | __asm jmp pfnAheadLib_waveInStart; 1526 | } 1527 | 1528 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInStop(void) 1529 | { 1530 | __asm jmp pfnAheadLib_waveInStop; 1531 | } 1532 | 1533 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveInUnprepareHeader(void) 1534 | { 1535 | __asm jmp pfnAheadLib_waveInUnprepareHeader; 1536 | } 1537 | 1538 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutBreakLoop(void) 1539 | { 1540 | __asm jmp pfnAheadLib_waveOutBreakLoop; 1541 | } 1542 | 1543 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutClose(void) 1544 | { 1545 | __asm jmp pfnAheadLib_waveOutClose; 1546 | } 1547 | 1548 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutGetDevCapsA(void) 1549 | { 1550 | __asm jmp pfnAheadLib_waveOutGetDevCapsA; 1551 | } 1552 | 1553 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutGetDevCapsW(void) 1554 | { 1555 | __asm jmp pfnAheadLib_waveOutGetDevCapsW; 1556 | } 1557 | 1558 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutGetErrorTextA(void) 1559 | { 1560 | __asm jmp pfnAheadLib_waveOutGetErrorTextA; 1561 | } 1562 | 1563 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutGetErrorTextW(void) 1564 | { 1565 | __asm jmp pfnAheadLib_waveOutGetErrorTextW; 1566 | } 1567 | 1568 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutGetID(void) 1569 | { 1570 | __asm jmp pfnAheadLib_waveOutGetID; 1571 | } 1572 | 1573 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutGetNumDevs(void) 1574 | { 1575 | __asm jmp pfnAheadLib_waveOutGetNumDevs; 1576 | } 1577 | 1578 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutGetPitch(void) 1579 | { 1580 | __asm jmp pfnAheadLib_waveOutGetPitch; 1581 | } 1582 | 1583 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutGetPlaybackRate(void) 1584 | { 1585 | __asm jmp pfnAheadLib_waveOutGetPlaybackRate; 1586 | } 1587 | 1588 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutGetPosition(void) 1589 | { 1590 | __asm jmp pfnAheadLib_waveOutGetPosition; 1591 | } 1592 | 1593 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutGetVolume(void) 1594 | { 1595 | __asm jmp pfnAheadLib_waveOutGetVolume; 1596 | } 1597 | 1598 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutMessage(void) 1599 | { 1600 | __asm jmp pfnAheadLib_waveOutMessage; 1601 | } 1602 | 1603 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutOpen(void) 1604 | { 1605 | __asm jmp pfnAheadLib_waveOutOpen; 1606 | } 1607 | 1608 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutPause(void) 1609 | { 1610 | __asm jmp pfnAheadLib_waveOutPause; 1611 | } 1612 | 1613 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutPrepareHeader(void) 1614 | { 1615 | __asm jmp pfnAheadLib_waveOutPrepareHeader; 1616 | } 1617 | 1618 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutReset(void) 1619 | { 1620 | __asm jmp pfnAheadLib_waveOutReset; 1621 | } 1622 | 1623 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutRestart(void) 1624 | { 1625 | __asm jmp pfnAheadLib_waveOutRestart; 1626 | } 1627 | 1628 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutSetPitch(void) 1629 | { 1630 | __asm jmp pfnAheadLib_waveOutSetPitch; 1631 | } 1632 | 1633 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutSetPlaybackRate(void) 1634 | { 1635 | __asm jmp pfnAheadLib_waveOutSetPlaybackRate; 1636 | } 1637 | 1638 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutSetVolume(void) 1639 | { 1640 | __asm jmp pfnAheadLib_waveOutSetVolume; 1641 | } 1642 | 1643 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutUnprepareHeader(void) 1644 | { 1645 | __asm jmp pfnAheadLib_waveOutUnprepareHeader; 1646 | } 1647 | 1648 | EXTERN_C __declspec(naked) void __cdecl AheadLib_waveOutWrite(void) 1649 | { 1650 | __asm jmp pfnAheadLib_waveOutWrite; 1651 | } 1652 | 1653 | EXTERN_C __declspec(naked) void __cdecl AheadLib_wid32Message(void) 1654 | { 1655 | __asm jmp pfnAheadLib_wid32Message; 1656 | } 1657 | 1658 | EXTERN_C __declspec(naked) void __cdecl AheadLib_wod32Message(void) 1659 | { 1660 | __asm jmp pfnAheadLib_wod32Message; 1661 | } 1662 | --------------------------------------------------------------------------------