commit 39a3dab1fc8ccc50d853f508ce0a04a3e5deec27 Author: Cyd Date: Fri Jun 26 12:43:01 2026 -0500 Phase 0: scaffold modern RIOJoy solution + plan Modernization of the legacy vJoy-based RIO cockpit interface for Win10/11, removing the vJoy dependency in favor of a custom VHF/UMDF HID driver, rewritten in C#/.NET 8 as a background tray app with per-game profiles. - Reorganize: legacy C++ -> legacy/, cockpit art -> docs/reference/ - RioJoy.sln: src/RioJoy.Core (lib) + src/RioJoy.Tray (tray app), net8.0-windows x64 - driver/ placeholder for the RioGamepad WDK driver - docs/PLAN.md (7-phase plan; profiles + serial-yield model) - docs/PROTOCOL.md (RIO wire format + iRIO input-map reference) Co-Authored-By: Claude Opus 4.8 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9010480 --- /dev/null +++ b/.gitignore @@ -0,0 +1,372 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +#[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd +############################################################################### +# RIOJoy additions +############################################################################### +# WDK / driver build outputs +[Dd]river/**/[Xx]64/ +*.cer +*.pvk +# Local run-time config that shouldn't be versioned +*.local.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..5a2708a --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# RIOJoy + +Modern Windows 10/11 interface between the cockpit **RIO** (Remote Input/Output) +board and Windows, as a virtual **joystick / keyboard / mouse** — the successor +to the legacy vJoy-based app, with **no vJoy dependency**. + +The RIO has 72 digital inputs and outputs (lighted buttons) and 5 analog axes +(joystick X/Y, throttle, left pedal, right pedal), connected over RS-232 at +9600 8N1. RIOJoy exposes these to games that don't natively know about the +cockpit hardware, with **per-game profiles**. (The native games — Firestorm, +Red Planet — talk to the RIO directly and do not use this app.) + +## Repository layout + +| Path | Contents | +|------|----------| +| [`src/RioJoy.Core`](src/RioJoy.Core/) | Protocol, profile model, input mapper, HID feeder (class library) | +| [`src/RioJoy.Tray`](src/RioJoy.Tray/) | Background tray application | +| [`driver/`](driver/) | `RioGamepad` virtual HID driver (KMDF + VHF) — replaces vJoy | +| [`docs/PLAN.md`](docs/PLAN.md) | Full modernization plan (7 phases) | +| [`docs/PROTOCOL.md`](docs/PROTOCOL.md) | RIO wire format + `iRIO` input-map reference | +| [`docs/reference/`](docs/reference/) | Cockpit overlay art & the legacy labeling pipeline | +| [`legacy/`](legacy/) | Original C++/vJoy implementation, kept as reference | + +## Building + +Requires the **.NET 8 SDK** and Windows. The driver builds separately with the +**WDK** (see [`driver/README.md`](driver/README.md)). + +```sh +dotnet build RioJoy.sln -c Release +``` + +## Status + +Phase 0 (scaffold + plan). See [`docs/PLAN.md`](docs/PLAN.md) for what's next. diff --git a/RioJoy.sln b/RioJoy.sln new file mode 100644 index 0000000..29a2167 --- /dev/null +++ b/RioJoy.sln @@ -0,0 +1,34 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CDDAA3FE-6A05-40A0-85CC-4DB0B3EEEA9C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RioJoy.Core", "src\RioJoy.Core\RioJoy.Core.csproj", "{C81FEF57-A33B-4529-BDB7-02787407A545}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RioJoy.Tray", "src\RioJoy.Tray\RioJoy.Tray.csproj", "{FA2BAEAC-D8D5-47D9-B5EC-C9D10530D351}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C81FEF57-A33B-4529-BDB7-02787407A545}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C81FEF57-A33B-4529-BDB7-02787407A545}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C81FEF57-A33B-4529-BDB7-02787407A545}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C81FEF57-A33B-4529-BDB7-02787407A545}.Release|Any CPU.Build.0 = Release|Any CPU + {FA2BAEAC-D8D5-47D9-B5EC-C9D10530D351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA2BAEAC-D8D5-47D9-B5EC-C9D10530D351}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA2BAEAC-D8D5-47D9-B5EC-C9D10530D351}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA2BAEAC-D8D5-47D9-B5EC-C9D10530D351}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {C81FEF57-A33B-4529-BDB7-02787407A545} = {CDDAA3FE-6A05-40A0-85CC-4DB0B3EEEA9C} + {FA2BAEAC-D8D5-47D9-B5EC-C9D10530D351} = {CDDAA3FE-6A05-40A0-85CC-4DB0B3EEEA9C} + EndGlobalSection +EndGlobal diff --git a/docs/PLAN.md b/docs/PLAN.md new file mode 100644 index 0000000..f589a08 --- /dev/null +++ b/docs/PLAN.md @@ -0,0 +1,168 @@ +# RIOJoy — modernization plan + +Modernize the cockpit RIO interface app for Windows 10/11, **removing the vJoy +dependency** and replacing it with a custom virtual HID device, rewritten in +C#/.NET as a background tray app with **per-game profiles**. + +The legacy app is preserved under [`legacy/`](../legacy/) as the behavioral +reference. The RIO wire format and input map are documented in +[PROTOCOL.md](PROTOCOL.md). + +--- + +## Purpose + +The cockpits run two native games (**Firestorm**, **Red Planet**) that talk to +the RIO hardware **directly** and never use this app. RIOJoy exists to **broaden +which other games can run in the cockpits**: arbitrary games don't know about the +cockpit's extra hardware (5 analog axes, 96 lighted buttons, the plasma/VFD +display, the labeled wallpaper), so RIOJoy bridges the RIO to whatever input +those games *do* understand — joystick, keyboard, and mouse — and drives the +cockpit's outputs on their behalf. + +--- + +## Target architecture + +``` + ┌─────────────────────── C# / .NET 8 tray app (x64) ───────────────────────┐ + │ Serial (RIO protocol) → Input mapper (profile) → Output router │ + │ COM port, 9600 8N1 72 inputs + keypads ├─ Keyboard/Mouse: SendInput (P/Invoke) + │ packet parse + ACK/NAK decode iRIO bitfield ├─ Joystick: HID report → DeviceIoControl ↓ + │ analog poll + recovery axis calibration └─ Lamps: LampRequest back over serial + │ Plasma/VFD on 2nd COM · Profiles + auto-switch + tray UI + logging │ + └───────────────────────────────────────────────┬───────────────────────────┘ + │ IOCTL (input report bytes) + ┌─────────────────────────────────────────────────▼──────────────────────────┐ + │ RioGamepad.sys — KMDF + VHF (vhf.sys) virtual HID device │ + │ Report descriptor: X,Y,Z,Rx,Ry,Rz (16-bit) · 1 hat · 96 buttons │ + │ Control device + custom IOCTL → VhfReadReportSubmit() → Windows sees │ + │ a HID gamepad │ + └─────────────────────────────────────────────────────────────────────────────┘ +``` + +### Decisions (confirmed) + +- **Virtual joystick:** custom **VHF/UMDF HID driver** (full fidelity: 6 axes, + 96 buttons, 1 hat — exactly the legacy vJoy layout). Not ViGEm (can't hold 96 + buttons). +- **Stack:** C# / **.NET 8** (LTS), x64. Driver is C (WDK), separate toolchain. +- **Form:** background **tray app** (NotifyIcon), auto-start with Windows. +- **Targets:** Windows 10/11 **x64 only**. The legacy x86 / WinXP targets are + dropped. + +### What ports over vs. what's new + +| Concern | Legacy | Modern | +|---|---|---| +| Serial + RIO protocol | overlapped I/O + watch thread | `SerialPort` + async loop; faithful port of the packet state machine | +| Input decode | `iRIO[]` bitfield + `Press_V2` | same semantics, ported to C# | +| Keyboard/mouse | `SendInput` scancode | `SendInput` via P/Invoke (≈verbatim) | +| Joystick | vJoy `SetAxis/SetBtn/SetDiscPov` | **HID report → IOCTL → RioGamepad.sys** | +| Lamps | `LampRequest` over serial | same | +| Axis calibration | `UpdateJoystick/Throttle/Padal` | ported math | +| Plasma display | `CPlasma` (COM2) | ported; content per-profile | +| Config | SimpleIni, single file, hard-coded COM1 | profile library (JSON), configurable ports; importer for legacy `RIO.ini` | + +--- + +## Profiles (the core abstraction) + +A **profile** fully describes how the cockpit behaves for **one non-native +game**. Everything is per-profile, not global: + +- Button/keypad mapping (the decoded `iRIO` table for this game) +- Axis calibration, curves, and invert flags +- Lamp behavior +- Plasma/VFD content (or "off") +- Cockpit overlay labels + the generated wallpaper (Phase 7) +- Display/resolution targets + +Profiles **never** describe the native games — those are the "hands-off" case. + +### Serial-port yield & the auto-switch state machine + +Because the native games own the RIO's COM port directly, RIOJoy must yield it. +A process/window watcher drives three states: + +| Detected running app | RIOJoy behavior | +|---|---| +| **Native game** (Firestorm, Red Planet) | **Release COM port, go fully dormant** — no serial, no HID, no overlay | +| **Supported non-native game** | Acquire port, load that game's profile, drive HID / keyboard / mouse / lamps / plasma / wallpaper | +| **Nothing / desktop** | Idle — port released or a configurable neutral default | + +Config therefore holds: the per-game profile library, a **list of native games +to yield to**, and the executable→profile match rules. Manual override from the +tray menu is always available. + +--- + +## Phases + +### Phase 0 — Repo & scaffold ✅ (this commit) +- `git init`, remote `https://gitea.mysticmachines.com/VWE/riovjoy2.git`. +- Legacy C++ moved to `legacy/`; cockpit art to `docs/reference/`. +- Solution `RioJoy.sln` with `src/RioJoy.Core` (lib) + `src/RioJoy.Tray` + (tray app); `driver/` placeholder for the WDK project. +- This plan + [PROTOCOL.md](PROTOCOL.md). + +### Phase 1 — Virtual HID driver (highest risk; do first) +- KMDF + VHF virtual HID gamepad: report descriptor = 6×16-bit axes, 1 hat, + 96 buttons. +- Control device + custom IOCTL → `VhfReadReportSubmit`. +- Test harness (throwaway C#) wiggles axes/buttons; verify in `joy.cpl`. +- Test-signing setup for the cabinets. + +### Phase 2 — Serial + RIO protocol core (`RioJoy.Core`) +- `SerialPort` wrapper; packet parser/builder (length table, 7-bit checksum, + ACK/NAK, framing resync). +- Analog poll timer + >5 s reset-recovery. +- **Clean COM-port acquire/release** (foundation for serial yield). +- Verify against hardware: version reply, check reply, analog stream. + +### Phase 3 — Input mapping + output routing +- Port `iRIO` decode and routing precedence (keyboard/mouse/joy/hat/RIO-command). +- Keyboard/mouse via `SendInput` P/Invoke; lamp feedback over serial. +- HID-report feeder → the Phase 1 driver via `DeviceIoControl`. + +### Phase 4 — Axis calibration + plasma display +- Port `UpdateJoystick/Throttle/Padal` math (deadzones, ratchet, rudder). +- Port the `CPlasma` ESC command set on the secondary COM port. + +### Phase 5 — Tray app + profiles +- NotifyIcon + menu mirroring the legacy console menu (reset/recalibrate axes, + version/status, toggle raw-axis & poll-rate readouts, quit) + status/log window. +- **Profile library**, manual selection, and the **three-state auto-switch + watcher** (incl. native-game yield). +- Config persistence; auto-start. + +### Phase 6 — Packaging / signing / deploy +- Driver install via `pnputil`; app installer; test-signing script. +- Cabinet deployment doc. (Production option: attestation signing.) + +### Phase 7 — Profile/mapping editor + cockpit overlay generator +Replaces the legacy Google-Sheet → `.data` → GIMP → Script-Fu pipeline +(see [`docs/reference/customBackground/`](reference/customBackground/)). +- **Mapping editor:** per-button UI to set action + label + lamp, no hex + bit-twiddling; clone-from-existing profile. +- **Overlay generator:** render labels into named regions over a base cockpit + image using **SkiaSharp**, porting the auto-fit/justification logic from + `sg-goobie-MFD.scm`; export the per-profile wallpaper and re-apply via + `SystemParametersInfo`. +- **Region authoring:** extract the label rectangles from `riojoy.xcf` into a + `regions.json`; in-app box editor for future tweaks. +- The unified profile JSON supersedes both `RIO.ini` and the Google Sheet, with + importers for each. +- To confirm at Phase 7: target wallpaper resolution(s); static wallpaper vs. + live overlay (e.g. lit-button highlighting mirroring lamp state). + +--- + +## Open items / risks + +- **Driver signing** is the main friction point. Test-signing is fine for owned + cabinets; redistribution needs attestation signing (EV cert + Partner Center). +- **Input injection vs. session:** `SendInput` targets the interactive session — + fine for a tray app, which is why a Windows service was rejected. +- **Legacy quirks to decide on** (see PROTOCOL.md ⚠️ notes): disabled inbound + checksum verification; odd mouse-move deltas. diff --git a/docs/PROTOCOL.md b/docs/PROTOCOL.md new file mode 100644 index 0000000..45252e0 --- /dev/null +++ b/docs/PROTOCOL.md @@ -0,0 +1,230 @@ +# RIO serial protocol & `iRIO` input map + +Reverse-engineered from the legacy implementation in +[`legacy/riovjoy2.cpp`](../legacy/riovjoy2.cpp). This is the authoritative +reference for the Phase 2 C# port. Line references point into the legacy file. + +> ⚠️ Where the legacy code looks buggy, this document describes **what it +> actually does** and flags the suspect behavior. Port the documented behavior, +> then decide intentionally whether to fix the flagged items. + +--- + +## 1. Physical link + +- **RS-232, 9600 baud, 8 data bits, no parity, 1 stop bit (8N1).** +- The RIO is on one COM port (legacy hard-codes **COM1**, [`OpenConnection`](../legacy/riovjoy2.cpp#L747)). +- An optional **plasma / VFD text display** is on a second COM port (legacy + hard-codes **COM2**, [`CPlasma`](../legacy/riovjoy2.cpp#L41)). +- DTR is pulsed on open (SETDTR, 50 ms, CLRDTR) as a board reset/handshake. +- Both ports must be **configurable** in the modern app (no hard-coded COM + numbers). + +### Serial-port ownership (critical) + +The native games (Firestorm, Red Planet) talk to the RIO **directly over this +same port**. Only one process can own it at a time, so the modern app must +**release the COM port and go dormant whenever a native game is running**, and +re-acquire it when a supported non-native game is active. See PLAN.md §Profiles. + +--- + +## 2. Framing + +Every message is a packet: + +``` +[ command byte ] [ payload byte ... ] [ checksum byte ] + 0x80-0x8C high bit clear 7-bit checksum +``` + +- **Command byte:** high bit set (`0x80`+). Value identifies the message; see + the command table. The valid range is `0x80 .. 0x80 + N` where `N` is the + command count. +- **Payload length** is fixed per command (the length table below), excluding + the command byte and checksum byte. +- **Payload bytes** always have the high bit **clear** (7-bit data). Receiving a + byte with the high bit set mid-packet means a framing error → **abort the + current packet and resync** ([`ReadCommBlock`](../legacy/riovjoy2.cpp#L871)). +- **Checksum byte:** `(sum of (b & 0x7F) for each byte in command+payload) & 0x7F` + ([build: `SendCommand`](../legacy/riovjoy2.cpp#L1217), + [verify: `ReadCommBlock`](../legacy/riovjoy2.cpp#L884)). + +### Control characters (single bytes, outside packet framing) + +| Name | Byte | Meaning | +|-------------|------|---------| +| `ACK` | 0xFC | Packet accepted | +| `NAK` | 0xFD | Packet rejected (resend) | +| `RESTART` | 0xFE | Restart / also used as an in-payload "invalid" sentinel | +| `IDLE` | 0xFF | Idle | + +After a valid received packet, the PC replies `ACK` (when its output queue is +empty). For **button** packets with a bad checksum it replies `NAK`; for other +packet types with a bad checksum it still `ACK`s. + +> ⚠️ The legacy receive path force-accepts every packet regardless of checksum +> (`static bool s_bool = true;` at [riovjoy2.cpp#L887](../legacy/riovjoy2.cpp#L887)), +> so checksum verification is effectively disabled inbound. Decide whether to +> enable real verification in the port. + +--- + +## 3. Command table + +Enum base `0x80` ([`RIOCommand`](../legacy/riovjoy2.cpp#L189)); payload lengths +from [`g_baRIOLengthsA`](../legacy/riovjoy2.cpp#L171). + +| Code | Name | Dir | Payload len | Payload | +|------|-------------------|---------|-------------|---------| +| 0x80 | CheckRequest | PC→RIO | 0 | — | +| 0x81 | VersionRequest | PC→RIO | 0 | — | +| 0x82 | AnalogRequest | PC→RIO | 0 | — | +| 0x83 | ResetRequest | PC→RIO | 1 | `target` (see §Reset) | +| 0x84 | LampRequest | PC→RIO | 2 | `lamp#`, `state` | +| 0x85 | CheckReply | RIO→PC | 2 | `statusType`, `number` | +| 0x86 | VersionReply | RIO→PC | 2 | `major`, `minor` | +| 0x87 | AnalogReply | RIO→PC | 10 | 5 axes × (low, high) | +| 0x88 | ButtonPressed | RIO→PC | 1 | `index` (0x00–0x47) | +| 0x89 | ButtonReleased | RIO→PC | 1 | `index` (0x00–0x47) | +| 0x8A | KeyPressed | RIO→PC | 2 | `pad`, `index` | +| 0x8B | KeyReleased | RIO→PC | 2 | `pad`, `index` | +| 0x8C | TestModeChange | RIO→PC | 1 | `mode` (0 = exit) | + +### Reset targets (ResetRequest payload) + +`0` = general/all, `1` = throttle, `2` = left pedal, `3` = right pedal, +`4` = vertical joystick (Y), `5` = horizontal joystick (X) +([`ResetThrottle`](../legacy/riovjoy2.cpp#L1273) etc.). + +### Lamp state byte (LampRequest) + +Composed of flash + two brightness fields +([`LampState`](../legacy/riovjoy2.cpp#L213)): + +- Flash: `solid=0, flashSlow=1, flashMed=2, flashFast=3` +- Field 1: `Off=0x00, Dim=0x04, Bright=0x0C` +- Field 2: `Off=0x00, Dim=0x10, Bright=0x30` +- Common combos: `SolidOff=0x00`, `SolidDim=0x14`, `SolidBright=0x3C` + +--- + +## 4. Analog values + +`AnalogReply` carries 5 axes, each 2 bytes (low then high), in this order: + +1. **Throttle**, 2. **LeftPedal**, 3. **RightPedal**, 4. **JoystickY**, 5. **JoystickX** +([`AnalogEvent`](../legacy/riovjoy2.cpp#L1127)). + +Each axis is a **14-bit signed** value packed as two 7-bit bytes +([`CombinePair`](../legacy/riovjoy2.cpp#L1116)): + +``` +raw = (low & 0x7F) | (high << 7); // 14 bits +if (raw & 0x2000) raw |= ~0x3FFF; // sign-extend bit 13 +``` + +If any payload byte equals `0xFE`, the reply is treated as invalid and ignored. + +### Polling & recovery + +The legacy watch thread requests an analog update on a ~**55 ms** timeout +([`CommWatchProc`](../legacy/riovjoy2.cpp#L1069)). If **>5 s** elapse with no +`AnalogReply`, it issues a general reset to recover +([riovjoy2.cpp#L1096](../legacy/riovjoy2.cpp#L1096)). + +### Axis → virtual-device mapping (range 0..32766, center 16383) + +Calibration/deadzone math lives in +[`UpdateJoystick`](../legacy/riovjoy2.cpp#L1722), +[`UpdateThrottle`](../legacy/riovjoy2.cpp#L1637), +[`UpdatePadal`](../legacy/riovjoy2.cpp#L1504): + +| RIO axis | Virtual axis | Notes | +|---------------|--------------|-------| +| JoystickX | X | auto-ranging rate from observed min/max, ±5 deadzone | +| JoystickY | Y | same | +| Throttle | Z | range ±800, deadzone 50, ratchet via `g_ThrottleResult` | +| LeftPedal | Rx | range ±500, deadzone 10 (only when `enableZR` off) | +| RightPedal | Ry | same | +| (computed) | Rz | rudder = `16383 - leftPedal/2 + rightPedal/2` (when `enableZR` on) | + +Per-axis invert flags (`invertX/Y/Z/XR/YR/ZR`) and `enableZR` come from config. + +--- + +## 5. Digital inputs → the `iRIO` map + +The RIO reports button/keypad events by **address**; the app translates each +address to a Windows action via a 112-entry table `iRIO[]` +([load](../legacy/riovjoy2.cpp#L352), [decode `Press_V2`](../legacy/riovjoy2.cpp#L1944)). + +### Address space (index into `iRIO`) + +| Range | Source | +|------------------|--------| +| `0x00`–`0x47` (0–71) | the 72 digital button inputs (`ButtonPressed/Released` index) | +| `0x50`–`0x5F` (80–95) | keypad **pad 0** (`KeyPressed` with `pad=0`, app adds 0x50) | +| `0x60`–`0x6F` (96–111) | keypad **pad 1** (`KeyPressed` with `pad=1`, app adds 0x60) | + +(`0x48`–`0x4F` unused.) Keypad offset logic: +[`KeypadEvent`](../legacy/riovjoy2.cpp#L1185). + +### Per-entry 16-bit encoding + +Each `iRIO[addr]` is a 16-bit word. High byte = routing flags, low byte = +payload: + +| Bit | Name | Meaning | +|--------|-----------|---------| +| 0x8000 | hasLamp | This input drives a lighted button (lamp feedback on press/release) | +| 0x4000 | mouse | Route payload to **mouse** | +| 0x2000 | hat | Route payload to **POV hat** | +| 0x1000 | joy | Route payload to **joystick button** | +| 0x0800 | extended | Keyboard: set `KEYEVENTF_EXTENDEDKEY` | +| 0x0400 | alt | Keyboard: hold ALT around the key | +| 0x0200 | ctrl | Keyboard: hold CTRL around the key | +| 0x0100 | shift | Keyboard: hold SHIFT around the key | +| 0x00FF | value | VK code / button# / hat direction / mouse action | + +### Routing precedence (`Press_V2` / `Release_V2`) + +1. If **none** of joy/hat/mouse set → **keyboard**: press modifiers, then send + the key by **scancode** (`MapVirtualKey(VK, MAPVK_VK_TO_VSC)` + + `KEYEVENTF_SCANCODE`, plus extended flag). VK list: + [`legacy/hbb_vkey.cpp`](../legacy/hbb_vkey.cpp). +2. If **joy && hat && mouse all set** (`0x7000`) → it's a **RIO command**, not an + output: calls `RIOcmd(value)` (axis resets, recalibrate, status, etc. — see + [`RIOcmd`](../legacy/riovjoy2.cpp#L1852)). +3. Else if **joy** → set joystick button `value`. +4. Else if **hat** → set POV to direction `value` (release → center). +5. Else if **mouse** → mouse action `value`. + +Lamp feedback: on press `SolidBright`, on release `SolidDim`; lamps initialized +to `SolidDim` at startup for entries with `hasLamp`. + +### Mouse action codes (low byte when `mouse` set) + +`0`=move up, `1`=move right, `2`=move down, `3`=move left, `4`=left click, +`5`=right click ([`Mouse`](../legacy/riovjoy2.cpp#L2075)). + +> ⚠️ The legacy move directions mix `dx`/`dy` oddly (e.g. "up" sets `dx=-50`). +> Treat the codes as the contract; fix the actual movement deltas in the port. + +--- + +## 6. Lighted-button & board name tables + +Human-readable lamp and board names (useful for the config UI and diagnostics) +are in [`GetLampName`](../legacy/riovjoy2.cpp#L1332) and +[`GetBoardName`](../legacy/riovjoy2.cpp#L1413). + +--- + +## 7. Plasma / VFD display (secondary COM port) + +ESC-based command set ([`CPlasma`](../legacy/riovjoy2.cpp#L2146)): clear (`ESC @`), +cursor X/Y (`ESC R`/`ESC Q`), font (`ESC K`), attribute (`ESC H`), box draw/fill +(`ESC X`/`ESC x`), plus text. Fonts and sizes: +[`GetFontSize`](../legacy/riovjoy2.cpp#L2198). Port for Phase 4; content becomes +per-profile. diff --git a/docs/reference/customBackground/TEST.data b/docs/reference/customBackground/TEST.data new file mode 100644 index 0000000..982966c --- /dev/null +++ b/docs/reference/customBackground/TEST.data @@ -0,0 +1,3 @@ +; This is the Data to be used with gimp RIO template, copy the first three lines into a data file, install GIMP run gimp script sg-goobie-MFD.scm +( a-00 b-00 b-01 b-02 b-03 b-04 b-05 b-06 b-07 b-08 b-09 b-0A b-0B b-0C b-0D b-0E b-0F b-10 b-11 b-12 b-13 b-14 b-15 b-16 b-17 b-18 b-19 b-1A b-1B b-1C b-1D b-1E b-1F b-20 b-21 b-22 b-23 b-24 b-25 b-26 b-27 b-28 b-29 b-2A b-2B b-2C b-2D b-2E b-2F b-30 b-31 b-32 b-33 b-34 b-35 b-36 b-37 b-38 b-39 b-3A b-3B b-3C b-3D b-3E b-3F b-40 b-41 b-42 b-43 b-44 b-45 b-46 b-47 b-50 b-51 b-52 b-53 b-54 b-55 b-56 b-57 b-58 b-59 b-5A b-5B b-5C b-5D b-5E b-5F b-60 b-61 b-62 b-63 b-64 b-65 b-66 b-67 b-68 b-69 b-6A b-6B b-6C b-6D b-6E b-6F ) +( "defalt" "LSDI" "ZOOM" "UNDOCK" "LDS" "BALANCE" "DRIVE" "DEFENCE" "OFFENCE" "LAST AGGESSOR" "SUB TARGET" "NEXT ENEMY" "NEAR ENEMY" "LAST CONTACT" "DOWN CON" "UP CONTACT" "TOP CONTACT" "M U" "M R" "M D" "M L" "MLC" "TAB" "" "" "ENTER" "ALT" "CTRL" "SHIFT" "VL U" "VL D" "" "" ">" "v" "^" "<" "N" "M" "L" "K" "V" "U" "T" "S" "J" "I" "H" "G" "Z" "Y" "X" "W" "R" "Q" "P" "O" "M ^" "M >" "M v" "M <" "ML" "ESC" "MR" "REVERSE" "FIRE/ACCEPT" "H v" "H ^" "H >" "H <" "NEXT PRIMEARY" "NEXT SECOND" "TARGET/BACK" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F" "RIO_0" "RIO_1" "RIO_2" "RIO_3" "RIO_4" "RIO_5" "RIO_6" "RIO_7" "RIO_8" "RIO_9" "RIO_A" "RIO_B" "RIO_C" "RIO_D" "RIO_E" "RIO_F" ) \ No newline at end of file diff --git a/docs/reference/customBackground/gdrivelinktoconfigsheet.txt b/docs/reference/customBackground/gdrivelinktoconfigsheet.txt new file mode 100644 index 0000000..db4f7ca --- /dev/null +++ b/docs/reference/customBackground/gdrivelinktoconfigsheet.txt @@ -0,0 +1 @@ +https://docs.google.com/spreadsheets/d/1TkWsk0xXA4rPArQvldmQiWhGd77eB3NUm0Q3XpW5cEU/edit?usp=sharing \ No newline at end of file diff --git a/docs/reference/customBackground/riojoy.xcf b/docs/reference/customBackground/riojoy.xcf new file mode 100644 index 0000000..0823fd0 Binary files /dev/null and b/docs/reference/customBackground/riojoy.xcf differ diff --git a/docs/reference/customBackground/sg-goobie-MFD.scm b/docs/reference/customBackground/sg-goobie-MFD.scm new file mode 100644 index 0000000..5d46f1a --- /dev/null +++ b/docs/reference/customBackground/sg-goobie-MFD.scm @@ -0,0 +1,212 @@ +; This program is free software; you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation; either version 2 of the License, or +; (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. + +; This script reads in a data file containing a list of +; RIO button information. + +; The data file uses Lisp/Scheme style lists and commenting (comments +; start with a semi-colon and extend to the end of the line). + +; The first non-comment line of the data file should be a list containing +; the field names of the RIO button addresses wrapped in parentheses. +; For example: +; +; ; THIS IS A COMMENT AND IGNORED +; ( 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ) +; +; This "header" list should be followed by the LINE containing the +; actual data to be substituted into the template file. The data should +; be text strings and appear in the same order as the fields specified in +; the header list. +; +; ("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "CTRL" "ALT") +; +; +; The currently open image is used as a template with the upper layers having +; names that match the field names. These field layers are used to determine +; the location and size of the text (this layer is otherwise ignored). +; The name text is centered within the bounds of this field template layer. +; +; +(define (script-fu-sg-goobie image + datafilename + save-xcf + save-jpeg + save-png + save-dir + vert-justification + size-handling) + + ;; Perform a search for the largest font that will fit within + ;; the cell. + ; + (define (calc-fontsize text font width height) + (let loop ((fontsize 6) ;; minimum possible fontsize + (last-extents nil) + (last-fontsize 3) + (adjust 2) + ) + (let ((extents (gimp-text-get-extents-fontname text fontsize PIXELS font))) + (if (or (= last-fontsize fontsize) (equal? extents last-extents)) + (max fontsize 6) + (if (or (> (car extents) width) (> (cadr extents) height)) + (loop (truncate (* last-fontsize (+ (* (- adjust 1) 0.5) 1))) + last-extents + last-fontsize + (+ (* (- adjust 1) 0.5) 1) ) + (loop (truncate (* fontsize adjust)) + extents + fontsize + adjust )))))) + + (define (create-data-layer image field-name field-data) + (let ((frame-layer + (let loop ((layers (vector->list (cadr (gimp-image-get-layers image))))) + (if (null? layers) + #f + (if (string=? field-name (car (gimp-drawable-get-name (car layers)))) + (car layers) + (loop (cdr layers)) ))))) + (if frame-layer + (if (= (car (gimp-drawable-is-text-layer frame-layer)) 1) + (let ((x (car (gimp-drawable-offsets frame-layer))) + (y (cadr (gimp-drawable-offsets frame-layer))) + (w (car (gimp-drawable-width frame-layer))) + (h (car (gimp-drawable-height frame-layer))) + (font (car (gimp-text-layer-get-font frame-layer))) + (size (car (gimp-text-layer-get-font-size frame-layer))) + ) + (gimp-image-set-active-layer image frame-layer) + (gimp-text-layer-set-text frame-layer field-data) + (let ((extents (gimp-text-get-extents-fontname field-data + size + PIXELS + font ))) + (when (and (zero? size-handling) + (or (> (car extents) w) + (> (cadr extents) h) )) + (gimp-text-layer-set-font-size frame-layer (calc-fontsize field-data font w h) PIXELS) ) + (case vert-justification + ((0) ; center + (gimp-layer-set-offsets frame-layer + x + (+ y (/ (- h (cadr extents)) 2)) )) + ((1) ; top + (gimp-layer-set-offsets frame-layer + x + y )) + ((2) ; bottom + (gimp-layer-set-offsets frame-layer + x + (- (+ y h) (cadr extents)) ))))) + (gimp-message "Field layer is not a text layer") + ) + (begin + (gimp-message (string-append "Field layer not found: " field-name)) )) + frame-layer )) + + ;; ---------------------------------------------------------------------- + ;; Main processing start here + ; + (let* ((inport (open-input-file datafilename)) + (field-names (map symbol->string (read inport))) + (filetag (car field-names)) ) + (gimp-image-undo-freeze image) + (gimp-context-push) + (let entry-loop ((fields (read inport))) + (unless (eof-object? fields) + (let ((temp-image (car (gimp-image-duplicate image))) + (filename #f) ) + (let field-loop ((field-names field-names) + (field-values fields) ) + (unless (null? field-values) + (when (string=? (car field-names) filetag) + (set! filename (car field-values)) ) + (create-data-layer temp-image (car field-names) (car field-values)) + (field-loop (cdr field-names) (cdr field-values)) )) + (if filename + (let ((fullname (string-append save-dir + DIR-SEPARATOR + filename ))) + (unless (zero? save-xcf) + (let ((filename (string-append fullname ".xcf"))) + (gimp-xcf-save TRUE + temp-image + (car (gimp-image-get-active-layer image)) + filename + filename ))) + (unless (zero? save-png) + (let ((layer (car (gimp-image-merge-visible-layers temp-image + CLIP-TO-IMAGE ))) + (filename (string-append fullname ".png")) ) + (file-png-save2 RUN-NONINTERACTIVE + temp-image + layer + filename + filename + FALSE ; interlace + 9 + FALSE ; bkgd + (car (gimp-drawable-has-alpha layer)) + FALSE ; offs + FALSE ; phys + FALSE ; time + TRUE ; comment + FALSE ; svtrans + ))) + (unless (zero? save-jpeg) + (let ((layer (car (gimp-image-flatten temp-image))) + (filename (string-append fullname ".jpg")) ) + (file-jpeg-save RUN-NONINTERACTIVE + temp-image + layer + filename + filename + 0.93 + 0 ; smoothing + 1 ; optimize + 1 ; progressive + "" ; comment + 0 ; subsmp (0-4) + 1 ; baseline + 0 ; restart + 0 ;dct + )))) + (gimp-message "Error encountered") ) + ; (gimp-image-delete temp-image) + ) + (entry-loop (read inport)) )) + (close-input-port inport) + (gimp-context-pop) + (gimp-image-undo-thaw image) + ) + ) + + +(script-fu-register "script-fu-sg-goobie" + "Goobie (MFD)..." + "Create MFD image based on template image" + "Frank Galatis" + "Saul Goode" + "June 2012" + "*" + SF-IMAGE "Image" 0 + SF-FILENAME "Data file" "example.data" + SF-TOGGLE "Save as XCF" FALSE + SF-TOGGLE "Save as JPEG" TRUE + SF-TOGGLE "Save as PNG" FALSE + SF-DIRNAME "Save directory" "" + SF-OPTION "Vertical justification" '("Center" "Top" "Bottom") + SF-OPTION "Font sizing (if too large)" '("Fit" "Crop" "Overflow") + ) +(script-fu-menu-register "script-fu-sg-goobie" + "/File" + ) + diff --git a/driver/README.md b/driver/README.md new file mode 100644 index 0000000..a8a5689 --- /dev/null +++ b/driver/README.md @@ -0,0 +1,33 @@ +# RioGamepad — virtual HID driver + +The `RioGamepad` virtual HID device replaces the legacy **vJoy** dependency. It +is a KMDF driver built on the Windows **Virtual HID Framework (VHF, `vhf.sys`)** +that presents a single HID game controller to Windows matching the layout the +old app drove through vJoy: + +| Report field | Count | Notes | +|--------------|-------|-------| +| Axes | 6 | X, Y, Z, Rx, Ry, Rz — 16-bit | +| Hat switch | 1 | 4-direction POV with null state | +| Buttons | 96 | 12 bytes of button bits | + +The C# tray app feeds input reports to the driver through a custom +`DeviceIoControl` IOCTL on the driver's control device; the driver relays them +to Windows via `VhfReadReportSubmit`. + +## Status + +Phase 0 placeholder. Implementation is **Phase 1** in [../docs/PLAN.md](../docs/PLAN.md). + +## Build prerequisites (Phase 1) + +- Windows Driver Kit (WDK) for Windows 11 + matching Visual Studio + Windows SDK +- A separate WDK/MSBuild project lives here (`RioGamepad.vcxproj`); it is **not** + part of `RioJoy.sln` (different toolchain). + +## Signing + +For the cockpit cabinets, enable **test signing** (`bcdedit /set testsigning on`) +and install a self-signed test certificate — appropriate for hardware you own. +Redistribution would instead use Microsoft **attestation signing** via Partner +Center. See the deployment notes in [../docs/PLAN.md](../docs/PLAN.md) (Phase 6). diff --git a/legacy/CPLASMA.cpp b/legacy/CPLASMA.cpp new file mode 100644 index 0000000..415f2c9 --- /dev/null +++ b/legacy/CPLASMA.cpp @@ -0,0 +1,4 @@ +#include +#include "c232comm.h" +#include "CPlasma.h" + diff --git a/legacy/CPlasma.h b/legacy/CPlasma.h new file mode 100644 index 0000000..03af44d --- /dev/null +++ b/legacy/CPlasma.h @@ -0,0 +1,65 @@ +#ifndef __CPLASMA_H__ +#define __CPLASMA_H__ + +#define ESC 27 +class CPlasma : public C232Comm +{ +public: + DWORD m_dwStart; + int m_nOldRank; + int m_nOldScore; + enum { + ATTR_NORMAL = 0, + ATTR_HALF = 1, + ATTR_LINE = 2, + ATTR_REVERSE = 4, + ATTR_FLASH = 8, + ATTR_PROTECTED = 128 + }; + enum { PLASMA_OFF, PLASMA_ON, PLASMA_FLASH }; + + int m_nGlobalState; +// Time m_timeLastPlasma2; +public: + CPlasma () { + Open (2); + m_dwStart = GetTickCount (); + PlasmaClear (); + PlasmaCursor (CPlasma::PLASMA_OFF); + m_nOldRank = INT_MIN; + m_nOldScore = INT_MIN; + + m_nGlobalState = -1; + } + virtual ~CPlasma () { + PlasmaCursor (CPlasma::PLASMA_OFF); + PlasmaClear (); + Close (); + } +public: + void SendPacket (const BYTE* pbPacket, char nLen); + void PlasmaClear (); + + void PlasmaCursor (char n = PLASMA_OFF); + void PlasmaCursorHome (); + void PlasmaCursorX (char n); + void PlasmaCursorY (char n); + + void PlasmaFontAttr (char n); + void PlasmaFont (char n); + + void PlasmaText (const char *szText); + POINT GetFontSize (int Font); + + void PlasmaBoxDraw (RECT tag); + void PlasmaBoxFill (RECT tag); + void PlasmaPosText (const char *szText, char x = 0, char y = 0, char Attr = 0, char Font = 5); + void PlasmaScoreDraw (const char *Rank, const char *Score, BOOL bFlag); + + void DoPlasma(char nMode); +private: + void PlasmaDisplay (int Gamestate, const char *szName, const char *Rank, const char *Score); +}; + + +#endif \ No newline at end of file diff --git a/legacy/CRIO.cpp b/legacy/CRIO.cpp new file mode 100644 index 0000000..1d95096 Binary files /dev/null and b/legacy/CRIO.cpp differ diff --git a/legacy/CRIO.h b/legacy/CRIO.h new file mode 100644 index 0000000..1f96bbf --- /dev/null +++ b/legacy/CRIO.h @@ -0,0 +1,135 @@ +#ifndef __RIO_H__ +#define __RIO_H__ + + +#define MSBON(B) {B |= 0x80;} +#define MSBOFF(B) {B &= ~0x80;} +#define MAXLENGTH 13 + +#define ACK_CHAR 0xFC +#define NAK_CHAR 0xFD +#define RESTART_CHAR 0xFE +#define IDLE_CHAR 0xFF +#define RX_ACK_BIT 0x0001 +#define RX_NAK_BIT 0x0002 + + +class CString +{ +public: + char m_sz[256]; +public: + CString() + { + m_sz[0] = '0'; + }; + ~CString() + { + } + + void _cdecl Format(const char* pcszFormat, ...) + { + va_list va_marker; + + va_start(va_marker, pcszFormat); + vsprintf_s(m_sz, pcszFormat, va_marker); + va_end(va_marker); + } + + operator const char* () const { return &m_sz[0]; } + CString& operator = (const char* pcszText) + { + strcpy_s(m_sz, pcszText); + return *this; + } +}; + +class CListBox +{ +public: +public: + CListBox() {} + ~CListBox() {} + int GetCount() const { return 0; } + void AddString(const char* pcszText) {} + void DeleteString(int nindex) {} +}; + +class CRIO : public C232Comm +{ +public: + CListBox& m_ListBox; + BYTE m_ba[2048]; + BYTE *m_pStart; + const BYTE *m_pEnd; + int m_nCount; + DWORD m_dwFlags; + BYTE m_baRead[128]; + int m_nState; + int m_nRead; + int m_nLeft; + BYTE m_bCheck; + BYTE m_baReplies[32]; + int m_nReplies; + int TestModeActive; + + DWORD m_dwAnalogRequest; +public: + CRIO (CListBox& ListBox) : m_ListBox (ListBox) { + Init (); + } + virtual ~CRIO () {}; + +public: + void Init (); + void RIOBordState (BYTE ID); + void DoEventLoop(); + void EventLoop (const BYTE *buf, int nLen); + void AddReply (BYTE bReply); + void CheckReplies (); + void CheckAnalogRequest(); + void SendCommand (const BYTE* pbPacket); + void SendPacket (const BYTE* pbPacket, int nLen); + void SetLamp (int lampNumber, int state); + + void GeneralReset(); + void ResetThrottle (); + void RequestCheck(); + void RequestVersion(); + void RequestAnalogUpdate(); + +public: + enum RIOCommand { + rio_CheckRequest = 0x80, // 128 + rio_VersionRequest, // 129 + rio_AnalogRequest, // 130 + rio_ResetRequest, // 131 + rio_LampRequest, // 132 + rio_CheckReply, // 133 + rio_VersionReply, // 134 + rio_AnalogReply, // 135 + rio_ButtonPressed, // 136 + rio_ButtonReleased, // 137 + rio_KeyPressed, // 138 + rio_KeyReleased, // 139 + rio_TestModeChange // 140 + }; + + enum RIOStatusType { + BoardOk, BoardMissing, BoardBad, LampBad, RestartCount, AbandonCount, FullBufferCount + }; + + enum LampState { + solid=0, flashSlow=1, flashMed=2, flashFast=3, + state1Off=0x00, state1Dim=0x04, state1Bright=0x0C, + state2Off=0x00, state2Dim=0x10, state2Bright=0x30, + }; + + enum { + LampSolidOff = solid + state1Off + state2Off, + LampSolidDim = solid + state1Dim + state2Dim, + LampSolidBright = solid + state1Bright + state2Bright + }; +}; + +#endif \ No newline at end of file diff --git a/legacy/CRIOMAIN.cpp b/legacy/CRIOMAIN.cpp new file mode 100644 index 0000000..dbe6e93 --- /dev/null +++ b/legacy/CRIOMAIN.cpp @@ -0,0 +1,10 @@ +#include +#include +#include "public.h" +#include "vjoyinterface.h" +#include "c232comm.h" +#include "CRIOMAIN.h" + + + + diff --git a/legacy/CRIOMAIN.h b/legacy/CRIOMAIN.h new file mode 100644 index 0000000..28dc85d --- /dev/null +++ b/legacy/CRIOMAIN.h @@ -0,0 +1,5 @@ +#ifndef __CRIOMAIN_H__ +#define __CRIOMAIN_H__ + + +#endif \ No newline at end of file diff --git a/legacy/Release/riovjoy2.exe b/legacy/Release/riovjoy2.exe new file mode 100644 index 0000000..0ae8662 Binary files /dev/null and b/legacy/Release/riovjoy2.exe differ diff --git a/legacy/SimpleIni.h b/legacy/SimpleIni.h new file mode 100644 index 0000000..7aa92df --- /dev/null +++ b/legacy/SimpleIni.h @@ -0,0 +1,3622 @@ +/** @mainpage + + +
Library SimpleIni +
File SimpleIni.h +
Author Brodie Thiesfield +
Source https://github.com/brofield/simpleini +
Version 4.19 +
+ + Jump to the @link CSimpleIniTempl CSimpleIni @endlink interface documentation. + + @section intro INTRODUCTION + + This component allows an INI-style configuration file to be used on both + Windows and Linux/Unix. It is fast, simple and source code using this + component will compile unchanged on either OS. + + + @section features FEATURES + + - MIT Licence allows free use in all software (including GPL and commercial) + - multi-platform (Windows CE/9x/NT..10/etc, Linux, MacOSX, Unix) + - loading and saving of INI-style configuration files + - configuration files can have any newline format on all platforms + - liberal acceptance of file format + - key/values with no section + - removal of whitespace around sections, keys and values + - support for multi-line values (values with embedded newline characters) + - optional support for multiple keys with the same name + - optional case-insensitive sections and keys (for ASCII characters only) + - saves files with sections and keys in the same order as they were loaded + - preserves comments on the file, section and keys where possible. + - supports both char or wchar_t programming interfaces + - supports both MBCS (system locale) and UTF-8 file encodings + - system locale does not need to be UTF-8 on Linux/Unix to load UTF-8 file + - support for non-ASCII characters in section, keys, values and comments + - support for non-standard character types or file encodings + via user-written converter classes + - support for adding/modifying values programmatically + - compiles cleanly in the following compilers: + - Windows/VC6 (warning level 3) + - Windows/VC.NET 2003 (warning level 4) + - Windows/VC 2005 (warning level 4) + - Windows/VC 2019 (warning level 4) + - Linux/gcc (-Wall) + + + @section usage USAGE SUMMARY + + -# Decide if you will be using utf8 or MBCS files, and working with the + data in utf8, wchar_t or ICU chars. + -# If you will only be using straight utf8 files and access the data via the + char interface, then you do not need any conversion library and could define + SI_NO_CONVERSION. Note that no conversion also means no validation of the data. + If no converter is specified then the default converter is SI_CONVERT_GENERIC + on Mac/Linux and SI_CONVERT_WIN32 on Windows. If you need widechar support on + Mac/Linux then use either SI_CONVERT_GENERIC or SI_CONVERT_ICU. These are also + supported on all platforms. + -# Define the appropriate symbol for the converter you wish to use and + include the SimpleIni.h header file. + -# Declare an instance of the appropriate class. Note that the following + definitions are just shortcuts for commonly used types. Other types + (PRUnichar, unsigned short, unsigned char) are also possible. + +
Interface Case-sensitive Load UTF-8 Load MBCS Typedef +
SI_NO_CONVERSION +
char No Yes No CSimpleIniA +
char Yes Yes No CSimpleIniCaseA +
SI_CONVERT_GENERIC +
char No Yes Yes #1 CSimpleIniA +
char Yes Yes Yes CSimpleIniCaseA +
wchar_t No Yes Yes CSimpleIniW +
wchar_t Yes Yes Yes CSimpleIniCaseW +
SI_CONVERT_WIN32 +
char No No #2 Yes CSimpleIniA +
char Yes Yes Yes CSimpleIniCaseA +
wchar_t No Yes Yes CSimpleIniW +
wchar_t Yes Yes Yes CSimpleIniCaseW +
SI_CONVERT_ICU +
char No Yes Yes CSimpleIniA +
char Yes Yes Yes CSimpleIniCaseA +
UChar No Yes Yes CSimpleIniW +
UChar Yes Yes Yes CSimpleIniCaseW +
+ #1 On Windows you are better to use CSimpleIniA with SI_CONVERT_WIN32.
+ #2 Only affects Windows. On Windows this uses MBCS functions and + so may fold case incorrectly leading to uncertain results. + -# Call LoadData() or LoadFile() to load and parse the INI configuration file + -# Access and modify the data of the file using the following functions + +
GetAllSections Return all section names +
GetAllKeys Return all key names within a section +
GetAllValues Return all values within a section & key +
GetSection Return all key names and values in a section +
GetSectionSize Return the number of keys in a section +
GetValue Return a value for a section & key +
SetValue Add or update a value for a section & key +
Delete Remove a section, or a key from a section +
SectionExists Does a section exist? +
KeyExists Does a key exist? +
+ -# Call Save() or SaveFile() to save the INI configuration data + + @section iostreams IO STREAMS + + SimpleIni supports reading from and writing to STL IO streams. Enable this + by defining SI_SUPPORT_IOSTREAMS before including the SimpleIni.h header + file. Ensure that if the streams are backed by a file (e.g. ifstream or + ofstream) then the flag ios_base::binary has been used when the file was + opened. + + @section multiline MULTI-LINE VALUES + + Values that span multiple lines are created using the following format. + +
+        key = <<
+
+    Note the following:
+    - The text used for ENDTAG can be anything and is used to find
+      where the multi-line text ends.
+    - The newline after ENDTAG in the start tag, and the newline
+      before ENDTAG in the end tag is not included in the data value.
+    - The ending tag must be on it's own line with no whitespace before
+      or after it.
+    - The multi-line value is modified at load so that each line in the value
+      is delimited by a single '\\n' character on all platforms. At save time
+      it will be converted into the newline format used by the current
+      platform.
+
+    @section comments COMMENTS
+
+    Comments are preserved in the file within the following restrictions:
+    - Every file may have a single "file comment". It must start with the
+      first character in the file, and will end with the first non-comment
+      line in the file.
+    - Every section may have a single "section comment". It will start
+      with the first comment line following the file comment, or the last
+      data entry. It ends at the beginning of the section.
+    - Every key may have a single "key comment". This comment will start
+      with the first comment line following the section start, or the file
+      comment if there is no section name.
+    - Comments are set at the time that the file, section or key is first
+      created. The only way to modify a comment on a section or a key is to
+      delete that entry and recreate it with the new comment. There is no
+      way to change the file comment.
+
+    @section save SAVE ORDER
+
+    The sections and keys are written out in the same order as they were
+    read in from the file. Sections and keys added to the data after the
+    file has been loaded will be added to the end of the file when it is
+    written. There is no way to specify the location of a section or key
+    other than in first-created, first-saved order.
+
+    @section notes NOTES
+
+    - To load UTF-8 data on Windows 95, you need to use Microsoft Layer for
+      Unicode, or SI_CONVERT_GENERIC, or SI_CONVERT_ICU.
+    - When using SI_CONVERT_GENERIC, ConvertUTF.c must be compiled and linked.
+    - When using SI_CONVERT_ICU, ICU header files must be on the include
+      path and icuuc.lib must be linked in.
+    - To load a UTF-8 file on Windows AND expose it with SI_CHAR == char,
+      you should use SI_CONVERT_GENERIC.
+    - The collation (sorting) order used for sections and keys returned from
+      iterators is NOT DEFINED. If collation order of the text is important
+      then it should be done yourself by either supplying a replacement
+      SI_STRLESS class, or by sorting the strings external to this library.
+    - Usage of the  header on Windows can be disabled by defining
+      SI_NO_MBCS. This is defined automatically on Windows CE platforms.
+    - Not thread-safe so manage your own locking
+
+    @section contrib CONTRIBUTIONS
+
+    - 2010/05/03: Tobias Gehrig: added GetDoubleValue()
+
+    @section licence MIT LICENCE
+
+    The licence text below is the boilerplate "MIT Licence" used from:
+    http://www.opensource.org/licenses/mit-license.php
+
+    Copyright (c) 2006-2012, Brodie Thiesfield
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is furnished
+    to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+    FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+    COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+    IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef INCLUDED_SimpleIni_h
+#define INCLUDED_SimpleIni_h
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// Disable these warnings in MSVC:
+//  4127 "conditional expression is constant" as the conversion classes trigger
+//  it with the statement if (sizeof(SI_CHAR) == sizeof(char)). This test will
+//  be optimized away in a release build.
+//  4503 'insert' : decorated name length exceeded, name was truncated
+//  4702 "unreachable code" as the MS STL header causes it in release mode.
+//  Again, the code causing the warning will be cleaned up by the compiler.
+//  4786 "identifier truncated to 256 characters" as this is thrown hundreds
+//  of times VC6 as soon as STL is used.
+#ifdef _MSC_VER
+# pragma warning (push)
+# pragma warning (disable: 4127 4503 4702 4786)
+#endif
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#ifdef SI_SUPPORT_IOSTREAMS
+# include 
+#endif // SI_SUPPORT_IOSTREAMS
+
+#ifdef _DEBUG
+# ifndef assert
+#  include 
+# endif
+# define SI_ASSERT(x)   assert(x)
+#else
+# define SI_ASSERT(x)
+#endif
+
+using SI_Error = int;
+
+constexpr int SI_OK = 0;        //!< No error
+constexpr int SI_UPDATED = 1;   //!< An existing value was updated
+constexpr int SI_INSERTED = 2;  //!< A new value was inserted
+
+// note: test for any error with (retval < 0)
+constexpr int SI_FAIL = -1;     //!< Generic failure
+constexpr int SI_NOMEM = -2;    //!< Out of memory error
+constexpr int SI_FILE = -3;     //!< File error (see errno for detail error)
+
+#define SI_UTF8_SIGNATURE     "\xEF\xBB\xBF"
+
+#ifdef _WIN32
+# define SI_NEWLINE_A   "\r\n"
+# define SI_NEWLINE_W   L"\r\n"
+#else // !_WIN32
+# define SI_NEWLINE_A   "\n"
+# define SI_NEWLINE_W   L"\n"
+#endif // _WIN32
+
+#if defined(SI_CONVERT_ICU)
+# include 
+#endif
+
+#if defined(_WIN32)
+# define SI_HAS_WIDE_FILE
+# define SI_WCHAR_T     wchar_t
+#elif defined(SI_CONVERT_ICU)
+# define SI_HAS_WIDE_FILE
+# define SI_WCHAR_T     UChar
+#endif
+
+
+// ---------------------------------------------------------------------------
+//                              MAIN TEMPLATE CLASS
+// ---------------------------------------------------------------------------
+
+/** Simple INI file reader.
+
+    This can be instantiated with the choice of unicode or native characterset,
+    and case sensitive or insensitive comparisons of section and key names.
+    The supported combinations are pre-defined with the following typedefs:
+
+    
+        
Interface Case-sensitive Typedef +
char No CSimpleIniA +
char Yes CSimpleIniCaseA +
wchar_t No CSimpleIniW +
wchar_t Yes CSimpleIniCaseW +
+ + Note that using other types for the SI_CHAR is supported. For instance, + unsigned char, unsigned short, etc. Note that where the alternative type + is a different size to char/wchar_t you may need to supply new helper + classes for SI_STRLESS and SI_CONVERTER. + */ +template +class CSimpleIniTempl +{ +public: + typedef SI_CHAR SI_CHAR_T; + + /** key entry */ + struct Entry { + const SI_CHAR* pItem; + const SI_CHAR* pComment; + int nOrder; + + Entry(const SI_CHAR* a_pszItem = NULL, int a_nOrder = 0) + : pItem(a_pszItem) + , pComment(NULL) + , nOrder(a_nOrder) + { } + Entry(const SI_CHAR* a_pszItem, const SI_CHAR* a_pszComment, int a_nOrder) + : pItem(a_pszItem) + , pComment(a_pszComment) + , nOrder(a_nOrder) + { } + Entry(const Entry& rhs) { operator=(rhs); } + Entry& operator=(const Entry& rhs) { + pItem = rhs.pItem; + pComment = rhs.pComment; + nOrder = rhs.nOrder; + return *this; + } + +#if defined(_MSC_VER) && _MSC_VER <= 1200 + /** STL of VC6 doesn't allow me to specify my own comparator for list::sort() */ + bool operator<(const Entry& rhs) const { return LoadOrder()(*this, rhs); } + bool operator>(const Entry& rhs) const { return LoadOrder()(rhs, *this); } +#endif + + /** Strict less ordering by name of key only */ + struct KeyOrder { + bool operator()(const Entry& lhs, const Entry& rhs) const { + const static SI_STRLESS isLess = SI_STRLESS(); + return isLess(lhs.pItem, rhs.pItem); + } + }; + + /** Strict less ordering by order, and then name of key */ + struct LoadOrder { + bool operator()(const Entry& lhs, const Entry& rhs) const { + if (lhs.nOrder != rhs.nOrder) { + return lhs.nOrder < rhs.nOrder; + } + return KeyOrder()(lhs.pItem, rhs.pItem); + } + }; + }; + + /** map keys to values */ + typedef std::multimap TKeyVal; + + /** map sections to key/value map */ + typedef std::map TSection; + + /** set of dependent string pointers. Note that these pointers are + dependent on memory owned by CSimpleIni. + */ + typedef std::list TNamesDepend; + + /** interface definition for the OutputWriter object to pass to Save() + in order to output the INI file data. + */ + class OutputWriter { + public: + OutputWriter() { } + virtual ~OutputWriter() { } + virtual void Write(const char* a_pBuf) = 0; + private: + OutputWriter(const OutputWriter&); // disable + OutputWriter& operator=(const OutputWriter&); // disable + }; + + /** OutputWriter class to write the INI data to a file */ + class FileWriter : public OutputWriter { + FILE* m_file; + public: + FileWriter(FILE* a_file) : m_file(a_file) { } + void Write(const char* a_pBuf) { + fputs(a_pBuf, m_file); + } + private: + FileWriter(const FileWriter&); // disable + FileWriter& operator=(const FileWriter&); // disable + }; + + /** OutputWriter class to write the INI data to a string */ + class StringWriter : public OutputWriter { + std::string& m_string; + public: + StringWriter(std::string& a_string) : m_string(a_string) { } + void Write(const char* a_pBuf) { + m_string.append(a_pBuf); + } + private: + StringWriter(const StringWriter&); // disable + StringWriter& operator=(const StringWriter&); // disable + }; + +#ifdef SI_SUPPORT_IOSTREAMS + /** OutputWriter class to write the INI data to an ostream */ + class StreamWriter : public OutputWriter { + std::ostream& m_ostream; + public: + StreamWriter(std::ostream& a_ostream) : m_ostream(a_ostream) { } + void Write(const char* a_pBuf) { + m_ostream << a_pBuf; + } + private: + StreamWriter(const StreamWriter&); // disable + StreamWriter& operator=(const StreamWriter&); // disable + }; +#endif // SI_SUPPORT_IOSTREAMS + + /** Characterset conversion utility class to convert strings to the + same format as is used for the storage. + */ + class Converter : private SI_CONVERTER { + public: + Converter(bool a_bStoreIsUtf8) : SI_CONVERTER(a_bStoreIsUtf8) { + m_scratch.resize(1024); + } + Converter(const Converter& rhs) { operator=(rhs); } + Converter& operator=(const Converter& rhs) { + m_scratch = rhs.m_scratch; + return *this; + } + bool ConvertToStore(const SI_CHAR* a_pszString) { + size_t uLen = SI_CONVERTER::SizeToStore(a_pszString); + if (uLen == (size_t)(-1)) { + return false; + } + while (uLen > m_scratch.size()) { + m_scratch.resize(m_scratch.size() * 2); + } + return SI_CONVERTER::ConvertToStore( + a_pszString, + const_cast(m_scratch.data()), + m_scratch.size()); + } + const char* Data() { return m_scratch.data(); } + private: + std::string m_scratch; + }; + +public: + /*-----------------------------------------------------------------------*/ + + /** Default constructor. + + @param a_bIsUtf8 See the method SetUnicode() for details. + @param a_bMultiKey See the method SetMultiKey() for details. + @param a_bMultiLine See the method SetMultiLine() for details. + */ + CSimpleIniTempl( + bool a_bIsUtf8 = false, + bool a_bMultiKey = false, + bool a_bMultiLine = false + ); + + /** Destructor */ + ~CSimpleIniTempl(); + + /** Deallocate all memory stored by this object */ + void Reset(); + + /** Has any data been loaded */ + bool IsEmpty() const { return m_data.empty(); } + + /*-----------------------------------------------------------------------*/ + /** @{ @name Settings */ + + /** Set the storage format of the INI data. This affects both the loading + and saving of the INI data using all of the Load/Save API functions. + This value cannot be changed after any INI data has been loaded. + + If the file is not set to Unicode (UTF-8), then the data encoding is + assumed to be the OS native encoding. This encoding is the system + locale on Linux/Unix and the legacy MBCS encoding on Windows NT/2K/XP. + If the storage format is set to Unicode then the file will be loaded + as UTF-8 encoded data regardless of the native file encoding. If + SI_CHAR == char then all of the char* parameters take and return UTF-8 + encoded data regardless of the system locale. + + \param a_bIsUtf8 Assume UTF-8 encoding for the source? + */ + void SetUnicode(bool a_bIsUtf8 = true) { + if (!m_pData) m_bStoreIsUtf8 = a_bIsUtf8; + } + + /** Get the storage format of the INI data. */ + bool IsUnicode() const { return m_bStoreIsUtf8; } + + /** Should multiple identical keys be permitted in the file. If set to false + then the last value encountered will be used as the value of the key. + If set to true, then all values will be available to be queried. For + example, with the following input: + +
+        [section]
+        test=value1
+        test=value2
+        
+ + Then with SetMultiKey(true), both of the values "value1" and "value2" + will be returned for the key test. If SetMultiKey(false) is used, then + the value for "test" will only be "value2". This value may be changed + at any time. + + \param a_bAllowMultiKey Allow multi-keys in the source? + */ + void SetMultiKey(bool a_bAllowMultiKey = true) { + m_bAllowMultiKey = a_bAllowMultiKey; + } + + /** Get the storage format of the INI data. */ + bool IsMultiKey() const { return m_bAllowMultiKey; } + + /** Should data values be permitted to span multiple lines in the file. If + set to false then the multi-line construct << + SI_CHAR FORMAT + char same format as when loaded (MBCS or UTF-8) + wchar_t UTF-8 + other UTF-8 + + + Note that comments from the original data is preserved as per the + documentation on comments. The order of the sections and values + from the original file will be preserved. + + Any data prepended or appended to the output device must use the the + same format (MBCS or UTF-8). You may use the GetConverter() method to + convert text to the correct format regardless of the output format + being used by SimpleIni. + + To add a BOM to UTF-8 data, write it out manually at the very beginning + like is done in SaveFile when a_bUseBOM is true. + + @param a_oOutput Output writer to write the data to. + + @param a_bAddSignature Prepend the UTF-8 BOM if the output data is in + UTF-8 format. If it is not UTF-8 then this value is + ignored. Do not set this to true if anything has + already been written to the OutputWriter. + + @return SI_Error See error definitions + */ + SI_Error Save( + OutputWriter& a_oOutput, + bool a_bAddSignature = false + ) const; + +#ifdef SI_SUPPORT_IOSTREAMS + /** Save the INI data to an ostream. See Save() for details. + + @param a_ostream String to have the INI data appended to. + + @param a_bAddSignature Prepend the UTF-8 BOM if the output data is in + UTF-8 format. If it is not UTF-8 then this value is + ignored. Do not set this to true if anything has + already been written to the stream. + + @return SI_Error See error definitions + */ + SI_Error Save( + std::ostream& a_ostream, + bool a_bAddSignature = false + ) const + { + StreamWriter writer(a_ostream); + return Save(writer, a_bAddSignature); + } +#endif // SI_SUPPORT_IOSTREAMS + + /** Append the INI data to a string. See Save() for details. + + @param a_sBuffer String to have the INI data appended to. + + @param a_bAddSignature Prepend the UTF-8 BOM if the output data is in + UTF-8 format. If it is not UTF-8 then this value is + ignored. Do not set this to true if anything has + already been written to the string. + + @return SI_Error See error definitions + */ + SI_Error Save( + std::string& a_sBuffer, + bool a_bAddSignature = false + ) const + { + StringWriter writer(a_sBuffer); + return Save(writer, a_bAddSignature); + } + + /*-----------------------------------------------------------------------*/ + /** @} + @{ @name Accessing INI Data */ + + /** Retrieve all section names. The list is returned as an STL vector of + names and can be iterated or searched as necessary. Note that the + sort order of the returned strings is NOT DEFINED. You can sort + the names into the load order if desired. Search this file for ".sort" + for an example. + + NOTE! This structure contains only pointers to strings. The actual + string data is stored in memory owned by CSimpleIni. Ensure that the + CSimpleIni object is not destroyed or Reset() while these pointers + are in use! + + @param a_names Vector that will receive all of the section + names. See note above! + */ + void GetAllSections( + TNamesDepend& a_names + ) const; + + /** Retrieve all unique key names in a section. The sort order of the + returned strings is NOT DEFINED. You can sort the names into the load + order if desired. Search this file for ".sort" for an example. Only + unique key names are returned. + + NOTE! This structure contains only pointers to strings. The actual + string data is stored in memory owned by CSimpleIni. Ensure that the + CSimpleIni object is not destroyed or Reset() while these strings + are in use! + + @param a_pSection Section to request data for + @param a_names List that will receive all of the key + names. See note above! + + @return true Section was found. + @return false Matching section was not found. + */ + bool GetAllKeys( + const SI_CHAR* a_pSection, + TNamesDepend& a_names + ) const; + + /** Retrieve all values for a specific key. This method can be used when + multiple keys are both enabled and disabled. Note that the sort order + of the returned strings is NOT DEFINED. You can sort the names into + the load order if desired. Search this file for ".sort" for an example. + + NOTE! The returned values are pointers to string data stored in memory + owned by CSimpleIni. Ensure that the CSimpleIni object is not destroyed + or Reset while you are using this pointer! + + @param a_pSection Section to search + @param a_pKey Key to search for + @param a_values List to return if the key is not found + + @return true Key was found. + @return false Matching section/key was not found. + */ + bool GetAllValues( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + TNamesDepend& a_values + ) const; + + /** Query the number of keys in a specific section. Note that if multiple + keys are enabled, then this value may be different to the number of + keys returned by GetAllKeys. + + @param a_pSection Section to request data for + + @return -1 Section does not exist in the file + @return >=0 Number of keys in the section + */ + int GetSectionSize( + const SI_CHAR* a_pSection + ) const; + + /** Retrieve all key and value pairs for a section. The data is returned + as a pointer to an STL map and can be iterated or searched as + desired. Note that multiple entries for the same key may exist when + multiple keys have been enabled. + + NOTE! This structure contains only pointers to strings. The actual + string data is stored in memory owned by CSimpleIni. Ensure that the + CSimpleIni object is not destroyed or Reset() while these strings + are in use! + + @param a_pSection Name of the section to return + @return Section data + */ + const TKeyVal* GetSection( + const SI_CHAR* a_pSection + ) const; + + /** Test if a section exists. Convenience function */ + inline bool SectionExists( + const SI_CHAR* a_pSection + ) const { + return GetSection(a_pSection) != NULL; + } + + /** Test if the key exists in a section. Convenience function. */ + inline bool KeyExists( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey + ) const { + return GetValue(a_pSection, a_pKey) != NULL; + } + + /** Retrieve the value for a specific key. If multiple keys are enabled + (see SetMultiKey) then only the first value associated with that key + will be returned, see GetAllValues for getting all values with multikey. + + NOTE! The returned value is a pointer to string data stored in memory + owned by CSimpleIni. Ensure that the CSimpleIni object is not destroyed + or Reset while you are using this pointer! + + @param a_pSection Section to search + @param a_pKey Key to search for + @param a_pDefault Value to return if the key is not found + @param a_pHasMultiple Optionally receive notification of if there are + multiple entries for this key. + + @return a_pDefault Key was not found in the section + @return other Value of the key + */ + const SI_CHAR* GetValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + const SI_CHAR* a_pDefault = NULL, + bool* a_pHasMultiple = NULL + ) const; + + /** Retrieve a numeric value for a specific key. If multiple keys are enabled + (see SetMultiKey) then only the first value associated with that key + will be returned, see GetAllValues for getting all values with multikey. + + @param a_pSection Section to search + @param a_pKey Key to search for + @param a_nDefault Value to return if the key is not found + @param a_pHasMultiple Optionally receive notification of if there are + multiple entries for this key. + + @return a_nDefault Key was not found in the section + @return other Value of the key + */ + long GetLongValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + long a_nDefault = 0, + bool* a_pHasMultiple = NULL + ) const; + + /** Retrieve a numeric value for a specific key. If multiple keys are enabled + (see SetMultiKey) then only the first value associated with that key + will be returned, see GetAllValues for getting all values with multikey. + + @param a_pSection Section to search + @param a_pKey Key to search for + @param a_nDefault Value to return if the key is not found + @param a_pHasMultiple Optionally receive notification of if there are + multiple entries for this key. + + @return a_nDefault Key was not found in the section + @return other Value of the key + */ + double GetDoubleValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + double a_nDefault = 0, + bool* a_pHasMultiple = NULL + ) const; + + /** Retrieve a boolean value for a specific key. If multiple keys are enabled + (see SetMultiKey) then only the first value associated with that key + will be returned, see GetAllValues for getting all values with multikey. + + Strings starting with "t", "y", "on" or "1" are returned as logically true. + Strings starting with "f", "n", "of" or "0" are returned as logically false. + For all other values the default is returned. Character comparisons are + case-insensitive. + + @param a_pSection Section to search + @param a_pKey Key to search for + @param a_bDefault Value to return if the key is not found + @param a_pHasMultiple Optionally receive notification of if there are + multiple entries for this key. + + @return a_nDefault Key was not found in the section + @return other Value of the key + */ + bool GetBoolValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + bool a_bDefault = false, + bool* a_pHasMultiple = NULL + ) const; + + /** Add or update a section or value. This will always insert + when multiple keys are enabled. + + @param a_pSection Section to add or update + @param a_pKey Key to add or update. Set to NULL to + create an empty section. + @param a_pValue Value to set. Set to NULL to create an + empty section. + @param a_pComment Comment to be associated with the section or the + key. If a_pKey is NULL then it will be associated + with the section, otherwise the key. Note that a + comment may be set ONLY when the section or key is + first created (i.e. when this function returns the + value SI_INSERTED). If you wish to create a section + with a comment then you need to create the section + separately to the key. The comment string must be + in full comment form already (have a comment + character starting every line). + @param a_bForceReplace Should all existing values in a multi-key INI + file be replaced with this entry. This option has + no effect if not using multi-key files. The + difference between Delete/SetValue and SetValue + with a_bForceReplace = true, is that the load + order and comment will be preserved this way. + + @return SI_Error See error definitions + @return SI_UPDATED Value was updated + @return SI_INSERTED Value was inserted + */ + SI_Error SetValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + const SI_CHAR* a_pValue, + const SI_CHAR* a_pComment = NULL, + bool a_bForceReplace = false + ) + { + return AddEntry(a_pSection, a_pKey, a_pValue, a_pComment, a_bForceReplace, true); + } + + /** Add or update a numeric value. This will always insert + when multiple keys are enabled. + + @param a_pSection Section to add or update + @param a_pKey Key to add or update. + @param a_nValue Value to set. + @param a_pComment Comment to be associated with the key. See the + notes on SetValue() for comments. + @param a_bUseHex By default the value will be written to the file + in decimal format. Set this to true to write it + as hexadecimal. + @param a_bForceReplace Should all existing values in a multi-key INI + file be replaced with this entry. This option has + no effect if not using multi-key files. The + difference between Delete/SetLongValue and + SetLongValue with a_bForceReplace = true, is that + the load order and comment will be preserved this + way. + + @return SI_Error See error definitions + @return SI_UPDATED Value was updated + @return SI_INSERTED Value was inserted + */ + SI_Error SetLongValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + long a_nValue, + const SI_CHAR* a_pComment = NULL, + bool a_bUseHex = false, + bool a_bForceReplace = false + ); + + /** Add or update a double value. This will always insert + when multiple keys are enabled. + + @param a_pSection Section to add or update + @param a_pKey Key to add or update. + @param a_nValue Value to set. + @param a_pComment Comment to be associated with the key. See the + notes on SetValue() for comments. + @param a_bForceReplace Should all existing values in a multi-key INI + file be replaced with this entry. This option has + no effect if not using multi-key files. The + difference between Delete/SetDoubleValue and + SetDoubleValue with a_bForceReplace = true, is that + the load order and comment will be preserved this + way. + + @return SI_Error See error definitions + @return SI_UPDATED Value was updated + @return SI_INSERTED Value was inserted + */ + SI_Error SetDoubleValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + double a_nValue, + const SI_CHAR* a_pComment = NULL, + bool a_bForceReplace = false + ); + + /** Add or update a boolean value. This will always insert + when multiple keys are enabled. + + @param a_pSection Section to add or update + @param a_pKey Key to add or update. + @param a_bValue Value to set. + @param a_pComment Comment to be associated with the key. See the + notes on SetValue() for comments. + @param a_bForceReplace Should all existing values in a multi-key INI + file be replaced with this entry. This option has + no effect if not using multi-key files. The + difference between Delete/SetBoolValue and + SetBoolValue with a_bForceReplace = true, is that + the load order and comment will be preserved this + way. + + @return SI_Error See error definitions + @return SI_UPDATED Value was updated + @return SI_INSERTED Value was inserted + */ + SI_Error SetBoolValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + bool a_bValue, + const SI_CHAR* a_pComment = NULL, + bool a_bForceReplace = false + ); + + /** Delete an entire section, or a key from a section. Note that the + data returned by GetSection is invalid and must not be used after + anything has been deleted from that section using this method. + Note when multiple keys is enabled, this will delete all keys with + that name; to selectively delete individual key/values, use + DeleteValue. + + @param a_pSection Section to delete key from, or if + a_pKey is NULL, the section to remove. + @param a_pKey Key to remove from the section. Set to + NULL to remove the entire section. + @param a_bRemoveEmpty If the section is empty after this key has + been deleted, should the empty section be + removed? + + @return true Key or section was deleted. + @return false Key or section was not found. + */ + bool Delete( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + bool a_bRemoveEmpty = false + ); + + /** Delete an entire section, or a key from a section. If value is + provided, only remove keys with the value. Note that the data + returned by GetSection is invalid and must not be used after + anything has been deleted from that section using this method. + Note when multiple keys is enabled, all keys with the value will + be deleted. + + @param a_pSection Section to delete key from, or if + a_pKey is NULL, the section to remove. + @param a_pKey Key to remove from the section. Set to + NULL to remove the entire section. + @param a_pValue Value of key to remove from the section. + Set to NULL to remove all keys. + @param a_bRemoveEmpty If the section is empty after this key has + been deleted, should the empty section be + removed? + + @return true Key/value or section was deleted. + @return false Key/value or section was not found. + */ + bool DeleteValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + const SI_CHAR* a_pValue, + bool a_bRemoveEmpty = false + ); + + /*-----------------------------------------------------------------------*/ + /** @} + @{ @name Converter */ + + /** Return a conversion object to convert text to the same encoding + as is used by the Save(), SaveFile() and SaveString() functions. + Use this to prepare the strings that you wish to append or prepend + to the output INI data. + */ + Converter GetConverter() const { + return Converter(m_bStoreIsUtf8); + } + + /*-----------------------------------------------------------------------*/ + /** @} */ + +private: + // copying is not permitted + CSimpleIniTempl(const CSimpleIniTempl&); // disabled + CSimpleIniTempl& operator=(const CSimpleIniTempl&); // disabled + + /** Parse the data looking for a file comment and store it if found. + */ + SI_Error FindFileComment( + SI_CHAR*& a_pData, + bool a_bCopyStrings + ); + + /** Parse the data looking for the next valid entry. The memory pointed to + by a_pData is modified by inserting NULL characters. The pointer is + updated to the current location in the block of text. + */ + bool FindEntry( + SI_CHAR*& a_pData, + const SI_CHAR*& a_pSection, + const SI_CHAR*& a_pKey, + const SI_CHAR*& a_pVal, + const SI_CHAR*& a_pComment + ) const; + + /** Add the section/key/value to our data. + + @param a_pSection Section name. Sections will be created if they + don't already exist. + @param a_pKey Key name. May be NULL to create an empty section. + Existing entries will be updated. New entries will + be created. + @param a_pValue Value for the key. + @param a_pComment Comment to be associated with the section or the + key. If a_pKey is NULL then it will be associated + with the section, otherwise the key. This must be + a string in full comment form already (have a + comment character starting every line). + @param a_bForceReplace Should all existing values in a multi-key INI + file be replaced with this entry. This option has + no effect if not using multi-key files. The + difference between Delete/AddEntry and AddEntry + with a_bForceReplace = true, is that the load + order and comment will be preserved this way. + @param a_bCopyStrings Should copies of the strings be made or not. + If false then the pointers will be used as is. + */ + SI_Error AddEntry( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + const SI_CHAR* a_pValue, + const SI_CHAR* a_pComment, + bool a_bForceReplace, + bool a_bCopyStrings + ); + + /** Is the supplied character a whitespace character? */ + inline bool IsSpace(SI_CHAR ch) const { + return (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n'); + } + + /** Does the supplied character start a comment line? */ + inline bool IsComment(SI_CHAR ch) const { + return (ch == ';' || ch == '#'); + } + + + /** Skip over a newline character (or characters) for either DOS or UNIX */ + inline void SkipNewLine(SI_CHAR*& a_pData) const { + a_pData += (*a_pData == '\r' && *(a_pData + 1) == '\n') ? 2 : 1; + } + + /** Make a copy of the supplied string, replacing the original pointer */ + SI_Error CopyString(const SI_CHAR*& a_pString); + + /** Delete a string from the copied strings buffer if necessary */ + void DeleteString(const SI_CHAR* a_pString); + + /** Internal use of our string comparison function */ + bool IsLess(const SI_CHAR* a_pLeft, const SI_CHAR* a_pRight) const { + const static SI_STRLESS isLess = SI_STRLESS(); + return isLess(a_pLeft, a_pRight); + } + + bool IsMultiLineTag(const SI_CHAR* a_pData) const; + bool IsMultiLineData(const SI_CHAR* a_pData) const; + bool IsSingleLineQuotedValue(const SI_CHAR* a_pData) const; + bool LoadMultiLineText( + SI_CHAR*& a_pData, + const SI_CHAR*& a_pVal, + const SI_CHAR* a_pTagName, + bool a_bAllowBlankLinesInComment = false + ) const; + bool IsNewLineChar(SI_CHAR a_c) const; + + bool OutputMultiLineText( + OutputWriter& a_oOutput, + Converter& a_oConverter, + const SI_CHAR* a_pText + ) const; + +private: + /** Copy of the INI file data in our character format. This will be + modified when parsed to have NULL characters added after all + interesting string entries. All of the string pointers to sections, + keys and values point into this block of memory. + */ + SI_CHAR* m_pData; + + /** Length of the data that we have stored. Used when deleting strings + to determine if the string is stored here or in the allocated string + buffer. + */ + size_t m_uDataLen; + + /** File comment for this data, if one exists. */ + const SI_CHAR* m_pFileComment; + + /** constant empty string */ + const SI_CHAR m_cEmptyString; + + /** Parsed INI data. Section -> (Key -> Value). */ + TSection m_data; + + /** This vector stores allocated memory for copies of strings that have + been supplied after the file load. It will be empty unless SetValue() + has been called. + */ + TNamesDepend m_strings; + + /** Is the format of our datafile UTF-8 or MBCS? */ + bool m_bStoreIsUtf8; + + /** Are multiple values permitted for the same key? */ + bool m_bAllowMultiKey; + + /** Are data values permitted to span multiple lines? */ + bool m_bAllowMultiLine; + + /** Should spaces be written out surrounding the equals sign? */ + bool m_bSpaces; + + /** Should quoted data in values be recognized and parsed? */ + bool m_bParseQuotes; + + /** Do keys always need to have an equals sign when reading/writing? */ + bool m_bAllowKeyOnly; + + /** Next order value, used to ensure sections and keys are output in the + same order that they are loaded/added. + */ + int m_nOrder; +}; + +// --------------------------------------------------------------------------- +// IMPLEMENTATION +// --------------------------------------------------------------------------- + +template +CSimpleIniTempl::CSimpleIniTempl( + bool a_bIsUtf8, + bool a_bAllowMultiKey, + bool a_bAllowMultiLine +) + : m_pData(0) + , m_uDataLen(0) + , m_pFileComment(NULL) + , m_cEmptyString(0) + , m_bStoreIsUtf8(a_bIsUtf8) + , m_bAllowMultiKey(a_bAllowMultiKey) + , m_bAllowMultiLine(a_bAllowMultiLine) + , m_bSpaces(true) + , m_bParseQuotes(false) + , m_bAllowKeyOnly(false) + , m_nOrder(0) +{ } + +template +CSimpleIniTempl::~CSimpleIniTempl() +{ + Reset(); +} + +template +void +CSimpleIniTempl::Reset() +{ + // remove all data + delete[] m_pData; + m_pData = NULL; + m_uDataLen = 0; + m_pFileComment = NULL; + if (!m_data.empty()) { + m_data.erase(m_data.begin(), m_data.end()); + } + + // remove all strings + if (!m_strings.empty()) { + typename TNamesDepend::iterator i = m_strings.begin(); + for (; i != m_strings.end(); ++i) { + delete[] const_cast(i->pItem); + } + m_strings.erase(m_strings.begin(), m_strings.end()); + } +} + +template +SI_Error +CSimpleIniTempl::LoadFile( + const char* a_pszFile +) +{ + FILE* fp = NULL; +#if __STDC_WANT_SECURE_LIB__ && !_WIN32_WCE + fopen_s(&fp, a_pszFile, "rb"); +#else // !__STDC_WANT_SECURE_LIB__ + fp = fopen(a_pszFile, "rb"); +#endif // __STDC_WANT_SECURE_LIB__ + if (!fp) { + return SI_FILE; + } + SI_Error rc = LoadFile(fp); + fclose(fp); + return rc; +} + +#ifdef SI_HAS_WIDE_FILE +template +SI_Error +CSimpleIniTempl::LoadFile( + const SI_WCHAR_T* a_pwszFile +) +{ +#ifdef _WIN32 + FILE* fp = NULL; +#if __STDC_WANT_SECURE_LIB__ && !_WIN32_WCE + _wfopen_s(&fp, a_pwszFile, L"rb"); +#else // !__STDC_WANT_SECURE_LIB__ + fp = _wfopen(a_pwszFile, L"rb"); +#endif // __STDC_WANT_SECURE_LIB__ + if (!fp) return SI_FILE; + SI_Error rc = LoadFile(fp); + fclose(fp); + return rc; +#else // !_WIN32 (therefore SI_CONVERT_ICU) + char szFile[256]; + u_austrncpy(szFile, a_pwszFile, sizeof(szFile)); + return LoadFile(szFile); +#endif // _WIN32 +} +#endif // SI_HAS_WIDE_FILE + +template +SI_Error +CSimpleIniTempl::LoadFile( + FILE* a_fpFile +) +{ + // load the raw file data + int retval = fseek(a_fpFile, 0, SEEK_END); + if (retval != 0) { + return SI_FILE; + } + long lSize = ftell(a_fpFile); + if (lSize < 0) { + return SI_FILE; + } + if (lSize == 0) { + return SI_OK; + } + + // allocate and ensure NULL terminated + char* pData = new(std::nothrow) char[lSize + static_cast(1)]; + if (!pData) { + return SI_NOMEM; + } + pData[lSize] = 0; + + // load data into buffer + fseek(a_fpFile, 0, SEEK_SET); + size_t uRead = fread(pData, sizeof(char), lSize, a_fpFile); + if (uRead != (size_t)lSize) { + delete[] pData; + return SI_FILE; + } + + // convert the raw data to unicode + SI_Error rc = LoadData(pData, uRead); + delete[] pData; + return rc; +} + +template +SI_Error +CSimpleIniTempl::LoadData( + const char* a_pData, + size_t a_uDataLen +) +{ + if (!a_pData) { + return SI_OK; + } + + // if the UTF-8 BOM exists, consume it and set mode to unicode, if we have + // already loaded data and try to change mode half-way through then this will + // be ignored and we will assert in debug versions + if (a_uDataLen >= 3 && memcmp(a_pData, SI_UTF8_SIGNATURE, 3) == 0) { + a_pData += 3; + a_uDataLen -= 3; + SI_ASSERT(m_bStoreIsUtf8 || !m_pData); // we don't expect mixed mode data + SetUnicode(); + } + + if (a_uDataLen == 0) { + return SI_OK; + } + + // determine the length of the converted data + SI_CONVERTER converter(m_bStoreIsUtf8); + size_t uLen = converter.SizeFromStore(a_pData, a_uDataLen); + if (uLen == (size_t)(-1)) { + return SI_FAIL; + } + + // allocate memory for the data, ensure that there is a NULL + // terminator wherever the converted data ends + SI_CHAR* pData = new(std::nothrow) SI_CHAR[uLen + 1]; + if (!pData) { + return SI_NOMEM; + } + memset(pData, 0, sizeof(SI_CHAR) * (uLen + 1)); + + // convert the data + if (!converter.ConvertFromStore(a_pData, a_uDataLen, pData, uLen)) { + delete[] pData; + return SI_FAIL; + } + + // parse it + const static SI_CHAR empty = 0; + SI_CHAR* pWork = pData; + const SI_CHAR* pSection = ∅ + const SI_CHAR* pItem = NULL; + const SI_CHAR* pVal = NULL; + const SI_CHAR* pComment = NULL; + + // We copy the strings if we are loading data into this class when we + // already have stored some. + bool bCopyStrings = (m_pData != NULL); + + // find a file comment if it exists, this is a comment that starts at the + // beginning of the file and continues until the first blank line. + SI_Error rc = FindFileComment(pWork, bCopyStrings); + if (rc < 0) return rc; + + // add every entry in the file to the data table + while (FindEntry(pWork, pSection, pItem, pVal, pComment)) { + rc = AddEntry(pSection, pItem, pVal, pComment, false, bCopyStrings); + if (rc < 0) return rc; + } + + // store these strings if we didn't copy them + if (bCopyStrings) { + delete[] pData; + } + else { + m_pData = pData; + m_uDataLen = uLen + 1; + } + + return SI_OK; +} + +#ifdef SI_SUPPORT_IOSTREAMS +template +SI_Error +CSimpleIniTempl::LoadData( + std::istream& a_istream +) +{ + std::string strData; + char szBuf[512]; + do { + a_istream.get(szBuf, sizeof(szBuf), '\0'); + strData.append(szBuf); + } while (a_istream.good()); + return LoadData(strData); +} +#endif // SI_SUPPORT_IOSTREAMS + +template +SI_Error +CSimpleIniTempl::FindFileComment( + SI_CHAR*& a_pData, + bool a_bCopyStrings +) +{ + // there can only be a single file comment + if (m_pFileComment) { + return SI_OK; + } + + // Load the file comment as multi-line text, this will modify all of + // the newline characters to be single \n chars + if (!LoadMultiLineText(a_pData, m_pFileComment, NULL, false)) { + return SI_OK; + } + + // copy the string if necessary + if (a_bCopyStrings) { + SI_Error rc = CopyString(m_pFileComment); + if (rc < 0) return rc; + } + + return SI_OK; +} + +template +bool +CSimpleIniTempl::FindEntry( + SI_CHAR*& a_pData, + const SI_CHAR*& a_pSection, + const SI_CHAR*& a_pKey, + const SI_CHAR*& a_pVal, + const SI_CHAR*& a_pComment +) const +{ + a_pComment = NULL; + + bool bHaveValue = false; + SI_CHAR* pTrail = NULL; + while (*a_pData) { + // skip spaces and empty lines + while (*a_pData && IsSpace(*a_pData)) { + ++a_pData; + } + if (!*a_pData) { + break; + } + + // skip processing of comment lines but keep a pointer to + // the start of the comment. + if (IsComment(*a_pData)) { + LoadMultiLineText(a_pData, a_pComment, NULL, true); + continue; + } + + // process section names + if (*a_pData == '[') { + // skip leading spaces + ++a_pData; + while (*a_pData && IsSpace(*a_pData)) { + ++a_pData; + } + + // find the end of the section name (it may contain spaces) + // and convert it to lowercase as necessary + a_pSection = a_pData; + while (*a_pData && *a_pData != ']' && !IsNewLineChar(*a_pData)) { + ++a_pData; + } + + // if it's an invalid line, just skip it + if (*a_pData != ']') { + continue; + } + + // remove trailing spaces from the section + pTrail = a_pData - 1; + while (pTrail >= a_pSection && IsSpace(*pTrail)) { + --pTrail; + } + ++pTrail; + *pTrail = 0; + + // skip to the end of the line + ++a_pData; // safe as checked that it == ']' above + while (*a_pData && !IsNewLineChar(*a_pData)) { + ++a_pData; + } + + a_pKey = NULL; + a_pVal = NULL; + return true; + } + + // find the end of the key name (it may contain spaces) + a_pKey = a_pData; + while (*a_pData && *a_pData != '=' && !IsNewLineChar(*a_pData)) { + ++a_pData; + } + // *a_pData is null, equals, or newline + + // if no value and we don't allow no value, then invalid + bHaveValue = (*a_pData == '='); + if (!bHaveValue && !m_bAllowKeyOnly) { + continue; + } + + // empty keys are invalid + if (bHaveValue && a_pKey == a_pData) { + while (*a_pData && !IsNewLineChar(*a_pData)) { + ++a_pData; + } + continue; + } + + // remove trailing spaces from the key + pTrail = a_pData - 1; + while (pTrail >= a_pKey && IsSpace(*pTrail)) { + --pTrail; + } + ++pTrail; + + if (bHaveValue) { + // process the value + *pTrail = 0; + + // skip leading whitespace on the value + ++a_pData; // safe as checked that it == '=' above + while (*a_pData && !IsNewLineChar(*a_pData) && IsSpace(*a_pData)) { + ++a_pData; + } + + // find the end of the value which is the end of this line + a_pVal = a_pData; + while (*a_pData && !IsNewLineChar(*a_pData)) { + ++a_pData; + } + + // remove trailing spaces from the value + pTrail = a_pData - 1; + if (*a_pData) { // prepare for the next round + SkipNewLine(a_pData); + } + while (pTrail >= a_pVal && IsSpace(*pTrail)) { + --pTrail; + } + ++pTrail; + *pTrail = 0; + + // check for multi-line entries + if (m_bAllowMultiLine && IsMultiLineTag(a_pVal)) { + // skip the "<<<" to get the tag that will end the multiline + const SI_CHAR* pTagName = a_pVal + 3; + return LoadMultiLineText(a_pData, a_pVal, pTagName); + } + + // check for quoted values, we are not supporting escapes in quoted values (yet) + if (m_bParseQuotes) { + --pTrail; + if (pTrail > a_pVal && *a_pVal == '"' && *pTrail == '"') { + ++a_pVal; + *pTrail = 0; + } + } + } + else { + // no value to process, just prepare for the next + if (*a_pData) { + SkipNewLine(a_pData); + } + *pTrail = 0; + } + + // return the standard entry + return true; + } + + return false; +} + +template +bool +CSimpleIniTempl::IsMultiLineTag( + const SI_CHAR* a_pVal +) const +{ + // check for the "<<<" prefix for a multi-line entry + if (*a_pVal++ != '<') return false; + if (*a_pVal++ != '<') return false; + if (*a_pVal++ != '<') return false; + return true; +} + +template +bool +CSimpleIniTempl::IsMultiLineData( + const SI_CHAR* a_pData +) const +{ + // data is multi-line if it has any of the following features: + // * whitespace prefix + // * embedded newlines + // * whitespace suffix + + // empty string + if (!*a_pData) { + return false; + } + + // check for prefix + if (IsSpace(*a_pData)) { + return true; + } + + // embedded newlines + while (*a_pData) { + if (IsNewLineChar(*a_pData)) { + return true; + } + ++a_pData; + } + + // check for suffix + if (IsSpace(*--a_pData)) { + return true; + } + + return false; +} + +template +bool +CSimpleIniTempl::IsSingleLineQuotedValue( + const SI_CHAR* a_pData +) const +{ + // data needs quoting if it starts or ends with whitespace + // and doesn't have embedded newlines + + // empty string + if (!*a_pData) { + return false; + } + + // check for prefix + if (IsSpace(*a_pData)) { + return true; + } + + // embedded newlines + while (*a_pData) { + if (IsNewLineChar(*a_pData)) { + return false; + } + ++a_pData; + } + + // check for suffix + if (IsSpace(*--a_pData)) { + return true; + } + + return false; +} + +template +bool +CSimpleIniTempl::IsNewLineChar( + SI_CHAR a_c +) const +{ + return (a_c == '\n' || a_c == '\r'); +} + +template +bool +CSimpleIniTempl::LoadMultiLineText( + SI_CHAR*& a_pData, + const SI_CHAR*& a_pVal, + const SI_CHAR* a_pTagName, + bool a_bAllowBlankLinesInComment +) const +{ + // we modify this data to strip all newlines down to a single '\n' + // character. This means that on Windows we need to strip out some + // characters which will make the data shorter. + // i.e. LINE1-LINE1\r\nLINE2-LINE2\0 will become + // LINE1-LINE1\nLINE2-LINE2\0 + // The pDataLine entry is the pointer to the location in memory that + // the current line needs to start to run following the existing one. + // This may be the same as pCurrLine in which case no move is needed. + SI_CHAR* pDataLine = a_pData; + SI_CHAR* pCurrLine; + + // value starts at the current line + a_pVal = a_pData; + + // find the end tag. This tag must start in column 1 and be + // followed by a newline. We ignore any whitespace after the end + // tag but not whitespace before it. + SI_CHAR cEndOfLineChar = *a_pData; + for (;;) { + // if we are loading comments then we need a comment character as + // the first character on every line + if (!a_pTagName && !IsComment(*a_pData)) { + // if we aren't allowing blank lines then we're done + if (!a_bAllowBlankLinesInComment) { + break; + } + + // if we are allowing blank lines then we only include them + // in this comment if another comment follows, so read ahead + // to find out. + SI_CHAR* pCurr = a_pData; + int nNewLines = 0; + while (IsSpace(*pCurr)) { + if (IsNewLineChar(*pCurr)) { + ++nNewLines; + SkipNewLine(pCurr); + } + else { + ++pCurr; + } + } + + // we have a comment, add the blank lines to the output + // and continue processing from here + if (IsComment(*pCurr)) { + for (; nNewLines > 0; --nNewLines) *pDataLine++ = '\n'; + a_pData = pCurr; + continue; + } + + // the comment ends here + break; + } + + // find the end of this line + pCurrLine = a_pData; + while (*a_pData && !IsNewLineChar(*a_pData)) ++a_pData; + + // move this line down to the location that it should be if necessary + if (pDataLine < pCurrLine) { + size_t nLen = (size_t)(a_pData - pCurrLine); + memmove(pDataLine, pCurrLine, nLen * sizeof(SI_CHAR)); + pDataLine[nLen] = '\0'; + } + + // end the line with a NULL + cEndOfLineChar = *a_pData; + *a_pData = 0; + + // if are looking for a tag then do the check now. This is done before + // checking for end of the data, so that if we have the tag at the end + // of the data then the tag is removed correctly. + if (a_pTagName) { + // strip whitespace from the end of this tag + SI_CHAR* pc = a_pData - 1; + while (pc > pDataLine && IsSpace(*pc)) --pc; + SI_CHAR ch = *++pc; + *pc = 0; + + if (!IsLess(pDataLine, a_pTagName) && !IsLess(a_pTagName, pDataLine)) { + break; + } + + *pc = ch; + } + + // if we are at the end of the data then we just automatically end + // this entry and return the current data. + if (!cEndOfLineChar) { + return true; + } + + // otherwise we need to process this newline to ensure that it consists + // of just a single \n character. + pDataLine += (a_pData - pCurrLine); + *a_pData = cEndOfLineChar; + SkipNewLine(a_pData); + *pDataLine++ = '\n'; + } + + // if we didn't find a comment at all then return false + if (a_pVal == a_pData) { + a_pVal = NULL; + return false; + } + + // the data (which ends at the end of the last line) needs to be + // null-terminated BEFORE before the newline character(s). If the + // user wants a new line in the multi-line data then they need to + // add an empty line before the tag. + *--pDataLine = '\0'; + + // if looking for a tag and if we aren't at the end of the data, + // then move a_pData to the start of the next line. + if (a_pTagName && cEndOfLineChar) { + SI_ASSERT(IsNewLineChar(cEndOfLineChar)); + *a_pData = cEndOfLineChar; + SkipNewLine(a_pData); + } + + return true; +} + +template +SI_Error +CSimpleIniTempl::CopyString( + const SI_CHAR*& a_pString +) +{ + size_t uLen = 0; + if (sizeof(SI_CHAR) == sizeof(char)) { + uLen = strlen((const char*)a_pString); + } + else if (sizeof(SI_CHAR) == sizeof(wchar_t)) { + uLen = wcslen((const wchar_t*)a_pString); + } + else { + for (; a_pString[uLen]; ++uLen) /*loop*/; + } + ++uLen; // NULL character + SI_CHAR* pCopy = new(std::nothrow) SI_CHAR[uLen]; + if (!pCopy) { + return SI_NOMEM; + } + memcpy(pCopy, a_pString, sizeof(SI_CHAR) * uLen); + m_strings.push_back(pCopy); + a_pString = pCopy; + return SI_OK; +} + +template +SI_Error +CSimpleIniTempl::AddEntry( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + const SI_CHAR* a_pValue, + const SI_CHAR* a_pComment, + bool a_bForceReplace, + bool a_bCopyStrings +) +{ + SI_Error rc; + bool bInserted = false; + + SI_ASSERT(!a_pComment || IsComment(*a_pComment)); + + // if we are copying strings then make a copy of the comment now + // because we will need it when we add the entry. + if (a_bCopyStrings && a_pComment) { + rc = CopyString(a_pComment); + if (rc < 0) return rc; + } + + // create the section entry if necessary + typename TSection::iterator iSection = m_data.find(a_pSection); + if (iSection == m_data.end()) { + // if the section doesn't exist then we need a copy as the + // string needs to last beyond the end of this function + if (a_bCopyStrings) { + rc = CopyString(a_pSection); + if (rc < 0) return rc; + } + + // only set the comment if this is a section only entry + Entry oSection(a_pSection, ++m_nOrder); + if (a_pComment && !a_pKey) { + oSection.pComment = a_pComment; + } + + typename TSection::value_type oEntry(oSection, TKeyVal()); + typedef typename TSection::iterator SectionIterator; + std::pair i = m_data.insert(oEntry); + iSection = i.first; + bInserted = true; + } + if (!a_pKey) { + // section only entries are specified with pItem as NULL + return bInserted ? SI_INSERTED : SI_UPDATED; + } + + // check for existence of the key + TKeyVal& keyval = iSection->second; + typename TKeyVal::iterator iKey = keyval.find(a_pKey); + bInserted = iKey == keyval.end(); + + // remove all existing entries but save the load order and + // comment of the first entry + int nLoadOrder = ++m_nOrder; + if (iKey != keyval.end() && m_bAllowMultiKey && a_bForceReplace) { + const SI_CHAR* pComment = NULL; + while (iKey != keyval.end() && !IsLess(a_pKey, iKey->first.pItem)) { + if (iKey->first.nOrder < nLoadOrder) { + nLoadOrder = iKey->first.nOrder; + pComment = iKey->first.pComment; + } + ++iKey; + } + if (pComment) { + DeleteString(a_pComment); + a_pComment = pComment; + CopyString(a_pComment); + } + Delete(a_pSection, a_pKey); + iKey = keyval.end(); + } + + // values need to be a valid string, even if they are an empty string + if (!a_pValue) { + a_pValue = &m_cEmptyString; + } + + // make string copies if necessary + bool bForceCreateNewKey = m_bAllowMultiKey && !a_bForceReplace; + if (a_bCopyStrings) { + if (bForceCreateNewKey || iKey == keyval.end()) { + // if the key doesn't exist then we need a copy as the + // string needs to last beyond the end of this function + // because we will be inserting the key next + rc = CopyString(a_pKey); + if (rc < 0) return rc; + } + + // we always need a copy of the value + rc = CopyString(a_pValue); + if (rc < 0) return rc; + } + + // create the key entry + if (iKey == keyval.end() || bForceCreateNewKey) { + Entry oKey(a_pKey, nLoadOrder); + if (a_pComment) { + oKey.pComment = a_pComment; + } + typename TKeyVal::value_type oEntry(oKey, static_cast(NULL)); + iKey = keyval.insert(oEntry); + } + + iKey->second = a_pValue; + return bInserted ? SI_INSERTED : SI_UPDATED; +} + +template +const SI_CHAR* +CSimpleIniTempl::GetValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + const SI_CHAR* a_pDefault, + bool* a_pHasMultiple +) const +{ + if (a_pHasMultiple) { + *a_pHasMultiple = false; + } + if (!a_pSection || !a_pKey) { + return a_pDefault; + } + typename TSection::const_iterator iSection = m_data.find(a_pSection); + if (iSection == m_data.end()) { + return a_pDefault; + } + typename TKeyVal::const_iterator iKeyVal = iSection->second.find(a_pKey); + if (iKeyVal == iSection->second.end()) { + return a_pDefault; + } + + // check for multiple entries with the same key + if (m_bAllowMultiKey && a_pHasMultiple) { + typename TKeyVal::const_iterator iTemp = iKeyVal; + if (++iTemp != iSection->second.end()) { + if (!IsLess(a_pKey, iTemp->first.pItem)) { + *a_pHasMultiple = true; + } + } + } + + return iKeyVal->second; +} + +template +long +CSimpleIniTempl::GetLongValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + long a_nDefault, + bool* a_pHasMultiple +) const +{ + // return the default if we don't have a value + const SI_CHAR* pszValue = GetValue(a_pSection, a_pKey, NULL, a_pHasMultiple); + if (!pszValue || !*pszValue) return a_nDefault; + + // convert to UTF-8/MBCS which for a numeric value will be the same as ASCII + char szValue[64] = { 0 }; + SI_CONVERTER c(m_bStoreIsUtf8); + if (!c.ConvertToStore(pszValue, szValue, sizeof(szValue))) { + return a_nDefault; + } + + // handle the value as hex if prefaced with "0x" + long nValue = a_nDefault; + char* pszSuffix = szValue; + if (szValue[0] == '0' && (szValue[1] == 'x' || szValue[1] == 'X')) { + if (!szValue[2]) return a_nDefault; + nValue = strtol(&szValue[2], &pszSuffix, 16); + } + else { + nValue = strtol(szValue, &pszSuffix, 10); + } + + // any invalid strings will return the default value + if (*pszSuffix) { + return a_nDefault; + } + + return nValue; +} + +template +SI_Error +CSimpleIniTempl::SetLongValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + long a_nValue, + const SI_CHAR* a_pComment, + bool a_bUseHex, + bool a_bForceReplace +) +{ + // use SetValue to create sections + if (!a_pSection || !a_pKey) return SI_FAIL; + + // convert to an ASCII string + char szInput[64]; +#if __STDC_WANT_SECURE_LIB__ && !_WIN32_WCE + sprintf_s(szInput, a_bUseHex ? "0x%lx" : "%ld", a_nValue); +#else // !__STDC_WANT_SECURE_LIB__ + sprintf(szInput, a_bUseHex ? "0x%lx" : "%ld", a_nValue); +#endif // __STDC_WANT_SECURE_LIB__ + + // convert to output text + SI_CHAR szOutput[64]; + SI_CONVERTER c(m_bStoreIsUtf8); + c.ConvertFromStore(szInput, strlen(szInput) + 1, + szOutput, sizeof(szOutput) / sizeof(SI_CHAR)); + + // actually add it + return AddEntry(a_pSection, a_pKey, szOutput, a_pComment, a_bForceReplace, true); +} + +template +double +CSimpleIniTempl::GetDoubleValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + double a_nDefault, + bool* a_pHasMultiple +) const +{ + // return the default if we don't have a value + const SI_CHAR* pszValue = GetValue(a_pSection, a_pKey, NULL, a_pHasMultiple); + if (!pszValue || !*pszValue) return a_nDefault; + + // convert to UTF-8/MBCS which for a numeric value will be the same as ASCII + char szValue[64] = { 0 }; + SI_CONVERTER c(m_bStoreIsUtf8); + if (!c.ConvertToStore(pszValue, szValue, sizeof(szValue))) { + return a_nDefault; + } + + char* pszSuffix = NULL; + double nValue = strtod(szValue, &pszSuffix); + + // any invalid strings will return the default value + if (!pszSuffix || *pszSuffix) { + return a_nDefault; + } + + return nValue; +} + +template +SI_Error +CSimpleIniTempl::SetDoubleValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + double a_nValue, + const SI_CHAR* a_pComment, + bool a_bForceReplace +) +{ + // use SetValue to create sections + if (!a_pSection || !a_pKey) return SI_FAIL; + + // convert to an ASCII string + char szInput[64]; +#if __STDC_WANT_SECURE_LIB__ && !_WIN32_WCE + sprintf_s(szInput, "%f", a_nValue); +#else // !__STDC_WANT_SECURE_LIB__ + sprintf(szInput, "%f", a_nValue); +#endif // __STDC_WANT_SECURE_LIB__ + + // convert to output text + SI_CHAR szOutput[64]; + SI_CONVERTER c(m_bStoreIsUtf8); + c.ConvertFromStore(szInput, strlen(szInput) + 1, + szOutput, sizeof(szOutput) / sizeof(SI_CHAR)); + + // actually add it + return AddEntry(a_pSection, a_pKey, szOutput, a_pComment, a_bForceReplace, true); +} + +template +bool +CSimpleIniTempl::GetBoolValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + bool a_bDefault, + bool* a_pHasMultiple +) const +{ + // return the default if we don't have a value + const SI_CHAR* pszValue = GetValue(a_pSection, a_pKey, NULL, a_pHasMultiple); + if (!pszValue || !*pszValue) return a_bDefault; + + // we only look at the minimum number of characters + switch (pszValue[0]) { + case 't': case 'T': // true + case 'y': case 'Y': // yes + case '1': // 1 (one) + return true; + + case 'f': case 'F': // false + case 'n': case 'N': // no + case '0': // 0 (zero) + return false; + + case 'o': case 'O': + if (pszValue[1] == 'n' || pszValue[1] == 'N') return true; // on + if (pszValue[1] == 'f' || pszValue[1] == 'F') return false; // off + break; + } + + // no recognized value, return the default + return a_bDefault; +} + +template +SI_Error +CSimpleIniTempl::SetBoolValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + bool a_bValue, + const SI_CHAR* a_pComment, + bool a_bForceReplace +) +{ + // use SetValue to create sections + if (!a_pSection || !a_pKey) return SI_FAIL; + + // convert to an ASCII string + const char* pszInput = a_bValue ? "true" : "false"; + + // convert to output text + SI_CHAR szOutput[64]; + SI_CONVERTER c(m_bStoreIsUtf8); + c.ConvertFromStore(pszInput, strlen(pszInput) + 1, + szOutput, sizeof(szOutput) / sizeof(SI_CHAR)); + + // actually add it + return AddEntry(a_pSection, a_pKey, szOutput, a_pComment, a_bForceReplace, true); +} + +template +bool +CSimpleIniTempl::GetAllValues( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + TNamesDepend& a_values +) const +{ + a_values.clear(); + + if (!a_pSection || !a_pKey) { + return false; + } + typename TSection::const_iterator iSection = m_data.find(a_pSection); + if (iSection == m_data.end()) { + return false; + } + typename TKeyVal::const_iterator iKeyVal = iSection->second.find(a_pKey); + if (iKeyVal == iSection->second.end()) { + return false; + } + + // insert all values for this key + a_values.push_back(Entry(iKeyVal->second, iKeyVal->first.pComment, iKeyVal->first.nOrder)); + if (m_bAllowMultiKey) { + ++iKeyVal; + while (iKeyVal != iSection->second.end() && !IsLess(a_pKey, iKeyVal->first.pItem)) { + a_values.push_back(Entry(iKeyVal->second, iKeyVal->first.pComment, iKeyVal->first.nOrder)); + ++iKeyVal; + } + } + + return true; +} + +template +int +CSimpleIniTempl::GetSectionSize( + const SI_CHAR* a_pSection +) const +{ + if (!a_pSection) { + return -1; + } + + typename TSection::const_iterator iSection = m_data.find(a_pSection); + if (iSection == m_data.end()) { + return -1; + } + const TKeyVal& section = iSection->second; + + // if multi-key isn't permitted then the section size is + // the number of keys that we have. + if (!m_bAllowMultiKey || section.empty()) { + return (int)section.size(); + } + + // otherwise we need to count them + int nCount = 0; + const SI_CHAR* pLastKey = NULL; + typename TKeyVal::const_iterator iKeyVal = section.begin(); + for (int n = 0; iKeyVal != section.end(); ++iKeyVal, ++n) { + if (!pLastKey || IsLess(pLastKey, iKeyVal->first.pItem)) { + ++nCount; + pLastKey = iKeyVal->first.pItem; + } + } + return nCount; +} + +template +const typename CSimpleIniTempl::TKeyVal* +CSimpleIniTempl::GetSection( + const SI_CHAR* a_pSection +) const +{ + if (a_pSection) { + typename TSection::const_iterator i = m_data.find(a_pSection); + if (i != m_data.end()) { + return &(i->second); + } + } + return 0; +} + +template +void +CSimpleIniTempl::GetAllSections( + TNamesDepend& a_names +) const +{ + a_names.clear(); + typename TSection::const_iterator i = m_data.begin(); + for (int n = 0; i != m_data.end(); ++i, ++n) { + a_names.push_back(i->first); + } +} + +template +bool +CSimpleIniTempl::GetAllKeys( + const SI_CHAR* a_pSection, + TNamesDepend& a_names +) const +{ + a_names.clear(); + + if (!a_pSection) { + return false; + } + + typename TSection::const_iterator iSection = m_data.find(a_pSection); + if (iSection == m_data.end()) { + return false; + } + + const TKeyVal& section = iSection->second; + const SI_CHAR* pLastKey = NULL; + typename TKeyVal::const_iterator iKeyVal = section.begin(); + for (int n = 0; iKeyVal != section.end(); ++iKeyVal, ++n) { + if (!pLastKey || IsLess(pLastKey, iKeyVal->first.pItem)) { + a_names.push_back(iKeyVal->first); + pLastKey = iKeyVal->first.pItem; + } + } + + return true; +} + +template +SI_Error +CSimpleIniTempl::SaveFile( + const char* a_pszFile, + bool a_bAddSignature +) const +{ + FILE* fp = NULL; +#if __STDC_WANT_SECURE_LIB__ && !_WIN32_WCE + fopen_s(&fp, a_pszFile, "wb"); +#else // !__STDC_WANT_SECURE_LIB__ + fp = fopen(a_pszFile, "wb"); +#endif // __STDC_WANT_SECURE_LIB__ + if (!fp) return SI_FILE; + SI_Error rc = SaveFile(fp, a_bAddSignature); + fclose(fp); + return rc; +} + +#ifdef SI_HAS_WIDE_FILE +template +SI_Error +CSimpleIniTempl::SaveFile( + const SI_WCHAR_T* a_pwszFile, + bool a_bAddSignature +) const +{ +#ifdef _WIN32 + FILE* fp = NULL; +#if __STDC_WANT_SECURE_LIB__ && !_WIN32_WCE + _wfopen_s(&fp, a_pwszFile, L"wb"); +#else // !__STDC_WANT_SECURE_LIB__ + fp = _wfopen(a_pwszFile, L"wb"); +#endif // __STDC_WANT_SECURE_LIB__ + if (!fp) return SI_FILE; + SI_Error rc = SaveFile(fp, a_bAddSignature); + fclose(fp); + return rc; +#else // !_WIN32 (therefore SI_CONVERT_ICU) + char szFile[256]; + u_austrncpy(szFile, a_pwszFile, sizeof(szFile)); + return SaveFile(szFile, a_bAddSignature); +#endif // _WIN32 +} +#endif // SI_HAS_WIDE_FILE + +template +SI_Error +CSimpleIniTempl::SaveFile( + FILE* a_pFile, + bool a_bAddSignature +) const +{ + FileWriter writer(a_pFile); + return Save(writer, a_bAddSignature); +} + +template +SI_Error +CSimpleIniTempl::Save( + OutputWriter& a_oOutput, + bool a_bAddSignature +) const +{ + Converter convert(m_bStoreIsUtf8); + + // add the UTF-8 signature if it is desired + if (m_bStoreIsUtf8 && a_bAddSignature) { + a_oOutput.Write(SI_UTF8_SIGNATURE); + } + + // get all of the sections sorted in load order + TNamesDepend oSections; + GetAllSections(oSections); +#if defined(_MSC_VER) && _MSC_VER <= 1200 + oSections.sort(); +#elif defined(__BORLANDC__) + oSections.sort(Entry::LoadOrder()); +#else + oSections.sort(typename Entry::LoadOrder()); +#endif + + // if there is an empty section name, then it must be written out first + // regardless of the load order + typename TNamesDepend::iterator is = oSections.begin(); + for (; is != oSections.end(); ++is) { + if (!*is->pItem) { + // move the empty section name to the front of the section list + if (is != oSections.begin()) { + oSections.splice(oSections.begin(), oSections, is, std::next(is)); + } + break; + } + } + + // write the file comment if we have one + bool bNeedNewLine = false; + if (m_pFileComment) { + if (!OutputMultiLineText(a_oOutput, convert, m_pFileComment)) { + return SI_FAIL; + } + bNeedNewLine = true; + } + + // iterate through our sections and output the data + typename TNamesDepend::const_iterator iSection = oSections.begin(); + for (; iSection != oSections.end(); ++iSection) { + // write out the comment if there is one + if (iSection->pComment) { + if (bNeedNewLine) { + a_oOutput.Write(SI_NEWLINE_A); + a_oOutput.Write(SI_NEWLINE_A); + } + if (!OutputMultiLineText(a_oOutput, convert, iSection->pComment)) { + return SI_FAIL; + } + bNeedNewLine = false; + } + + if (bNeedNewLine) { + a_oOutput.Write(SI_NEWLINE_A); + a_oOutput.Write(SI_NEWLINE_A); + bNeedNewLine = false; + } + + // write the section (unless there is no section name) + if (*iSection->pItem) { + if (!convert.ConvertToStore(iSection->pItem)) { + return SI_FAIL; + } + a_oOutput.Write("["); + a_oOutput.Write(convert.Data()); + a_oOutput.Write("]"); + a_oOutput.Write(SI_NEWLINE_A); + } + + // get all of the keys sorted in load order + TNamesDepend oKeys; + GetAllKeys(iSection->pItem, oKeys); +#if defined(_MSC_VER) && _MSC_VER <= 1200 + oKeys.sort(); +#elif defined(__BORLANDC__) + oKeys.sort(Entry::LoadOrder()); +#else + oKeys.sort(typename Entry::LoadOrder()); +#endif + + // write all keys and values + typename TNamesDepend::const_iterator iKey = oKeys.begin(); + for (; iKey != oKeys.end(); ++iKey) { + // get all values for this key + TNamesDepend oValues; + GetAllValues(iSection->pItem, iKey->pItem, oValues); + + typename TNamesDepend::const_iterator iValue = oValues.begin(); + for (; iValue != oValues.end(); ++iValue) { + // write out the comment if there is one + if (iValue->pComment) { + a_oOutput.Write(SI_NEWLINE_A); + if (!OutputMultiLineText(a_oOutput, convert, iValue->pComment)) { + return SI_FAIL; + } + } + + // write the key + if (!convert.ConvertToStore(iKey->pItem)) { + return SI_FAIL; + } + a_oOutput.Write(convert.Data()); + + // write the value as long + if (*iValue->pItem || !m_bAllowKeyOnly) { + if (!convert.ConvertToStore(iValue->pItem)) { + return SI_FAIL; + } + a_oOutput.Write(m_bSpaces ? " = " : "="); + if (m_bParseQuotes && IsSingleLineQuotedValue(iValue->pItem)) { + // the only way to preserve external whitespace on a value (i.e. before or after) + // is to quote it. This is simple quoting, we don't escape quotes within the data. + a_oOutput.Write("\""); + a_oOutput.Write(convert.Data()); + a_oOutput.Write("\""); + } + else if (m_bAllowMultiLine && IsMultiLineData(iValue->pItem)) { + // multi-line data needs to be processed specially to ensure + // that we use the correct newline format for the current system + a_oOutput.Write("<<pItem)) { + return SI_FAIL; + } + a_oOutput.Write("END_OF_TEXT"); + } + else { + a_oOutput.Write(convert.Data()); + } + } + a_oOutput.Write(SI_NEWLINE_A); + } + } + + bNeedNewLine = true; + } + + return SI_OK; +} + +template +bool +CSimpleIniTempl::OutputMultiLineText( + OutputWriter& a_oOutput, + Converter& a_oConverter, + const SI_CHAR* a_pText +) const +{ + const SI_CHAR* pEndOfLine; + SI_CHAR cEndOfLineChar = *a_pText; + while (cEndOfLineChar) { + // find the end of this line + pEndOfLine = a_pText; + for (; *pEndOfLine && *pEndOfLine != '\n'; ++pEndOfLine) /*loop*/; + cEndOfLineChar = *pEndOfLine; + + // temporarily null terminate, convert and output the line + *const_cast(pEndOfLine) = 0; + if (!a_oConverter.ConvertToStore(a_pText)) { + return false; + } + *const_cast(pEndOfLine) = cEndOfLineChar; + a_pText += (pEndOfLine - a_pText) + 1; + a_oOutput.Write(a_oConverter.Data()); + a_oOutput.Write(SI_NEWLINE_A); + } + return true; +} + +template +bool +CSimpleIniTempl::Delete( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + bool a_bRemoveEmpty +) +{ + return DeleteValue(a_pSection, a_pKey, NULL, a_bRemoveEmpty); +} + +template +bool +CSimpleIniTempl::DeleteValue( + const SI_CHAR* a_pSection, + const SI_CHAR* a_pKey, + const SI_CHAR* a_pValue, + bool a_bRemoveEmpty +) +{ + if (!a_pSection) { + return false; + } + + typename TSection::iterator iSection = m_data.find(a_pSection); + if (iSection == m_data.end()) { + return false; + } + + // remove a single key if we have a keyname + if (a_pKey) { + typename TKeyVal::iterator iKeyVal = iSection->second.find(a_pKey); + if (iKeyVal == iSection->second.end()) { + return false; + } + + const static SI_STRLESS isLess = SI_STRLESS(); + + // remove any copied strings and then the key + typename TKeyVal::iterator iDelete; + bool bDeleted = false; + do { + iDelete = iKeyVal++; + + if (a_pValue == NULL || + (isLess(a_pValue, iDelete->second) == false && + isLess(iDelete->second, a_pValue) == false)) { + DeleteString(iDelete->first.pItem); + DeleteString(iDelete->second); + iSection->second.erase(iDelete); + bDeleted = true; + } + } while (iKeyVal != iSection->second.end() + && !IsLess(a_pKey, iKeyVal->first.pItem)); + + if (!bDeleted) { + return false; + } + + // done now if the section is not empty or we are not pruning away + // the empty sections. Otherwise let it fall through into the section + // deletion code + if (!a_bRemoveEmpty || !iSection->second.empty()) { + return true; + } + } + else { + // delete all copied strings from this section. The actual + // entries will be removed when the section is removed. + typename TKeyVal::iterator iKeyVal = iSection->second.begin(); + for (; iKeyVal != iSection->second.end(); ++iKeyVal) { + DeleteString(iKeyVal->first.pItem); + DeleteString(iKeyVal->second); + } + } + + // delete the section itself + DeleteString(iSection->first.pItem); + m_data.erase(iSection); + + return true; +} + +template +void +CSimpleIniTempl::DeleteString( + const SI_CHAR* a_pString +) +{ + // strings may exist either inside the data block, or they will be + // individually allocated and stored in m_strings. We only physically + // delete those stored in m_strings. + if (a_pString < m_pData || a_pString >= m_pData + m_uDataLen) { + typename TNamesDepend::iterator i = m_strings.begin(); + for (; i != m_strings.end(); ++i) { + if (a_pString == i->pItem) { + delete[] const_cast(i->pItem); + m_strings.erase(i); + break; + } + } + } +} + +// --------------------------------------------------------------------------- +// CONVERSION FUNCTIONS +// --------------------------------------------------------------------------- + +// Defines the conversion classes for different libraries. Before including +// SimpleIni.h, set the converter that you wish you use by defining one of the +// following symbols. +// +// SI_NO_CONVERSION Do not make the "W" wide character version of the +// library available. Only CSimpleIniA etc is defined. +// SI_CONVERT_GENERIC Use the Unicode reference conversion library in +// the accompanying files ConvertUTF.h/c +// SI_CONVERT_ICU Use the IBM ICU conversion library. Requires +// ICU headers on include path and icuuc.lib +// SI_CONVERT_WIN32 Use the Win32 API functions for conversion. + +#if !defined(SI_NO_CONVERSION) && !defined(SI_CONVERT_GENERIC) && !defined(SI_CONVERT_WIN32) && !defined(SI_CONVERT_ICU) +# ifdef _WIN32 +# define SI_CONVERT_WIN32 +# else +# define SI_CONVERT_GENERIC +# endif +#endif + +/** + * Generic case-sensitive less than comparison. This class returns numerically + * ordered ASCII case-sensitive text for all possible sizes and types of + * SI_CHAR. + */ +template +struct SI_GenericCase { + bool operator()(const SI_CHAR* pLeft, const SI_CHAR* pRight) const { + long cmp; + for (; *pLeft && *pRight; ++pLeft, ++pRight) { + cmp = (long)*pLeft - (long)*pRight; + if (cmp != 0) { + return cmp < 0; + } + } + return *pRight != 0; + } +}; + +/** + * Generic ASCII case-insensitive less than comparison. This class returns + * numerically ordered ASCII case-insensitive text for all possible sizes + * and types of SI_CHAR. It is not safe for MBCS text comparison where + * ASCII A-Z characters are used in the encoding of multi-byte characters. + */ +template +struct SI_GenericNoCase { + inline SI_CHAR locase(SI_CHAR ch) const { + return (ch < 'A' || ch > 'Z') ? ch : (ch - 'A' + 'a'); + } + bool operator()(const SI_CHAR* pLeft, const SI_CHAR* pRight) const { + long cmp; + for (; *pLeft && *pRight; ++pLeft, ++pRight) { + cmp = (long)locase(*pLeft) - (long)locase(*pRight); + if (cmp != 0) { + return cmp < 0; + } + } + return *pRight != 0; + } +}; + +/** + * Null conversion class for MBCS/UTF-8 to char (or equivalent). + */ +template +class SI_ConvertA { + bool m_bStoreIsUtf8; +protected: + SI_ConvertA() { } +public: + SI_ConvertA(bool a_bStoreIsUtf8) : m_bStoreIsUtf8(a_bStoreIsUtf8) { } + + /* copy and assignment */ + SI_ConvertA(const SI_ConvertA& rhs) { operator=(rhs); } + SI_ConvertA& operator=(const SI_ConvertA& rhs) { + m_bStoreIsUtf8 = rhs.m_bStoreIsUtf8; + return *this; + } + + /** Calculate the number of SI_CHAR required for converting the input + * from the storage format. The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData Data in storage format to be converted to SI_CHAR. + * @param a_uInputDataLen Length of storage format data in bytes. This + * must be the actual length of the data, including + * NULL byte if NULL terminated string is required. + * @return Number of SI_CHAR required by the string when + * converted. If there are embedded NULL bytes in the + * input data, only the string up and not including + * the NULL byte will be converted. + * @return -1 cast to size_t on a conversion error. + */ + size_t SizeFromStore( + const char* a_pInputData, + size_t a_uInputDataLen) + { + (void)a_pInputData; + SI_ASSERT(a_uInputDataLen != (size_t)-1); + + // ASCII/MBCS/UTF-8 needs no conversion + return a_uInputDataLen; + } + + /** Convert the input string from the storage format to SI_CHAR. + * The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData Data in storage format to be converted to SI_CHAR. + * @param a_uInputDataLen Length of storage format data in bytes. This + * must be the actual length of the data, including + * NULL byte if NULL terminated string is required. + * @param a_pOutputData Pointer to the output buffer to received the + * converted data. + * @param a_uOutputDataSize Size of the output buffer in SI_CHAR. + * @return true if all of the input data was successfully + * converted. + */ + bool ConvertFromStore( + const char* a_pInputData, + size_t a_uInputDataLen, + SI_CHAR* a_pOutputData, + size_t a_uOutputDataSize) + { + // ASCII/MBCS/UTF-8 needs no conversion + if (a_uInputDataLen > a_uOutputDataSize) { + return false; + } + memcpy(a_pOutputData, a_pInputData, a_uInputDataLen); + return true; + } + + /** Calculate the number of char required by the storage format of this + * data. The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData NULL terminated string to calculate the number of + * bytes required to be converted to storage format. + * @return Number of bytes required by the string when + * converted to storage format. This size always + * includes space for the terminating NULL character. + * @return -1 cast to size_t on a conversion error. + */ + size_t SizeToStore( + const SI_CHAR* a_pInputData) + { + // ASCII/MBCS/UTF-8 needs no conversion + return strlen((const char*)a_pInputData) + 1; + } + + /** Convert the input string to the storage format of this data. + * The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData NULL terminated source string to convert. All of + * the data will be converted including the + * terminating NULL character. + * @param a_pOutputData Pointer to the buffer to receive the converted + * string. + * @param a_uOutputDataSize Size of the output buffer in char. + * @return true if all of the input data, including the + * terminating NULL character was successfully + * converted. + */ + bool ConvertToStore( + const SI_CHAR* a_pInputData, + char* a_pOutputData, + size_t a_uOutputDataSize) + { + // calc input string length (SI_CHAR type and size independent) + size_t uInputLen = strlen((const char*)a_pInputData) + 1; + if (uInputLen > a_uOutputDataSize) { + return false; + } + + // ascii/UTF-8 needs no conversion + memcpy(a_pOutputData, a_pInputData, uInputLen); + return true; + } +}; + + +// --------------------------------------------------------------------------- +// SI_CONVERT_GENERIC +// --------------------------------------------------------------------------- +#ifdef SI_CONVERT_GENERIC + +#define SI_Case SI_GenericCase +#define SI_NoCase SI_GenericNoCase + +#include +#include "ConvertUTF.h" + +/** + * Converts UTF-8 to a wchar_t (or equivalent) using the Unicode reference + * library functions. This can be used on all platforms. + */ +template +class SI_ConvertW { + bool m_bStoreIsUtf8; +protected: + SI_ConvertW() { } +public: + SI_ConvertW(bool a_bStoreIsUtf8) : m_bStoreIsUtf8(a_bStoreIsUtf8) { } + + /* copy and assignment */ + SI_ConvertW(const SI_ConvertW& rhs) { operator=(rhs); } + SI_ConvertW& operator=(const SI_ConvertW& rhs) { + m_bStoreIsUtf8 = rhs.m_bStoreIsUtf8; + return *this; + } + + /** Calculate the number of SI_CHAR required for converting the input + * from the storage format. The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData Data in storage format to be converted to SI_CHAR. + * @param a_uInputDataLen Length of storage format data in bytes. This + * must be the actual length of the data, including + * NULL byte if NULL terminated string is required. + * @return Number of SI_CHAR required by the string when + * converted. If there are embedded NULL bytes in the + * input data, only the string up and not including + * the NULL byte will be converted. + * @return -1 cast to size_t on a conversion error. + */ + size_t SizeFromStore( + const char* a_pInputData, + size_t a_uInputDataLen) + { + SI_ASSERT(a_uInputDataLen != (size_t)-1); + + if (m_bStoreIsUtf8) { + // worst case scenario for UTF-8 to wchar_t is 1 char -> 1 wchar_t + // so we just return the same number of characters required as for + // the source text. + return a_uInputDataLen; + } + +#if defined(SI_NO_MBSTOWCS_NULL) || (!defined(_MSC_VER) && !defined(_linux)) + // fall back processing for platforms that don't support a NULL dest to mbstowcs + // worst case scenario is 1:1, this will be a sufficient buffer size + (void)a_pInputData; + return a_uInputDataLen; +#else + // get the actual required buffer size + return mbstowcs(NULL, a_pInputData, a_uInputDataLen); +#endif + } + + /** Convert the input string from the storage format to SI_CHAR. + * The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData Data in storage format to be converted to SI_CHAR. + * @param a_uInputDataLen Length of storage format data in bytes. This + * must be the actual length of the data, including + * NULL byte if NULL terminated string is required. + * @param a_pOutputData Pointer to the output buffer to received the + * converted data. + * @param a_uOutputDataSize Size of the output buffer in SI_CHAR. + * @return true if all of the input data was successfully + * converted. + */ + bool ConvertFromStore( + const char* a_pInputData, + size_t a_uInputDataLen, + SI_CHAR* a_pOutputData, + size_t a_uOutputDataSize) + { + if (m_bStoreIsUtf8) { + // This uses the Unicode reference implementation to do the + // conversion from UTF-8 to wchar_t. The required files are + // ConvertUTF.h and ConvertUTF.c which should be included in + // the distribution but are publically available from unicode.org + // at http://www.unicode.org/Public/PROGRAMS/CVTUTF/ + ConversionResult retval; + const UTF8* pUtf8 = (const UTF8*)a_pInputData; + if (sizeof(wchar_t) == sizeof(UTF32)) { + UTF32* pUtf32 = (UTF32*)a_pOutputData; + retval = ConvertUTF8toUTF32( + &pUtf8, pUtf8 + a_uInputDataLen, + &pUtf32, pUtf32 + a_uOutputDataSize, + lenientConversion); + } + else if (sizeof(wchar_t) == sizeof(UTF16)) { + UTF16* pUtf16 = (UTF16*)a_pOutputData; + retval = ConvertUTF8toUTF16( + &pUtf8, pUtf8 + a_uInputDataLen, + &pUtf16, pUtf16 + a_uOutputDataSize, + lenientConversion); + } + return retval == conversionOK; + } + + // convert to wchar_t + size_t retval = mbstowcs(a_pOutputData, + a_pInputData, a_uOutputDataSize); + return retval != (size_t)(-1); + } + + /** Calculate the number of char required by the storage format of this + * data. The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData NULL terminated string to calculate the number of + * bytes required to be converted to storage format. + * @return Number of bytes required by the string when + * converted to storage format. This size always + * includes space for the terminating NULL character. + * @return -1 cast to size_t on a conversion error. + */ + size_t SizeToStore( + const SI_CHAR* a_pInputData) + { + if (m_bStoreIsUtf8) { + // worst case scenario for wchar_t to UTF-8 is 1 wchar_t -> 6 char + size_t uLen = 0; + while (a_pInputData[uLen]) { + ++uLen; + } + return (6 * uLen) + 1; + } + else { + size_t uLen = wcstombs(NULL, a_pInputData, 0); + if (uLen == (size_t)(-1)) { + return uLen; + } + return uLen + 1; // include NULL terminator + } + } + + /** Convert the input string to the storage format of this data. + * The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData NULL terminated source string to convert. All of + * the data will be converted including the + * terminating NULL character. + * @param a_pOutputData Pointer to the buffer to receive the converted + * string. + * @param a_uOutputDataSize Size of the output buffer in char. + * @return true if all of the input data, including the + * terminating NULL character was successfully + * converted. + */ + bool ConvertToStore( + const SI_CHAR* a_pInputData, + char* a_pOutputData, + size_t a_uOutputDataSize + ) + { + if (m_bStoreIsUtf8) { + // calc input string length (SI_CHAR type and size independent) + size_t uInputLen = 0; + while (a_pInputData[uInputLen]) { + ++uInputLen; + } + ++uInputLen; // include the NULL char + + // This uses the Unicode reference implementation to do the + // conversion from wchar_t to UTF-8. The required files are + // ConvertUTF.h and ConvertUTF.c which should be included in + // the distribution but are publically available from unicode.org + // at http://www.unicode.org/Public/PROGRAMS/CVTUTF/ + ConversionResult retval; + UTF8* pUtf8 = (UTF8*)a_pOutputData; + if (sizeof(wchar_t) == sizeof(UTF32)) { + const UTF32* pUtf32 = (const UTF32*)a_pInputData; + retval = ConvertUTF32toUTF8( + &pUtf32, pUtf32 + uInputLen, + &pUtf8, pUtf8 + a_uOutputDataSize, + lenientConversion); + } + else if (sizeof(wchar_t) == sizeof(UTF16)) { + const UTF16* pUtf16 = (const UTF16*)a_pInputData; + retval = ConvertUTF16toUTF8( + &pUtf16, pUtf16 + uInputLen, + &pUtf8, pUtf8 + a_uOutputDataSize, + lenientConversion); + } + return retval == conversionOK; + } + else { + size_t retval = wcstombs(a_pOutputData, + a_pInputData, a_uOutputDataSize); + return retval != (size_t)-1; + } + } +}; + +#endif // SI_CONVERT_GENERIC + + +// --------------------------------------------------------------------------- +// SI_CONVERT_ICU +// --------------------------------------------------------------------------- +#ifdef SI_CONVERT_ICU + +#define SI_Case SI_GenericCase +#define SI_NoCase SI_GenericNoCase + +#include + +/** + * Converts MBCS/UTF-8 to UChar using ICU. This can be used on all platforms. + */ +template +class SI_ConvertW { + const char* m_pEncoding; + UConverter* m_pConverter; +protected: + SI_ConvertW() : m_pEncoding(NULL), m_pConverter(NULL) { } +public: + SI_ConvertW(bool a_bStoreIsUtf8) : m_pConverter(NULL) { + m_pEncoding = a_bStoreIsUtf8 ? "UTF-8" : NULL; + } + + /* copy and assignment */ + SI_ConvertW(const SI_ConvertW& rhs) { operator=(rhs); } + SI_ConvertW& operator=(const SI_ConvertW& rhs) { + m_pEncoding = rhs.m_pEncoding; + m_pConverter = NULL; + return *this; + } + ~SI_ConvertW() { if (m_pConverter) ucnv_close(m_pConverter); } + + /** Calculate the number of UChar required for converting the input + * from the storage format. The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData Data in storage format to be converted to UChar. + * @param a_uInputDataLen Length of storage format data in bytes. This + * must be the actual length of the data, including + * NULL byte if NULL terminated string is required. + * @return Number of UChar required by the string when + * converted. If there are embedded NULL bytes in the + * input data, only the string up and not including + * the NULL byte will be converted. + * @return -1 cast to size_t on a conversion error. + */ + size_t SizeFromStore( + const char* a_pInputData, + size_t a_uInputDataLen) + { + SI_ASSERT(a_uInputDataLen != (size_t)-1); + + UErrorCode nError; + + if (!m_pConverter) { + nError = U_ZERO_ERROR; + m_pConverter = ucnv_open(m_pEncoding, &nError); + if (U_FAILURE(nError)) { + return (size_t)-1; + } + } + + nError = U_ZERO_ERROR; + int32_t nLen = ucnv_toUChars(m_pConverter, NULL, 0, + a_pInputData, (int32_t)a_uInputDataLen, &nError); + if (U_FAILURE(nError) && nError != U_BUFFER_OVERFLOW_ERROR) { + return (size_t)-1; + } + + return (size_t)nLen; + } + + /** Convert the input string from the storage format to UChar. + * The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData Data in storage format to be converted to UChar. + * @param a_uInputDataLen Length of storage format data in bytes. This + * must be the actual length of the data, including + * NULL byte if NULL terminated string is required. + * @param a_pOutputData Pointer to the output buffer to received the + * converted data. + * @param a_uOutputDataSize Size of the output buffer in UChar. + * @return true if all of the input data was successfully + * converted. + */ + bool ConvertFromStore( + const char* a_pInputData, + size_t a_uInputDataLen, + UChar* a_pOutputData, + size_t a_uOutputDataSize) + { + UErrorCode nError; + + if (!m_pConverter) { + nError = U_ZERO_ERROR; + m_pConverter = ucnv_open(m_pEncoding, &nError); + if (U_FAILURE(nError)) { + return false; + } + } + + nError = U_ZERO_ERROR; + ucnv_toUChars(m_pConverter, + a_pOutputData, (int32_t)a_uOutputDataSize, + a_pInputData, (int32_t)a_uInputDataLen, &nError); + if (U_FAILURE(nError)) { + return false; + } + + return true; + } + + /** Calculate the number of char required by the storage format of this + * data. The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData NULL terminated string to calculate the number of + * bytes required to be converted to storage format. + * @return Number of bytes required by the string when + * converted to storage format. This size always + * includes space for the terminating NULL character. + * @return -1 cast to size_t on a conversion error. + */ + size_t SizeToStore( + const UChar* a_pInputData) + { + UErrorCode nError; + + if (!m_pConverter) { + nError = U_ZERO_ERROR; + m_pConverter = ucnv_open(m_pEncoding, &nError); + if (U_FAILURE(nError)) { + return (size_t)-1; + } + } + + nError = U_ZERO_ERROR; + int32_t nLen = ucnv_fromUChars(m_pConverter, NULL, 0, + a_pInputData, -1, &nError); + if (U_FAILURE(nError) && nError != U_BUFFER_OVERFLOW_ERROR) { + return (size_t)-1; + } + + return (size_t)nLen + 1; + } + + /** Convert the input string to the storage format of this data. + * The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData NULL terminated source string to convert. All of + * the data will be converted including the + * terminating NULL character. + * @param a_pOutputData Pointer to the buffer to receive the converted + * string. + * @param a_pOutputDataSize Size of the output buffer in char. + * @return true if all of the input data, including the + * terminating NULL character was successfully + * converted. + */ + bool ConvertToStore( + const UChar* a_pInputData, + char* a_pOutputData, + size_t a_uOutputDataSize) + { + UErrorCode nError; + + if (!m_pConverter) { + nError = U_ZERO_ERROR; + m_pConverter = ucnv_open(m_pEncoding, &nError); + if (U_FAILURE(nError)) { + return false; + } + } + + nError = U_ZERO_ERROR; + ucnv_fromUChars(m_pConverter, + a_pOutputData, (int32_t)a_uOutputDataSize, + a_pInputData, -1, &nError); + if (U_FAILURE(nError)) { + return false; + } + + return true; + } +}; + +#endif // SI_CONVERT_ICU + + +// --------------------------------------------------------------------------- +// SI_CONVERT_WIN32 +// --------------------------------------------------------------------------- +#ifdef SI_CONVERT_WIN32 + +#define SI_Case SI_GenericCase + +// Windows CE doesn't have errno or MBCS libraries +#ifdef _WIN32_WCE +# ifndef SI_NO_MBCS +# define SI_NO_MBCS +# endif +#endif + +#include +#ifdef SI_NO_MBCS +# define SI_NoCase SI_GenericNoCase +#else // !SI_NO_MBCS +/** + * Case-insensitive comparison class using Win32 MBCS functions. This class + * returns a case-insensitive semi-collation order for MBCS text. It may not + * be safe for UTF-8 text returned in char format as we don't know what + * characters will be folded by the function! Therefore, if you are using + * SI_CHAR == char and SetUnicode(true), then you need to use the generic + * SI_NoCase class instead. + */ +#include +template +struct SI_NoCase { + bool operator()(const SI_CHAR* pLeft, const SI_CHAR* pRight) const { + if (sizeof(SI_CHAR) == sizeof(char)) { + return _mbsicmp((const unsigned char*)pLeft, + (const unsigned char*)pRight) < 0; + } + if (sizeof(SI_CHAR) == sizeof(wchar_t)) { + return _wcsicmp((const wchar_t*)pLeft, + (const wchar_t*)pRight) < 0; + } + return SI_GenericNoCase()(pLeft, pRight); + } +}; +#endif // SI_NO_MBCS + +/** + * Converts MBCS and UTF-8 to a wchar_t (or equivalent) on Windows. This uses + * only the Win32 functions and doesn't require the external Unicode UTF-8 + * conversion library. It will not work on Windows 95 without using Microsoft + * Layer for Unicode in your application. + */ +template +class SI_ConvertW { + UINT m_uCodePage; +protected: + SI_ConvertW() { } +public: + SI_ConvertW(bool a_bStoreIsUtf8) { + m_uCodePage = a_bStoreIsUtf8 ? CP_UTF8 : CP_ACP; + } + + /* copy and assignment */ + SI_ConvertW(const SI_ConvertW& rhs) { operator=(rhs); } + SI_ConvertW& operator=(const SI_ConvertW& rhs) { + m_uCodePage = rhs.m_uCodePage; + return *this; + } + + /** Calculate the number of SI_CHAR required for converting the input + * from the storage format. The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData Data in storage format to be converted to SI_CHAR. + * @param a_uInputDataLen Length of storage format data in bytes. This + * must be the actual length of the data, including + * NULL byte if NULL terminated string is required. + * @return Number of SI_CHAR required by the string when + * converted. If there are embedded NULL bytes in the + * input data, only the string up and not including + * the NULL byte will be converted. + * @return -1 cast to size_t on a conversion error. + */ + size_t SizeFromStore( + const char* a_pInputData, + size_t a_uInputDataLen) + { + SI_ASSERT(a_uInputDataLen != (size_t)-1); + + int retval = MultiByteToWideChar( + m_uCodePage, 0, + a_pInputData, (int)a_uInputDataLen, + 0, 0); + return (size_t)(retval > 0 ? retval : -1); + } + + /** Convert the input string from the storage format to SI_CHAR. + * The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData Data in storage format to be converted to SI_CHAR. + * @param a_uInputDataLen Length of storage format data in bytes. This + * must be the actual length of the data, including + * NULL byte if NULL terminated string is required. + * @param a_pOutputData Pointer to the output buffer to received the + * converted data. + * @param a_uOutputDataSize Size of the output buffer in SI_CHAR. + * @return true if all of the input data was successfully + * converted. + */ + bool ConvertFromStore( + const char* a_pInputData, + size_t a_uInputDataLen, + SI_CHAR* a_pOutputData, + size_t a_uOutputDataSize) + { + int nSize = MultiByteToWideChar( + m_uCodePage, 0, + a_pInputData, (int)a_uInputDataLen, + (wchar_t*)a_pOutputData, (int)a_uOutputDataSize); + return (nSize > 0); + } + + /** Calculate the number of char required by the storage format of this + * data. The storage format is always UTF-8. + * + * @param a_pInputData NULL terminated string to calculate the number of + * bytes required to be converted to storage format. + * @return Number of bytes required by the string when + * converted to storage format. This size always + * includes space for the terminating NULL character. + * @return -1 cast to size_t on a conversion error. + */ + size_t SizeToStore( + const SI_CHAR* a_pInputData) + { + int retval = WideCharToMultiByte( + m_uCodePage, 0, + (const wchar_t*)a_pInputData, -1, + 0, 0, 0, 0); + return (size_t)(retval > 0 ? retval : -1); + } + + /** Convert the input string to the storage format of this data. + * The storage format is always UTF-8 or MBCS. + * + * @param a_pInputData NULL terminated source string to convert. All of + * the data will be converted including the + * terminating NULL character. + * @param a_pOutputData Pointer to the buffer to receive the converted + * string. + * @param a_pOutputDataSize Size of the output buffer in char. + * @return true if all of the input data, including the + * terminating NULL character was successfully + * converted. + */ + bool ConvertToStore( + const SI_CHAR* a_pInputData, + char* a_pOutputData, + size_t a_uOutputDataSize) + { + int retval = WideCharToMultiByte( + m_uCodePage, 0, + (const wchar_t*)a_pInputData, -1, + a_pOutputData, (int)a_uOutputDataSize, 0, 0); + return retval > 0; + } +}; + +#endif // SI_CONVERT_WIN32 + + + +// --------------------------------------------------------------------------- +// SI_NO_CONVERSION +// --------------------------------------------------------------------------- +#ifdef SI_NO_CONVERSION + +#define SI_Case SI_GenericCase +#define SI_NoCase SI_GenericNoCase + +#endif // SI_NO_CONVERSION + + + +// --------------------------------------------------------------------------- +// TYPE DEFINITIONS +// --------------------------------------------------------------------------- + +typedef CSimpleIniTempl, SI_ConvertA > CSimpleIniA; +typedef CSimpleIniTempl, SI_ConvertA > CSimpleIniCaseA; + +#if defined(SI_NO_CONVERSION) +// if there is no wide char conversion then we don't need to define the +// widechar "W" versions of CSimpleIni +# define CSimpleIni CSimpleIniA +# define CSimpleIniCase CSimpleIniCaseA +# define SI_NEWLINE SI_NEWLINE_A +#else +# if defined(SI_CONVERT_ICU) +typedef CSimpleIniTempl, SI_ConvertW > CSimpleIniW; +typedef CSimpleIniTempl, SI_ConvertW > CSimpleIniCaseW; +# else +typedef CSimpleIniTempl, SI_ConvertW > CSimpleIniW; +typedef CSimpleIniTempl, SI_ConvertW > CSimpleIniCaseW; +# endif + +# ifdef _UNICODE +# define CSimpleIni CSimpleIniW +# define CSimpleIniCase CSimpleIniCaseW +# define SI_NEWLINE SI_NEWLINE_W +# else // !_UNICODE +# define CSimpleIni CSimpleIniA +# define CSimpleIniCase CSimpleIniCaseA +# define SI_NEWLINE SI_NEWLINE_A +# endif // _UNICODE +#endif + +#ifdef _MSC_VER +# pragma warning (pop) +#endif + +#endif // INCLUDED_SimpleIni_h diff --git a/legacy/WinXP/riovjoy2.exe b/legacy/WinXP/riovjoy2.exe new file mode 100644 index 0000000..c970f40 Binary files /dev/null and b/legacy/WinXP/riovjoy2.exe differ diff --git a/legacy/c232comm.cpp b/legacy/c232comm.cpp new file mode 100644 index 0000000..86844c4 --- /dev/null +++ b/legacy/c232comm.cpp @@ -0,0 +1,4 @@ +#include +#include +#include "c232comm.h" + diff --git a/legacy/c232comm.h b/legacy/c232comm.h new file mode 100644 index 0000000..7ae1941 --- /dev/null +++ b/legacy/c232comm.h @@ -0,0 +1,4 @@ +#if !defined(__C232COMM_H__) +#define __C232COMM_H__ + +#endif // !defined(__C232COMM_H__) diff --git a/legacy/hbb_vkey.cpp b/legacy/hbb_vkey.cpp new file mode 100644 index 0000000..6ba89ac --- /dev/null +++ b/legacy/hbb_vkey.cpp @@ -0,0 +1,206 @@ +struct hhb_vkey{ +char* name; +uint8_t vkey; +char* description; +}; +const hhb_vkey hhb_vkey_list[] = { +{ "VK_LBUTTON", 0x01, "Left mouse button" }, +{ "VK_RBUTTON", 0x02, "Right mouse button" }, +{ "VK_CANCEL", 0x03, "Control-break processing" }, +{ "VK_MBUTTON", 0x04, "Middle mouse button (three-button mouse)" }, +{ "VK_XBUTTON1", 0x05, "X1 mouse button" }, +{ "VK_XBUTTON2", 0x06, "X2 mouse button" }, +{ "-", 0x07, "Undefined" }, +{ "VK_BACK", 0x08, "BACKSPACE key" }, +{ "VK_TAB", 0x09, "TAB key" }, +//{ "-", 0x0A - 0B, "Reserved" }, +{ "VK_CLEAR", 0x0C, "CLEAR key" }, +{ "VK_RETURN", 0x0D, "ENTER key" }, +//{ "-", 0x0E - 0F, "Undefined" }, +{ "VK_SHIFT", 0x10, "SHIFT key" }, +{ "VK_CONTROL", 0x11, "CTRL key" }, +{ "VK_MENU", 0x12, "ALT key" }, +{ "VK_PAUSE", 0x13, "PAUSE key" }, +{ "VK_CAPITAL", 0x14, "CAPS LOCK key" }, +{ "VK_KANA", 0x15, "IME Kana mode" }, +{ "VK_HANGUEL", 0x15, "IME Hanguel mode (maintained for compatibility; use VK_HANGUL)" }, +{ "VK_HANGUL", 0x15, "IME Hangul mode" }, +//{ "-", 0x16, "Undefined" }, +{ "VK_JUNJA", 0x17, "IME Junja mode" }, +{ "VK_FINAL", 0x18, "IME final mode" }, +{ "VK_HANJA", 0x19, "IME Hanja mode" }, +{ "VK_KANJI", 0x19, "IME Kanji mode" }, +//{ "-", 0x1A, "Undefined" }, +{ "VK_ESCAPE", 0x1B, "ESC key" }, +{ "VK_CONVERT", 0x1C, "IME convert" }, +{ "VK_NONCONVERT", 0x1D, "IME nonconvert" }, +{ "VK_ACCEPT", 0x1E, "IME accept" }, +{ "VK_MODECHANGE", 0x1F, "IME mode change request" }, +{ "VK_SPACE", 0x20, "SPACEBAR" }, +{ "VK_PRIOR", 0x21, "PAGE UP key" }, +{ "VK_NEXT", 0x22, "PAGE DOWN key" }, +{ "VK_END", 0x23, "END key" }, +{ "VK_HOME", 0x24, "HOME key" }, +{ "VK_LEFT", 0x25, "LEFT ARROW key" }, +{ "VK_UP", 0x26, "UP ARROW key" }, +{ "VK_RIGHT", 0x27, "RIGHT ARROW key" }, +{ "VK_DOWN", 0x28, "DOWN ARROW key" }, +{ "VK_SELECT", 0x29, "SELECT key" }, +{ "VK_PRINT", 0x2A, "PRINT key" }, +{ "VK_EXECUTE", 0x2B, "EXECUTE key" }, +{ "VK_SNAPSHOT", 0x2C, "PRINT SCREEN key" }, +{ "VK_INSERT", 0x2D, "INS key" }, +{ "VK_DELETE", 0x2E, "DEL key" }, +{ "VK_HELP", 0x2F, "HELP key" }, +{ "0 key", 0x30, "0 key" }, +{ "1 key", 0x31, "1 key" }, +{ "2 key", 0x32, "2 key" }, +{ "3 key", 0x33, "3 key" }, +{ "4 key", 0x34, "4 key" }, +{ "5 key", 0x35, "5 key" }, +{ "6 key", 0x36, "6 key" }, +{ "7 key", 0x37, "7 key" }, +{ "8 key", 0x38, "8 key" }, +{ "9 key", 0x39, "9 key" }, +//{ "undefined", 0x3A - 40, "undefined" }, +{ "A key", 0x41, "A key" }, +{ "B key", 0x42, "B key" }, +{ "C key", 0x43, "C key" }, +{ "D key", 0x44, "D key" }, +{ "E key", 0x45, "E key" }, +{ "F key", 0x46, "F key" }, +{ "G key", 0x47, "G key" }, +{ "H key", 0x48, "H key" }, +{ "I key", 0x49, "I key" }, +{ "J key", 0x4A, "J key" }, +{ "K key", 0x4B, "K key" }, +{ "L key", 0x4C, "L key" }, +{ "M key", 0x4D, "M key" }, +{ "N key", 0x4E, "N key" }, +{ "O key", 0x4F, "O key" }, +{ "P key", 0x50, "P key" }, +{ "Q key", 0x51, "Q key" }, +{ "R key", 0x52, "R key" }, +{ "S key", 0x53, "S key" }, +{ "T key", 0x54, "T key" }, +{ "U key", 0x55, "U key" }, +{ "V key", 0x56, "V key" }, +{ "W key", 0x57, "W key" }, +{ "X key", 0x58, "X key" }, +{ "Y key", 0x59, "Y key" }, +{ "Z key", 0x5A, "Z key" }, +{ "VK_LWIN", 0x5B, "Left Windows key (Natural keyboard)" }, +{ "VK_RWIN", 0x5C, "Right Windows key (Natural keyboard)" }, +{ "VK_APPS", 0x5D, "Applications key (Natural keyboard)" }, +//{ "-", 0x5E, "Reserved" }, +{ "VK_SLEEP", 0x5F, "Computer Sleep key" }, +{ "VK_NUMPAD0", 0x60, "Numeric keypad 0 key" }, +{ "VK_NUMPAD1", 0x61, "Numeric keypad 1 key" }, +{ "VK_NUMPAD2", 0x62, "Numeric keypad 2 key" }, +{ "VK_NUMPAD3", 0x63, "Numeric keypad 3 key" }, +{ "VK_NUMPAD4", 0x64, "Numeric keypad 4 key" }, +{ "VK_NUMPAD5", 0x65, "Numeric keypad 5 key" }, +{ "VK_NUMPAD6", 0x66, "Numeric keypad 6 key" }, +{ "VK_NUMPAD7", 0x67, "Numeric keypad 7 key" }, +{ "VK_NUMPAD8", 0x68, "Numeric keypad 8 key" }, +{ "VK_NUMPAD9", 0x69, "Numeric keypad 9 key" }, +{ "VK_MULTIPLY", 0x6A, "Multiply key" }, +{ "VK_ADD", 0x6B, "Add key" }, +{ "VK_SEPARATOR", 0x6C, "Separator key" }, +{ "VK_SUBTRACT", 0x6D, "Subtract key" }, +{ "VK_DECIMAL", 0x6E, "Decimal key" }, +{ "VK_DIVIDE", 0x6F, "Divide key" }, +{ "VK_F1", 0x70, "F1 key" }, +{ "VK_F2", 0x71, "F2 key" }, +{ "VK_F3", 0x72, "F3 key" }, +{ "VK_F4", 0x73, "F4 key" }, +{ "VK_F5", 0x74, "F5 key" }, +{ "VK_F6", 0x75, "F6 key" }, +{ "VK_F7", 0x76, "F7 key" }, +{ "VK_F8", 0x77, "F8 key" }, +{ "VK_F9", 0x78, "F9 key" }, +{ "VK_F10", 0x79, "F10 key" }, +{ "VK_F11", 0x7A, "F11 key" }, +{ "VK_F12", 0x7B, "F12 key" }, +{ "VK_F13", 0x7C, "F13 key" }, +{ "VK_F14", 0x7D, "F14 key" }, +{ "VK_F15", 0x7E, "F15 key" }, +{ "VK_F16", 0x7F, "F16 key" }, +{ "VK_F17", 0x80, "F17 key" }, +{ "VK_F18", 0x81, "F18 key" }, +{ "VK_F19", 0x82, "F19 key" }, +{ "VK_F20", 0x83, "F20 key" }, +{ "VK_F21", 0x84, "F21 key" }, +{ "VK_F22", 0x85, "F22 key" }, +{ "VK_F23", 0x86, "F23 key" }, +{ "VK_F24", 0x87, "F24 key" }, +//{ "-", 0x88 - 8F, "Unassigned" }, +{ "VK_NUMLOCK", 0x90, "NUM LOCK key" }, +{ "VK_SCROLL", 0x91, "SCROLL LOCK key" }, +//{ "-", 0x88 - 8F, "Unassigned" }, +{ "VK_NUMLOCK", 0x90, "NUM LOCK key" }, +{ "VK_SCROLL", 0x91, "SCROLL LOCK key" }, +//{"-", 0x92-96,"OEM specific"}, +//{ "-", 0x97 - 9F, "Unassigned" }, +{ "VK_LSHIFT", 0xA0, "Left SHIFT key" }, +{ "VK_RSHIFT", 0xA1, "Right SHIFT key" }, +{ "VK_LCONTROL", 0xA2, "Left CONTROL key" }, +{ "VK_RCONTROL", 0xA3, "Right CONTROL key" }, +{ "VK_LMENU", 0xA4, "Left MENU key" }, +{ "VK_RMENU", 0xA5, "Right MENU key" }, +{ "VK_BROWSER_BACK", 0xA6, "Browser Back key" }, +{ "VK_BROWSER_FORWARD", 0xA7, "Browser Forward key" }, +{ "VK_BROWSER_REFRESH", 0xA8, "Browser Refresh key" }, +{ "VK_BROWSER_STOP", 0xA9, "Browser Stop key" }, +{ "VK_BROWSER_SEARCH", 0xAA, "Browser Search key" }, +{ "VK_BROWSER_FAVORITES", 0xAB, "Browser Favorites key" }, +{ "VK_BROWSER_HOME", 0xAC, "Browser Start and Home key" }, +{ "VK_VOLUME_MUTE", 0xAD, "Volume Mute key" }, +{ "VK_VOLUME_DOWN", 0xAE, "Volume Down key" }, +{ "VK_VOLUME_UP", 0xAF, "Volume Up key" }, +{ "VK_MEDIA_NEXT_TRACK", 0xB0, "Next Track key" }, +{ "VK_MEDIA_PREV_TRACK", 0xB1, "Previous Track key" }, +{ "VK_MEDIA_STOP", 0xB2, "Stop Media key" }, +{ "VK_MEDIA_PLAY_PAUSE", 0xB3, "Play/Pause Media key" }, +{ "VK_LAUNCH_MAIL", 0xB4, "Start Mail key" }, +{ "VK_LAUNCH_MEDIA_SELECT", 0xB5, "Select Media key" }, +{ "VK_LAUNCH_APP1", 0xB6, "Start Application 1 key" }, +{ "VK_LAUNCH_APP2", 0xB7, "Start Application 2 key" }, +//{ "-", 0xB8 - B9, "Reserved" }, +{ "VK_OEM_1", 0xBA, "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the \';:\' key VK_OEM_PLUS" }, +{"VK_OEM_PLUS", 0xBB, "For any country/region, the \'+\' key"}, +{ "VK_OEM_COMMA", 0xBC, "For any country/region, the \',\' key" }, +{ "VK_OEM_MINUS", 0xBD, "For any country/region, the \'-\' key" }, +{ "VK_OEM_PERIOD", 0xBE, "For any country/region, the \'.\' key" }, +{ "VK_OEM_2", 0xBF, "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the \'/?\' key" }, +{ "VK_OEM_3", 0xC0, "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the \'`~\' key" }, +//{ "-", 0xC1 - D7, "Reserved" }, +//{ "-", 0xD8 - DA, "Unassigned" }, +{ "VK_OEM_4", 0xDB, "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the \'[{\' key" }, +{ "VK_OEM_5", 0xDC, "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the \'\\|\' key" }, +{ "VK_OEM_6", 0xDD, "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the \']}\' key" }, +{ "VK_OEM_7", 0xDE, "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the \'single-quote/double-quote\' key" }, +{ "VK_OEM_8", 0xDF, "Used for miscellaneous characters; it can vary by keyboard." }, +//{ "-", 0xE0, "Reserved" }, +//{ "-", 0xE1, "OEM specific" }, +{ "VK_OEM_102", 0xE2, "Either the angle bracket key or the backslash key on the RT 102-key keyboard" }, +//{ "-", 0xE3 - E4, "OEM specific" }, +{ "VK_PROCESSKEY", 0xE5, "IME PROCESS key" }, +//{ "-", 0xE6, "OEM specific" }, +{ "VK_PACKET", 0xE7, "Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP" }, +//{ "-", 0xE8, "Unassigned" }, +// {"-",0xE6,"OEM specific"}, + {"VK_PACKET",0xE7,"Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP"}, +// {"-",0xE8,"Unassigned"}, +//{ "-", 0xE9 - F5, "OEM specific" }, +{ "VK_ATTN", 0xF6, "Attn key" }, +{ "VK_CRSEL", 0xF7, "CrSel key" }, +{ "VK_EXSEL", 0xF8, "ExSel key" }, +{ "VK_EREOF", 0xF9, "Erase EOF key" }, +{ "VK_PLAY", 0xFA, "Play key" }, +{ "VK_ZOOM", 0xFB, "Zoom key" }, +{ "VK_NONAME", 0xFC, "Reserved" }, +{ "VK_PA1", 0xFD, "PA1 key" }, +{ "VK_OEM_CLEAR", 0xFE, "Clear key" } + +}; \ No newline at end of file diff --git a/legacy/public.h b/legacy/public.h new file mode 100644 index 0000000..1e7a5d6 --- /dev/null +++ b/legacy/public.h @@ -0,0 +1,232 @@ +/*++ + +Copyright (c) Shaul Eizikovich. All rights reserved. + + THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY + KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR + PURPOSE. + +Module Name: + + public.h + +Abstract: + + Public header file for the vJoy project + Developpers that need to interface with vJoy need to include this file + +Author: + + +Environment: + + kernel mode and User mode + +Notes: + + +Revision History: + + +--*/ +#ifndef _PUBLIC_H +#define _PUBLIC_H + +// Compilation directives +#define PPJOY_MODE +#undef PPJOY_MODE // Comment-out for compatibility mode + +#ifdef PPJOY_MODE +#include "PPJIoctl.h" +#endif + +#include // Definitions for controlling GUID initialization + +// Sideband comunication with vJoy Device +//{781EF630-72B2-11d2-B852-00C04FAD5101} +DEFINE_GUID(GUID_DEVINTERFACE_VJOY, 0x781EF630, 0x72B2, 0x11d2, 0xB8, 0x52, 0x00, 0xC0, 0x4F, 0xAD, 0x51, 0x01); + +// +// Usage example: +// CreateFile(TEXT("\\\\.\\vJoy"), GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); +#ifdef PPJOY_MODE +#define DEVICENAME_STRING "PPJoyIOCTL1" +#else +#define DEVICENAME_STRING "vJoy" +#endif +#define NTDEVICE_NAME_STRING "\\Device\\"DEVICENAME_STRING +#define SYMBOLIC_NAME_STRING "\\DosDevices\\"DEVICENAME_STRING +#define DOS_FILE_NAME "\\\\.\\"DEVICENAME_STRING +#define VJOY_INTERFACE L"Device_" + +// Version parts +#define VER_X_ 0 +#define VER_H_ 2 +#define VER_M_ 0 +#define VER_L_ 5 + +#define STRINGIFY_1(x) #x +#define STRINGIFY(x) STRINGIFY_1(x) +#define PASTE(x, y) x##y +#define MAKEWIDE(x) PASTE(L,x) + +// Device Attributes +// +#define VENDOR_N_ID 0x1234 +#define PRODUCT_N_ID 0xBEAD +#define VERSION_N (VER_L_ + 0x10*VER_M_ + 0x100*VER_H_ + 0x1000*VER_X_) + +// Device Strings +// +#define VENDOR_STR_ID L"Shaul Eizikovich" +#define PRODUCT_STR_ID L"vJoy - Virtual Joystick" +#define SERIALNUMBER_STR MAKEWIDE(STRINGIFY(VER_H_)) L"." MAKEWIDE(STRINGIFY(VER_M_)) L"." MAKEWIDE(STRINGIFY(VER_L_)) + +// Function codes; +//#define LOAD_POSITIONS 0x910 +//#define GETATTRIB 0x911 +// #define GET_FFB_DATA 0x00222912 // METHOD_OUT_DIRECT + FILE_DEVICE_UNKNOWN + FILE_ANY_ACCESS +//#define SET_FFB_STAT 0x913 // METHOD_NEITHER +//#define GET_FFB_STAT 0x916 + +#define F_LOAD_POSITIONS 0x910 +#define F_GETATTRIB 0x911 +#define F_GET_FFB_DATA 0x912 +#define F_SET_FFB_STAT 0x913 +#define F_GET_FFB_STAT 0x916 +#define F_GET_DEV_INFO 0x917 +// IO Device Control codes; +#define IOCTL_VJOY_GET_ATTRIB CTL_CODE (FILE_DEVICE_UNKNOWN, GETATTRIB, METHOD_BUFFERED, FILE_WRITE_ACCESS) +#define LOAD_POSITIONS CTL_CODE (FILE_DEVICE_UNKNOWN, F_LOAD_POSITIONS, METHOD_BUFFERED, FILE_WRITE_ACCESS) +#define GET_FFB_DATA CTL_CODE (FILE_DEVICE_UNKNOWN, F_GET_FFB_DATA, METHOD_OUT_DIRECT, FILE_ANY_ACCESS) +#define SET_FFB_STAT CTL_CODE (FILE_DEVICE_UNKNOWN, F_SET_FFB_STAT, METHOD_NEITHER, FILE_ANY_ACCESS) +#define GET_FFB_STAT CTL_CODE (FILE_DEVICE_UNKNOWN, F_GET_FFB_STAT, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define GET_DEV_INFO CTL_CODE (FILE_DEVICE_UNKNOWN, F_GET_DEV_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#ifndef __HIDPORT_H__ +// Copied from hidport.h +#define IOCTL_HID_SET_FEATURE 0xB0191 +#define IOCTL_HID_WRITE_REPORT 0xB000F + + +typedef struct _HID_DEVICE_ATTRIBUTES { + + ULONG Size; + // + // sizeof (struct _HID_DEVICE_ATTRIBUTES) + // + + // + // Vendor ids of this hid device + // + USHORT VendorID; + USHORT ProductID; + USHORT VersionNumber; + USHORT Reserved[11]; + +} HID_DEVICE_ATTRIBUTES, * PHID_DEVICE_ATTRIBUTES; +#endif + +// Error levels for status report +enum ERRLEVEL {INFO, WARN, ERR, FATAL, APP}; +// Status report function prototype +#ifdef WINAPI +typedef BOOL (WINAPI *StatusMessageFunc)(void * output, TCHAR * buffer, enum ERRLEVEL level); +#endif + +/////////////////////////////////////////////////////////////// + +/////////////////////// Joystick Position /////////////////////// +// +// This structure holds data that is passed to the device from +// an external application such as SmartPropoPlus. +// +// Usage example: +// JOYSTICK_POSITION iReport; +// : +// DeviceIoControl (hDevice, 100, &iReport, sizeof(HID_INPUT_REPORT), NULL, 0, &bytes, NULL) + +/* +typedef struct _JOYSTICK_POSITION +{ + BYTE bDevice; // Index of device. 1-based. + LONG wThrottle; + LONG wRudder; + LONG wAileron; + LONG wAxisX; + LONG wAxisY; + LONG wAxisZ; + LONG wAxisXRot; + LONG wAxisYRot; + LONG wAxisZRot; + LONG wSlider; + LONG wDial; + LONG wWheel; + LONG wAxisVX; + LONG wAxisVY; + LONG wAxisVZ; + LONG wAxisVBRX; + LONG wAxisVBRY; + LONG wAxisVBRZ; + LONG lButtons; // 32 buttons: 0x00000001 means button1 is pressed, 0x80000000 -> button32 is pressed + DWORD bHats; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch + DWORD bHatsEx1; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch + DWORD bHatsEx2; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch + DWORD bHatsEx3; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch +} JOYSTICK_POSITION, *PJOYSTICK_POSITION; +*/ + +// Superset of JOYSTICK_POSITION +// Extension of JOYSTICK_POSITION with Buttons 33-128 appended to the end of the structure. +typedef struct _JOYSTICK_POSITION_V2 +{ + /// JOYSTICK_POSITION + BYTE bDevice; // Index of device. 1-based. + LONG wThrottle; + LONG wRudder; + LONG wAileron; + LONG wAxisX; + LONG wAxisY; + LONG wAxisZ; + LONG wAxisXRot; + LONG wAxisYRot; + LONG wAxisZRot; + LONG wSlider; + LONG wDial; + LONG wWheel; + LONG wAxisVX; + LONG wAxisVY; + LONG wAxisVZ; + LONG wAxisVBRX; + LONG wAxisVBRY; + LONG wAxisVBRZ; + LONG lButtons; // 32 buttons: 0x00000001 means button1 is pressed, 0x80000000 -> button32 is pressed + DWORD bHats; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch + DWORD bHatsEx1; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch + DWORD bHatsEx2; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch + DWORD bHatsEx3; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch + + /// JOYSTICK_POSITION_V2 Extenssion + LONG lButtonsEx1; // Buttons 33-64 + LONG lButtonsEx2; // Buttons 65-96 + LONG lButtonsEx3; // Buttons 97-128 +} JOYSTICK_POSITION_V2, *PJOYSTICK_POSITION_V2; + + +// HID Descriptor definitions +#define HID_USAGE_X 0x30 +#define HID_USAGE_Y 0x31 +#define HID_USAGE_Z 0x32 +#define HID_USAGE_RX 0x33 +#define HID_USAGE_RY 0x34 +#define HID_USAGE_RZ 0x35 +#define HID_USAGE_SL0 0x36 +#define HID_USAGE_SL1 0x37 +#define HID_USAGE_WHL 0x38 +#define HID_USAGE_POV 0x39 + + +#endif + + diff --git a/legacy/riovjoy2.cpp b/legacy/riovjoy2.cpp new file mode 100644 index 0000000..733ee38 --- /dev/null +++ b/legacy/riovjoy2.cpp @@ -0,0 +1,2552 @@ +// riovjoy2.cpp : This file contains the 'main' function. Program execution begins and ends there. +// + + +#include +#include +#include +#include +#include "SimpleIni.h" +#include "vjoyinterface.h" +#include "public.h" + +#define _CRT_SECURE_NO_WARNINGS +#pragma warning(disable : 4996) +#define ESC 27 + +class C232Comm +{ +private: + HANDLE m_hCom; + int m_nPort; + DCB m_dcb; + COMMTIMEOUTS m_commTimeOuts; + COMMCONFIG m_cc; + COMMPROP m_cp; +public: + C232Comm(); + virtual ~C232Comm(); + BOOL IsValid() const { return m_hCom != INVALID_HANDLE_VALUE; } + BOOL Open(int nPort, DWORD dwBaudRate = CBR_9600, BYTE dwParity = NOPARITY, BYTE bByteSize = 8, BYTE dwStopBits = ONESTOPBIT); + void Close(); + int rxCom(void* pData, int nLen); + BOOL rxComLoop(void* pData, int nLen); + int txCom(const void* pData, int nLen); + BOOL txComLoop(const void* pData, int nLen); + void locProcessCommError(); + int CommunicationConfig(HWND hWndParent); +}; +const char g_szPortFormat[] = "\\\\.\\com%d"; // fh trying to resolve C2664 compile error by explicitly converting the char[32] sz to LPCWSTR lpwsz + +class CPlasma : public C232Comm +{ +public: + DWORD m_dwStart; + int m_nOldRank; + int m_nOldScore; + enum { + ATTR_NORMAL = 0, + ATTR_HALF = 1, + ATTR_LINE = 2, + ATTR_REVERSE = 4, + ATTR_FLASH = 8, + ATTR_PROTECTED = 128 + }; + enum { PLASMA_OFF, PLASMA_ON, PLASMA_FLASH }; + + int m_nGlobalState; + // Time m_timeLastPlasma2; +public: + CPlasma() { + Open(2); + m_dwStart = GetTickCount(); + PlasmaClear(); + PlasmaCursor(CPlasma::PLASMA_OFF); + m_nOldRank = INT_MIN; + m_nOldScore = INT_MIN; + + m_nGlobalState = -1; + } + virtual ~CPlasma() { + PlasmaCursor(CPlasma::PLASMA_OFF); + PlasmaClear(); + Close(); + } +public: + void SendPacket(const BYTE* pbPacket, char nLen); + void PlasmaClear(); + + void PlasmaCursor(char n = PLASMA_OFF); + void PlasmaCursorHome(); + void PlasmaCursorX(char n); + void PlasmaCursorY(char n); + + void PlasmaFontAttr(char n); + void PlasmaFont(char n); + + void PlasmaText(const char* szText); + POINT GetFontSize(int Font); + + void PlasmaBoxDraw(RECT tag); + void PlasmaBoxFill(RECT tag); + void PlasmaPosText(const char* szText, char x = 0, char y = 0, char Attr = 0, char Font = 5); + void PlasmaScoreDraw(const char* Rank, const char* Score, BOOL bFlag); + + void DoPlasma(char nMode); +private: + void PlasmaDisplay(int Gamestate, const char* szName, const char* Rank, const char* Score); +}; + +const char* sINI{ new char[32] {"c:\\games\\RIO\\RIO.ini"} }; +const char* sGreeting{ new char[16] {"RIOvJoy v.03"} }; +const char* sPlayer{ new char[16] {"Player"} }; +const char* sDisplay{ new char[24] {"Pod PowerUp Detected"} }; +const char* newDesktop{ new char[32] {"C:\\games\\RIO\\VWE2.bmp"} }; +bool* invertX{ new bool{0} }; +bool* invertY{ new bool{0} }; +bool* invertZ{ new bool{0} }; +bool* invertXR{ new bool{0} }; +bool* invertYR{ new bool{0} }; +bool* enableZR{ new bool{0} }; +bool* invertZR{ new bool{0} }; +int* iRIO{ new int[112] {} }; + +LONG g_Throttle; +LONG g_LeftPedal; +LONG g_RightPedal; +LONG g_JoystickY; +LONG g_JoystickX; +LONG g_Rudder; +LONG g_ThrottleResult = -1L; +LONG g_HatResult = -1L; + +LONG g_ThrottleStart = INT_MIN; +LONG g_LeftPedalStart = INT_MAX; +LONG g_RightPedalStart = INT_MAX; +LONG g_JoystickXLast = 16383L; +LONG g_JoystickYLast = 16383L; +LONG g_ThrottleLast = 16383L; +LONG g_LeftPedalLast = 16383L; +LONG g_RightPedalLast = 16383L; +LONG g_RudderLast = 16838L; +LONG maxt = 0; +LONG mint = 0; +LONG maxl = 0; +LONG minl = 0; +LONG maxr = 0; +LONG minr = 0; +LONG maxx = 0; +LONG minx = 0; +LONG maxy = 0; +LONG miny = 0; +BOOL g_rawaxes = false; +bool enablecount = false; +int count = 0; +int now = GetTickCount(); +int last = GetTickCount(); +int lastAnalogEvent = GetTickCount(); + + +static int g_nOpenComState = 0; + +#define ASCII_XON 0x11 +#define ASCII_XOFF 0x13 +#define ACK_CHAR 0xFC +#define NAK_CHAR 0xFD +#define RESTART_CHAR 0xFE +#define IDLE_CHAR 0xFF + +static HANDLE g_hCom = INVALID_HANDLE_VALUE; +static OVERLAPPED wos; +static OVERLAPPED ros; +static OVERLAPPED wcos;//WaitCommEvent +static HANDLE g_hCommWatchThread = NULL; +static HANDLE g_hWatchEvent = NULL; +static HANDLE g_hLampEvent = NULL; +static DWORD g_dwThreadID; +static BYTE packetbytes[16]; +static int packetbyteremain = 0; +static int chinpacket = 0; +static int g_naButtonThrottles[8]; +static BYTE g_baRIOLengthsA[] = { + 0, // 0.CheckRequest + 0, // 1.VersionRequest + 0, // 2.AnalogRequest + 1, // 3.ResetRequest + 2, // 4.LampRequest + 2, // 5.CheckReply + 2, // 6.VersionReply + 10, // 7.AnalogReply + 1, // 8.ButtonPressed + 1, // 9.ButtonReleased + 2, // 10.KeyPressed + 2, // 11.KeyReleased + 1, // 12.TestModeChange +}; +int g_nRIOPacketCountA = (sizeof(g_baRIOLengthsA) / sizeof(g_baRIOLengthsA[0])); +BYTE* g_pbRIOLengths = NULL; +int g_nRIOPacketCount = 0; +enum RIOCommand { + rio_CheckRequest = 0x80, // 128 + rio_VersionRequest, // 129 + rio_AnalogRequest, // 130 + rio_ResetRequest, // 131 + rio_LampRequest, // 132 + rio_CheckReply, // 133 + rio_VersionReply, // 134 + rio_AnalogReply, // 135 + rio_ButtonPressed, // 136 + rio_ButtonReleased, // 137 + rio_KeyPressed, // 138 + rio_KeyReleased, // 139 + rio_TestModeChange, // 140 +}; +enum RIOStatusType { + BoardOk, + BoardMissing, + BoardBad, + LampBad, + RestartCount, + AbandonCount, + FullBufferCount +}; +enum LampState { + solid = 0, flashSlow = 1, flashMed = 2, flashFast = 3, + state1Off = 0x00, state1Dim = 0x04, state1Bright = 0x0C, + state2Off = 0x00, state2Dim = 0x10, state2Bright = 0x30, +}; +enum { + LampSolidOff = solid + state1Off + state2Off, + LampSolidDim = solid + state1Dim + state2Dim, + LampSolidBright = solid + state1Bright + state2Bright +}; +DWORD g_dwLastBytesToWrite = 0; +DWORD g_dCancelCount = 0; +BYTE g_baLastPacket[20]; +static bool _continue; + +CSimpleIniA ini = new CSimpleIni; + +/////////////////////////// +// forward declarations // +/////////////////////////// +void PrintMenu(); +bool ReadyvJoy(); +char* getCmdOption(char** begin, char** end, const std::string& option); +bool cmdOptionExists(char** begin, char** end, const std::string& option); + +BOOL SetupConnection(HANDLE hCom); +HANDLE OpenConnection(int port); +BOOL CloseConnection(); +void TransmitCommChar2(HANDLE g_hCom, int ch); +int ReadCommBlock(LPSTR lpszBlock, int nMaxLength); +BOOL WriteCommBlock(LPSTR lpByte, DWORD dwBytesToWrite); +DWORD FAR PASCAL CommWatchProc(LPSTR lpData); +short CombinePair(BYTE low_value, BYTE high_value); +void AnalogEvent(BYTE* pData); +void ButtonEvent(BYTE* pData); +void KeypadEvent(BYTE* pData); +BOOL SendPacket(const BYTE* ba, int length); +BOOL SendCommand(const BYTE* pbPacket); +BOOL SetLamp(int lampNumber, int state); +void AnalogAllReset(); +void GeneralReset(); +void ResetThrottle(); +void ResetLeftPedal(); +void ResetRightPedal(); +void ResetVerticalJoystick(); +void ResetHorizontalJoystick(); +void RequestCheck(); +void CheckReply(BYTE* pData); +const char* GetLampName(int lamp_number); +const char* GetBoardName(int board_number); +void RequestVersion(); +void VersionReply(BYTE* pData); +void RequestAnalogUpdate(); +void UpdateJoystick(); +void UpdateThrottle(); +void UpdatePadal(); +void TestModeChange(BYTE* pData); +void RIOcmd(unsigned char ucValue); +static void Press_V2(unsigned char iAddress); +static void Release_V2(unsigned char iAddress); +static void ModKeySHIFT(bool bIsPressed); +static void ModKeyCTRL(bool bIsPressed); +static void ModKeyALT(bool bIsPressed); +static void Key(unsigned char ucwVk, bool bIsPressed, bool bIsExtended); +static void Mouse(unsigned char ucValue, bool bIsPressed); + +/////////////////// +// Main function // +/////////////////// +int main(int argc, char** argv) +{ + + _continue = true; // the show stopper set to false and watch the world burn + std::cout << "Useage: riovjoy.exe -f [ini file path] -p [\"Pilot\"] [console]\n"; + + // check the command line for any arguments + if (cmdOptionExists(argv, argv + argc, "console")) + { + std::cout << "console enabled" << std::endl; + } + else { + HWND hWnd = GetConsoleWindow(); + ShowWindow(hWnd, SW_MINIMIZE); + } + + char* inifilename = getCmdOption(argv, argv + argc, "-f"); + if (inifilename) + { + std::cout << "Will try " << inifilename << std::endl; + sINI = inifilename; + } + else { + std::cout << "Will try default C:\\games\\RIO\\RIO.ini\n"; + } + + char* oPlayer{ new char[16] {} }; + oPlayer = getCmdOption(argv, argv + argc, "-p"); + if (oPlayer) + { + std::cout << "player name supplied: " << oPlayer << std::endl; + sPlayer = oPlayer; + } + else { + std::cout << "no player name supplied\n"; + } + + //Read in INI config data + switch (ini.LoadFile(sINI)) + { + case SI_OK: + std::cout << "Found: " << sINI << std::endl; + break; + case SI_UPDATED: + std::cout << "updated INI file\n"; + break; + case SI_INSERTED: + std::cout << "A new value was inserted\n"; + break; + case SI_FAIL: + std::cout << "INI Generic failure\n"; + break; + case SI_NOMEM: + std::cout << "Ran Out of memory error loading INI\n"; + break; + case SI_FILE: + std::cout << "INI File not found\n"; + break; + }; + + // set all of the varables + newDesktop = ini.GetValue("Desktop", "File", "C:\\games\\RIO\\VWE2.bmp", 0); + sGreeting = ini.GetValue("Plasma", "Greeting", "RIOvJoy2 v.03", 0); + *invertX = ini.GetBoolValue("JoyStick", "invertX", false); + *invertY = ini.GetBoolValue("JoyStick", "invertY", false); + *invertZ = ini.GetBoolValue("JoyStick", "invertZ", false); + *invertXR = ini.GetBoolValue("JoyStick", "invertXR", false); + *invertYR = ini.GetBoolValue("JoyStick", "invertYR", false); + *enableZR = ini.GetBoolValue("JoyStick", "enableZR", true); + *invertZR = ini.GetBoolValue("JoyStick", "invertZR", false); + iRIO[0] = ini.GetLongValue("Buttons", "RIO00", 0x8049); + iRIO[1] = ini.GetLongValue("Buttons", "RIO01", 0x805A); + iRIO[2] = ini.GetLongValue("Buttons", "RIO02", 0x8055); + iRIO[3] = ini.GetLongValue("Buttons", "RIO03", 0x804C); + iRIO[4] = ini.GetLongValue("Buttons", "RIO04", 0x8926); + iRIO[5] = ini.GetLongValue("Buttons", "RIO05", 0x8928); + iRIO[6] = ini.GetLongValue("Buttons", "RIO06", 0x8927); + iRIO[7] = ini.GetLongValue("Buttons", "RIO07", 0x8925); + iRIO[8] = ini.GetLongValue("Buttons", "RIO08", 0x8051); + iRIO[9] = ini.GetLongValue("Buttons", "RIO09", 0x8059); + iRIO[10] = ini.GetLongValue("Buttons", "RIO0A", 0x8045); + iRIO[11] = ini.GetLongValue("Buttons", "RIO0B", 0x8052); + iRIO[12] = ini.GetLongValue("Buttons", "RIO0C", 0x8823); + iRIO[13] = ini.GetLongValue("Buttons", "RIO0D", 0x80BE); + iRIO[14] = ini.GetLongValue("Buttons", "RIO0E", 0x80BC); + iRIO[15] = ini.GetLongValue("Buttons", "RIO0F", 0x8824); + iRIO[16] = ini.GetLongValue("Buttons", "RIO10", 0xC000); + iRIO[17] = ini.GetLongValue("Buttons", "RIO11", 0xC001); + iRIO[18] = ini.GetLongValue("Buttons", "RIO12", 0xC002); + iRIO[19] = ini.GetLongValue("Buttons", "RIO13", 0xC003); + iRIO[20] = ini.GetLongValue("Buttons", "RIO14", 0xC004); + iRIO[21] = ini.GetLongValue("Buttons", "RIO15", 0x8009); + iRIO[22] = ini.GetLongValue("Buttons", "RIO16", 0x0); + iRIO[23] = ini.GetLongValue("Buttons", "RIO17", 0x0); + iRIO[24] = ini.GetLongValue("Buttons", "RIO18", 0x800D); + iRIO[25] = ini.GetLongValue("Buttons", "RIO19", 0x8012); + iRIO[26] = ini.GetLongValue("Buttons", "RIO1A", 0x8011); + iRIO[27] = ini.GetLongValue("Buttons", "RIO1B", 0x8010); + iRIO[28] = ini.GetLongValue("Buttons", "RIO1C", 0x88AF); + iRIO[29] = ini.GetLongValue("Buttons", "RIO1D", 0x88AE); + iRIO[30] = ini.GetLongValue("Buttons", "RIO1E", 0x0); + iRIO[31] = ini.GetLongValue("Buttons", "RIO1F", 0x0); + iRIO[32] = ini.GetLongValue("Buttons", "RIO20", 0x8827); + iRIO[33] = ini.GetLongValue("Buttons", "RIO21", 0x8828); + iRIO[34] = ini.GetLongValue("Buttons", "RIO22", 0x8826); + iRIO[35] = ini.GetLongValue("Buttons", "RIO23", 0x8825); + iRIO[36] = ini.GetLongValue("Buttons", "RIO24", 0x804E); + iRIO[37] = ini.GetLongValue("Buttons", "RIO25", 0x804D); + iRIO[38] = ini.GetLongValue("Buttons", "RIO26", 0x804C); + iRIO[39] = ini.GetLongValue("Buttons", "RIO27", 0x804B); + iRIO[40] = ini.GetLongValue("Buttons", "RIO28", 0x8056); + iRIO[41] = ini.GetLongValue("Buttons", "RIO29", 0x8055); + iRIO[42] = ini.GetLongValue("Buttons", "RIO2A", 0x8054); + iRIO[43] = ini.GetLongValue("Buttons", "RIO2B", 0x8053); + iRIO[44] = ini.GetLongValue("Buttons", "RIO2C", 0x804A); + iRIO[45] = ini.GetLongValue("Buttons", "RIO2D", 0x8049); + iRIO[46] = ini.GetLongValue("Buttons", "RIO2E", 0x8048); + iRIO[47] = ini.GetLongValue("Buttons", "RIO2F", 0x8047); + iRIO[48] = ini.GetLongValue("Buttons", "RIO30", 0x805A); + iRIO[49] = ini.GetLongValue("Buttons", "RIO31", 0x8059); + iRIO[50] = ini.GetLongValue("Buttons", "RIO32", 0x8058); + iRIO[51] = ini.GetLongValue("Buttons", "RIO33", 0x8057); + iRIO[52] = ini.GetLongValue("Buttons", "RIO34", 0x8052); + iRIO[53] = ini.GetLongValue("Buttons", "RIO35", 0x8051); + iRIO[54] = ini.GetLongValue("Buttons", "RIO36", 0x8050); + iRIO[55] = ini.GetLongValue("Buttons", "RIO37", 0x804F); + iRIO[56] = ini.GetLongValue("Buttons", "RIO38", 0x4000); + iRIO[57] = ini.GetLongValue("Buttons", "RIO39", 0x4001); + iRIO[58] = ini.GetLongValue("Buttons", "RIO3A", 0x4002); + iRIO[59] = ini.GetLongValue("Buttons", "RIO3B", 0x4003); + iRIO[60] = ini.GetLongValue("Buttons", "RIO3C", 0x4004); + iRIO[61] = ini.GetLongValue("Buttons", "RIO3D", 0x801B); + iRIO[62] = ini.GetLongValue("Buttons", "RIO3E", 0x4005); + iRIO[63] = ini.GetLongValue("Buttons", "RIO3F", 0x1008); + iRIO[64] = ini.GetLongValue("Buttons", "RIO40", 0x1001); + iRIO[65] = ini.GetLongValue("Buttons", "RIO41", 0x2002); + iRIO[66] = ini.GetLongValue("Buttons", "RIO42", 0x2000); + iRIO[67] = ini.GetLongValue("Buttons", "RIO43", 0x2001); + iRIO[68] = ini.GetLongValue("Buttons", "RIO44", 0x2003); + iRIO[69] = ini.GetLongValue("Buttons", "RIO45", 0x1004); + iRIO[70] = ini.GetLongValue("Buttons", "RIO46", 0x1003); + iRIO[71] = ini.GetLongValue("Buttons", "RIO47", 0x1002); + iRIO[72] = ini.GetLongValue("Buttons", "RIO48", 0x0); + iRIO[73] = ini.GetLongValue("Buttons", "RIO49", 0x0); + iRIO[74] = ini.GetLongValue("Buttons", "RIO4A", 0x0); + iRIO[75] = ini.GetLongValue("Buttons", "RIO4B", 0x0); + iRIO[76] = ini.GetLongValue("Buttons", "RIO4C", 0x0); + iRIO[77] = ini.GetLongValue("Buttons", "RIO4D", 0x0); + iRIO[78] = ini.GetLongValue("Buttons", "RIO4E", 0x0); + iRIO[79] = ini.GetLongValue("Buttons", "RIO4F", 0x0); + iRIO[80] = ini.GetLongValue("Buttons", "RIO50", 0x30); + iRIO[81] = ini.GetLongValue("Buttons", "RIO51", 0x31); + iRIO[82] = ini.GetLongValue("Buttons", "RIO52", 0x32); + iRIO[83] = ini.GetLongValue("Buttons", "RIO53", 0x33); + iRIO[84] = ini.GetLongValue("Buttons", "RIO54", 0x34); + iRIO[85] = ini.GetLongValue("Buttons", "RIO55", 0x35); + iRIO[86] = ini.GetLongValue("Buttons", "RIO56", 0x36); + iRIO[87] = ini.GetLongValue("Buttons", "RIO57", 0x37); + iRIO[88] = ini.GetLongValue("Buttons", "RIO58", 0x38); + iRIO[89] = ini.GetLongValue("Buttons", "RIO59", 0x39); + iRIO[90] = ini.GetLongValue("Buttons", "RIO5A", 0x41); + iRIO[91] = ini.GetLongValue("Buttons", "RIO5B", 0x42); + iRIO[92] = ini.GetLongValue("Buttons", "RIO5C", 0x43); + iRIO[93] = ini.GetLongValue("Buttons", "RIO5D", 0x44); + iRIO[94] = ini.GetLongValue("Buttons", "RIO5E", 0x45); + iRIO[95] = ini.GetLongValue("Buttons", "RIO5F", 0x46); + iRIO[96] = ini.GetLongValue("Buttons", "RIO60", 0x1051); + iRIO[97] = ini.GetLongValue("Buttons", "RIO61", 0x1052); + iRIO[98] = ini.GetLongValue("Buttons", "RIO62", 0x1053); + iRIO[99] = ini.GetLongValue("Buttons", "RIO63", 0x1054); + iRIO[100] = ini.GetLongValue("Buttons", "RIO64", 0x1055); + iRIO[101] = ini.GetLongValue("Buttons", "RIO65", 0x1056); + iRIO[102] = ini.GetLongValue("Buttons", "RIO66", 0x1057); + iRIO[103] = ini.GetLongValue("Buttons", "RIO67", 0x1058); + iRIO[104] = ini.GetLongValue("Buttons", "RIO68", 0x1059); + iRIO[105] = ini.GetLongValue("Buttons", "RIO69", 0x105A); + iRIO[106] = ini.GetLongValue("Buttons", "RIO6A", 0x105B); + iRIO[107] = ini.GetLongValue("Buttons", "RIO6B", 0x105C); + iRIO[108] = ini.GetLongValue("Buttons", "RIO6C", 0x105D); + iRIO[109] = ini.GetLongValue("Buttons", "RIO6D", 0x105E); + iRIO[110] = ini.GetLongValue("Buttons", "RIO6E", 0x105F); + iRIO[111] = ini.GetLongValue("Buttons", "RIO6F", 0x1060); + + // if the Vjoy setup fails set _continue to false and let the program die. + if (!ReadyvJoy()) { +// std::cout << "vJoy setup failed, exiting\n"; +// _continue = false; +// return 1; + } + + //start the RIO shinanigins + + OpenConnection(1); + RequestVersion(); + RequestCheck(); + + + Sleep(1000); // to allow the comread thread to get set up and rolling the analog updates + for (int b = 0; b < 72; b++) { + if (iRIO[b] & 0x8000) + SetLamp(b, LampSolidDim); + } + + + // try to open com2 to plasma display, else no display for you + CPlasma* _Plasma = new CPlasma; + if (_Plasma->IsValid()) { + std::cout << "Com2 open\n"; + _Plasma->PlasmaPosText(sDisplay); + std::string playergreeting = std::string(sGreeting) + "," + std::string(sPlayer); + Sleep(3000); + _Plasma->PlasmaClear(); + _Plasma->PlasmaPosText(playergreeting.c_str()); + } + else { + std::cout << "No Display for you" << std::endl; + } + + ///////////////////////////////////////////// + // code block to check the desktop image // + ///////////////////////////////////////////// + //get current desktop image, store for replacement + wchar_t * worgDesktop = new wchar_t[MAX_PATH]; + SystemParametersInfoW(SPI_GETDESKWALLPAPER, MAX_PATH, worgDesktop, 0); + //set desktop from ini + int wchar_numnew = MultiByteToWideChar( CP_UTF8 , 0 , newDesktop , -1 , NULL , 0 ); + wchar_t* wnewDesktop = new wchar_t[wchar_numnew]; + MultiByteToWideChar(CP_UTF8, 0, newDesktop, -1, wnewDesktop, wchar_numnew); + bool setnewdesktop = SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, wnewDesktop, SPIF_UPDATEINIFILE); + wnewDesktop = nullptr; + ///////////////////////////////////////////// + + //Main while wait loop + while (_continue) // wait loop + { + + PrintMenu(); + + } + + // quit signal clean up + // close com2 to plasma + if (_Plasma->IsValid()) { + std::cout << "Closing Com2 to Plasma\n"; + _Plasma->~CPlasma(); + } + + // end RIO + GeneralReset(); + CloseConnection(); + + + // relinquish vjoy device + RelinquishVJD(1); + std::cout << "Relinquished vJoy Device\n"; + + // set desktop back to original + SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, worgDesktop, SPIF_UPDATEINIFILE); + worgDesktop = nullptr; + + return 0; +} + +///////////////// +// Functions // +///////////////// + +void PrintMenu() +{ + char myChoice = 'Z'; + + std::cout << "********** Menu **********" << std::endl; + std::cout << "(0): Reset all analog axes" << std::endl; + std::cout << "(1): Reset Throttle analog axes" << std::endl; + std::cout << "(2): Reset LeftPedal analog axes" << std::endl; + std::cout << "(3): Reset RightPedal analog axes" << std::endl; + std::cout << "(4): Reset VerticalJoystick analog axes" << std::endl; + std::cout << "(5): Reset HorizontalJoystick analog axes" << std::endl; + std::cout << "(6): Reset Digital" << std::endl; + std::cout << "(7): RequestVersion and status" << std::endl; + std::cout << "(8): enable/disable axes readout" << std::endl; + std::cout << "(9): enable/disable analog Frequency readout" << std::endl; + std::cout << "(Q): quit" << std::endl; + std::cin >> myChoice; + + switch (myChoice) + { + case '0': + RIOcmd(0); + break; + case '1': + RIOcmd(1); + break; + case '2': + RIOcmd(2); + break; + case '3': + RIOcmd(3); + break; + case '4': + RIOcmd(4); + break; + case '5': + RIOcmd(5); + break; + case '6': + RIOcmd(6); + break; + case '7': + RIOcmd(7); + break; + case '8': + RIOcmd(8); + break; + case '9': + RIOcmd(9); + break; + case 'Q': + case 'q': + _continue = false; + std::cout << "Closing Application" << std::endl; + break; + default: + std::cout << "ERROR! You have selected an invalid choice." << std::endl; + break; + } +} +bool ReadyvJoy() // make ready the vJoy interface +{ + BYTE id = 1; // ID of the target vjoy device (Default is 1) + UINT iInterface = 1; // Default target vJoy device + // WORD VerDll, VerDrv; + + if (!vJoyEnabled()) + { + std::cout << "vJoy driver not enabled: Failed Getting vJoy attributes.\n"; + } + else + { + // std::cout << "vJoyEnabled on this system\n"; + }; + + //if (!DriverMatch(&VerDll, &VerDrv)) { + // std::cout << "vJoy Driver version " << VerDrv << " does not match vJoyInterface DLL version " << VerDll << std::endl; + //} + //else { + // std::cout << "Driver and DLL match version" << VerDrv; + //}; + + // Get the state of the requested device + VjdStat status = GetVJDStatus(iInterface); + switch (status) + { + case VJD_STAT_OWN: + // std::cout << "vJoy Device " << iInterface << " is already owned by this feeder"; + break; + case VJD_STAT_FREE: + // std::cout << "vJoy Device " << iInterface << " is free"; + break; + case VJD_STAT_BUSY: + std::cout << "vJoy Device " << iInterface << " is already owned by another feeder Cannot continue"; + return false; + break; + case VJD_STAT_MISS: + std::cout << "vJoy Device " << iInterface << " is not installed or disabled\nCannot continue"; + return false; + break; + default: + std::cout << "vJoy Device " << iInterface << " general error\nCannot continue"; + return false; + break; + }; + // Check which axes are supported + BOOL AxisX = GetVJDAxisExist(iInterface, HID_USAGE_X); + BOOL AxisY = GetVJDAxisExist(iInterface, HID_USAGE_Y); + BOOL AxisZ = GetVJDAxisExist(iInterface, HID_USAGE_Z); + BOOL AxisRX = GetVJDAxisExist(iInterface, HID_USAGE_RX); + BOOL AxisRY = GetVJDAxisExist(iInterface, HID_USAGE_RY); + BOOL AxisRZ = GetVJDAxisExist(iInterface, HID_USAGE_RZ); + // Get the number of buttons supported and hats by this vJoy device + int nButtons = GetVJDButtonNumber(iInterface); + int DiscPovNumber = GetVJDDiscPovNumber(iInterface); + + if (!AxisX || !AxisY || !AxisZ || !AxisRX || !AxisRY || !AxisRZ || DiscPovNumber != 1 || nButtons != 96) { + std::cout << "vJoy Interface not corectly setup, Please enable X,Y,Z,RX,RY,RZ, one descrete Pov Hat, and 96 buttons"; + // return false; + } + + // Acquire the target + if ((status == VJD_STAT_OWN) || ((status == VJD_STAT_FREE) && (!AcquireVJD(iInterface)))) + { + std::cout << "Failed to acquire vJoy device, exiting"; + return false; + } + else + { + std::cout << "Acquired: vJoy device." << std::endl; + ResetVJD(1); + return true; + } +} +char* getCmdOption(char** begin, char** end, const std::string& option) +{ + char** itr = std::find(begin, end, option); + if (itr != end && ++itr != end) + { + return *itr; + } + return 0; +} +bool cmdOptionExists(char** begin, char** end, const std::string& option) +{ + return std::find(begin, end, option) != end; +} +BOOL SetupConnection(HANDLE hCom) +{ + DCB dcb; + BOOL fRetVal; + dcb.DCBlength = sizeof(DCB); + + GetCommState(hCom, &dcb); + dcb.BaudRate = CBR_9600; + dcb.ByteSize = 8; + dcb.Parity = 0; + dcb.StopBits = 0; + dcb.fOutxDsrFlow = 0; + dcb.fDtrControl = DTR_CONTROL_ENABLE; + dcb.fOutxCtsFlow = 0; + dcb.fRtsControl = RTS_CONTROL_ENABLE; + dcb.fInX = 0; + dcb.fOutX = 0; + dcb.XonChar = ASCII_XON; + dcb.XoffChar = ASCII_XOFF; + dcb.XonLim = 100; + dcb.XoffLim = 100; + dcb.fBinary = TRUE; + dcb.fParity = TRUE; + + fRetVal = SetCommState(hCom, &dcb); + if (fRetVal == 0)return FALSE; + + + // get any early notifications + fRetVal = SetCommMask(hCom, EV_RXCHAR); + if (fRetVal == 0)return FALSE; + + // setup device buffers + fRetVal = SetupComm(hCom, 2, 2); + if (fRetVal == 0)return FALSE; + + // purge any information in the buffer + fRetVal = PurgeComm(hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR); + if (fRetVal == 0)return FALSE; + + // set up for overlapped I/O + COMMTIMEOUTS CommTimeOuts = { 0, }; + CommTimeOuts.ReadIntervalTimeout = 1; + CommTimeOuts.ReadTotalTimeoutMultiplier = 1; + CommTimeOuts.ReadTotalTimeoutConstant = 0; + CommTimeOuts.WriteTotalTimeoutMultiplier = 0; + CommTimeOuts.WriteTotalTimeoutConstant = 0; + fRetVal = SetCommTimeouts(hCom, &CommTimeOuts); + if (fRetVal == 0)return FALSE; + return TRUE; +} +HANDLE OpenConnection(int port) +{ + g_pbRIOLengths = &g_baRIOLengthsA[0]; + g_nRIOPacketCount = g_nRIOPacketCountA; + + + //port: 1~n + //char portname[8]; + //wsprintf(portname, "COM%d", port); + + //const char* portprefix = "COM"; + //LPWSTR portname = std::strcat(portprefix, port); + + + DWORD dwFAs = FILE_ATTRIBUTE_NORMAL; + + dwFAs |= FILE_FLAG_OVERLAPPED; + + //g_hCom = CreateFile( portname, GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING, dwFAs, NULL ); + g_hCom = CreateFile(L"COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, dwFAs, NULL); + if (g_hCom != INVALID_HANDLE_VALUE) { + if (SetupConnection(g_hCom)) { + ros.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + wos.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + g_hWatchEvent = CreateEvent(0, 0, 0, 0); + g_hLampEvent = CreateEvent(0, FALSE, 0, 0); + g_hCommWatchThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)CommWatchProc, NULL, CREATE_SUSPENDED, &g_dwThreadID); + if (g_hCommWatchThread) { + //"Normally, were produced by Thread." + ////////////////////////////////////////////// + //All OK + //Exit Point <====== + EscapeCommFunction(g_hCom, SETDTR); + Sleep(50); + EscapeCommFunction(g_hCom, CLRDTR); + Sleep(1000); + SetThreadPriority(g_hCommWatchThread, THREAD_PRIORITY_TIME_CRITICAL); + ResumeThread(g_hCommWatchThread); + g_nOpenComState = 1; + + return g_hCom; + } + } + CloseConnection(); + } + + return INVALID_HANDLE_VALUE; +} +BOOL CloseConnection() +{ + if (g_hCom != INVALID_HANDLE_VALUE) { + SetCommMask(g_hCom, 0); + + //Terminate Watch Thread + if (g_hCommWatchThread) { + SetEvent(g_hWatchEvent); + WaitForSingleObject(g_hCommWatchThread, 1000 /*INFINITE*/); //comwatch thread not responding to temination signal + g_hCommWatchThread = NULL; + } + + if (g_hWatchEvent) { + CloseHandle(g_hWatchEvent); + g_hWatchEvent = NULL; + } + + if (g_hLampEvent) { + CloseHandle(g_hLampEvent); + g_hLampEvent = NULL; + } + + EscapeCommFunction(g_hCom, CLRDTR); + + // purge any outstanding reads/writes and close device handle + PurgeComm(g_hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR); + CloseHandle(g_hCom); + g_hCom = INVALID_HANDLE_VALUE; + + // clean up event objects + + if (ros.hEvent) { + CloseHandle(ros.hEvent); + ros.hEvent = NULL; + } + if (wos.hEvent) { + CloseHandle(wos.hEvent); + wos.hEvent = NULL; + } + g_nOpenComState = 0; + } + + return TRUE; + +} +void TransmitCommChar2(HANDLE g_hCom, int ch) +{ + TransmitCommChar(g_hCom, (char)ch); +} +int ReadCommBlock(LPSTR lpszBlock, int nMaxLength) +{ + BOOL fReadStat; + COMSTAT ComStat; + DWORD dwErrorFlags; + DWORD dwLength; + DWORD dwLength2; + DWORD dwError; + + // only try to read number of bytes in queue + ClearCommError(g_hCom, &dwErrorFlags, &ComStat); + dwLength = __min((DWORD)nMaxLength, ComStat.cbInQue); + dwLength2 = __min((DWORD)nMaxLength, ComStat.cbInQue); + + if (dwLength > 0) { + fReadStat = ReadFile(g_hCom, lpszBlock, dwLength, &dwLength2, &ros); + + for (int i = 0; i < (int)dwLength; i++) { + + int ch = (BYTE)lpszBlock[i]; + + + //"Loops as received letters". + //"Currently there is no packet receiving .. .. The state can come any control characters ." + + if (packetbyteremain != 0) { + //"The letters arrived for the packet .. get the rest of the characters ." + if (ch & 0x80) { + packetbyteremain = 0; + chinpacket = 0; + continue; + } + packetbyteremain--; + packetbytes[chinpacket] = ch; + chinpacket++; + if (packetbyteremain == 0) { + //"A packet was completed . ... Respond immediately arrived ." + chinpacket--; // exclude check byte + int packettype = packetbytes[0]; + BYTE bCheckByte = 0; + for (int kkk = 0; kkk < chinpacket; kkk++) { + bCheckByte += packetbytes[kkk] & 0x7f; + } + static bool s_bool = true; + if (s_bool || (bCheckByte & 0x7f) == packetbytes[chinpacket]) { + switch (packettype) { + //PC to RIO + case rio_CheckRequest: + case rio_VersionRequest: + case rio_AnalogRequest: + case rio_ResetRequest: + case rio_LampRequest: + //RIO to PC + case rio_CheckReply: + if (ComStat.cbOutQue == 0) + TransmitCommChar2(g_hCom, ACK_CHAR); + CheckReply(packetbytes); + break; + case rio_VersionReply: + if (ComStat.cbOutQue == 0) + TransmitCommChar2(g_hCom, ACK_CHAR); + VersionReply(packetbytes); + break; + case rio_TestModeChange: + if (ComStat.cbOutQue == 0) + TransmitCommChar2(g_hCom, ACK_CHAR); + TestModeChange(packetbytes); + break; + case rio_AnalogReply: + if (ComStat.cbOutQue == 0) + TransmitCommChar2(g_hCom, ACK_CHAR); + AnalogEvent(packetbytes); + break; + case rio_ButtonPressed: + case rio_ButtonReleased: + if (ComStat.cbOutQue == 0) + TransmitCommChar2(g_hCom, ACK_CHAR); + ButtonEvent(packetbytes); + break; + case rio_KeyPressed: + case rio_KeyReleased: + if (ComStat.cbOutQue == 0) + TransmitCommChar2(g_hCom, ACK_CHAR); + KeypadEvent(packetbytes); + + + } + } + else { + if (ComStat.cbOutQue == 0) { + if ((packettype == rio_ButtonPressed) || (packettype == rio_ButtonReleased)) + TransmitCommChar2(g_hCom, NAK_CHAR); + else + TransmitCommChar2(g_hCom, ACK_CHAR); + } + } + // TransmitCommChar2(g_hCom,0xFC); + // WriteTTYBlock(hWnd,"|",1); + chinpacket = 0; + + //packetbytes"Clear the buffer." + } + else { + //"Packet has not yet arrived . The characters do nothing." + ; + } + } + else { + chinpacket = 0; + if ((rio_CheckRequest <= ch) && (ch < (rio_CheckRequest + g_nRIOPacketCount))) { + packetbyteremain = g_pbRIOLengths[ch - rio_CheckRequest] + 1; + chinpacket = 0; + packetbytes[chinpacket] = ch; + chinpacket++; + } + else { + WriteCommBlock(NULL, ch); + } + } + }//for(int i=0;i<(int)dwLength;i++) + + + //"After awards" + if (!fReadStat) { + if (GetLastError() == ERROR_IO_PENDING) { + while (!GetOverlappedResult(g_hCom, &ros, &dwLength, TRUE)) { + dwError = GetLastError(); + if (dwError == ERROR_IO_INCOMPLETE) + // normal result if not finished + continue; + else { + // an error occurred, try to recover + ClearCommError(g_hCom, &dwErrorFlags, &ComStat); + break; + } + } + } + else { + // some other error occurred + dwLength = 0; + ClearCommError(g_hCom, &dwErrorFlags, &ComStat); + } + } + } + return dwLength; +} +BOOL WriteCommBlock(LPSTR lpByte, DWORD dwBytesToWrite) +{ + if (lpByte == NULL) { + switch (dwBytesToWrite) { + case ACK_CHAR: + g_dwLastBytesToWrite = 0; + break; + case NAK_CHAR: + if (g_dwLastBytesToWrite != 0) { + if (g_baLastPacket[0] == rio_LampRequest) { + } + g_dwLastBytesToWrite = 0; + } + break; + case RESTART_CHAR: + break; + case IDLE_CHAR: + break; + default: + break; + } + return FALSE; + } + //Normal Variables + BOOL fWriteStat; + DWORD dwBytesWritten; + DWORD dwBytesSent = 0; + //Error Report + DWORD dwErrorFlags; + COMSTAT ComStat; + + if (g_dwLastBytesToWrite == 0) { + g_dCancelCount = 0; + // g_dwLastBytesToWrite = dwBytesToWrite; + memcpy(g_baLastPacket, lpByte, dwBytesToWrite); + } + else { + if (lpByte[0] == rio_LampRequest) { + } + if (++g_dCancelCount >= 5) { + g_dwLastBytesToWrite = 0; + } + return FALSE; + } + fWriteStat = WriteFile(g_hCom, lpByte, dwBytesToWrite, &dwBytesWritten, &wos); + + if (fWriteStat == FALSE) { + if (GetLastError() == ERROR_IO_PENDING) { + while (!GetOverlappedResult(g_hCom, &wos, &dwBytesWritten, TRUE)) { + if (GetLastError() == ERROR_IO_INCOMPLETE) { + dwBytesSent += dwBytesWritten; + Sleep(0);//Yield the process to the others + } + else { + ClearCommError(g_hCom, &dwErrorFlags, &ComStat); + g_dwLastBytesToWrite = 0; + return FALSE; + } + } + } + else { + ClearCommError(g_hCom, &dwErrorFlags, &ComStat); + g_dwLastBytesToWrite = 0; + return FALSE; + } + } + + return TRUE; +} +DWORD FAR PASCAL CommWatchProc(LPSTR lpData) +{ + wcos.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + HANDLE events[3] = { wcos.hEvent,g_hWatchEvent,g_hLampEvent }; + + while (1) { + DWORD dwEvtMask = 0; + + WaitCommEvent(g_hCom, &dwEvtMask, &wcos); + + DWORD ret = WaitForMultipleObjects(3, events, FALSE, 55 ); // this timeout value is the defaultwait for requesting an analog update + if (ret == WAIT_OBJECT_0) { + //An Comm Event has arrived. + DWORD bytesread; + + GetOverlappedResult(g_hCom, &wcos, &bytesread, FALSE); + + BYTE abIn[16]; + ReadCommBlock((LPSTR)abIn, 16); + //((dwEvtMask & EV_RXCHAR) == EV_RXCHAR) + + } + else if (ret == WAIT_OBJECT_0 + 1) { + //Terminate This Thread. + goto terminate; + } + else if (ret == WAIT_OBJECT_0 + 2) { + //g_hLampEvent is set. +// g_pRIOMain->RunMain(); + } + else if (ret == WAIT_FAILED) { + //can't be reached here.!!! + //break; + } + else if (ret == WAIT_TIMEOUT) { + if (packetbyteremain == 0) { + int currenttick = GetTickCount(); + int timeouttick = lastAnalogEvent + 5000; + if (timeouttick < currenttick) { // more than 5000ms since last AnalogEvent was seen send digital reset to try to recover + std::cout << "more than 1000ms since last AnalogEvent was seen send digital reset to try to recover" << std::endl; + std::cout << "timeouttick:currenttick " << timeouttick << ":" << currenttick << std::endl; + RIOcmd(6); + } + + RequestAnalogUpdate(); + + } + else { + } + } + } +terminate: + // get rid of event handle + + CloseHandle(wcos.hEvent); + return(TRUE); +} +short CombinePair(BYTE low_value, BYTE high_value) +{ + short result; + result = (short)(((short)(low_value & 0x7F)) | (((short)high_value) << 7)); + if (result & 0x2000) + { + result |= ~0x3FFF; + } + + return result; +} +void AnalogEvent(BYTE* pData) +{ + + for (int i = 1; i <= 10; i++) { + if (pData[i] == 0xFE) { + //AnalogAllReset (); + return; + } + } + + g_Throttle = CombinePair(pData[1], pData[2]); + g_LeftPedal = CombinePair(pData[3], pData[4]); + g_RightPedal = CombinePair(pData[5], pData[6]); + g_JoystickY = CombinePair(pData[7], pData[8]); + g_JoystickX = CombinePair(pData[9], pData[10]); + + maxt = (g_Throttle > maxt) ? g_Throttle : maxt; + mint = (g_Throttle < mint) ? g_Throttle : mint; + maxl = (g_LeftPedal > maxl) ? g_LeftPedal : maxl; + minl = (g_LeftPedal < minl) ? g_LeftPedal : minl; + maxr = (g_RightPedal > maxr) ? g_RightPedal : maxr; + minr = (g_RightPedal < minr) ? g_RightPedal : minr; + maxx = (g_JoystickX > maxx) ? g_JoystickX : maxx; + minx = (g_JoystickX < minx) ? g_JoystickX : minx; + maxy = (g_JoystickY > maxy) ? g_JoystickY : maxy; + miny = (g_JoystickY < miny) ? g_JoystickY : miny; + lastAnalogEvent = GetTickCount(); + if (g_rawaxes) { + std::cout << "min:cur:max" << + " T:" << std::setw(4) << mint << ":" << std::setw(4) << g_Throttle << ":" << std::setw(4) << maxt << + " L:" << std::setw(4) << minl << ":" << std::setw(4) << g_LeftPedal << ":" << std::setw(4) << maxl << + " R:" << std::setw(4) << minr << ":" << std::setw(4) << g_RightPedal << ":" << std::setw(4) << maxr << + " Y:" << std::setw(4) << miny << ":" << std::setw(4) << g_JoystickY << ":" << std::setw(4) << maxy << + " X:" << std::setw(4) << minx << ":" << std::setw(4) << g_JoystickX << ":" << std::setw(4) << maxx << + ":" << std::endl; + } + UpdateJoystick(); + UpdateThrottle(); + UpdatePadal(); +} +void ButtonEvent(BYTE* pData) +{ + + BYTE state = pData[0]; + BYTE index = pData[1]; + + switch (state) + { + case rio_ButtonPressed: + Press_V2(index); + break; + case rio_ButtonReleased: + Release_V2(index); + break; + default: + break; + } +} +void KeypadEvent(BYTE* pData) +{ + + BYTE state = pData[0]; + BYTE pad = pData[1]; + BYTE index = pData[2]; + + switch (state) + { + case rio_KeyPressed: + if (pad == 0) + index = index + 80; + if (pad == 1) + index = index + 96; + Press_V2(index); + break; + case rio_KeyReleased: + if (pad == 0) + index = index + 80; + if (pad == 1) + index = index + 96; + Release_V2(index); + break; + default: + break; + } +} +BOOL SendPacket(const BYTE* ba, int length) +{ + + return WriteCommBlock((LPSTR)ba, length); +} +BOOL SendCommand(const BYTE* pbPacket) +{ + BYTE ba[256]; + BYTE bCmd = *pbPacket; + int cmdindex = bCmd & 0x7F; + + if (bCmd & 0x80) { /*reduce the command byte down to the index number listed in the g_baRIOLengths array */ + if (cmdindex < g_nRIOPacketCount) { + int nLeft = 1/* 1byte command */ + g_pbRIOLengths[cmdindex]; /* plus any additional bytes for arguments to the commands*/ + + BYTE bCheck = 0; + BYTE* p = ba; + + while (nLeft > 0) { + BYTE b = *pbPacket++; + *p++ = b; + bCheck += b & 0x7F; + nLeft--; + } + + *p++ = bCheck & 0x7F; + + return SendPacket(ba, p - ba); + } + else { + //unknown command + } + } + else { + ;//error + } + + return TRUE; +} +BOOL SetLamp(int lampNumber, int state) +{ + static BYTE request_lamp_string[] = { rio_LampRequest, 0, 0, 0 }; + + request_lamp_string[1] = (BYTE)(lampNumber & 0x7F); + request_lamp_string[2] = (BYTE)(state & 0x7F); + + return SendCommand(request_lamp_string); +} +void AnalogAllReset() +{ + ResetThrottle(); + ResetLeftPedal(); + ResetRightPedal(); + ResetVerticalJoystick(); + ResetHorizontalJoystick(); +} +void GeneralReset() +{ + static BYTE request_reset_string[] = { rio_ResetRequest, 0 }; + SendCommand(request_reset_string); +} +void ResetThrottle() +{ + static BYTE request_throttle_string[] = { rio_ResetRequest, 1 }; + SendCommand(request_throttle_string); +} +void ResetLeftPedal() +{ + static BYTE request_lpedal_string[] = { rio_ResetRequest, 2 }; + SendCommand(request_lpedal_string); +} +void ResetRightPedal() +{ + static BYTE request_rpedal_string[] = { rio_ResetRequest, 3 }; + SendCommand(request_rpedal_string); +} +void ResetVerticalJoystick() +{ + static BYTE request_vstick_string[] = { rio_ResetRequest, 4 }; + SendCommand(request_vstick_string); +} +void ResetHorizontalJoystick() +{ + static BYTE request_hstick_string[] = { rio_ResetRequest, 5 }; + SendCommand(request_hstick_string); +} +void RequestCheck() +{ + static BYTE request_check_string[] = { rio_CheckRequest }; + SendCommand(request_check_string); +} +void CheckReply(BYTE* pData) { + + switch (pData[1]) + { + case BoardMissing: + std::cout << "missing_board : " << int(pData[2]) << " : " << GetBoardName(int(pData[2])) << std::endl; + break; + + case BoardBad: + std::cout << "dead_board : " << int(pData[2]) << std::endl; + break; + + case LampBad: + std::cout << "RIODeadLamp : " << GetLampName(int(pData[2])) << std::endl; + break; + + case RestartCount: + std::cout << "remoteRetryCount:" << int(pData[2]) << std::endl; + break; + + case AbandonCount: + std::cout << "remoteAbandonCount:" << int(pData[2]) << std::endl; + break; + + case FullBufferCount: + std::cout << "remoteFullBufferCount:" << int(pData[2]) << std::endl; + break; + } +} +const char* GetLampName(int lamp_number) +{ + const char* lamp_name[] = + { + "AuxLowerRight8", + "AuxLowerRight7", + "AuxLowerRight6", + "AuxLowerRight5", + "AuxLowerRight4", + "AuxLowerRight3", + "AuxLowerRight2", + "AuxLowerRight1", + "AuxLowerLeft8", + "AuxLowerLeft7", + "AuxLowerLeft6", + "AuxLowerLeft5", + "AuxLowerLeft4", + "AuxLowerLeft3", + "AuxLowerLeft2", + "AuxLowerLeft1", + "Secondary1", //=0x10 + "Secondary2", + "Secondary3", + "Secondary4", + "Secondary5", + "Secondary6", + "TeslaRelay3", + "undefined_0x17", + "Secondary7", //=0x18 + "Secondary8", + "Secondary9", + "Secondary10", + "Secondary11", + "Secondary12", + "TeslaRelay1", + "TeslaRelay2", + "AuxUpperCenter8", //=0x20 + "AuxUpperCenter7", + "AuxUpperCenter6", + "AuxUpperCenter5", + "AuxUpperCenter4", + "AuxUpperCenter3", + "AuxUpperCenter2", + "AuxUpperCenter1", + "AuxUpperLeft8", //=0x28 + "AuxUpperLeft7", + "AuxUpperLeft6", + "AuxUpperLeft5", + "AuxUpperLeft4", + "AuxUpperLeft3", + "AuxUpperLeft2", + "AuxUpperLeft1", + "AuxUpperRight8", //=0x30 + "AuxUpperRight7", + "AuxUpperRight6", + "AuxUpperRight5", + "AuxUpperRight4", + "AuxUpperRight3", + "AuxUpperRight2", + "AuxUpperRight1", + "PanicButton", //=0x38 + "IcomAmpEnableRelay",//=0x39 + "IcomIncRelay", //=0x3A + "IcomPTTRelay", //=0x03B + "IcomDecRelay", //=0x3C + "Eject", //=0x3D unimplemented convenience lamp + "FloorEntry", //=0x3E + "Reverse", //=0x3F + "Joystickboard1", //=0x41 + "Joystickboard2", //=0x42 + "Joystickboard3", //=0x43 + "Joystickboard4", //=0x44 + "Joystickboard5", //=0x45 + "Joystickboard6", //=0x46 + "Joystickboard7", //=0x47 + "Joystickboard8", //=0x48 + }; + + return lamp_name[lamp_number]; + +} +const char* GetBoardName(int board_number) +{ + const char* board_name[] = + { + "AuxLowerRight", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "AuxLowerLeft", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Secondary1", //=0x10 + "Secondary2", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "AuxUpperCenter", //=0x18 + "AuxUpperLeft", + "AuxUpperRight", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "IntKeyPad", //=0x20 + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "ExtKeyPad", //=0x28 + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Throttel", //=0x30 + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "Undefined", + "JoyStick", //=0x38 + }; + + return board_name[board_number]; + +} +void RequestVersion() +{ + static BYTE request_version_string[] = { rio_VersionRequest }; + SendCommand(request_version_string); +} +void VersionReply(BYTE* pData) { + std::cout << "RIO Version : " << int(pData[1]) << " . " << int(pData[2]) << std::endl; +} +void RequestAnalogUpdate() +{ + static BYTE request_analog_string[] = { rio_AnalogRequest }; + + SendCommand(request_analog_string); + if (enablecount) { + count++; + now = GetTickCount(); + if (count == 10) { + + std::cout << "10 analog requests took ," << (now - last) << ",MS about ," << (10000 / (now - last)) << ", per second" << std::endl; + + last = now; + count = 0; + } + } +} +void UpdatePadal() +{ +#define RANGE_PADAL 500L +#define DEADZONE_PADAL 10L + /* + == PADAL == + + Up : (-) + Down : (+) + + ------------------ + Set Start Position + ------------------ + + Down Up + ====================== + (+) (-) + ====================== + + g_LeftPedalStart: INT_MAX (+) + + lP = (LONG)g_LeftPedalStart - g_LeftPedal; + "lP negative result is unconditional" + */ + + LONG lP = 0; + LONG rudder = 16383L; + + // + // LEFT PADAL + // + + if ((g_LeftPedal < -RANGE_PADAL) || (g_LeftPedal > RANGE_PADAL)) + { + + if (g_LeftPedal > RANGE_PADAL) { + g_LeftPedalLast = -1000L; + } + else { + g_LeftPedalLast = 0L; + } + } + else + { + if (g_LeftPedalStart > g_LeftPedal) { + g_LeftPedalStart = g_LeftPedal; + } + + lP = (LONG)g_LeftPedalStart - g_LeftPedal; + if (lP != 0) { + lP = lP * 1000 / RANGE_PADAL; + } + + // Dead Zone + if (abs(lP) < DEADZONE_PADAL) { + lP = 0; + } + + g_LeftPedalLast = lP; + } + g_LeftPedalLast = std::abs(g_LeftPedalLast * 32L); + + if (*invertXR) { + g_LeftPedalLast = (32766L - g_LeftPedalLast); + } + + if (!*enableZR) { + SetAxis(g_LeftPedalLast, 1, HID_USAGE_RX); + } + else { + SetAxis(16383L, 1, HID_USAGE_RX); + } + + // + // RIGHT PADAL + // + + lP = 0; + + if ((g_RightPedal < -RANGE_PADAL) || (g_RightPedal > RANGE_PADAL)) + { + + if (g_RightPedal > RANGE_PADAL) { + g_RightPedalLast = 1000L; + } + else { + g_RightPedalLast = 0L; + } + } + else + { + if (g_RightPedalStart > g_RightPedal) { + g_RightPedalStart = g_RightPedal; + } + + lP = (LONG)g_RightPedalStart - g_RightPedal; + if (lP != 0) { + lP = lP * 1000 / RANGE_PADAL; + } + + // Dead Zone + if (abs(lP) < DEADZONE_PADAL) { + lP = 0; + } + + g_RightPedalLast = -lP; + } + g_RightPedalLast = std::abs(g_RightPedalLast * 32L); + + if (*invertYR) { + g_RightPedalLast = (32766L - g_RightPedalLast); + } + + if (!*enableZR) { + SetAxis(g_RightPedalLast, 1, HID_USAGE_RY); + } + else { + SetAxis(16383L, 1, HID_USAGE_RY); + } + + rudder = 16383L - (g_LeftPedalLast / 2L) + (g_RightPedalLast / 2L); + + if (*invertZR) { + rudder = (32766L - rudder); + } + + if (*enableZR) { + SetAxis(rudder, 1, HID_USAGE_RZ); + } + else { + SetAxis(16383L, 1, HID_USAGE_RZ); + } +} +void UpdateThrottle() +{ + // [[RIO button value range]] + // RIO board spec: (up) -800 ~ +800 (down) + // actually maximum throttle-value-range is 800, not 1600(-800 ~ 800) + // possible throttle value (g_ThrottleMax ~ (g_ThrottleMax - 800)) + // g_ThrottleMax will be changedfrom input value... + // + // g_Throttle/g_ThrottleMax +#define RANGE_THROTTLE 800L + +#define ZERO_THROTTLE 0L // see,,, control_mapping.cpp, 0.3 + +#define DEADZONE_THROTTLE 50L + +/* + == THROTTLE == + + Up : (-) + Down : (+) + + ------------------ + Set Start Position + ------------------ + + Up Down + ====================== + (-) (+) + ====================== + + g_ThrottleStart: INT_MIN (-) +*/ + + + LONG lT; + + if ((g_Throttle < -RANGE_THROTTLE) || (g_Throttle > RANGE_THROTTLE)) + { + // error + if (g_Throttle < RANGE_THROTTLE) { + if (g_ThrottleResult > 0L) { // back + g_ThrottleLast = 1000L; + } + else { + g_ThrottleLast = -1000L; + } + } + else { + g_ThrottleLast = 0L; + } + } + else + { + // Set StartPosition + if (g_ThrottleStart < g_Throttle) + g_ThrottleStart = g_Throttle; + + lT = (LONG)g_ThrottleStart - g_Throttle; + + if (lT > 800L) + lT = 800L; + + if (lT != 0) { + lT = lT * 1000L / 800L; + + if ((lT > -DEADZONE_THROTTLE) && (lT < DEADZONE_THROTTLE)) { + g_ThrottleLast = ZERO_THROTTLE; + } + else { + if (g_ThrottleResult > 0L) { // back + g_ThrottleLast = 900L + (lT * g_ThrottleResult / 10L); + } + else { // front + g_ThrottleLast = lT * g_ThrottleResult; + } + } + } + } + g_ThrottleLast = std::abs(g_ThrottleLast * 32L); + + if (*invertZ) { + g_ThrottleLast = 32766L - g_ThrottleLast; + } + SetAxis(g_ThrottleLast, 1, HID_USAGE_Z); +} +void UpdateJoystick() +{ + ////////////////////////////////////////////////////////////////////////////////// + /* + "The meaning of 80" + + "RIO (LEFT: 120 ~ RIGHT: -80) home and promised to return the number of + (LEFT uigyeong right) cut away the rest of the maximum value of 80 or greater RIGHT + The LEFT and RIGHT case you can move at the same speed" + + FH changed the method to make the rate adjust to the max/min value seen from the axis + starting with that default value of 80 like the original code but then not sniping off the + rest of the range + */ + ////////////////////////////////////////////////////////////////////////////////// + LONG lJx; + LONG lJy; +#define DEADZONE_JOYSTICKX_LEFT 5L +#define DEADZONE_JOYSTICKX_RIGHT 5L + LONG startingLeftrate = -80; + LONG startingrightrate = 80; + + startingLeftrate = (minx < startingLeftrate) ? minx : startingLeftrate; + startingrightrate = (maxx > startingrightrate) ? maxx : startingrightrate; + + + const LONG sLeftRate = (LONG)((16383L) / (LONG)(abs(startingLeftrate) - DEADZONE_JOYSTICKX_LEFT)); + const LONG sRightRate = (LONG)((16383L) / (LONG)(startingrightrate - DEADZONE_JOYSTICKX_RIGHT)); + + lJx = g_JoystickX; + + if (lJx < 0L) // LEFT + { + lJx += DEADZONE_JOYSTICKX_LEFT; + + if (lJx < 0L) { +// if (lJx < (-80L + DEADZONE_JOYSTICKX_LEFT)) +// lJx = (-80L + DEADZONE_JOYSTICKX_LEFT); + + g_JoystickXLast = (16383L - (lJx * sLeftRate)); + } + else { + g_JoystickXLast = 16383L; + } + } + else if (lJx > 0L) // RIGHT + { + lJx -= DEADZONE_JOYSTICKX_RIGHT; + + if (lJx > 0L) { +// if (lJx > (80L - DEADZONE_JOYSTICKX_RIGHT)) +// lJx = (80L - DEADZONE_JOYSTICKX_RIGHT); + + g_JoystickXLast = (16838L - (( lJx + 2 ) * sRightRate)); // add in a -2 adjustment to prevent snaping alittle to the oposit direction. + } + else { + g_JoystickXLast = 16383L; + } + } + + if (*invertX) { + g_JoystickXLast = 32766L - g_JoystickXLast; + } + + SetAxis(g_JoystickXLast, 1, HID_USAGE_X); +// std::cout << " X:" << std::setw(4) << minx << ":" << std::setw(4) << g_JoystickX << ":" << std::setw(4) << maxx << ":" << sLeftRate << ":" << g_JoystickXLast << ":" << sRightRate << std::endl; + + ///////////////////////// + +#define DEADZONE_JOYSTICKY_UP 5L +#define DEADZONE_JOYSTICKY_DOWN 5L + LONG startingUprate = -80; + LONG startingDownrate = 80; + + startingUprate = (miny < startingUprate) ? miny : startingUprate; + startingDownrate = (maxy > startingDownrate) ? maxy : startingDownrate; + const LONG sUpRate = (LONG)((16383L) / (LONG)(abs(startingUprate) - DEADZONE_JOYSTICKY_UP)); + const LONG sDownRate = (LONG)((16383L) / (LONG)(startingDownrate - DEADZONE_JOYSTICKY_DOWN)); + + lJy = g_JoystickY; + + if (lJy < 0L) // UP + { + lJy += DEADZONE_JOYSTICKY_UP; + + if (lJy < 0L) { +// if (lJy < (-80L + DEADZONE_JOYSTICKY_UP)) +// lJy = (-80L + DEADZONE_JOYSTICKY_UP); + + g_JoystickYLast = (16383L - (lJy * sUpRate)); + } + else { + g_JoystickYLast = 16383L; + } + } + else if (lJy > 0L) // Down + { + lJy -= DEADZONE_JOYSTICKY_DOWN; + + if (lJy > 0L) { +// if (lJy > (80L - DEADZONE_JOYSTICKY_DOWN)) +// lJy = (80L - DEADZONE_JOYSTICKY_DOWN); + + g_JoystickYLast = (16383L - (lJy * sDownRate)); + + } + else { + g_JoystickYLast = 16383L; + } + } + + if (*invertY) { + g_JoystickYLast = 32766L - g_JoystickYLast; + } + + SetAxis(g_JoystickYLast, 1, HID_USAGE_Y); +// std::cout << "Y:" << std::setw(4) << miny << ":" << std::setw(4) << g_JoystickY << ":" << std::setw(4) << maxy << ":" << sUpRate << ":" << g_JoystickYLast << ":" << sDownRate << std::endl; +} +void TestModeChange(BYTE* pData) { + if (pData[1] != 0) + { + std::cout << "RIO entered test mode : " << int(pData[1]) << std::endl; + // TestModeActive = 1; + } + else + { + std::cout << "RIO exited test mode : " << int(pData[1]) << std::endl; + // TestModeActive = 0; + } +} +void RIOcmd(unsigned char ucValue) { // all the things we may want the rio to do that are not outputs to the computer + switch (int(ucValue)) { + case 0: + std::cout << "Reset Analog axes and clabration data" << std::endl; + AnalogAllReset(); + g_ThrottleResult = -1L; + g_ThrottleStart = INT_MIN; + g_LeftPedalStart = INT_MAX; + g_RightPedalStart = INT_MAX; + g_JoystickXLast = 16383L; + g_JoystickYLast = 16383L; + g_ThrottleLast = 0L; + g_LeftPedalLast = 0L; + g_RightPedalLast = 0L; + g_RudderLast = 16838L; + maxt = 0; + mint = 0; + maxl = 0; + minl = 0; + maxr = 0; + minr = 0; + maxx = 0; + minx = 0; + maxy = 0; + miny = 0; + break; + case 1: + std::cout << "ResetThrottle" << std::endl; + ResetThrottle(); + g_ThrottleResult = -1L; + g_ThrottleStart = INT_MIN; + g_ThrottleLast = 0L; + maxt = 0; + mint = 0; + break; + case 2: + std::cout << "ResetLeftPedal" << std::endl; + ResetLeftPedal(); + g_LeftPedalStart = INT_MAX; + g_LeftPedalLast = 0L; + maxl = 0; + minl = 0; + break; + case 3: + std::cout << "ResetRightPedal" << std::endl; + ResetRightPedal(); + g_RightPedalStart = INT_MAX; + g_RightPedalLast = 0L; + maxr = 0; + minr = 0; + break; + case 4: + std::cout << "ResetVerticalJoystick" << std::endl; + ResetVerticalJoystick(); + g_JoystickYLast = 16383L; + maxy = 0; + miny = 0; + break; + case 5: + std::cout << "ResetHorizontalJoystick" << std::endl; + ResetHorizontalJoystick(); + g_JoystickXLast = 16383L; + maxx = 0; + minx = 0; + break; + case 6: + std::cout << "GeneralReset" << std::endl; + GeneralReset(); + for (int b = 0; b < 72; b++) { + if (iRIO[b] & 0x8000) + SetLamp(b, LampSolidDim); + } + break; + case 7: + std::cout << "RequestVersion and RequestCheck" << std::endl; + RequestVersion(); + RequestCheck(); + break; + case 8: + std::cout << "enable/disable axes readout" << std::endl; + g_rawaxes = !g_rawaxes; + break; + case 9: + std::cout << "enable/disable polling Frequency output" << std::endl; + last = GetTickCount();// set the "last" time to be now so that the first output does not count all of the time since program start + enablecount = !enablecount; + break; + default: + std::cout << "unimplimented option : " << int(ucValue) << std::endl; + break; + } +} +static void Press_V2(unsigned char iAddress) +{ + int iValue = iRIO[iAddress]; // + bool bIsDim = iValue & 0x8000; // would it be faster/better to just calculate the values as needed + bool bIsMouse = iValue & 0x4000; // or express them out like this and pass values? + bool bIsHat = iValue & 0x2000; + bool bIsJoy = iValue & 0x1000; + bool bIsExt = iValue & 0x0800; + bool bIsALT = iValue & 0x0400; + bool bIsCTRL = iValue & 0x0200; + bool bIsSHIFT = iValue & 0x0100; + unsigned char ucValue = iValue & 0xFF; + + if (!bIsJoy && !bIsHat && !bIsMouse) //this must then be a Keyboard press + { + if (bIsSHIFT) { ModKeySHIFT(1); } //take care of any mod keys + if (bIsCTRL) { ModKeyCTRL(1); } + if (bIsALT) { ModKeyALT(1); } + + Key(ucValue, 1, bIsExt); // Then press the Key + } + if (bIsJoy && bIsHat && bIsMouse) { //this must then be a RIO command + RIOcmd(ucValue); + return; + } + if (bIsJoy) { // call the vJoy button function with press and Value + SetBtn(TRUE, 1, ucValue); + } + else if (bIsHat) { // call the vJoy hat function with direction information + SetDiscPov(ucValue, 1, 1); + } + else if (bIsMouse) { // call the mouse function as a press (1) + Mouse(ucValue, 1); + } + // Work on button lighting + if (iRIO[iAddress] & 0x8000) + SetLamp(iAddress, LampSolidBright); +} +static void Release_V2(unsigned char iAddress) +{ + int iValue = iRIO[iAddress]; + bool bIsDim = iValue & 0x8000; // would it be faster/better to just calculate the values as needed + bool bIsMouse = iValue & 0x4000; // or express them out like this and pass values? + bool bIsHat = iValue & 0x2000; + bool bIsJoy = iValue & 0x1000; + bool bIsExt = iValue & 0x0800; + bool bIsALT = iValue & 0x0400; + bool bIsCTRL = iValue & 0x0200; + bool bIsSHIFT = iValue & 0x0100; + unsigned char ucValue = iValue & 0xFF; + + if (!bIsJoy && !bIsHat && !bIsMouse) //this must then be a Keyboard press + { + Key(ucValue, 0, bIsExt); // release the Key + + if (bIsALT) { ModKeyALT(0); } //take care of any mod keys + if (bIsCTRL) { ModKeyCTRL(0); } + if (bIsSHIFT) { ModKeySHIFT(0); } + + } + if (bIsJoy && bIsHat && bIsMouse) { //this must then be a RIO command + + return; + } + if (bIsJoy) { // call the vJoy button function with release and Value + SetBtn(FALSE, 1, ucValue); + + } + else if (bIsHat) { // call the vJoy hat function with centering information + SetDiscPov(-1, 1, 1); + + } + else if (bIsMouse) { // call the mouse function as a release (0) + Mouse(ucValue, 0); + } + //work on button lighting + if (iRIO[iAddress] & 0x8000) + SetLamp(iAddress, LampSolidDim); + +} +static void ModKeySHIFT(bool bIsPressed) +{ + INPUT sInput = { 0 }; + + sInput.type = INPUT_KEYBOARD; + if (!bIsPressed) { sInput.ki.dwFlags = KEYEVENTF_KEYUP; } + sInput.ki.wVk = VK_SHIFT; + sInput.ki.wScan = 0x2A; + SendInput(1, &sInput, sizeof(sInput)); + +} +static void ModKeyCTRL(bool bIsPressed) +{ + INPUT cInput = { 0 }; + cInput.type = INPUT_KEYBOARD; + if (!bIsPressed) { cInput.ki.dwFlags = KEYEVENTF_KEYUP; } + cInput.ki.wVk = VK_CONTROL; + cInput.ki.wScan = 0x1D; + SendInput(1, &cInput, sizeof(cInput)); + +} +static void ModKeyALT(bool bIsPressed) +{ + INPUT aInput = { 0 }; + aInput.type = INPUT_KEYBOARD; + if (!bIsPressed) { aInput.ki.dwFlags = KEYEVENTF_KEYUP; } + aInput.ki.wVk = VK_MENU; + aInput.ki.wScan = 0x38; + SendInput(1, &aInput, sizeof(aInput)); + +} +static void Key(unsigned char ucwVk, bool bIsPressed, bool bIsExtended) +{ + //INPUT kInput = { 0 }; + //kInput.type = INPUT_KEYBOARD; + //if (!bIsPressed) { kInput.ki.dwFlags = KEYEVENTF_KEYUP; } + //if (bIsExtended) { kInput.ki.dwFlags = kInput.ki.dwFlags | KEYEVENTF_EXTENDEDKEY; } + //kInput.ki.wVk = ucwVk; + //kInput.ki.wScan = MapVirtualKey(kInput.ki.wVk, MAPVK_VK_TO_VSC); + //SendInput(1, &kInput, sizeof(kInput)); + INPUT kInput = { 0 }; + kInput.type = INPUT_KEYBOARD; + kInput.ki.dwFlags = KEYEVENTF_SCANCODE; + if (!bIsPressed) { kInput.ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_SCANCODE; } + if (bIsExtended) { kInput.ki.dwFlags = kInput.ki.dwFlags | KEYEVENTF_EXTENDEDKEY; } + kInput.ki.wVk = 0; + kInput.ki.wScan = MapVirtualKey(ucwVk, MAPVK_VK_TO_VSC); + kInput.ki.time = 0; + SendInput(1, &kInput, sizeof(kInput)); + +} +static void Mouse(unsigned char ucValue, bool bIsPressed) +{ + INPUT mInput = { 0 }; + mInput.type = INPUT_MOUSE; + if (ucValue == 0) { //do the UP thing + if (bIsPressed) { + mInput.mi.dwFlags = MOUSEEVENTF_MOVE; + mInput.mi.dx = -50; + SendInput(1, &mInput, sizeof(mInput)); + } + else { + // do nothing? + } + + } + else if (ucValue == 1) { //do the RIGHT thing + if (bIsPressed) { + mInput.mi.dwFlags = MOUSEEVENTF_MOVE; + mInput.mi.dy = 50; + SendInput(1, &mInput, sizeof(mInput)); + } + else { + //do nothing? + } + + } + else if (ucValue == 2) { //do the DOWN thing + if (bIsPressed) { + mInput.mi.dwFlags = MOUSEEVENTF_MOVE; + mInput.mi.dx = 50; + SendInput(1, &mInput, sizeof(mInput)); + } + else { + // do mothing? + } + + } + else if (ucValue == 3) { //do the LEFT thing + if (bIsPressed) { + mInput.mi.dwFlags = MOUSEEVENTF_MOVE; + mInput.mi.dy = -50; + SendInput(1, &mInput, sizeof(mInput)); + } + else { + // do nothing? + } + + } + else if (ucValue == 4) { //do the Lclick thing + if (bIsPressed) { + mInput.mi.dwFlags = MOUSEEVENTF_LEFTDOWN | KEYEVENTF_EXTENDEDKEY; + } + else { + mInput.mi.dwFlags = MOUSEEVENTF_LEFTUP | KEYEVENTF_EXTENDEDKEY; + } + SendInput(1, &mInput, sizeof(mInput)); + + } + else if (ucValue == 5) { //do the Rclick thing + if (bIsPressed) { + mInput.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN | KEYEVENTF_EXTENDEDKEY; + } + else { + mInput.mi.dwFlags = MOUSEEVENTF_RIGHTUP | KEYEVENTF_EXTENDEDKEY; + } + SendInput(1, &mInput, sizeof(mInput)); + + } + +} + +void CPlasma::SendPacket(const BYTE* pbPacket, char nLen) +{ + if (IsValid()) + txComLoop(pbPacket, nLen); +} +void CPlasma::PlasmaClear() +{ + char string[] = { ESC, '@' }; + SendPacket((BYTE*)string, 2); +} +void CPlasma::PlasmaCursor(char n) +{ + char string[] = { ESC, 'G', char(n) }; + SendPacket((BYTE*)string, 3); +} +void CPlasma::PlasmaCursorHome() +{ + char string[] = { ESC, 'L' }; + SendPacket((BYTE*)string, 2); +} +void CPlasma::PlasmaCursorX(char n) +{ + char string[] = { ESC, 'R', n }; + SendPacket((BYTE*)string, 3); +} +void CPlasma::PlasmaCursorY(char n) +{ + char string[] = { ESC, 'Q', n }; + SendPacket((BYTE*)string, 3); +} +void CPlasma::PlasmaFontAttr(char n) +{ + char string[] = { ESC, 'H', (BYTE)n }; + SendPacket((BYTE*)string, 3); +} +void CPlasma::PlasmaFont(char n) +{ + char string[] = { 27 /*ESC*/, 'K', n }; + SendPacket((BYTE*)string, 3); +} +void CPlasma::PlasmaText(const char* szText) +{ + if (!szText) + return; + + int len = strlen(szText); + + if (len >= 256) + return; + + SendPacket((BYTE*)szText, (char)len); +} +POINT CPlasma::GetFontSize(int Font) +{ + POINT size = { 0, 0 }; + + switch (Font) + { + case 0: + case 1: + case 2: + case 3: + size.x = 5; + size.y = 7; + break; + case 4: + case 5: + size.x = 10; + size.y = 14; + break; + case 6: + case 7: + size.x = 5; + size.y = 7; + break; + } + + return size; +} +void CPlasma::PlasmaBoxDraw(RECT tag) +{ + char string[] = { ESC, 'X', (char)tag.left, (char)tag.top, (char)tag.right, (char)tag.bottom }; + SendPacket((BYTE*)string, 6); +} +void CPlasma::PlasmaBoxFill(RECT tag) +{ + char string[] = { ESC, 'x', 0, (char)tag.left, (char)tag.top, (char)tag.right, (char)tag.bottom }; + SendPacket((BYTE*)string, 7); +} +void CPlasma::PlasmaPosText(const char* szText, char x, char y, char Attr, char Font) +{ + if (!szText) + return; + + int len = strlen(szText); + + if (len <= 0) + return; + if (Font != 2) // !Score + { + if (len <= 9) { + Font = 5; + } + else if (len <= 20) { + Font = 2; + } + else { + Font = 2; + len = 20; + } + } + else + { + if (len > 20) + len = 20; + } + + if (x == 0 && y == 0) { + x = 56 - ((len * GetFontSize(Font).x) / 2); + y = 15 - ((GetFontSize(Font).y) / 2); + } + + PlasmaCursorX(x); + PlasmaCursorY(y); + PlasmaFontAttr(Attr); + PlasmaFont(Font); + + if (len >= 256) + return; + + SendPacket((const BYTE*)szText, len); +} +void CPlasma::PlasmaScoreDraw(const char* Rank, const char* Score, BOOL bFlag) +{ + int CurRank = atoi(Rank); + int CurScore = atoi(Score); + + RECT tag1 = { 27,19,42,30 }; + RECT tag2 = { 42,19,93,30 }; + + RECT tag3 = { 27,19,93,30 }; //Fill + + if (bFlag == TRUE) + { + PlasmaBoxFill(tag3); + + PlasmaBoxDraw(tag1); + PlasmaBoxDraw(tag2); + } + + int len_Rank = strlen(Rank); + int len_Score = strlen(Score); + + //{ + if (len_Rank <= 2 && len_Rank > 0) + if (len_Score <= 8 && len_Score > 0) + { + if (CurRank != m_nOldRank) + { + PlasmaPosText(" ", 29, 20, 0, 2); + if (len_Rank == 1) + PlasmaPosText(Rank, 33, 20, 0, 2); + else + PlasmaPosText(Rank, 29, 20, 0, 2); + } + + if (m_nOldScore != CurScore) + { + PlasmaPosText(" ", 44, 20, 0, 2); + PlasmaPosText(Score, (char)(85 - (len_Score * 5)), 20, 0, 2); + } + } + + m_nOldRank = CurRank; + m_nOldScore = CurScore; + //} +} +void CPlasma::DoPlasma(char nMode) +{ + + switch (nMode) + { + case 0: + m_nGlobalState = -1; + break; + case 1: + if ((m_nGlobalState != 0) && (m_nGlobalState != 2)) + return; + break; + case 2: + if ((m_nGlobalState != 1) && (m_nGlobalState != 2)) + return; + break; + case 9: + if ((m_nGlobalState != 1) && (m_nGlobalState != 2)) + return; + PlasmaDisplay(0, NULL, NULL, NULL); + m_nGlobalState = -1; + return; + default: + return; + } + +} +void CPlasma::PlasmaDisplay(int Gamestate, const char* szName/*9*/, const char* Rank/*2*/, const char* Score/*8*/) +{ + static BOOL BoxFlag = FALSE; + static BOOL NameFlag = FALSE; + + if (Gamestate == 0) // end + { + NameFlag = TRUE; + PlasmaClear(); + } + else if (Gamestate == 1) // ready + { + if (NameFlag) { + PlasmaPosText(" "); + PlasmaPosText(szName); + } + + NameFlag = FALSE; + BoxFlag = TRUE; + m_nOldRank = INT_MIN; + m_nOldScore = INT_MIN; + } + else if (Gamestate == 2) // start + { + PlasmaScoreDraw(Rank, Score, BoxFlag); + BoxFlag = FALSE; + } +} + +C232Comm::C232Comm() + : m_hCom(INVALID_HANDLE_VALUE), m_nPort(0) +{ +} +C232Comm::~C232Comm() +{ + Close(); +} +BOOL C232Comm::Open(int nPort, DWORD dwBaudRate/* = CBR_9600*/, BYTE byParity/* = NOPARITY*/, BYTE bByteSize/* = 8*/, BYTE byStopBits/* = ONESTOPBIT*/) +{ + m_nPort = nPort; + + char sz[32]; + + sprintf_s(sz, g_szPortFormat, m_nPort); + // fh trying to resolve C2664 compile error by explicitly converting the char[32] sz to LPCWSTR lpwsz, + wchar_t wsz[32]; + std::mbstowcs(wsz, sz, std::strlen(sz) + 1); + LPWSTR lpwsz = wsz; + m_hCom = CreateFile(lpwsz, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); + if (IsValid()) { + m_cp.wPacketLength = sizeof(COMMPROP); /* get comm properties */ + if (GetCommProperties(m_hCom, &m_cp)) { + if (GetCommState(m_hCom, &m_dcb)) { + m_dcb.BaudRate = (DWORD)dwBaudRate; + m_dcb.ByteSize = bByteSize; // ONESTOPBIT TWOSTOPBITS + m_dcb.Parity = byParity; // NOPARITY EVENPARITY ODDPARITY + m_dcb.StopBits = byStopBits; + + m_dcb.fOutxCtsFlow = 0; + m_dcb.fOutxDsrFlow = 0; + m_dcb.fRtsControl = 0; + m_dcb.fDtrControl = DTR_CONTROL_ENABLE; // HANDSHAKE; // 9; + + m_dcb.fOutX = 0; + m_dcb.fInX = 0; + + if (SetCommState(m_hCom, &m_dcb)) { + memset(&m_commTimeOuts, 0, sizeof(m_commTimeOuts)); + + m_commTimeOuts.ReadIntervalTimeout = MAXDWORD; + m_commTimeOuts.ReadTotalTimeoutMultiplier = 0; + m_commTimeOuts.ReadTotalTimeoutConstant = 0; + m_commTimeOuts.WriteTotalTimeoutMultiplier = 5; + m_commTimeOuts.WriteTotalTimeoutConstant = 5; + + if (SetupComm(m_hCom, 2048 * 5, 1024)) { + if (SetCommTimeouts(m_hCom, &m_commTimeOuts)) { + if (GetCommTimeouts(m_hCom, &m_commTimeOuts)) { + if (GetCommState(m_hCom, &m_dcb)) { + m_dcb.fDtrControl = DTR_CONTROL_DISABLE; + Sleep(10); + SetCommState(m_hCom, &m_dcb); + + return TRUE; + } + } + } + } + else { + } + } + else { + } + } + else { + } + } + else { + } + locProcessCommError(); + Close(); + } + else { + + } + + return FALSE; +} +void C232Comm::Close() +{ + if (IsValid()) { + CloseHandle(m_hCom); + m_hCom = INVALID_HANDLE_VALUE; + } +} +int C232Comm::rxCom(void* pData, int nLen) +{ + if (!ReadFile(m_hCom, pData, (DWORD)nLen, (LPDWORD)&nLen, (LPOVERLAPPED)NULL)) { + locProcessCommError(); + return -1; + } + /* clean out any pending bytes in the receive buffer */ + PurgeComm(m_hCom, PURGE_RXCLEAR); + + return nLen; +} +BOOL C232Comm::rxComLoop(void* pData, int nLen) +{ + while (nLen > 0) { + int nRead = rxCom(pData, nLen); + if (nRead == -1) + return FALSE; + nLen -= nRead; + pData = &((BYTE*)pData)[nRead]; + } + + return TRUE; +} +int C232Comm::txCom(const void* pData, int nLen) +{ + + if (!WriteFile(m_hCom, pData, (DWORD)nLen, (LPDWORD)&nLen, NULL)) { + locProcessCommError(); + return -1; + } + + return nLen; +} +int C232Comm::txComLoop(const void* pData, int nLen) +{ + while (nLen > 0) { + int nSent = txCom(pData, nLen); + if (nSent == -1) + return FALSE; + nLen -= nSent; + pData = &((BYTE*)pData)[nSent]; + } + + return TRUE; +} +void C232Comm::locProcessCommError() +{ + + DWORD dwError; + COMSTAT cs; + /* clear error */ + ClearCommError(m_hCom, &dwError, &cs); + +} +int C232Comm::CommunicationConfig(HWND hWndParent) +{ + if (IsValid()) { + DWORD dwCC = sizeof(m_cc); + m_cc.dwSize = dwCC; + + if (GetCommConfig(m_hCom, &m_cc, &dwCC)) { + char sz[32]; + + sprintf_s(sz, g_szPortFormat, m_nPort); + // fh trying to resolve C2664 compile error by explicitly converting the char[32] sz to LPCWSTR lpwsz, + wchar_t wsz[32]; + std::mbstowcs(wsz, sz, std::strlen(sz) + 1); + LPWSTR lpwsz = wsz; + if (CommConfigDialog(lpwsz, hWndParent, &m_cc)) { + if (SetCommState(m_hCom, &m_cc.dcb)) { + // write new settings + return +1; + } + locProcessCommError(); + return 0; + } + locProcessCommError(); + return -1; + } + else { + locProcessCommError(); + return -2; + } + } + else { + return -3; + } +} diff --git a/legacy/riovjoy2.sln b/legacy/riovjoy2.sln new file mode 100644 index 0000000..630d4a6 --- /dev/null +++ b/legacy/riovjoy2.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33205.214 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "riovjoy2", "riovjoy2.vcxproj", "{960CFE0F-1508-4322-8A91-56E763A14E40}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + WinXP|x64 = WinXP|x64 + WinXP|x86 = WinXP|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {960CFE0F-1508-4322-8A91-56E763A14E40}.Debug|x64.ActiveCfg = Debug|x64 + {960CFE0F-1508-4322-8A91-56E763A14E40}.Debug|x64.Build.0 = Debug|x64 + {960CFE0F-1508-4322-8A91-56E763A14E40}.Debug|x86.ActiveCfg = Debug|Win32 + {960CFE0F-1508-4322-8A91-56E763A14E40}.Debug|x86.Build.0 = Debug|Win32 + {960CFE0F-1508-4322-8A91-56E763A14E40}.Release|x64.ActiveCfg = Release|x64 + {960CFE0F-1508-4322-8A91-56E763A14E40}.Release|x64.Build.0 = Release|x64 + {960CFE0F-1508-4322-8A91-56E763A14E40}.Release|x86.ActiveCfg = Release|Win32 + {960CFE0F-1508-4322-8A91-56E763A14E40}.Release|x86.Build.0 = Release|Win32 + {960CFE0F-1508-4322-8A91-56E763A14E40}.WinXP|x64.ActiveCfg = WinXP|x64 + {960CFE0F-1508-4322-8A91-56E763A14E40}.WinXP|x64.Build.0 = WinXP|x64 + {960CFE0F-1508-4322-8A91-56E763A14E40}.WinXP|x86.ActiveCfg = WinXP|Win32 + {960CFE0F-1508-4322-8A91-56E763A14E40}.WinXP|x86.Build.0 = WinXP|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BEB6DA97-9C84-49B2-BF49-0318C05AF72E} + EndGlobalSection +EndGlobal diff --git a/legacy/riovjoy2.vcxproj b/legacy/riovjoy2.vcxproj new file mode 100644 index 0000000..00b5831 --- /dev/null +++ b/legacy/riovjoy2.vcxproj @@ -0,0 +1,245 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + WinXP + Win32 + + + WinXP + x64 + + + + 16.0 + Win32Proj + {960cfe0f-1508-4322-8a91-56e763a14e40} + riovjoy2 + 10.0 + + + + Application + true + v143 + Unicode + Static + + + Application + false + v143 + true + Unicode + Static + + + Application + false + v141_xp + true + Unicode + Static + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + false + false + + + false + false + + + false + false + true + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebug + + + Console + true + vJoyInterface.exp;user32.lib;Advapi32.lib;%(AdditionalDependencies) + C:\Users\cyd\source\repos\riovjoy2\static_debug_vJoy;%(AdditionalLibraryDirectories) + + + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + None + + + Console + true + true + true + C:\Users\cyd\source\repos\riovjoy2\satic_release_vJoy;%(AdditionalLibraryDirectories) + vJoyInterface.exp;user32.lib;Advapi32.lib;%(AdditionalDependencies) + + + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + false + MultiThreaded + None + + + Console + true + true + true + C:\Users\cyd\source\repos\riovjoy2\WinXP\vjoyinterface-x86-XPcompat;C:\WinDDK\7600.16385.1\lib\wxp\i386;%(AdditionalLibraryDirectories) + vJoyInterface.lib;user32.lib;advapi32.lib;hid.lib;%(AdditionalDependencies) + + + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/riovjoy2.vcxproj.filters b/legacy/riovjoy2.vcxproj.filters new file mode 100644 index 0000000..67ab523 --- /dev/null +++ b/legacy/riovjoy2.vcxproj.filters @@ -0,0 +1,49 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + Resource Files + + + Resource Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/legacy/satic_release_vJoy/vJoyInterface.dll b/legacy/satic_release_vJoy/vJoyInterface.dll new file mode 100644 index 0000000..68f36bd Binary files /dev/null and b/legacy/satic_release_vJoy/vJoyInterface.dll differ diff --git a/legacy/satic_release_vJoy/vJoyInterface.exp b/legacy/satic_release_vJoy/vJoyInterface.exp new file mode 100644 index 0000000..caedd15 Binary files /dev/null and b/legacy/satic_release_vJoy/vJoyInterface.exp differ diff --git a/legacy/satic_release_vJoy/vJoyInterface.lib b/legacy/satic_release_vJoy/vJoyInterface.lib new file mode 100644 index 0000000..c1005f2 Binary files /dev/null and b/legacy/satic_release_vJoy/vJoyInterface.lib differ diff --git a/legacy/satic_release_vJoy/vJoyInterface.map b/legacy/satic_release_vJoy/vJoyInterface.map new file mode 100644 index 0000000..b6c4c70 --- /dev/null +++ b/legacy/satic_release_vJoy/vJoyInterface.map @@ -0,0 +1,2400 @@ + vJoyInterface + + Timestamp is 63bd7cb3 (Tue Jan 10 08:56:51 2023) + + Preferred load address is 10000000 + + Start Length Name Class + 0001:00000000 00010000H .textbss DATA + 0002:00000000 00002ea0H .text$di CODE + 0002:00002ea0 0001cab0H .text$mn CODE + 0002:0001f950 00001840H .text$x CODE + 0002:00021190 00001096H .text$yd CODE + 0003:00000000 00000104H .CRT$XCA DATA + 0003:00000104 0000010cH .CRT$XCU DATA + 0003:00000210 00000104H .CRT$XCZ DATA + 0003:00000314 00000104H .CRT$XIA DATA + 0003:00000418 00000104H .CRT$XIZ DATA + 0003:0000051c 00000104H .CRT$XPA DATA + 0003:00000620 00000104H .CRT$XPZ DATA + 0003:00000724 00000104H .CRT$XTA DATA + 0003:00000828 00000108H .CRT$XTZ DATA + 0003:00000930 00002f90H .rdata DATA + 0003:000038c0 00000180H .rdata$CastGuardVftablesA DATA + 0003:00003a40 0000014cH .rdata$CastGuardVftablesC DATA + 0003:00003b8c 00000274H .rdata$r DATA + 0003:00003e00 00000184H .rdata$zzzdbg DATA + 0003:00003f84 00000104H .rtc$IAA DATA + 0003:00004088 00000104H .rtc$IMZ DATA + 0003:0000418c 00000104H .rtc$IZZ DATA + 0003:00004290 00000104H .rtc$TAA DATA + 0003:00004394 00000104H .rtc$TMZ DATA + 0003:00004498 00000108H .rtc$TZZ DATA + 0003:000045a0 000008d0H .xdata$x DATA + 0003:00004e70 0000070aH .edata DATA + 0004:00000000 00000194H .data DATA + 0004:00000194 00000178H .data$r DATA + 0004:0000030c 0000011cH .data$rs DATA + 0004:00000428 000004f4H .bss DATA + 0005:00000000 000003c0H .idata$5 DATA + 0005:000003c0 000000a0H .idata$2 DATA + 0005:00000460 00000014H .idata$3 DATA + 0005:00000474 000003c0H .idata$4 DATA + 0005:00000834 00000c58H .idata$6 DATA + 0006:00000000 0000031cH .msvcjmc DATA + 0007:00000000 0000010eH .00cfg DATA + 0008:00000000 00000270H .rsrc$01 DATA + 0008:00000270 0000071cH .rsrc$02 DATA + + Address Publics by Value Rva+Base Lib:Object + + 0000:00000000 ___AbsoluteZero 00000000 + 0000:00000000 ___arm64x_extra_rfe_table 00000000 + 0000:00000000 ___arm64x_extra_rfe_table_size 00000000 + 0000:00000000 ___arm64x_native_entrypoint 00000000 + 0000:00000000 ___arm64x_redirection_metadata 00000000 + 0000:00000000 ___arm64x_redirection_metadata_count 00000000 + 0000:00000000 ___dynamic_value_reloc_table 00000000 + 0000:00000000 ___enclave_config 00000000 + 0000:00000000 ___guard_check_icall_a64n_fptr 00000000 + 0000:00000000 ___guard_eh_cont_count 00000000 + 0000:00000000 ___guard_eh_cont_table 00000000 + 0000:00000000 ___guard_fids_count 00000000 + 0000:00000000 ___guard_fids_table 00000000 + 0000:00000000 ___guard_iat_count 00000000 + 0000:00000000 ___guard_iat_table 00000000 + 0000:00000000 ___guard_longjmp_count 00000000 + 0000:00000000 ___guard_longjmp_table 00000000 + 0000:00000000 ___hybrid_auxiliary_iat 00000000 + 0000:00000000 ___hybrid_auxiliary_iat_copy 00000000 + 0000:00000000 ___hybrid_code_map 00000000 + 0000:00000000 ___hybrid_code_map_count 00000000 + 0000:00000000 ___safe_se_handler_count 00000000 + 0000:00000000 ___safe_se_handler_table 00000000 + 0000:00000000 ___volatile_metadata 00000000 + 0000:00000000 ___x64_code_ranges_to_entry_points 00000000 + 0000:00000000 ___x64_code_ranges_to_entry_points_count 00000000 + 0000:00000100 ___guard_flags 00000100 + 0000:00000000 ___ImageBase 10000000 + 0001:00000000 __enc$textbss$begin 10001000 + 0001:00010000 __enc$textbss$end 10011000 + 0002:00002ea0 __JustMyCode_Default 10013ea0 f i stdafx.obj + 0002:00002eb0 ??$?0$$QAH$$Z$$V@?$pair@$$CBHUDeviceStat@@@std@@QAE@Upiecewise_construct_t@1@V?$tuple@$$QAH@1@V?$tuple@$$V@1@@Z 10013eb0 f i vJoyInterface.obj + 0002:00002f40 ??$?0$$V@?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@$00@std@@QAE@U_Zero_then_variadic_args_t@1@@Z 10013f40 f i vJoyInterface.obj + 0002:00002fb0 ??$?0$$V@?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@2@$00@std@@QAE@U_Zero_then_variadic_args_t@1@@Z 10013fb0 f i vJoyInterface.obj + 0002:00003020 ??$?0AAHUDeviceStat@@$0A@@?$pair@$$CBHUDeviceStat@@@std@@QAE@AAH$$QAUDeviceStat@@@Z 10014020 f i vJoyInterface.obj + 0002:000030b0 ??$?0AAHUDeviceStat@@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@AAH$$QAUDeviceStat@@@Z 100140b0 f i vJoyInterface.obj + 0002:00003210 ??$?0AAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@AAPAU01@$0A@@?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@std@@QAE@AAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@0@Z 10014210 f i vJoyInterface.obj + 0002:000032a0 ??$?0AAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N$0A@@?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N@std@@QAE@AAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@$$QA_N@Z 100142a0 f i vJoyInterface.obj + 0002:00003330 ??$?0ABH$$Z$$V@?$pair@$$CBHUDeviceStat@@@std@@QAE@Upiecewise_construct_t@1@V?$tuple@ABH@1@V?$tuple@$$V@1@@Z 10014330 f i vJoyInterface.obj + 0002:000033c0 ??$?0ABH$0A@@?$tuple@ABH@std@@QAE@ABH@Z 100143c0 f i vJoyInterface.obj + 0002:00003470 ??$?0ABH@?$_Tuple_val@ABH@std@@QAE@ABH@Z 10014470 f i vJoyInterface.obj + 0002:000034e0 ??$?0ABQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N$0A@@?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N@std@@QAE@ABQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@$$QA_N@Z 100144e0 f i vJoyInterface.obj + 0002:00003570 ??$?0ABU?$less@H@std@@U_Zero_then_variadic_args_t@1@@?$_Compressed_pair@U?$less@H@std@@V?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@$00@2@$00@std@@QAE@U_One_then_variadic_args_t@1@ABU?$less@H@1@$$QAU_Zero_then_variadic_args_t@1@@Z 10014570 f i vJoyInterface.obj + 0002:00003600 ??$?0ABU?$less@H@std@@U_Zero_then_variadic_args_t@1@@?$_Compressed_pair@U?$less@H@std@@V?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@2@$00@2@$00@std@@QAE@U_One_then_variadic_args_t@1@ABU?$less@H@1@$$QAU_Zero_then_variadic_args_t@1@@Z 10014600 f i vJoyInterface.obj + 0002:00003690 ??$?0ABUpiecewise_construct_t@std@@V?$tuple@$$QAH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@$$QAH@1@$$QAV?$tuple@$$V@1@@Z 10014690 f i vJoyInterface.obj + 0002:00003800 ??$?0ABUpiecewise_construct_t@std@@V?$tuple@ABH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@ABH@1@$$QAV?$tuple@$$V@1@@Z 10014800 f i vJoyInterface.obj + 0002:00003970 ??$?0H$$V$0A@@?$tuple@$$QAH@std@@QAE@$$QAH@Z 10014970 f i vJoyInterface.obj + 0002:00003a30 ??$?0H@?$_Tuple_val@$$QAH@std@@QAE@$$QAH@Z 10014a30 f i vJoyInterface.obj + 0002:00003aa0 ??$?0PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N$0A@@?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N@std@@QAE@$$QAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@$$QA_N@Z 10014aa0 f i vJoyInterface.obj + 0002:00003b30 ??$?0U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@?$allocator@U_Container_proxy@std@@@std@@QAE@ABV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 10014b30 f i vJoyInterface.obj + 0002:00003b90 ??$?0U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@?$allocator@U_Container_proxy@std@@@std@@QAE@ABV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@@Z 10014b90 f i vJoyInterface.obj + 0002:00003bf0 ??$?0U_Exact_args_t@std@@$0A@@?$tuple@$$V@std@@QAE@U_Exact_args_t@1@@Z 10014bf0 f i vJoyInterface.obj + 0002:00003c50 ??$?0U_Exact_args_t@std@@ABH$$V$0A@@?$tuple@ABH@std@@QAE@U_Exact_args_t@1@ABH@Z 10014c50 f i vJoyInterface.obj + 0002:00003ce0 ??$?0U_Exact_args_t@std@@H$$V$0A@@?$tuple@$$QAH@std@@QAE@U_Exact_args_t@1@$$QAH@Z 10014ce0 f i vJoyInterface.obj + 0002:00003d70 ??$?0V?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@AB_N$0A@@?$pair@V?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@_N@std@@QAE@$$QAV?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@1@AB_N@Z 10014d70 f i vJoyInterface.obj + 0002:00003e00 ??$?0V?$tuple@$$QAH@std@@V?$tuple@$$V@1@$0A@$$Z$S@?$pair@$$CBHUDeviceStat@@@std@@QAE@AAV?$tuple@$$QAH@1@AAV?$tuple@$$V@1@U?$integer_sequence@I$0A@@1@U?$integer_sequence@I$S@1@@Z 10014e00 f i vJoyInterface.obj + 0002:00003ea0 ??$?0V?$tuple@ABH@std@@V?$tuple@$$V@1@$0A@$$Z$S@?$pair@$$CBHUDeviceStat@@@std@@QAE@AAV?$tuple@ABH@1@AAV?$tuple@$$V@1@U?$integer_sequence@I$0A@@1@U?$integer_sequence@I$S@1@@Z 10014ea0 f i vJoyInterface.obj + 0002:00003f40 ??$_Adl_verify_range@V?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@V12@@std@@YAXABV?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@0@0@Z 10014f40 f i vJoyInterface.obj + 0002:00003f90 ??$_Allocate@$07U_Default_allocate_traits@std@@$0A@@std@@YAPAXI@Z 10014f90 f i vJoyInterface.obj + 0002:00004010 ??$_Allocate_manually_vector_aligned@U_Default_allocate_traits@std@@@std@@YAPAXI@Z 10015010 f i vJoyInterface.obj + 0002:00004150 ??$_Buyheadnode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAPAU01@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 10015150 f i vJoyInterface.obj + 0002:00004240 ??$_Buyheadnode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAPAU01@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@@Z 10015240 f i vJoyInterface.obj + 0002:00004330 ??$_Construct_in_place@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@AAPAU12@@std@@YAXAAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@0@Z 10015330 f i vJoyInterface.obj + 0002:000043d0 ??$_Construct_in_place@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@ABQAU12@@std@@YAXAAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@ABQAU10@@Z 100153d0 f i vJoyInterface.obj + 0002:00004470 ??$_Construct_in_place@PAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@ABQAU12@@std@@YAXAAPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@0@ABQAU10@@Z 10015470 f i vJoyInterface.obj + 0002:00004510 ??$_Construct_in_place@U_Container_proxy@std@@PAU_Container_base12@2@@std@@YAXAAU_Container_proxy@0@$$QAPAU_Container_base12@0@@Z 10015510 f i vJoyInterface.obj + 0002:000045b0 ??$_Deallocate@$07$0A@@std@@YAXPAXI@Z 100155b0 f i vJoyInterface.obj + 0002:00004670 ??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAAV?$allocator@U_Container_proxy@std@@@0@QAU_Container_proxy@0@@Z 10015670 f i vJoyInterface.obj + 0002:00004710 ??$_Debug_lt_pred@ABU?$less@H@std@@ABHABH$0A@@std@@YA_NABU?$less@H@0@ABH1@Z 10015710 f i vJoyInterface.obj + 0002:00004820 ??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAAV?$allocator@U_Container_proxy@std@@@0@QAU_Container_proxy@0@@Z 10015820 f i vJoyInterface.obj + 0002:00004880 ??$_Destroy_in_place@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@YAXAAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@@Z 10015880 f i vJoyInterface.obj + 0002:000048d0 ??$_Destroy_in_place@PAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@YAXAAPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@0@@Z 100158d0 f i vJoyInterface.obj + 0002:00004920 ??$_Emplace@AAHUDeviceStat@@@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAE?AU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N@1@AAH$$QAUDeviceStat@@@Z 10015920 f i vJoyInterface.obj + 0002:00004b10 ??$_Eqrange@H@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBE?AU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@1@ABH@Z 10015b10 f i vJoyInterface.obj + 0002:00004d90 ??$_Erase_head@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 10015d90 f i vJoyInterface.obj + 0002:00004e20 ??$_Erase_head@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@std@@QAEXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@@Z 10015e20 f i vJoyInterface.obj + 0002:00004eb0 ??$_Erase_tree@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@@Z 10015eb0 f i vJoyInterface.obj + 0002:00004f50 ??$_Erase_tree@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@std@@QAEXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@1@@Z 10015f50 f i vJoyInterface.obj + 0002:00004ff0 ??$_Find@H@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@ABEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABH@Z 10015ff0 f i vJoyInterface.obj + 0002:000050c0 ??$_Find_lower_bound@H@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBE?AU?$_Tree_find_result@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@ABH@Z 100160c0 f i vJoyInterface.obj + 0002:00005220 ??$_Freenode0@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU01@@Z 10016220 f i vJoyInterface.obj + 0002:000052f0 ??$_Freenode0@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU01@@Z 100162f0 f i vJoyInterface.obj + 0002:000053c0 ??$_Freenode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU01@@Z 100163c0 f i vJoyInterface.obj + 0002:00005480 ??$_Freenode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU01@@Z 10016480 f i vJoyInterface.obj + 0002:00005540 ??$_Get_size_of_n@$07@std@@YAII@Z 10016540 f i vJoyInterface.obj + 0002:000055b0 ??$_Get_size_of_n@$0BI@@std@@YAII@Z 100165b0 f i vJoyInterface.obj + 0002:00005620 ??$_Get_size_of_n@$0OE@@std@@YAII@Z 10016620 f i vJoyInterface.obj + 0002:00005690 ??$_Get_unwrapped@AAV?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@@std@@YA?A_TAAV?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@0@@Z 10016690 f i vJoyInterface.obj + 0002:000056e0 ??$_Kfn@$$CBHUDeviceStat@@@?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@SAABHABU?$pair@$$CBHUDeviceStat@@@1@@Z 100166e0 f i vJoyInterface.obj + 0002:00005730 ??$_Lower_bound_duplicate@H@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBE_NQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABH@Z 10016730 f i vJoyInterface.obj + 0002:000057f0 ??$_Try_emplace@ABH$$V@?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@AAE?AU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N@1@ABH@Z 100167f0 f i vJoyInterface.obj + 0002:000059c0 ??$_Try_emplace@H$$V@?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@AAE?AU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N@1@$$QAH@Z 100169c0 f i vJoyInterface.obj + 0002:00005b90 ??$_Tuple_get@$0A@$$QAH@std@@YA$$QA_P$$QAV?$tuple@$$QAH@0@@Z 10016b90 f i vJoyInterface.obj + 0002:00005be0 ??$_Tuple_get@$0A@ABH@std@@YA$$QA_P$$QAV?$tuple@ABH@0@@Z 10016be0 f i vJoyInterface.obj + 0002:00005c30 ??$_Unfancy@U_Container_proxy@std@@@std@@YAPAU_Container_proxy@0@PAU10@@Z 10016c30 f i vJoyInterface.obj + 0002:00005c80 ??$_Voidify_iter@PAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@YAPAXPAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@@Z 10016c80 f i vJoyInterface.obj + 0002:00005cd0 ??$_Voidify_iter@PAPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@YAPAXPAPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@0@@Z 10016cd0 f i vJoyInterface.obj + 0002:00005d20 ??$_Voidify_iter@PAU?$pair@$$CBHUDeviceStat@@@std@@@std@@YAPAXPAU?$pair@$$CBHUDeviceStat@@@0@@Z 10016d20 f i vJoyInterface.obj + 0002:00005d70 ??$_Voidify_iter@PAU_Container_proxy@std@@@std@@YAPAXPAU_Container_proxy@0@@Z 10016d70 f i vJoyInterface.obj + 0002:00005dc0 ??$addressof@$$CBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@YAPBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@0@ABV10@@Z 10016dc0 f i vJoyInterface.obj + 0002:00005e10 ??$addressof@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@YAPAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@AAPAU10@@Z 10016e10 f i vJoyInterface.obj + 0002:00005e60 ??$addressof@PAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@YAPAPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@0@AAPAU10@@Z 10016e60 f i vJoyInterface.obj + 0002:00005eb0 ??$addressof@U?$pair@$$CBHUDeviceStat@@@std@@@std@@YAPAU?$pair@$$CBHUDeviceStat@@@0@AAU10@@Z 10016eb0 f i vJoyInterface.obj + 0002:00005f00 ??$addressof@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@YAPAU?$pair@$$CBHW4FFB_EFFECTS@@@0@AAU10@@Z 10016f00 f i vJoyInterface.obj + 0002:00005f50 ??$addressof@U_Container_base12@std@@@std@@YAPAU_Container_base12@0@AAU10@@Z 10016f50 f i vJoyInterface.obj + 0002:00005fa0 ??$addressof@U_Container_proxy@std@@@std@@YAPAU_Container_proxy@0@AAU10@@Z 10016fa0 f i vJoyInterface.obj + 0002:00005ff0 ??$addressof@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@YAPAV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@0@AAV10@@Z 10016ff0 f i vJoyInterface.obj + 0002:00006040 ??$addressof@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@std@@@std@@YAPAV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@0@AAV10@@Z 10017040 f i vJoyInterface.obj + 0002:00006090 ??$construct@U?$pair@$$CBHUDeviceStat@@@std@@AAHUDeviceStat@@@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@QAU?$pair@$$CBHUDeviceStat@@@1@AAH$$QAUDeviceStat@@@Z 10017090 f i vJoyInterface.obj + 0002:00006130 ??$construct@U?$pair@$$CBHUDeviceStat@@@std@@ABUpiecewise_construct_t@2@V?$tuple@$$QAH@2@V?$tuple@$$V@2@@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@QAU?$pair@$$CBHUDeviceStat@@@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@$$QAH@1@$$QAV?$tuple@$$V@1@@Z 10017130 f i vJoyInterface.obj + 0002:00006200 ??$construct@U?$pair@$$CBHUDeviceStat@@@std@@ABUpiecewise_construct_t@2@V?$tuple@ABH@2@V?$tuple@$$V@2@@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@QAU?$pair@$$CBHUDeviceStat@@@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@ABH@1@$$QAV?$tuple@$$V@1@@Z 10017200 f i vJoyInterface.obj + 0002:000062d0 ??$destroy@U?$pair@$$CBHUDeviceStat@@@std@@@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@QAU?$pair@$$CBHUDeviceStat@@@1@@Z 100172d0 f i vJoyInterface.obj + 0002:00006320 ??$destroy@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@QAU?$pair@$$CBHW4FFB_EFFECTS@@@1@@Z 10017320 f i vJoyInterface.obj + 0002:00006370 ??$distance@V?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@@std@@YAHV?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@0@0@Z 10017370 f i vJoyInterface.obj + 0002:00006490 ??$emplace@AAHUDeviceStat@@@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAE?AU?$pair@V?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@_N@1@AAH$$QAUDeviceStat@@@Z 10017490 f i vJoyInterface.obj + 0002:000065c0 ??$exchange@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@$$T@std@@YAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@AAPAU10@$$QA$$T@Z 100175c0 f i vJoyInterface.obj + 0002:00006630 ??$exchange@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@AAPAU12@@std@@YAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@AAPAU10@0@Z 10017630 f i vJoyInterface.obj + 0002:000066a0 ??$exchange@PAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@AAPAU12@@std@@YAPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@0@AAPAU10@0@Z 100176a0 f i vJoyInterface.obj + 0002:00006710 ??$exchange@PAU_Iterator_base12@std@@$$T@std@@YAPAU_Iterator_base12@0@AAPAU10@$$QA$$T@Z 10017710 f i vJoyInterface.obj + 0002:00006780 ??$forward@AAH@std@@YAAAHAAH@Z 10017780 f i vJoyInterface.obj + 0002:000067d0 ??$forward@AAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@YAAAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@AAPAU10@@Z 100177d0 f i vJoyInterface.obj + 0002:00006820 ??$forward@ABH@std@@YAABHABH@Z 10017820 f i vJoyInterface.obj + 0002:00006870 ??$forward@ABQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@YAABQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@ABQAU10@@Z 10017870 f i vJoyInterface.obj + 0002:000068c0 ??$forward@ABQAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@YAABQAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@0@ABQAU10@@Z 100178c0 f i vJoyInterface.obj + 0002:00006910 ??$forward@ABU?$less@H@std@@@std@@YAABU?$less@H@0@ABU10@@Z 10017910 f i vJoyInterface.obj + 0002:00006960 ??$forward@ABUpiecewise_construct_t@std@@@std@@YAABUpiecewise_construct_t@0@ABU10@@Z 10017960 f i vJoyInterface.obj + 0002:000069b0 ??$forward@AB_N@std@@YAAB_NAB_N@Z 100179b0 f i vJoyInterface.obj + 0002:00006a00 ??$forward@H@std@@YA$$QAHAAH@Z 10017a00 f i vJoyInterface.obj + 0002:00006a50 ??$forward@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@YA$$QAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@AAPAU10@@Z 10017a50 f i vJoyInterface.obj + 0002:00006aa0 ??$forward@PAU_Container_base12@std@@@std@@YA$$QAPAU_Container_base12@0@AAPAU10@@Z 10017aa0 f i vJoyInterface.obj + 0002:00006af0 ??$forward@UDeviceStat@@@std@@YA$$QAUDeviceStat@@AAU1@@Z 10017af0 f i vJoyInterface.obj + 0002:00006b40 ??$forward@U_Zero_then_variadic_args_t@std@@@std@@YA$$QAU_Zero_then_variadic_args_t@0@AAU10@@Z 10017b40 f i vJoyInterface.obj + 0002:00006b90 ??$forward@V?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@@std@@YA$$QAV?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@0@AAV10@@Z 10017b90 f i vJoyInterface.obj + 0002:00006be0 ??$forward@V?$tuple@$$QAH@std@@@std@@YA$$QAV?$tuple@$$QAH@0@AAV10@@Z 10017be0 f i vJoyInterface.obj + 0002:00006c30 ??$forward@V?$tuple@$$V@std@@@std@@YA$$QAV?$tuple@$$V@0@AAV10@@Z 10017c30 f i vJoyInterface.obj + 0002:00006c80 ??$forward@V?$tuple@ABH@std@@@std@@YA$$QAV?$tuple@ABH@0@AAV10@@Z 10017c80 f i vJoyInterface.obj + 0002:00006cd0 ??$forward@_N@std@@YA$$QA_NAA_N@Z 10017cd0 f i vJoyInterface.obj + 0002:00006d20 ??$forward_as_tuple@$$V@std@@YA?AV?$tuple@$$V@0@XZ 10017d20 f i vJoyInterface.obj + 0002:00006d70 ??$forward_as_tuple@ABH@std@@YA?AV?$tuple@ABH@0@ABH@Z 10017d70 f i vJoyInterface.obj + 0002:00006dd0 ??$forward_as_tuple@H@std@@YA?AV?$tuple@$$QAH@0@$$QAH@Z 10017dd0 f i vJoyInterface.obj + 0002:00006e30 ??$min@I@std@@YAABIABI0@Z 10017e30 f i vJoyInterface.obj + 0002:00006ec0 ??$move@AAD@std@@YA$$QADAAD@Z 10017ec0 f i vJoyInterface.obj + 0002:00006f10 ??$move@AAH@std@@YA$$QAHAAH@Z 10017f10 f i vJoyInterface.obj + 0002:00006f60 ??$move@AAV?$tuple@$$QAH@std@@@std@@YA$$QAV?$tuple@$$QAH@0@AAV10@@Z 10017f60 f i vJoyInterface.obj + 0002:00006fb0 ??$move@AAV?$tuple@ABH@std@@@std@@YA$$QAV?$tuple@ABH@0@AAV10@@Z 10017fb0 f i vJoyInterface.obj + 0002:00007000 ??$swap@D$0A@@std@@YAXAAD0@Z 10018000 f i vJoyInterface.obj + 0002:000070d0 ??0?$_Alloc_construct_ptr@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 100180d0 f i vJoyInterface.obj + 0002:00007140 ??0?$_Container_proxy_ptr12@V?$allocator@U_Container_proxy@std@@@std@@@std@@QAE@AAV?$allocator@U_Container_proxy@std@@@1@AAU_Container_base12@1@@Z 10018140 f i vJoyInterface.obj + 0002:00007210 ??0?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAE@ABU?$less@H@1@@Z 10018210 f i vJoyInterface.obj + 0002:00007290 ??0?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@QAE@ABU?$less@H@1@@Z 10018290 f i vJoyInterface.obj + 0002:00007310 ??0?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@$$QAV01@@Z 10018310 f i vJoyInterface.obj + 0002:00007370 ??0?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@PBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@1@@Z 10018370 f i vJoyInterface.obj + 0002:000073d0 ??0?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@$$QAV01@@Z 100183d0 f i vJoyInterface.obj + 0002:00007430 ??0?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@PBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@1@@Z 10018430 f i vJoyInterface.obj + 0002:00007490 ??0?$_Tree_temp_node_alloc@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 10018490 f i vJoyInterface.obj + 0002:00007550 ??0?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@QAE@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@PBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@1@@Z 10018550 f i vJoyInterface.obj + 0002:000075c0 ??0?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base12@2@@std@@QAE@$$QAV01@@Z 100185c0 f i vJoyInterface.obj + 0002:00007630 ??0?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base12@2@@std@@QAE@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@PBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@1@@Z 10018630 f i vJoyInterface.obj + 0002:000076b0 ??0?$_Tree_unchecked_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@PBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@1@@Z 100186b0 f i vJoyInterface.obj + 0002:00007710 ??0?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAE@XZ 10018710 f i vJoyInterface.obj + 0002:00007790 ??0?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@std@@QAE@XZ 10018790 f i vJoyInterface.obj + 0002:00007810 ??0?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@QAE@XZ 10018810 f i vJoyInterface.obj + 0002:00007870 ??0?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@QAE@XZ 10018870 f i vJoyInterface.obj + 0002:000078d0 ??0?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@QAE@XZ 100188d0 f i vJoyInterface.obj + 0002:00007940 ??0?$map@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@@std@@QAE@XZ 10018940 f i vJoyInterface.obj + 0002:000079b0 ??0?$tuple@$$QAH@std@@QAE@$$QAV01@@Z 100189b0 f i vJoyInterface.obj + 0002:00007a20 ??0?$tuple@$$V@std@@QAE@ABV01@@Z 10018a20 f i vJoyInterface.obj + 0002:00007a80 ??0?$tuple@ABH@std@@QAE@$$QAV01@@Z 10018a80 f i vJoyInterface.obj + 0002:00007af0 ??0_Basic_container_proxy_ptr12@std@@IAE@XZ 10018af0 f i vJoyInterface.obj + 0002:00007b50 ??0_Container_base12@std@@QAE@XZ 10018b50 f i vJoyInterface.obj + 0002:00007bb0 ??0_Container_proxy@std@@QAE@PAU_Container_base12@1@@Z 10018bb0 f i vJoyInterface.obj + 0002:00007c20 ??0_Iterator_base12@std@@QAE@ABU01@@Z 10018c20 f i vJoyInterface.obj + 0002:00007ca0 ??0_Iterator_base12@std@@QAE@XZ 10018ca0 f i vJoyInterface.obj + 0002:00007d10 ??0bad_alloc@std@@AAE@QBD@Z 10018d10 f i vJoyInterface.obj + 0002:00007d80 ??0bad_alloc@std@@QAE@ABV01@@Z 10018d80 f i vJoyInterface.obj + 0002:00007df0 ??0bad_array_new_length@std@@QAE@ABV01@@Z 10018df0 f i vJoyInterface.obj + 0002:00007e60 ??0bad_array_new_length@std@@QAE@XZ 10018e60 f i vJoyInterface.obj + 0002:00007ed0 ??0exception@std@@QAE@ABV01@@Z 10018ed0 f i vJoyInterface.obj + 0002:00007f60 ??0exception@std@@QAE@QBDH@Z 10018f60 f i vJoyInterface.obj + 0002:00007fe0 ??1?$_Alloc_construct_ptr@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 10018fe0 f i vJoyInterface.obj + 0002:00008090 ??1?$_Container_proxy_ptr12@V?$allocator@U_Container_proxy@std@@@std@@@std@@QAE@XZ 10019090 f i vJoyInterface.obj + 0002:00008110 ??1?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAE@XZ 10019110 f i vJoyInterface.obj + 0002:000081f0 ??1?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@QAE@XZ 100191f0 f i vJoyInterface.obj + 0002:000082d0 ??1?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@XZ 100192d0 f i vJoyInterface.obj + 0002:00008320 ??1?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@XZ 10019320 f i vJoyInterface.obj + 0002:00008370 ??1?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 10019370 f i vJoyInterface.obj + 0002:00008480 ??1?$_Tree_temp_node_alloc@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 10019480 f i vJoyInterface.obj + 0002:000084d0 ??1?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base12@2@@std@@QAE@XZ 100194d0 f i vJoyInterface.obj + 0002:00008520 ??1?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@QAE@XZ 10019520 f i vJoyInterface.obj + 0002:00008570 ??1?$map@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@@std@@QAE@XZ 10019570 f i vJoyInterface.obj + 0002:000085c0 ??1?$pair@V?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@_N@std@@QAE@XZ 100195c0 f i vJoyInterface.obj + 0002:00008610 ??1_Iterator_base12@std@@QAE@XZ 10019610 f i vJoyInterface.obj + 0002:00008670 ??1bad_alloc@std@@UAE@XZ 10019670 f i vJoyInterface.obj + 0002:000086c0 ??1bad_array_new_length@std@@UAE@XZ 100196c0 f i vJoyInterface.obj + 0002:00008710 ??1exception@std@@UAE@XZ 10019710 f i vJoyInterface.obj + 0002:00008780 ??2@YAPAXIPAX@Z 10019780 f i vJoyInterface.obj + 0002:000087d0 ??4_Iterator_base12@std@@QAEAAU01@ABU01@@Z 100197d0 f i vJoyInterface.obj + 0002:00008840 ??8?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QBE_NABV01@@Z 10019840 f i vJoyInterface.obj + 0002:00008960 ??8?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@QBE_NABV01@@Z 10019960 f i vJoyInterface.obj + 0002:000089f0 ??9?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QBE_NABV01@@Z 100199f0 f i vJoyInterface.obj + 0002:00008a80 ??9?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@QBE_NABV01@@Z 10019a80 f i vJoyInterface.obj + 0002:00008b10 ??A?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@QAEAAUDeviceStat@@$$QAH@Z 10019b10 f i vJoyInterface.obj + 0002:00008b90 ??A?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@QAEAAUDeviceStat@@ABH@Z 10019b90 f i vJoyInterface.obj + 0002:00008c00 ??E?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@QAE?AV01@H@Z 10019c00 f i vJoyInterface.obj + 0002:00008cb0 ??E?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@QAEAAV01@XZ 10019cb0 f i vJoyInterface.obj + 0002:00008d80 ??R?$less@H@std@@QBE_NABH0@Z 10019d80 f i vJoyInterface.obj + 0002:00008e10 ??_Ebad_alloc@std@@UAEPAXI@Z 10019e10 f i vJoyInterface.obj + 0002:00008e10 ??_Gbad_alloc@std@@UAEPAXI@Z 10019e10 f i vJoyInterface.obj + 0002:00008e80 ??_Ebad_array_new_length@std@@UAEPAXI@Z 10019e80 f i vJoyInterface.obj + 0002:00008e80 ??_Gbad_array_new_length@std@@UAEPAXI@Z 10019e80 f i vJoyInterface.obj + 0002:00008ef0 ??_Eexception@std@@UAEPAXI@Z 10019ef0 f i vJoyInterface.obj + 0002:00008ef0 ??_Gexception@std@@UAEPAXI@Z 10019ef0 f i vJoyInterface.obj + 0002:00008f60 ?AreControlsInit@@YAHI@Z 10019f60 f vJoyInterface.obj + 0002:00009160 ?CalcInitValue@@YAXGPAUDEVICE_INIT_VALS@@@Z 1001a160 f vJoyInterface.obj + 0002:00009540 ?CreateDevicePath@@YA_NPBDHPADH@Z 1001a540 f vJoyInterface.obj + 0002:00009750 ?CreateDummyWindow@@YGHXZ 1001a750 f vJoyInterface.obj + 0002:00009a20 ?DbgGetCaps@@YAHXZ 1001aa20 f vJoyInterface.obj + 0002:0000a290 ?ExtractNamespace@@YA_NPBDPADPAH@Z 1001b290 f vJoyInterface.obj + 0002:0000a430 ?FfbGetEffectState@@YAHXZ 1001b430 f vJoyInterface.obj + 0002:0000a590 ?FfbGetEffectType@@YA?AW4FFBEType@@XZ 1001b590 f vJoyInterface.obj + 0002:0000a630 ?GetAxisCaps@@YAHIIPAU_HIDP_VALUE_CAPS@@@Z 1001b630 f vJoyInterface.obj + 0002:0000a990 ?GetAxisLogMax@@YAJII@Z 1001b990 f vJoyInterface.obj + 0002:0000aa70 ?GetAxisLogMid@@YAJII@Z 1001ba70 f vJoyInterface.obj + 0002:0000ab00 ?GetAxisLogMin@@YAJII@Z 1001bb00 f vJoyInterface.obj + 0002:0000abe0 ?GetControls@@YAHI@Z 1001bbe0 f vJoyInterface.obj + 0002:0000b4f0 ?GetDevInfo@@YA_NPAX0@Z 1001c4f0 f vJoyInterface.obj + 0002:0000b8a0 ?GetDevPosition@@YAHEPAU_JOYSTICK_POSITION_V2@@@Z 1001c8a0 f vJoyInterface.obj + 0002:0000bc00 ?GetDevStat@@YA_NEPAHPAE@Z 1001cc00 f vJoyInterface.obj + 0002:0000bfe0 ?GetDeviceAttributes@@YAHHPAG00@Z 1001cfe0 f vJoyInterface.obj + 0002:0000c140 ?GetDeviceIndexById@@YAHGGH@Z 1001d140 f vJoyInterface.obj + 0002:0000c380 ?GetDeviceIndexByReportId@@YAHGGE@Z 1001d380 f vJoyInterface.obj + 0002:0000c530 ?GetDeviceManufacturerString@@YAHHPAPA_W@Z 1001d530 f vJoyInterface.obj + 0002:0000c6c0 ?GetDeviceNameSpace@@YAHPAPADPAHHPAK@Z 1001d6c0 f vJoyInterface.obj + 0002:0000ccb0 ?GetDeviceProductString@@YAHHPAPA_W@Z 1001dcb0 f vJoyInterface.obj + 0002:0000ce10 ?GetDeviceSerialNumberString@@YAHHPAPA_W@Z 1001de10 f vJoyInterface.obj + 0002:0000cf50 ?GetDeviceVersionNumber@@YAHHPAG@Z 1001df50 f vJoyInterface.obj + 0002:0000d090 ?GetDrvStat@@YA_NPAHPAE@Z 1001e090 f vJoyInterface.obj + 0002:0000d420 ?GetGenControlHadle@@YAPAXXZ 1001e420 f vJoyInterface.obj + 0002:0000d4e0 ?GetHandleByIndex@@YAPAXH@Z 1001e4e0 f vJoyInterface.obj + 0002:0000d9f0 ?GetInitValueFromRegistry@@YAIGPAUDEVICE_INIT_VALS@@@Z 1001e9f0 f vJoyInterface.obj + 0002:0000deb0 ?Get_PreparsedData@@YAHHPAPAU_HIDP_PREPARSED_DATA@@@Z 1001eeb0 f vJoyInterface.obj + 0002:0000e0e0 ?Get_h@@YAPAXH@Z 1001f0e0 f vJoyInterface.obj + 0002:0000e220 ?Get_hNotify@@YAPAXH@Z 1001f220 f vJoyInterface.obj + 0002:0000e370 ?Get_stat@@YA?AW4VjdStat@@H@Z 1001f370 f vJoyInterface.obj + 0002:0000e4c0 ?GetvJoyReportId@@YAHH@Z 1001f4c0 f vJoyInterface.obj + 0002:0000e910 ?InitDll@@YAXXZ 1001f910 f vJoyInterface.obj + 0002:0000ead0 ?InitPosition@@YAHH@Z 1001fad0 f vJoyInterface.obj + 0002:0000f130 ?OpenDeviceInterface@@YAPAXIPAK@Z 10020130 f vJoyInterface.obj + 0002:0000f470 ?RegisterHandleNotification@@YAPAXPAUHWND__@@PAX@Z 10020470 f vJoyInterface.obj + 0002:0000f590 ?RegistervJoyNotification@@YAPAXPAUHWND__@@@Z 10020590 f vJoyInterface.obj + 0002:0000f710 ?SavePosition@@YAXIPAX@Z 10020710 f vJoyInterface.obj + 0002:0000f920 ?Set_PreparsedData@@YAHH@Z 10020920 f vJoyInterface.obj + 0002:0000fbc0 ?Set_h@@YAXHPAX@Z 10020bc0 f vJoyInterface.obj + 0002:0000fd50 ?Set_hNotify@@YAXHPAX@Z 10020d50 f vJoyInterface.obj + 0002:0000fed0 ?Set_stat@@YAXHW4VjdStat@@@Z 10020ed0 f vJoyInterface.obj + 0002:00010020 ?StartLogging@@YAXXZ 10021020 f vJoyInterface.obj + 0002:00010320 ?Sync_Position@@YAXH@Z 10021320 f vJoyInterface.obj + 0002:000104f0 ?Update@@YAHI@Z 100214f0 f vJoyInterface.obj + 0002:000108c0 ?WndProc@@YGJPAUHWND__@@IIJ@Z 100218c0 f vJoyInterface.obj + 0002:00010a70 ?_Adjust_manually_vector_aligned@std@@YAXAAPAXAAI@Z 10021a70 f i vJoyInterface.obj + 0002:00010c40 ?_Adopt@_Iterator_base0@std@@QAEXPBX@Z 10021c40 f i vJoyInterface.obj + 0002:00010c90 ?_Adopt@_Iterator_base12@std@@QAEXPBU_Container_base12@2@@Z 10021c90 f i vJoyInterface.obj + 0002:00010cf0 ?_Adopt_locked@_Iterator_base12@std@@AAEXPBU_Container_base12@2@@Z 10021cf0 f i vJoyInterface.obj + 0002:00010dc0 ?_Adopt_unlocked@_Iterator_base12@std@@AAEXPBU_Container_base12@2@@Z 10021dc0 f i vJoyInterface.obj + 0002:00010e80 ?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEXXZ 10021e80 f i vJoyInterface.obj + 0002:00010fd0 ?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEXXZ 10021fd0 f i vJoyInterface.obj + 0002:00011120 ?_Allocate@?$_Alloc_construct_ptr@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAEXXZ 10022120 f i vJoyInterface.obj + 0002:00011190 ?_Allocate@_Default_allocate_traits@std@@SAPAXI@Z 10022190 f i vJoyInterface.obj + 0002:000111f0 ?_Assign_locked@_Iterator_base12@std@@AAEXABU12@@Z 100221f0 f i vJoyInterface.obj + 0002:000112c0 ?_Assign_unlocked@_Iterator_base12@std@@AAEXABU12@@Z 100222c0 f i vJoyInterface.obj + 0002:00011350 ?_Check_grow_by_1@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEXXZ 10022350 f i vJoyInterface.obj + 0002:000113c0 ?_Erase@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@AAEIU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@2@@Z 100223c0 f i vJoyInterface.obj + 0002:000114f0 ?_Erase_unchecked@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@AAEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@V?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@2@0@Z 100224f0 f i vJoyInterface.obj + 0002:00011600 ?_Erase_unchecked@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@AAEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@V?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@2@@Z 10022600 f i vJoyInterface.obj + 0002:000116f0 ?_Extract@?$_In_place_key_extract_map@HHUDeviceStat@@@std@@SAABHABHABUDeviceStat@@@Z 100226f0 f i vJoyInterface.obj + 0002:00011740 ?_Extract@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@V?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@2@@Z 10022740 f i vJoyInterface.obj + 0002:00011cd0 ?_Get_first@?$_Compressed_pair@U?$less@H@std@@V?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@$00@2@$00@std@@QBEABU?$less@H@2@XZ 10022cd0 f i vJoyInterface.obj + 0002:00011d30 ?_Get_first@?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@$00@std@@QAEAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@XZ 10022d30 f i vJoyInterface.obj + 0002:00011d90 ?_Get_first@?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@$00@std@@QBEABV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@XZ 10022d90 f i vJoyInterface.obj + 0002:00011df0 ?_Get_first@?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@2@$00@std@@QAEAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@2@XZ 10022df0 f i vJoyInterface.obj + 0002:00011e50 ?_Get_scary@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEPAV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@XZ 10022e50 f i vJoyInterface.obj + 0002:00011eb0 ?_Get_scary@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBEPBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@XZ 10022eb0 f i vJoyInterface.obj + 0002:00011f10 ?_Get_scary@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEPAV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@2@XZ 10022f10 f i vJoyInterface.obj + 0002:00011f70 ?_Getal@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@XZ 10022f70 f i vJoyInterface.obj + 0002:00011fd0 ?_Getal@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBEABV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@XZ 10022fd0 f i vJoyInterface.obj + 0002:00012030 ?_Getal@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@2@XZ 10023030 f i vJoyInterface.obj + 0002:00012090 ?_Getcomp@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBEABU?$less@H@2@XZ 10023090 f i vJoyInterface.obj + 0002:000120f0 ?_Getcont@_Iterator_base12@std@@QBEPBU_Container_base12@2@XZ 100230f0 f i vJoyInterface.obj + 0002:00012170 ?_Insert_node@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@U?$_Tree_id@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@QAU32@@Z 10023170 f i vJoyInterface.obj + 0002:00012440 ?_Lrotate@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEXPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@@Z 10023440 f i vJoyInterface.obj + 0002:00012540 ?_Max@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@SAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@PAU32@@Z 10023540 f i vJoyInterface.obj + 0002:000125b0 ?_Min@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@SAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@PAU32@@Z 100235b0 f i vJoyInterface.obj + 0002:00012620 ?_Orphan_all@_Container_base12@std@@QAEXXZ 10023620 f i vJoyInterface.obj + 0002:00012680 ?_Orphan_all_locked_v3@_Container_base12@std@@AAEXXZ 10023680 f i vJoyInterface.obj + 0002:00012740 ?_Orphan_all_unlocked_v3@_Container_base12@std@@AAEXXZ 10023740 f i vJoyInterface.obj + 0002:000127f0 ?_Orphan_me_locked_v3@_Iterator_base12@std@@AAEXXZ 100237f0 f i vJoyInterface.obj + 0002:000128b0 ?_Orphan_me_unlocked_v3@_Iterator_base12@std@@AAEXXZ 100238b0 f i vJoyInterface.obj + 0002:000129e0 ?_Orphan_ptr@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEXQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@@Z 100239e0 f i vJoyInterface.obj + 0002:00012b10 ?_Orphan_ptr@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@std@@QAEXQAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@2@@Z 10023b10 f i vJoyInterface.obj + 0002:00012c40 ?_Release@?$_Alloc_construct_ptr@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@XZ 10023c40 f i vJoyInterface.obj + 0002:00012cc0 ?_Release@_Basic_container_proxy_ptr12@std@@QAEXXZ 10023cc0 f i vJoyInterface.obj + 0002:00012d20 ?_Rrotate@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEXPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@@Z 10023d20 f i vJoyInterface.obj + 0002:00012e30 ?_Throw_bad_array_new_length@std@@YAXXZ 10023e30 f i vJoyInterface.obj + 0002:00012ea0 ?_Throw_tree_length_error@std@@YAXXZ 10023ea0 f i vJoyInterface.obj + 0002:00012ef0 ?_Unchecked_begin@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAE?AV?$_Tree_unchecked_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@2@XZ 10023ef0 f i vJoyInterface.obj + 0002:00012f70 ?allocate@?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@QAEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@I@Z 10023f70 f i vJoyInterface.obj + 0002:00012fe0 ?allocate@?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@QAEPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@2@I@Z 10023fe0 f i vJoyInterface.obj + 0002:00013050 ?allocate@?$allocator@U_Container_proxy@std@@@std@@QAEPAU_Container_proxy@2@I@Z 10024050 f i vJoyInterface.obj + 0002:000130c0 ?clear@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAEXXZ 100240c0 f i vJoyInterface.obj + 0002:00013180 ?clear@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@QAEXXZ 10024180 f i vJoyInterface.obj + 0002:00013240 ?deallocate@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@QAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@I@Z 10024240 f i vJoyInterface.obj + 0002:000132a0 ?deallocate@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@2@QAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@2@I@Z 100242a0 f i vJoyInterface.obj + 0002:00013300 ?deallocate@?$_Default_allocator_traits@V?$allocator@U_Container_proxy@std@@@std@@@std@@SAXAAV?$allocator@U_Container_proxy@std@@@2@QAU_Container_proxy@2@I@Z 10024300 f i vJoyInterface.obj + 0002:00013360 ?deallocate@?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@QAEXQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@I@Z 10024360 f i vJoyInterface.obj + 0002:00013460 ?empty@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QBE_NXZ 10024460 f i vJoyInterface.obj + 0002:000134f0 ?end@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAE?AV?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@2@XZ 100244f0 f i vJoyInterface.obj + 0002:00013570 ?erase@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAEIABH@Z 10024570 f i vJoyInterface.obj + 0002:000135f0 ?find@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAE?AV?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@2@ABH@Z 100245f0 f i vJoyInterface.obj + 0002:00013690 ?isRawDevice@@YA_NPBDH@Z 10024690 f vJoyInterface.obj + 0002:00013920 ?max@?$numeric_limits@H@std@@SAHXZ 10024920 f i vJoyInterface.obj + 0002:00013970 ?max_size@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@SAIABV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@@Z 10024970 f i vJoyInterface.obj + 0002:000139c0 ?max_size@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QBEIXZ 100249c0 f i vJoyInterface.obj + 0002:00013a60 ?size@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QBEIXZ 10024a60 f i vJoyInterface.obj + 0002:00013ac0 ?strstr@@YAPADQADQBD@Z 10024ac0 f i vJoyInterface.obj + 0002:00013b20 ?vJoyDeviceClear@@YAXXZ 10024b20 f vJoyInterface.obj + 0002:00013b70 ?vJoyDeviceEntry@@YAHH@Z 10024b70 f vJoyInterface.obj + 0002:00013db0 ?vJoyDeviceRemove@@YAHH@Z 10024db0 f vJoyInterface.obj + 0002:00013fd0 ?what@exception@std@@UBEPBDXZ 10024fd0 f i vJoyInterface.obj + 0002:00014050 _AcquireVJD 10025050 f vJoyInterface.obj + 0002:000141d0 _DeviceChange 100251d0 f vJoyInterface.obj + 0002:00014440 _DriverMatch 10025440 f vJoyInterface.obj + 0002:00014500 _FfbGetEffect 10025500 f vJoyInterface.obj + 0002:00014560 _FfbIsStarted 10025560 f vJoyInterface.obj + 0002:000148d0 _FfbProcessData 100258d0 f vJoyInterface.obj + 0002:00014940 _FfbRegisterGenCB 10025940 f vJoyInterface.obj + 0002:000149a0 _FfbSendData 100259a0 f vJoyInterface.obj + 0002:00014aa0 _FfbStart 10025aa0 f vJoyInterface.obj + 0002:00014b30 _FfbStartThread 10025b30 f vJoyInterface.obj + 0002:00014c90 _FfbStop 10025c90 f vJoyInterface.obj + 0002:00014ce0 _FfbWaitForData@4 10025ce0 f vJoyInterface.obj + 0002:00015110 _Ffb_h_DevCtrl 10026110 f vJoyInterface.obj + 0002:00015210 _Ffb_h_DevGain 10026210 f vJoyInterface.obj + 0002:00015310 _Ffb_h_DeviceID 10026310 f vJoyInterface.obj + 0002:000153c0 _Ffb_h_EBI 100263c0 f vJoyInterface.obj + 0002:000154d0 _Ffb_h_EffNew 100264d0 f vJoyInterface.obj + 0002:000155d0 _Ffb_h_EffOp 100265d0 f vJoyInterface.obj + 0002:00015700 _Ffb_h_Eff_Cond 10026700 f vJoyInterface.obj + 0002:00015980 _Ffb_h_Eff_Constant 10026980 f vJoyInterface.obj + 0002:00015ab0 _Ffb_h_Eff_Envlp 10026ab0 f vJoyInterface.obj + 0002:00015d10 _Ffb_h_Eff_Period 10026d10 f vJoyInterface.obj + 0002:00015f40 _Ffb_h_Eff_Ramp 10026f40 f vJoyInterface.obj + 0002:000160b0 _Ffb_h_Eff_Report 100270b0 f vJoyInterface.obj + 0002:00016370 _Ffb_h_Packet 10027370 f vJoyInterface.obj + 0002:00016410 _Ffb_h_Type 10027410 f vJoyInterface.obj + 0002:000164c0 _GetNumberExistingVJD 100274c0 f vJoyInterface.obj + 0002:000165f0 _GetOwnerPid 100275f0 f vJoyInterface.obj + 0002:000167f0 _GetVJDAxisExist 100277f0 f vJoyInterface.obj + 0002:00016af0 _GetVJDAxisMax 10027af0 f vJoyInterface.obj + 0002:00016bc0 _GetVJDAxisMin 10027bc0 f vJoyInterface.obj + 0002:00016c90 _GetVJDButtonNumber 10027c90 f vJoyInterface.obj + 0002:00017440 _GetVJDContPovNumber 10028440 f vJoyInterface.obj + 0002:000177b0 _GetVJDDiscPovNumber 100287b0 f vJoyInterface.obj + 0002:00017b30 _GetVJDStatus 10028b30 f vJoyInterface.obj + 0002:00017e00 _GetvJoyManufacturerString 10028e00 f vJoyInterface.obj + 0002:00017ef0 _GetvJoyMaxDevices 10028ef0 f vJoyInterface.obj + 0002:00018020 _GetvJoyProductString 10029020 f vJoyInterface.obj + 0002:00018110 _GetvJoySerialNumberString 10029110 f vJoyInterface.obj + 0002:00018200 _GetvJoyVersion 10029200 f vJoyInterface.obj + 0002:000182f0 _IsDeviceFfb 100292f0 f vJoyInterface.obj + 0002:00018630 _IsDeviceFfbEffect 10029630 f vJoyInterface.obj + 0002:000189e0 _RegisterRemovalCB 100299e0 f vJoyInterface.obj + 0002:00018a40 _RelinquishVJD 10029a40 f vJoyInterface.obj + 0002:00018af0 _ResetAll 10029af0 f vJoyInterface.obj + 0002:00018b40 _ResetButtons 10029b40 f vJoyInterface.obj + 0002:00018d30 _ResetPovs 10029d30 f vJoyInterface.obj + 0002:000190a0 _ResetVJD 1002a0a0 f vJoyInterface.obj + 0002:00019380 _RtlSecureZeroMemory 1002a380 f i vJoyInterface.obj + 0002:00019400 _SetAxis 1002a400 f vJoyInterface.obj + 0002:000196b0 _SetBtn 1002a6b0 f vJoyInterface.obj + 0002:00019900 _SetContPov 1002a900 f vJoyInterface.obj + 0002:00019b40 _SetDiscPov 1002ab40 f vJoyInterface.obj + 0002:00019cc0 _UpdateVJD 1002acc0 f vJoyInterface.obj + 0002:00019d30 ___local_stdio_printf_options 1002ad30 f i vJoyInterface.obj + 0002:00019d80 ___local_stdio_scanf_options 1002ad80 f i vJoyInterface.obj + 0002:00019dd0 __vfprintf_s_l 1002add0 f i vJoyInterface.obj + 0002:00019e50 __vsprintf_s_l 1002ae50 f i vJoyInterface.obj + 0002:00019f10 __vsscanf_s_l 1002af10 f i vJoyInterface.obj + 0002:00019fa0 __vswprintf_s_l 1002afa0 f i vJoyInterface.obj + 0002:0001a060 _fprintf_s 1002b060 f i vJoyInterface.obj + 0002:0001a0e0 _isVJDExists 1002b0e0 f vJoyInterface.obj + 0002:0001a240 _isVJDOpen 1002b240 f vJoyInterface.obj + 0002:0001a310 _sprintf_s 1002b310 f i vJoyInterface.obj + 0002:0001a390 _sscanf_s 1002b390 f i vJoyInterface.obj + 0002:0001a410 _swprintf_s 1002b410 f i vJoyInterface.obj + 0002:0001a490 _vJoyEnabled 1002b490 f vJoyInterface.obj + 0002:0001a560 _vJoyFfbCap 1002b560 f vJoyInterface.obj + 0002:0001a690 _vsscanf_s 1002b690 f i vJoyInterface.obj + 0002:0001a6ed _SetupDiDestroyDeviceInfoList@4 1002b6ed f setupapi:SETUPAPI.dll + 0002:0001a6f3 _SetupDiEnumDeviceInterfaces@20 1002b6f3 f setupapi:SETUPAPI.dll + 0002:0001a6f9 _SetupDiGetDeviceInterfaceDetailA@24 1002b6f9 f setupapi:SETUPAPI.dll + 0002:0001a6ff _SetupDiGetClassDevsA@16 1002b6ff f setupapi:SETUPAPI.dll + 0002:0001a705 _HidP_GetCaps@8 1002b705 f hid:HID.DLL + 0002:0001a70b _HidP_GetLinkCollectionNodes@12 1002b70b f hid:HID.DLL + 0002:0001a711 _HidP_GetButtonCaps@16 1002b711 f hid:HID.DLL + 0002:0001a717 _HidP_GetSpecificValueCaps@28 1002b717 f hid:HID.DLL + 0002:0001a71d _HidP_GetValueCaps@16 1002b71d f hid:HID.DLL + 0002:0001a723 _HidP_GetUsageValue@32 1002b723 f hid:HID.DLL + 0002:0001a729 _HidD_GetAttributes@8 1002b729 f hid:HID.DLL + 0002:0001a72f _HidD_GetHidGuid@4 1002b72f f hid:HID.DLL + 0002:0001a735 _HidD_GetPreparsedData@8 1002b735 f hid:HID.DLL + 0002:0001a73b _HidD_FreePreparsedData@4 1002b73b f hid:HID.DLL + 0002:0001a741 _HidD_GetManufacturerString@12 1002b741 f hid:HID.DLL + 0002:0001a747 _HidD_GetProductString@12 1002b747 f hid:HID.DLL + 0002:0001a74d _HidD_GetSerialNumberString@12 1002b74d f hid:HID.DLL + 0002:0001a753 _GetCommandLineA@0 1002b753 f kernel32:KERNEL32.dll + 0002:0001a759 _GetEnvironmentVariableA@12 1002b759 f kernel32:KERNEL32.dll + 0002:0001a75f _CreateFileA@28 1002b75f f kernel32:KERNEL32.dll + 0002:0001a765 _CloseHandle@4 1002b765 f kernel32:KERNEL32.dll + 0002:0001a76b _GetLastError@0 1002b76b f kernel32:KERNEL32.dll + 0002:0001a771 _DeviceIoControl@32 1002b771 f kernel32:KERNEL32.dll + 0002:0001a777 _GetOverlappedResult@16 1002b777 f kernel32:KERNEL32.dll + 0002:0001a77d _SetEvent@4 1002b77d f kernel32:KERNEL32.dll + 0002:0001a783 _WaitForSingleObject@8 1002b783 f kernel32:KERNEL32.dll + 0002:0001a789 _CreateEventA@16 1002b789 f kernel32:KERNEL32.dll + 0002:0001a78f _GetCurrentProcessId@0 1002b78f f kernel32:KERNEL32.dll + 0002:0001a795 _CreateThread@24 1002b795 f kernel32:KERNEL32.dll + 0002:0001a79b _GetModuleHandleA@4 1002b79b f kernel32:KERNEL32.dll + 0002:0001a7a1 _LocalAlloc@8 1002b7a1 f kernel32:KERNEL32.dll + 0002:0001a7a7 _LocalFree@4 1002b7a7 f kernel32:KERNEL32.dll + 0002:0001a7ad _GetMessageA@16 1002b7ad f user32:USER32.dll + 0002:0001a7b3 _TranslateMessage@4 1002b7b3 f user32:USER32.dll + 0002:0001a7b9 _DispatchMessageA@4 1002b7b9 f user32:USER32.dll + 0002:0001a7bf _SendMessageA@16 1002b7bf f user32:USER32.dll + 0002:0001a7c5 _RegisterDeviceNotificationA@12 1002b7c5 f user32:USER32.dll + 0002:0001a7cb _UnregisterDeviceNotification@4 1002b7cb f user32:USER32.dll + 0002:0001a7d1 _DefWindowProcA@16 1002b7d1 f user32:USER32.dll + 0002:0001a7d7 _PostQuitMessage@4 1002b7d7 f user32:USER32.dll + 0002:0001a7dd _RegisterClassExA@4 1002b7dd f user32:USER32.dll + 0002:0001a7e3 _CreateWindowExA@48 1002b7e3 f user32:USER32.dll + 0002:0001a7e9 _ShowWindow@8 1002b7e9 f user32:USER32.dll + 0002:0001a7ef _UpdateWindow@4 1002b7ef f user32:USER32.dll + 0002:0001a7f5 _BeginPaint@8 1002b7f5 f user32:USER32.dll + 0002:0001a7fb _EndPaint@8 1002b7fb f user32:USER32.dll + 0002:0001a801 _MessageBoxA@16 1002b801 f user32:USER32.dll + 0002:0001a807 _LoadCursorA@8 1002b807 f user32:USER32.dll + 0002:0001a80d _LoadIconA@8 1002b80d f user32:USER32.dll + 0002:0001a813 _RegCloseKey@4 1002b813 f advapi32:ADVAPI32.dll + 0002:0001a819 _RegOpenKeyExW@20 1002b819 f advapi32:ADVAPI32.dll + 0002:0001a81f _RegGetValueW@28 1002b81f f advapi32:ADVAPI32.dll + 0002:0001a825 ??0_Lockit@std@@QAE@H@Z 1002b825 f msvcprtd:MSVCP140D.dll + 0002:0001a82b ??1_Lockit@std@@QAE@XZ 1002b82b f msvcprtd:MSVCP140D.dll + 0002:0001a831 ?_Xlength_error@std@@YAXPBD@Z 1002b831 f msvcprtd:MSVCP140D.dll + 0002:0001a840 ??2@YAPAXI@Z 1002b840 f MSVCRTD:new_scalar.obj + 0002:0001a8a0 ??3@YAXPAXI@Z 1002b8a0 f MSVCRTD:delete_scalar_size.obj + 0002:0001a8c0 ??_U@YAPAXI@Z 1002b8c0 f MSVCRTD:new_array.obj + 0002:0001a8e0 ??_V@YAXPAX@Z 1002b8e0 f MSVCRTD:delete_array.obj + 0002:0001a900 ?configure_argv@__scrt_narrow_argv_policy@@SAHXZ 1002b900 f i MSVCRTD:utility.obj + 0002:0001a9d0 ?initialize_environment@__scrt_narrow_environment_policy@@SAHXZ 1002b9d0 f i MSVCRTD:utility.obj + 0002:0001aa70 _NtCurrentTeb 1002ba70 f i MSVCRTD:utility.obj + 0002:0001aa80 ___scrt_acquire_startup_lock 1002ba80 f MSVCRTD:utility.obj + 0002:0001aae0 ___scrt_dllmain_after_initialize_c 1002bae0 f MSVCRTD:utility.obj + 0002:0001ab20 ___scrt_dllmain_before_initialize_c 1002bb20 f MSVCRTD:utility.obj + 0002:0001ab50 ___scrt_dllmain_crt_thread_attach 1002bb50 f MSVCRTD:utility.obj + 0002:0001ab90 ___scrt_dllmain_crt_thread_detach 1002bb90 f MSVCRTD:utility.obj + 0002:0001abb0 ___scrt_dllmain_exception_filter 1002bbb0 f MSVCRTD:utility.obj + 0002:0001ac10 ___scrt_dllmain_uninitialize_c 1002bc10 f MSVCRTD:utility.obj + 0002:0001ac50 ___scrt_dllmain_uninitialize_critical 1002bc50 f MSVCRTD:utility.obj + 0002:0001ac70 ___scrt_initialize_crt 1002bc70 f MSVCRTD:utility.obj + 0002:0001acd0 ___scrt_initialize_onexit_tables 1002bcd0 f MSVCRTD:utility.obj + 0002:0001ade0 ___scrt_is_nonwritable_in_current_image 1002bde0 f MSVCRTD:utility.obj + 0002:0001af60 ___scrt_release_startup_lock 1002bf60 f MSVCRTD:utility.obj + 0002:0001af90 ___scrt_uninitialize_crt 1002bf90 f MSVCRTD:utility.obj + 0002:0001afe0 __onexit 1002bfe0 f MSVCRTD:utility.obj + 0002:0001b060 _at_quick_exit 1002c060 f MSVCRTD:utility.obj + 0002:0001b0b0 _atexit 1002c0b0 f MSVCRTD:utility.obj + 0002:0001b0f0 @_RTC_AllocaHelper@12 1002c0f0 f MSVCRTD:stack.obj + 0002:0001b130 @_RTC_CheckStackVars2@12 1002c130 f MSVCRTD:stack.obj + 0002:0001b240 @_RTC_CheckStackVars@8 1002c240 f MSVCRTD:stack.obj + 0002:0001b2b0 __RTC_CheckEsp 1002c2b0 f MSVCRTD:stack.obj + 0002:0001b2e0 @__CheckForDebuggerJustMyCode@4 1002c2e0 f MSVCRTD:debugger_jmc.obj + 0002:0001b330 @__security_check_cookie@4 1002c330 f MSVCRTD:secchk.obj + 0002:0001b350 __CRT_RTC_INIT 1002c350 f MSVCRTD:init.obj + 0002:0001b360 __CRT_RTC_INITW 1002c360 f MSVCRTD:init.obj + 0002:0001b370 __RTC_InitBase 1002c370 f MSVCRTD:init.obj + 0002:0001b3b0 __RTC_Shutdown 1002c3b0 f MSVCRTD:init.obj + 0002:0001b3d0 __alloca_probe 1002c3d0 f MSVCRTD:chkstk.obj + 0002:0001b3d0 __chkstk 1002c3d0 f MSVCRTD:chkstk.obj + 0002:0001b410 ??1type_info@@UAE@XZ 1002c410 f MSVCRTD:std_type_info_static.obj + 0002:0001b430 ??_Etype_info@@UAEPAXI@Z 1002c430 f i MSVCRTD:std_type_info_static.obj + 0002:0001b430 ??_Gtype_info@@UAEPAXI@Z 1002c430 f i MSVCRTD:std_type_info_static.obj + 0002:0001ba70 __CRT_INIT@12 1002ca70 f MSVCRTD:dll_dllmain.obj + 0002:0001ba90 __DllMainCRTStartup@12 1002ca90 f MSVCRTD:dll_dllmain.obj + 0002:0001bac0 ??0bad_alloc@std@@QAE@XZ 1002cac0 f i MSVCRTD:throw_bad_alloc.obj + 0002:0001baf0 ?__scrt_throw_std_bad_alloc@@YAXXZ 1002caf0 f MSVCRTD:throw_bad_alloc.obj + 0002:0001bb20 ?__scrt_throw_std_bad_array_new_length@@YAXXZ 1002cb20 f MSVCRTD:throw_bad_alloc.obj + 0002:0001bb50 ??3@YAXPAX@Z 1002cb50 f MSVCRTD:delete_scalar.obj + 0002:0001bb70 ___isa_available_init 1002cb70 f MSVCRTD:cpu_disp.obj + 0002:0001bf70 __get_startup_argv_mode 1002cf70 f MSVCRTD:argv_mode.obj + 0002:0001bf80 ___scrt_is_ucrt_dll_in_use 1002cf80 f MSVCRTD:ucrt_detection.obj + 0002:0001bfb0 ___scrt_fastfail 1002cfb0 f MSVCRTD:utility_desktop.obj + 0002:0001c140 ___scrt_get_show_window_mode 1002d140 f MSVCRTD:utility_desktop.obj + 0002:0001c190 ___scrt_initialize_mta 1002d190 f MSVCRTD:utility_desktop.obj + 0002:0001c1a0 ___scrt_initialize_winrt 1002d1a0 f MSVCRTD:utility_desktop.obj + 0002:0001c1b0 ___scrt_is_managed_app 1002d1b0 f MSVCRTD:utility_desktop.obj + 0002:0001c260 ___scrt_set_unhandled_exception_filter 1002d260 f MSVCRTD:utility_desktop.obj + 0002:0001c280 ___scrt_exe_initialize_mta 1002d280 f MSVCRTD:utility_desktop.obj + 0002:0001c280 ___scrt_stub_for_initialize_mta 1002d280 f MSVCRTD:utility_desktop.obj + 0002:0001c290 ___scrt_unhandled_exception_filter@4 1002d290 f MSVCRTD:utility_desktop.obj + 0002:0001c330 __crt_debugger_hook 1002d330 f MSVCRTD:utility_desktop.obj + 0002:0001c350 __except_handler4 1002d350 f MSVCRTD:chandler4gs.obj + 0002:0001c3a0 @_guard_check_icall_nop@4 1002d3a0 f i MSVCRTD:guard_support.obj + 0002:0001c3b0 _ReadNoFence 1002d3b0 f i MSVCRTD:guard_support.obj + 0002:0001c3d0 _ReadPointerNoFence 1002d3d0 f i MSVCRTD:guard_support.obj + 0002:0001c3f0 ___castguard_check_failure_debugbreak 1002d3f0 f i MSVCRTD:guard_support.obj + 0002:0001c410 ___castguard_check_failure_fastfail 1002d410 f i MSVCRTD:guard_support.obj + 0002:0001c440 ___castguard_check_failure_nop 1002d440 f i MSVCRTD:guard_support.obj + 0002:0001c450 ___castguard_check_failure_os_handled 1002d450 f i MSVCRTD:guard_support.obj + 0002:0001c500 ___castguard_slow_path_check_debugbreak 1002d500 f i MSVCRTD:guard_support.obj + 0002:0001c540 ___castguard_slow_path_check_fastfail 1002d540 f i MSVCRTD:guard_support.obj + 0002:0001c590 ___castguard_slow_path_check_nop 1002d590 f i MSVCRTD:guard_support.obj + 0002:0001c5a0 ___castguard_slow_path_check_os_handled 1002d5a0 f i MSVCRTD:guard_support.obj + 0002:0001c640 __guard_icall_checks_enforced 1002d640 f i MSVCRTD:guard_support.obj + 0002:0001c730 ?_RTC_AllocaFailure@@YAXPAXPAU_RTC_ALLOCA_NODE@@H@Z 1002d730 f MSVCRTD:error.obj + 0002:0001c850 ?_RTC_Failure@@YAXPAXH@Z 1002d850 f MSVCRTD:error.obj + 0002:0001c8c0 ?_RTC_StackFailure@@YAXPAXPBD@Z 1002d8c0 f MSVCRTD:error.obj + 0002:0001cd70 __RTC_UninitUse 1002dd70 f MSVCRTD:error.obj + 0002:0001ce50 ___raise_securityfailure 1002de50 f MSVCRTD:gs_report.obj + 0002:0001ce90 ___report_gsfailure 1002de90 f MSVCRTD:gs_report.obj + 0002:0001cfe0 ___report_rangecheckfailure 1002dfe0 f MSVCRTD:gs_report.obj + 0002:0001cff0 ___report_securityfailure 1002dff0 f MSVCRTD:gs_report.obj + 0002:0001d100 ___report_securityfailureEx 1002e100 f MSVCRTD:gs_report.obj + 0002:0001d270 ?_RTC_GetErrorFunc@@YAP6AHHPBDH00ZZPBX@Z 1002e270 f MSVCRTD:userapi.obj + 0002:0001d280 ?_RTC_GetErrorFuncW@@YAP6AHHPB_WH00ZZPBX@Z 1002e280 f MSVCRTD:userapi.obj + 0002:0001d290 __RTC_GetErrDesc 1002e290 f MSVCRTD:userapi.obj + 0002:0001d2b0 __RTC_NumErrors 1002e2b0 f MSVCRTD:userapi.obj + 0002:0001d2c0 __RTC_SetErrorFunc 1002e2c0 f MSVCRTD:userapi.obj + 0002:0001d2f0 __RTC_SetErrorFuncW 1002e2f0 f MSVCRTD:userapi.obj + 0002:0001d320 __RTC_SetErrorType 1002e320 f MSVCRTD:userapi.obj + 0002:0001d3e0 ___security_init_cookie 1002e3e0 f MSVCRTD:gs_support.obj + 0002:0001d480 _DllMain@12 1002e480 f MSVCRTD:dll_dllmain_stub.obj + 0002:0001d4b0 ?__scrt_initialize_type_info@@YAXXZ 1002e4b0 f MSVCRTD:tncleanup.obj + 0002:0001d4d0 ?__scrt_uninitialize_type_info@@YAXXZ 1002e4d0 f MSVCRTD:tncleanup.obj + 0002:0001d4f0 ___scrt_initialize_default_local_stdio_options 1002e4f0 f MSVCRTD:default_local_stdio_options.obj + 0002:0001d540 ___scrt_get_dyn_tls_init_callback 1002e540 f MSVCRTD:dyn_tls_init.obj + 0002:0001d550 __RTC_Initialize 1002e550 f MSVCRTD:initsect.obj + 0002:0001d590 __RTC_Terminate 1002e590 f MSVCRTD:initsect.obj + 0002:0001db70 ?_RTC_GetSrcLine@@YAHPAEPA_WKPAH1K@Z 1002eb70 f MSVCRTD:pdblkup.obj + 0002:0001dfd0 __except_handler4_noexcept 1002efd0 f MSVCRTD:chandler4_noexcept.obj + 0002:0001e041 _memcpy 1002f041 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e047 _memset 1002f047 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e04d _strrchr 1002f04d f vcruntimed:VCRUNTIME140D.dll + 0002:0001e053 _strstr 1002f053 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e059 ___std_exception_copy 1002f059 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e05f ___std_exception_destroy 1002f05f f vcruntimed:VCRUNTIME140D.dll + 0002:0001e065 __CxxThrowException@8 1002f065 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e06b ___CxxFrameHandler3 1002f06b f vcruntimed:VCRUNTIME140D.dll + 0002:0001e071 ___current_exception 1002f071 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e077 ___current_exception_context 1002f077 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e07d __except_handler4_common 1002f07d f vcruntimed:VCRUNTIME140D.dll + 0002:0001e083 ___std_type_info_destroy_list 1002f083 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e089 ___vcrt_GetModuleFileNameW 1002f089 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e08f ___vcrt_GetModuleHandleW 1002f08f f vcruntimed:VCRUNTIME140D.dll + 0002:0001e095 ___vcrt_LoadLibraryExW 1002f095 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e09b __invalid_parameter 1002f09b f ucrtd:ucrtbased.dll + 0002:0001e0a1 __wcsdup 1002f0a1 f ucrtd:ucrtbased.dll + 0002:0001e0a7 _wcslen 1002f0a7 f ucrtd:ucrtbased.dll + 0002:0001e0ad __strdup 1002f0ad f ucrtd:ucrtbased.dll + 0002:0001e0b3 _strlen 1002f0b3 f ucrtd:ucrtbased.dll + 0002:0001e0b9 __strlwr_s 1002f0b9 f ucrtd:ucrtbased.dll + 0002:0001e0bf _strncpy 1002f0bf f ucrtd:ucrtbased.dll + 0002:0001e0c5 _calloc 1002f0c5 f ucrtd:ucrtbased.dll + 0002:0001e0cb _free 1002f0cb f ucrtd:ucrtbased.dll + 0002:0001e0d1 _atoi 1002f0d1 f ucrtd:ucrtbased.dll + 0002:0001e0d7 _wcstombs 1002f0d7 f ucrtd:ucrtbased.dll + 0002:0001e0dd ___stdio_common_vswprintf_s 1002f0dd f ucrtd:ucrtbased.dll + 0002:0001e0e3 _fopen_s 1002f0e3 f ucrtd:ucrtbased.dll + 0002:0001e0e9 ___stdio_common_vfprintf_s 1002f0e9 f ucrtd:ucrtbased.dll + 0002:0001e0ef ___stdio_common_vsprintf_s 1002f0ef f ucrtd:ucrtbased.dll + 0002:0001e0f5 ___stdio_common_vsscanf 1002f0f5 f ucrtd:ucrtbased.dll + 0002:0001e0fb __CrtDbgReport 1002f0fb f ucrtd:ucrtbased.dll + 0002:0001e101 __callnewh 1002f101 f ucrtd:ucrtbased.dll + 0002:0001e107 _malloc 1002f107 f ucrtd:ucrtbased.dll + 0002:0001e10d __seh_filter_dll 1002f10d f ucrtd:ucrtbased.dll + 0002:0001e113 __configure_narrow_argv 1002f113 f ucrtd:ucrtbased.dll + 0002:0001e119 __initialize_narrow_environment 1002f119 f ucrtd:ucrtbased.dll + 0002:0001e11f __initialize_onexit_table 1002f11f f ucrtd:ucrtbased.dll + 0002:0001e125 __register_onexit_function 1002f125 f ucrtd:ucrtbased.dll + 0002:0001e12b __execute_onexit_table 1002f12b f ucrtd:ucrtbased.dll + 0002:0001e131 __crt_atexit 1002f131 f ucrtd:ucrtbased.dll + 0002:0001e137 __crt_at_quick_exit 1002f137 f ucrtd:ucrtbased.dll + 0002:0001e13d __cexit 1002f13d f ucrtd:ucrtbased.dll + 0002:0001e143 __CrtDbgReportW 1002f143 f ucrtd:ucrtbased.dll + 0002:0001e149 __initterm 1002f149 f ucrtd:ucrtbased.dll + 0002:0001e14f __initterm_e 1002f14f f ucrtd:ucrtbased.dll + 0002:0001e155 __free_dbg 1002f155 f ucrtd:ucrtbased.dll + 0002:0001e15b _terminate 1002f15b f ucrtd:ucrtbased.dll + 0002:0001e161 _strcpy_s 1002f161 f ucrtd:ucrtbased.dll + 0002:0001e167 _strcat_s 1002f167 f ucrtd:ucrtbased.dll + 0002:0001e16d __wmakepath_s 1002f16d f ucrtd:ucrtbased.dll + 0002:0001e173 __wsplitpath_s 1002f173 f ucrtd:ucrtbased.dll + 0002:0001e179 _wcscpy_s 1002f179 f ucrtd:ucrtbased.dll + 0002:0001e17f _GetCurrentThreadId@0 1002f17f f kernel32:KERNEL32.dll + 0002:0001e185 _IsProcessorFeaturePresent@4 1002f185 f kernel32:KERNEL32.dll + 0002:0001e18b _IsDebuggerPresent@0 1002f18b f kernel32:KERNEL32.dll + 0002:0001e191 _UnhandledExceptionFilter@4 1002f191 f kernel32:KERNEL32.dll + 0002:0001e197 _SetUnhandledExceptionFilter@4 1002f197 f kernel32:KERNEL32.dll + 0002:0001e19d _GetStartupInfoW@4 1002f19d f kernel32:KERNEL32.dll + 0002:0001e1a3 _GetModuleHandleW@4 1002f1a3 f kernel32:KERNEL32.dll + 0002:0001e1a9 _RaiseException@16 1002f1a9 f kernel32:KERNEL32.dll + 0002:0001e1af _MultiByteToWideChar@24 1002f1af f kernel32:KERNEL32.dll + 0002:0001e1b5 _WideCharToMultiByte@32 1002f1b5 f kernel32:KERNEL32.dll + 0002:0001e1bb _GetCurrentProcess@0 1002f1bb f kernel32:KERNEL32.dll + 0002:0001e1c1 _TerminateProcess@8 1002f1c1 f kernel32:KERNEL32.dll + 0002:0001e1c7 _QueryPerformanceCounter@4 1002f1c7 f kernel32:KERNEL32.dll + 0002:0001e1cd _GetSystemTimeAsFileTime@4 1002f1cd f kernel32:KERNEL32.dll + 0002:0001e1d3 _DisableThreadLibraryCalls@4 1002f1d3 f kernel32:KERNEL32.dll + 0002:0001e1d9 _InitializeSListHead@4 1002f1d9 f kernel32:KERNEL32.dll + 0002:0001e1df _HeapAlloc@12 1002f1df f kernel32:KERNEL32.dll + 0002:0001e1e5 _HeapFree@12 1002f1e5 f kernel32:KERNEL32.dll + 0002:0001e1eb _GetProcessHeap@0 1002f1eb f kernel32:KERNEL32.dll + 0002:0001e1f1 _VirtualQuery@12 1002f1f1 f kernel32:KERNEL32.dll + 0002:0001e1f7 _FreeLibrary@4 1002f1f7 f kernel32:KERNEL32.dll + 0002:0001e1fd _GetProcAddress@8 1002f1fd f kernel32:KERNEL32.dll + 0002:0001e210 ___acrt_initialize 1002f210 f MSVCRTD:ucrt_stubs.obj + 0002:0001e210 ___scrt_stub_for_acrt_initialize 1002f210 f MSVCRTD:ucrt_stubs.obj + 0002:0001e210 ___vcrt_initialize 1002f210 f MSVCRTD:ucrt_stubs.obj + 0002:0001e220 ___acrt_thread_attach 1002f220 f MSVCRTD:ucrt_stubs.obj + 0002:0001e220 ___scrt_stub_for_acrt_thread_attach 1002f220 f MSVCRTD:ucrt_stubs.obj + 0002:0001e220 ___vcrt_thread_attach 1002f220 f MSVCRTD:ucrt_stubs.obj + 0002:0001e230 ___acrt_thread_detach 1002f230 f MSVCRTD:ucrt_stubs.obj + 0002:0001e230 ___scrt_stub_for_acrt_thread_detach 1002f230 f MSVCRTD:ucrt_stubs.obj + 0002:0001e230 ___vcrt_thread_detach 1002f230 f MSVCRTD:ucrt_stubs.obj + 0002:0001e240 ___acrt_uninitialize 1002f240 f MSVCRTD:ucrt_stubs.obj + 0002:0001e240 ___scrt_stub_for_acrt_uninitialize 1002f240 f MSVCRTD:ucrt_stubs.obj + 0002:0001e240 ___vcrt_uninitialize 1002f240 f MSVCRTD:ucrt_stubs.obj + 0002:0001e250 ___acrt_uninitialize_critical 1002f250 f MSVCRTD:ucrt_stubs.obj + 0002:0001e250 ___scrt_stub_for_acrt_uninitialize_critical 1002f250 f MSVCRTD:ucrt_stubs.obj + 0002:0001e250 ___vcrt_uninitialize_critical 1002f250 f MSVCRTD:ucrt_stubs.obj + 0002:0001e260 ___scrt_stub_for_is_c_termination_complete 1002f260 f MSVCRTD:ucrt_stubs.obj + 0002:0001e260 __is_c_termination_complete 1002f260 f MSVCRTD:ucrt_stubs.obj + 0002:0001e270 __filter_x86_sse2_floating_point_exception 1002f270 f MSVCRTD:x86_exception_filter.obj + 0002:0001e270 __filter_x86_sse2_floating_point_exception_default 1002f270 f MSVCRTD:x86_exception_filter.obj + 0003:00000000 ___xc_a 10034000 MSVCRTD:initializers.obj + 0003:00000210 ___xc_z 10034210 MSVCRTD:initializers.obj + 0003:00000314 ___xi_a 10034314 MSVCRTD:initializers.obj + 0003:00000418 ___xi_z 10034418 MSVCRTD:initializers.obj + 0003:0000051c ___xp_a 1003451c MSVCRTD:initializers.obj + 0003:00000620 ___xp_z 10034620 MSVCRTD:initializers.obj + 0003:00000724 ___xt_a 10034724 MSVCRTD:initializers.obj + 0003:00000828 ___xt_z 10034828 MSVCRTD:initializers.obj + 0003:00000930 _GUID_DEVINTERFACE_VJOY 10034930 stdafx.obj + 0003:00000948 ??_7exception@std@@6B@ 10034948 vJoyInterface.obj + 0003:00000954 ??_C@_0BC@EOODALEL@Unknown?5exception@ 10034954 vJoyInterface.obj + 0003:00000970 ??_7bad_alloc@std@@6B@ 10034970 vJoyInterface.obj + 0003:00000980 ??_7bad_array_new_length@std@@6B@ 10034980 vJoyInterface.obj + 0003:0000098c ??_C@_0BF@KINCDENJ@bad?5array?5new?5length@ 1003498c vJoyInterface.obj + 0003:000009a8 ??_C@_0BB@FCMFBGOM@invalid?5argument@ 100349a8 vJoyInterface.obj + 0003:000009bc ??_C@_02DKCKIIND@?$CFs@ 100349bc vJoyInterface.obj + 0003:000009c0 ??_C@_0GC@ONGHGEHM@C?3?2Program?5Files?2Microsoft?5Visu@ 100349c0 vJoyInterface.obj + 0003:00000a38 ??_C@_1ME@DGNBIMPE@?$AAC?$AA?3?$AA?2?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAF?$AAi?$AAl?$AAe@ 10034a38 vJoyInterface.obj + 0003:00000b24 ??_C@_11LOCGONAA@@ 10034b24 vJoyInterface.obj + 0003:00000b28 ??_C@_1CG@JNLFBNGN@?$AA?$CC?$AAi?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAa?$AAr?$AAg?$AAu?$AAm?$AAe@ 10034b28 vJoyInterface.obj + 0003:00000b58 ??_C@_0BJ@LFDBABJJ@ITERATOR?5LIST?5CORRUPTED?$CB@ 10034b58 vJoyInterface.obj + 0003:00000b78 ??_C@_1DG@PLBPCAEM@?$AA?$CC?$AAI?$AAT?$AAE?$AAR?$AAA?$AAT?$AAO?$AAR?$AA?5?$AAL?$AAI?$AAS?$AAT?$AA?5@ 10034b78 vJoyInterface.obj + 0003:00000bb8 ??_C@_0BB@GCADKGJO@map?1set?5too?5long@ 10034bb8 vJoyInterface.obj + 0003:00000bcc ??_C@_0BC@DJDCIKPO@vJoyInterface?5DLL@ 10034bcc vJoyInterface.obj + 0003:00000be4 ??_C@_0CC@CIGAOLEI@Creation?5of?5Ffb?5data?9loop?5faile@ 10034be4 vJoyInterface.obj + 0003:00000c0c ??_C@_0DI@KJIBHIIH@?6?$FL?$CF05u?$FNInfo?3?5FfbIsStarted?$CI?$CJ?5?9?5R@ 10034c0c vJoyInterface.obj + 0003:00000c50 ??_C@_0EN@BHLHLNJM@?6?$FL?$CF05u?$FNError?3?5FfbIsStarted?$CI?$CJ?5?9?5@ 10034c50 vJoyInterface.obj + 0003:00000cac ??_C@_0DK@FGNFEGKE@?6?$FL?$CF05u?$FNError?3?5FfbIsStarted?$CI?$CJ?5?9?5@ 10034cac vJoyInterface.obj + 0003:00000cf8 ??_C@_0EH@PLFLBPHB@?6?$FL?$CF05u?$FNInfo?3?5FfbIsStarted?$CI?$CJ?5?9?5g@ 10034cf8 vJoyInterface.obj + 0003:00000d50 ??_C@_0EI@PGBDCIOA@?6?$FL?$CF05u?$FNInfo?3?5FfbIsStarted?$CI?$CJ?5?9?5g@ 10034d50 vJoyInterface.obj + 0003:00000da8 ??_C@_0DK@GIIAHIKB@?6?$FL?$CF05u?$FNInfo?3?5FfbWaitForData?$CI?$CJ?5?9@ 10034da8 vJoyInterface.obj + 0003:00000df0 ??_C@_0DM@IDKPOECN@?6?$FL?$CF05u?$FNError?3?5FfbWaitForData?$CI?$CJ?5@ 10034df0 vJoyInterface.obj + 0003:00000e38 ??_C@_0DM@BMIPGAAK@?6?$FL?$CF05u?$FNError?3?5FfbWaitForData?$CI?$CJ?5@ 10034e38 vJoyInterface.obj + 0003:00000e80 ??_C@_0EJ@EHPDLIOH@?6?$FL?$CF05u?$FNInfo?3?5FfbWaitForData?$CI?$CJ?5?9@ 10034e80 vJoyInterface.obj + 0003:00000ed8 ??_C@_0EK@OPMDLGDG@?6?$FL?$CF05u?$FNInfo?3?5FfbWaitForData?$CI?$CJ?5?9@ 10034ed8 vJoyInterface.obj + 0003:00000f30 ??_C@_0DF@NEAODPPN@?6?$FL?$CF05u?$FNInfo?3?5GetVJDStatus?$CI?$CFu?$CJ?5?9@ 10034f30 vJoyInterface.obj + 0003:00000f70 ??_C@_0DB@BOIMBPGK@?6?$FL?$CF05u?$FNInfo?3?5GetOwnerPid?$CI?$CFu?$CJ?5?9?5@ 10034f70 vJoyInterface.obj + 0003:00000fac ??_C@_0DK@LCIAEING@?6?$FL?$CF05u?$FNInfo?3?5GetOwnerPid?$CI?$CFu?$CJ?5?9?5@ 10034fac vJoyInterface.obj + 0003:00000ff8 ??_C@_0EG@PHNGBCHH@?6?$FL?$CF05u?$FNInfo?3?5GetOwnerPid?$CI?$CFu?$CJ?5?9?5@ 10034ff8 vJoyInterface.obj + 0003:0000104c ??_C@_0DF@PEBAEFND@?6?$FL?$CF05u?$FNInfo?3?5GetVJDStatus?$CI?$CFu?$CJ?5?9@ 1003504c vJoyInterface.obj + 0003:0000108c ??_C@_0DF@OLMOEJ@?6?$FL?$CF05u?$FNInfo?3?5GetVJDStatus?$CI?$CFu?$CJ?5?9@ 1003508c vJoyInterface.obj + 0003:000010cc ??_C@_0CK@LDCNELEM@?6?$FL?$CF05u?$FNInfo?3?5GetVJDStatus?$CI?$CFu?$CJ?5?9@ 100350cc vJoyInterface.obj + 0003:00001100 ??_C@_0DD@KAPKAMLC@?6?$FL?$CF05u?$FNInfo?3?5GetVJDButtonNumber@ 10035100 vJoyInterface.obj + 0003:00001140 ??_C@_0EK@FGGFLGJK@?6?$FL?$CF05u?$FNError?3?5GetVJDButtonNumbe@ 10035140 vJoyInterface.obj + 0003:00001198 ??_C@_0EB@FANGHBNE@?6?$FL?$CF05u?$FNError?3?5GetVJDButtonNumbe@ 10035198 vJoyInterface.obj + 0003:000011e8 ??_C@_0DJ@MIPGFEPM@?6?$FL?$CF05u?$FNInfo?3?5GetVJDButtonNumber@ 100351e8 vJoyInterface.obj + 0003:0000122c ??_C@_0O@JLIIOHHC@?7?5Usage?$DN0x?$CFx?$DL@ 1003522c vJoyInterface.obj + 0003:0000123c ??_C@_0BC@CKIEAHHG@?7?5UsagePage?$DN0x?$CFx?$DL@ 1003523c vJoyInterface.obj + 0003:00001254 ??_C@_0BM@OAIBPHPL@?7?5InputReportByteLength?$DN?$CFu?$DL@ 10035254 vJoyInterface.obj + 0003:00001278 ??_C@_0CA@BEHPBJED@?7?5NumberLinkCollectionNodes?$DN?$CFu?$DL@ 10035278 vJoyInterface.obj + 0003:000012a0 ??_C@_0BM@KGMIHPPH@?7?5NumberInputButtonCaps?$DN?$CFu?$DL@ 100352a0 vJoyInterface.obj + 0003:000012c4 ??_C@_0BL@ONMDOCNJ@?7?5NumberInputValueCaps?$DN?$CFu?$DL@ 100352c4 vJoyInterface.obj + 0003:000012e4 ??_C@_0BN@OIMOIFFL@?7?5NumberInputDataIndices?$DN?$CFu?$DL@ 100352e4 vJoyInterface.obj + 0003:00001308 ??_C@_0EH@NJPFMMFA@?6?$FL?$CF05u?$FNError?3?5GetVJDButtonNumbe@ 10035308 vJoyInterface.obj + 0003:00001360 ??_C@_0EH@MBAONGNP@?6?$FL?$CF05u?$FNError?3?5GetVJDButtonNumbe@ 10035360 vJoyInterface.obj + 0003:000013b8 ??_C@_0EA@GDNDDCLC@?6?$FL?$CF05u?$FNInfo?3?5GetVJDButtonNumber@ 100353b8 vJoyInterface.obj + 0003:00001404 ??_C@_0P@IHBDGNNC@?7?5ReportID?$DN?$CFu?$DL@ 10035404 vJoyInterface.obj + 0003:00001418 ??_C@_0P@LICDKPKK@?7?5UsageMax?$DN?$CFu?$DL@ 10035418 vJoyInterface.obj + 0003:0000142c ??_C@_0P@FOEDAAEL@?7?5UsageMin?$DN?$CFu?$DL@ 1003542c vJoyInterface.obj + 0003:00001440 ??_C@_0BD@NLDJCFEO@?7?5DataIndexMin?$DN?$CFu?$DL@ 10035440 vJoyInterface.obj + 0003:00001458 ??_C@_0DF@BFHCKPPP@?6?$FL?$CF05u?$FNError?3?5GetVJDButtonNumbe@ 10035458 vJoyInterface.obj + 0003:00001498 ??_C@_0DO@JCMNNNLM@?6?$FL?$CF05u?$FNInfo?3?5GetVJDButtonNumber@ 10035498 vJoyInterface.obj + 0003:000014e4 ??_C@_0DN@GKMMOCPB@?6?$FL?$CF05u?$FNInfo?3?5UpdateVJD?$CI?$CJ?5?9?5Devi@ 100354e4 vJoyInterface.obj + 0003:00001530 ??_C@_0ED@DELKEJBK@?6?$FL?$CF05u?$FNError?3?5UpdateVJD?$CI?$CJ?5?9?5Dev@ 10035530 vJoyInterface.obj + 0003:00001580 ??_C@_0DO@HGJOBJA@?6?$FL?$CF05u?$FNError?3?5UpdateVJD?$CI?$CJ?5?9?5Wai@ 10035580 vJoyInterface.obj + 0003:000015cc ??_C@_0DG@CJNLHJGB@?6?$FL?$CF05u?$FNInfo?3?5UpdateVJD?$CI?$CJ?5?9?5Devi@ 100355cc vJoyInterface.obj + 0003:0000160c ??_C@_0DD@IIFFBAN@?6?$FL?$CF05u?$FNInfo?3?5GetHandleByIndex?$CIi@ 1003560c vJoyInterface.obj + 0003:00001650 ??_C@_0EI@IBKBMHEE@?6?$FL?$CF05u?$FNError?3?5GetHandleByIndex?$CI@ 10035650 vJoyInterface.obj + 0003:000016a8 ??_C@_0GC@CGJMBGOL@?6?$FL?$CF05u?$FNWarning?3?5GetHandleByInde@ 100356a8 vJoyInterface.obj + 0003:00001720 ??_C@_0FG@LNCIOGIE@?6?$FL?$CF05u?$FNError?3?5GetHandleByIndex?$CI@ 10035720 vJoyInterface.obj + 0003:00001788 ??_C@_0FI@JJKOJABN@?6?$FL?$CF05u?$FNError?3?5GetHandleByIndex?$CI@ 10035788 vJoyInterface.obj + 0003:000017f8 ??_C@_0EE@MAENKEJ@?6?$FL?$CF05u?$FNError?3?5GetHandleByIndex?$CI@ 100357f8 vJoyInterface.obj + 0003:00001850 ??_C@_0EB@CCPPMMLE@?6?$FL?$CF05u?$FNInfo?3?5GetHandleByIndex?$CIi@ 10035850 vJoyInterface.obj + 0003:000018a0 ??_C@_0DJ@JMJDKHHE@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceIndexById@ 100358a0 vJoyInterface.obj + 0003:000018e8 ??_C@_0GG@LIAAMOM@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceIndexById@ 100358e8 vJoyInterface.obj + 0003:00001964 ??_C@_0DN@MDKJEAGA@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceIndexById@ 10035964 vJoyInterface.obj + 0003:000019b0 ??_C@_0DF@MJJOJPJ@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceIndexByRe@ 100359b0 vJoyInterface.obj + 0003:000019f0 ??_C@_0EL@MGILLLMF@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceIndexByRe@ 100359f0 vJoyInterface.obj + 0003:00001a50 ??_C@_0EP@JHOMOKAP@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceIndexByRe@ 10035a50 vJoyInterface.obj + 0003:00001ab0 ??_C@_0DG@OKBDGNJH@?6?$FL?$CF05u?$FNError?3?5GetDeviceIndexByR@ 10035ab0 vJoyInterface.obj + 0003:00001af0 ??_C@_0EK@LGHKGAFF@?6?$FL?$CF05u?$FNError?3?5GetDeviceNameSpac@ 10035af0 vJoyInterface.obj + 0003:00001b48 ??_C@_0GE@ELAIFKLL@?6?$FL?$CF05u?$FNError?3?5GetDeviceNameSpac@ 10035b48 vJoyInterface.obj + 0003:00001bc0 ??_C@_0FM@GGCEMBPG@?6?$FL?$CF05u?$FNError?3?5GetDeviceNameSpac@ 10035bc0 vJoyInterface.obj + 0003:00001c30 ??_C@_0DC@GAEOPMNG@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceNameSpace@ 10035c30 vJoyInterface.obj + 0003:00001c70 ??_C@_0ED@HKFFFIGA@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceNameSpace@ 10035c70 vJoyInterface.obj + 0003:00001cc0 ??_C@_0GE@NMJIIJJJ@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceNameSpace@ 10035cc0 vJoyInterface.obj + 0003:00001d38 ??_C@_1BA@JCMDMCHI@?$AAD?$AAe?$AAv?$AAi?$AAc?$AAe?$AA_@ 10035d38 vJoyInterface.obj + 0003:00001d50 ??_C@_0EK@PCNOOKNC@?6?$FL?$CF05u?$FNError?3?5OpenDeviceInterfa@ 10035d50 vJoyInterface.obj + 0003:00001da8 ??_C@_0DM@BJLJHKNP@?6?$FL?$CF05u?$FNError?3?5OpenDeviceInterfa@ 10035da8 vJoyInterface.obj + 0003:00001df0 ??_C@_0FI@BMOHPPPH@?6?$FL?$CF05u?$FNInfo?3?5OpenDeviceInterfac@ 10035df0 vJoyInterface.obj + 0003:00001e5c ??_C@_0CP@LKIMKJMP@?6?$FL?$CF05u?$FNInfo?3?5OpenDeviceInterfac@ 10035e5c vJoyInterface.obj + 0003:00001e98 ??_C@_0GG@OMJAJDPH@?6?$FL?$CF05u?$FNInfo?3?5GetDevInfo?$CI?$CJ?5?9?5Ret@ 10035e98 vJoyInterface.obj + 0003:00001f14 ??_C@_0DI@FLNFFGAD@?6?$FL?$CF05u?$FNError?3?5GetDevInfo?$CI?$CJ?5?9?5Re@ 10035f14 vJoyInterface.obj + 0003:00001f58 ??_C@_0DI@MEPFNCCE@?6?$FL?$CF05u?$FNError?3?5GetDevInfo?$CI?$CJ?5?9?5er@ 10035f58 vJoyInterface.obj + 0003:00001fa0 ??_C@_0EF@GKLKBJFI@?6?$FL?$CF05u?$FNInfo?3?5GetDevInfo?$CI?$CJ?5?9?5got@ 10035fa0 vJoyInterface.obj + 0003:00001ff8 ??_C@_0EG@LEDAFBIK@?6?$FL?$CF05u?$FNInfo?3?5GetDevInfo?$CI?$CJ?5?9?5got@ 10035ff8 vJoyInterface.obj + 0003:00002050 ??_C@_0FL@OCDCLCEL@?6?$FL?$CF05u?$FNInfo?3?5GetDevStat?$CI?$CJ?5?9?5Ret@ 10036050 vJoyInterface.obj + 0003:000020c0 ??_C@_0DI@OLOAGCHJ@?6?$FL?$CF05u?$FNError?3?5GetDevStat?$CI?$CJ?5?9?5Re@ 100360c0 vJoyInterface.obj + 0003:00002104 ??_C@_0DI@HEMAOGFO@?6?$FL?$CF05u?$FNError?3?5GetDevStat?$CI?$CJ?5?9?5er@ 10036104 vJoyInterface.obj + 0003:00002148 ??_C@_0EF@EGCDMIKI@?6?$FL?$CF05u?$FNInfo?3?5GetDevStat?$CI?$CJ?5?9?5got@ 10036148 vJoyInterface.obj + 0003:000021a0 ??_C@_0EG@JKBDKEH@?6?$FL?$CF05u?$FNInfo?3?5GetDevStat?$CI?$CJ?5?9?5got@ 100361a0 vJoyInterface.obj + 0003:000021f8 ??_C@_0FD@GAKHOCIG@?6?$FL?$CF05u?$FNInfo?3?5GetDrvStat?$CI?$CJ?5?9?5Ret@ 100361f8 vJoyInterface.obj + 0003:0000225c ??_C@_0DI@EIAKGMDI@?6?$FL?$CF05u?$FNError?3?5GetDrvStat?$CI?$CJ?5?9?5Re@ 1003625c vJoyInterface.obj + 0003:000022a0 ??_C@_0DI@NHCKOIBP@?6?$FL?$CF05u?$FNError?3?5GetDrvStat?$CI?$CJ?5?9?5er@ 100362a0 vJoyInterface.obj + 0003:000022e8 ??_C@_0EF@KKEOOFFP@?6?$FL?$CF05u?$FNInfo?3?5GetDrvStat?$CI?$CJ?5?9?5got@ 100362e8 vJoyInterface.obj + 0003:00002340 ??_C@_0EG@CKJEDANF@?6?$FL?$CF05u?$FNInfo?3?5GetDrvStat?$CI?$CJ?5?9?5got@ 10036340 vJoyInterface.obj + 0003:00002394 ??_C@_08DNMKHOCF@?$CFs?$CFs?$CF03d@ 10036394 vJoyInterface.obj + 0003:000023a0 ??_C@_04OHGLKFFN@?$CF03d@ 100363a0 vJoyInterface.obj + 0003:000023a8 ??_C@_0DI@GCJLPGON@?6?$FL?$CF05u?$FNInfo?3?5isRawDevice?$CI?$CFd?$CJ?5?9?5@ 100363a8 vJoyInterface.obj + 0003:000023ec ??_C@_0CA@PGPJAAEK@Call?5to?5RegisterClassEx?5failed?$CB@ 100363ec vJoyInterface.obj + 0003:00002414 ??_C@_0BG@CDOIHGNF@VJOYINTERFACELOGLEVEL@ 10036414 vJoyInterface.obj + 0003:00002430 ??_C@_0BF@FPKMOGPD@VJOYINTERFACELOGFILE@ 10036430 vJoyInterface.obj + 0003:0000244c ??_C@_04JKHNIKCB@TEMP@ 1003644c vJoyInterface.obj + 0003:00002454 ??_C@_0BC@KPPPLGJO@vJoyInterface?4log@ 10036454 vJoyInterface.obj + 0003:0000246c ??_C@_05BMGBEOOC@?$CFs?2?$CFs@ 1003646c vJoyInterface.obj + 0003:00002474 ??_C@_02DPNLHKJD@a?$CL@ 10036474 vJoyInterface.obj + 0003:00002478 ??_C@_0BF@PEEFBMH@?6?6?6?$FL?$CF05u?$FNProcess?3?$CFs?6@ 10036478 vJoyInterface.obj + 0003:00002494 ??_C@_0DA@IHMOFIMD@Create?5window?5process?5on?5anothe@ 10036494 vJoyInterface.obj + 0003:000024d0 ??_C@_0CB@HPGJNH@Creation?5of?5dummy?5window?5failed@ 100364d0 vJoyInterface.obj + 0003:000024f8 ??_C@_13NAACAHKO@?$AAX@ 100364f8 vJoyInterface.obj + 0003:000024fc ??_C@_13GILOGAML@?$AAY@ 100364fc vJoyInterface.obj + 0003:00002500 ??_C@_13HKALMPCF@?$AAZ@ 10036500 vJoyInterface.obj + 0003:00002504 ??_C@_15BMCNAON@?$AAR?$AAX@ 10036504 vJoyInterface.obj + 0003:0000250c ??_C@_15LJHOLHII@?$AAR?$AAY@ 1003650c vJoyInterface.obj + 0003:00002514 ??_C@_15KLMLBIGG@?$AAR?$AAZ@ 10036514 vJoyInterface.obj + 0003:0000251c ??_C@_17HBHJIBGA@?$AAS?$AAL?$AA1@ 1003651c vJoyInterface.obj + 0003:00002528 ??_C@_17GDMMCOIO@?$AAS?$AAL?$AA2@ 10036528 vJoyInterface.obj + 0003:00002534 ??_C@_19MHJMLFKO@?$AAP?$AAO?$AAV?$AA1@ 10036534 vJoyInterface.obj + 0003:00002540 ??_C@_19NFCJBKEA@?$AAP?$AAO?$AAV?$AA2@ 10036540 vJoyInterface.obj + 0003:0000254c ??_C@_19GNJFHNCF@?$AAP?$AAO?$AAV?$AA3@ 1003654c vJoyInterface.obj + 0003:00002558 ??_C@_19PAECEFJM@?$AAP?$AAO?$AAV?$AA4@ 10036558 vJoyInterface.obj + 0003:00002568 ??_C@_1HC@DPIGBNJN@?$AAS?$AAY?$AAS?$AAT?$AAE?$AAM?$AA?2?$AAC?$AAu?$AAr?$AAr?$AAe?$AAn?$AAt?$AAC@ 10036568 vJoyInterface.obj + 0003:000025f0 ??_C@_19HABNGADD@?$AAI?$AAn?$AAi?$AAt@ 100365f0 vJoyInterface.obj + 0003:000025fc ??_C@_1BG@NFFGKCLM@?$AA?$CF?$AAs?$AA?$CF?$AA0?$AA2?$AAu?$AA?2?$AA?$CF?$AAs?$AA?$AA@ 100365fc vJoyInterface.obj + 0003:00002618 ??_C@_19LLLMHGHI@?$AAB?$AAT?$AAN?$AAS@ 10036618 vJoyInterface.obj + 0003:00002624 ??_C@_0DK@KMKOEHCO@?6?$FL?$CF05u?$FNInfo?3?5GetDevPosition?$CI?$CJ?5?9@ 10036624 vJoyInterface.obj + 0003:0000266c ??_C@_0DM@POGMFEKD@?6?$FL?$CF05u?$FNError?3?5GetDevPosition?$CI?$CJ?5@ 1003666c vJoyInterface.obj + 0003:000026b4 ??_C@_0DM@GBEMNAIE@?6?$FL?$CF05u?$FNError?3?5GetDevPosition?$CI?$CJ?5@ 100366b4 vJoyInterface.obj + 0003:00002700 ??_C@_0EJ@LKIENPKJ@?6?$FL?$CF05u?$FNInfo?3?5GetDevPosition?$CI?$CJ?5?9@ 10036700 vJoyInterface.obj + 0003:00002758 ??_C@_0EK@HOFKKNMG@?6?$FL?$CF05u?$FNInfo?3?5GetDevPosition?$CI?$CJ?5?9@ 10036758 vJoyInterface.obj + 0003:000027b0 ??_C@_0BP@OLDKBHLM@map?1set?5iterators?5incompatible@ 100367b0 vJoyInterface.obj + 0003:000027d8 ??_C@_0GA@GNHKHACC@C?3?2Program?5Files?2Microsoft?5Visu@ 100367d8 vJoyInterface.obj + 0003:00002850 ??_C@_1MA@LENEFKFL@?$AAC?$AA?3?$AA?2?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAF?$AAi?$AAl?$AAe@ 10036850 vJoyInterface.obj + 0003:00002938 ??_C@_1EC@JLIDLCDH@?$AA?$CC?$AAm?$AAa?$AAp?$AA?1?$AAs?$AAe?$AAt?$AA?5?$AAi?$AAt?$AAe?$AAr?$AAa?$AAt@ 10036938 vJoyInterface.obj + 0003:00002988 ??_C@_0DG@KGHKKGBC@null?5pointer?5cannot?5point?5to?5a?5@ 10036988 vJoyInterface.obj + 0003:000029c8 ??_C@_1HA@FACCKGGH@?$AA?$CC?$AAn?$AAu?$AAl?$AAl?$AA?5?$AAp?$AAo?$AAi?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAc@ 100369c8 vJoyInterface.obj + 0003:00002a50 ??_C@_0BD@FEEMDEPI@invalid?5comparator@ 10036a50 vJoyInterface.obj + 0003:00002a68 ??_C@_0GD@JKKFFOCD@C?3?2Program?5Files?2Microsoft?5Visu@ 10036a68 vJoyInterface.obj + 0003:00002ae0 ??_C@_1MG@JJBOPAGB@?$AAC?$AA?3?$AA?2?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAF?$AAi?$AAl?$AAe@ 10036ae0 vJoyInterface.obj + 0003:00002bd0 ??_C@_1CK@NDNHPKPI@?$AA?$CC?$AAi?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAc?$AAo?$AAm?$AAp?$AAa?$AAr@ 10036bd0 vJoyInterface.obj + 0003:00002c08 ??_7type_info@@6B@ 10036c08 MSVCRTD:std_type_info_static.obj + 0003:00002c10 __pDefaultRawDllMain 10036c10 MSVCRTD:dll_dllmain.obj + 0003:00002c10 __pRawDllMain 10036c10 MSVCRTD:dll_dllmain.obj + 0003:00002c14 ??_C@_0P@GHFPNOJB@bad?5allocation@ 10036c14 MSVCRTD:throw_bad_alloc.obj + 0003:00002ce8 ??_C@_0NN@JMPELKLB@The?5value?5of?5ESP?5was?5not?5proper@ 10036ce8 MSVCRTD:error.obj + 0003:00002df8 ??_C@_0BBN@ELNNILBE@A?5cast?5to?5a?5smaller?5data?5type?5h@ 10036df8 MSVCRTD:error.obj + 0003:00002f50 ??_C@_0BN@BPOGFMJL@Stack?5memory?5was?5corrupted?$AN?6@ 10036f50 MSVCRTD:error.obj + 0003:00002f74 ??_C@_0DG@DAJCDLPN@A?5local?5variable?5was?5used?5befor@ 10036f74 MSVCRTD:error.obj + 0003:00002fb4 ??_C@_0CM@JMIDGKLA@Stack?5memory?5around?5_alloca?5was@ 10036fb4 MSVCRTD:error.obj + 0003:00002fe8 ??_C@_0BO@CHIONIOI@Unknown?5Runtime?5Check?5Error?$AN?6@ 10036fe8 MSVCRTD:error.obj + 0003:00003010 ??_C@_1GM@CNOOJIHC@?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAC?$AAh?$AAe?$AAc?$AAk?$AA?5?$AAE@ 10037010 MSVCRTD:error.obj + 0003:00003098 ??_C@_1EA@NFKNIFJP@?$AAR?$AAu?$AAn?$AA?9?$AAT?$AAi?$AAm?$AAe?$AA?5?$AAC?$AAh?$AAe?$AAc?$AAk?$AA?5@ 10037098 MSVCRTD:error.obj + 0003:000030e4 ??_C@_0BB@PFFGGCJP@Unknown?5Filename@ 100370e4 MSVCRTD:error.obj + 0003:000030f8 ??_C@_0BE@GNBOBNCK@Unknown?5Module?5Name@ 100370f8 MSVCRTD:error.obj + 0003:00003110 ??_C@_0CA@IODNCDPG@Run?9Time?5Check?5Failure?5?$CD?$CFd?5?9?5?$CFs@ 10037110 MSVCRTD:error.obj + 0003:00003138 ??_C@_0CG@IAFNJNEE@Stack?5corrupted?5near?5unknown?5va@ 10037138 MSVCRTD:error.obj + 0003:00003168 ??_C@_05MKKEDADM@?$CF?42X?5@ 10037168 MSVCRTD:error.obj + 0003:00003170 ??_C@_0EJ@LJKNEOLN@Stack?5area?5around?5_alloca?5memor@ 10037170 MSVCRTD:error.obj + 0003:000031c8 ??_C@_01EEMJAFIK@?6@ 100371c8 MSVCRTD:error.obj + 0003:000031cc ??_C@_02LLMPMKNF@?$DO?5@ 100371cc MSVCRTD:error.obj + 0003:000031d0 ??_C@_08OMAHNMHJ@?6Data?3?5?$DM@ 100371d0 MSVCRTD:error.obj + 0003:000031dc ??_C@_0CK@DKGBICFE@?6Allocation?5number?5within?5this?5@ 100371dc MSVCRTD:error.obj + 0003:00003210 ??_C@_07DFDJCKFN@?6Size?3?5@ 10037210 MSVCRTD:error.obj + 0003:0000321c ??_C@_0N@MHFFIMFG@?6Address?3?50x@ 1003721c MSVCRTD:error.obj + 0003:00003230 ??_C@_0EI@CLEPFNGI@Stack?5area?5around?5_alloca?5memor@ 10037230 MSVCRTD:error.obj + 0003:00003288 ??_C@_0BK@ODNDAGKB@?$CFs?$CFs?$CFp?$CFs?$CFzd?$CFs?$CFd?$CFs?$CFs?$CFs?$CFs?$CFs@ 10037288 MSVCRTD:error.obj + 0003:000032a8 ??_C@_0DE@OHJBPMBP@A?5variable?5is?5being?5used?5withou@ 100372a8 MSVCRTD:error.obj + 0003:0000330c ??_C@_0BJ@HEGAHDFO@Stack?5pointer?5corruption@ 1003730c MSVCRTD:userapi.obj + 0003:0000332c ??_C@_0CK@FEGOIOPB@Cast?5to?5smaller?5type?5causing?5lo@ 1003732c MSVCRTD:userapi.obj + 0003:00003360 ??_C@_0BI@CIGMDCBH@Stack?5memory?5corruption@ 10037360 MSVCRTD:userapi.obj + 0003:0000337c ??_C@_0CK@CNLNOEPB@Local?5variable?5used?5before?5init@ 1003737c MSVCRTD:userapi.obj + 0003:000033b0 ??_C@_0BP@OGBCLIBO@Stack?5around?5_alloca?5corrupted@ 100373b0 MSVCRTD:userapi.obj + 0003:00003430 ??_C@_1EI@MLPKHBGE@?$AAa?$AAp?$AAi?$AA?9?$AAm?$AAs?$AA?9?$AAw?$AAi?$AAn?$AA?9?$AAc?$AAo?$AAr?$AAe@ 10037430 MSVCRTD:pdblkup.obj + 0003:00003488 ??_C@_1BK@JHLNAEJL@?$AAa?$AAd?$AAv?$AAa?$AAp?$AAi?$AA3?$AA2?$AA?4?$AAd?$AAl?$AAl@ 10037488 MSVCRTD:pdblkup.obj + 0003:000034a8 ??_C@_0O@COHOBMLB@RegOpenKeyExW@ 100374a8 MSVCRTD:pdblkup.obj + 0003:000034b8 ??_C@_0BB@GLNAEDBD@RegQueryValueExW@ 100374b8 MSVCRTD:pdblkup.obj + 0003:000034cc ??_C@_0M@HLOHPNFA@RegCloseKey@ 100374cc MSVCRTD:pdblkup.obj + 0003:000034e0 ??_C@_1HE@EBEAGLFB@?$AAS?$AAO?$AAF?$AAT?$AAW?$AAA?$AAR?$AAE?$AA?2?$AAW?$AAo?$AAw?$AA6?$AA4?$AA3@ 100374e0 MSVCRTD:pdblkup.obj + 0003:0000356c ??_C@_1BG@EABPBLLF@?$AAP?$AAr?$AAo?$AAd?$AAu?$AAc?$AAt?$AAD?$AAi?$AAr@ 1003756c MSVCRTD:pdblkup.obj + 0003:000035ac ??_C@_1BC@JINFINNJ@?$AAM?$AAS?$AAP?$AAD?$AAB?$AA1?$AA4?$AA0@ 100375ac MSVCRTD:pdblkup.obj + 0003:000035c4 ??_C@_0BB@KCIACLNC@PDBOpenValidate5@ 100375c4 MSVCRTD:pdblkup.obj + 0003:000035d8 ??_C@_01KDCPPGHE@r@ 100375d8 MSVCRTD:pdblkup.obj + 0003:000035e0 __load_config_used 100375e0 MSVCRTD:loadcfg.obj + 0003:000038c0 ___CastGuardVftablesStart 100378c0 MSVCRTD:guard_support.obj + 0003:00003a40 ___CastGuardVftablesEnd 10037a40 MSVCRTD:guard_support.obj + 0003:00003b8c ??_R4exception@std@@6B@ 10037b8c vJoyInterface.obj + 0003:00003ba4 ??_R3exception@std@@8 10037ba4 vJoyInterface.obj + 0003:00003bb8 ??_R2exception@std@@8 10037bb8 vJoyInterface.obj + 0003:00003bc0 ??_R1A@?0A@EA@exception@std@@8 10037bc0 vJoyInterface.obj + 0003:00003be4 ??_R4bad_alloc@std@@6B@ 10037be4 vJoyInterface.obj + 0003:00003bfc ??_R3bad_alloc@std@@8 10037bfc vJoyInterface.obj + 0003:00003c10 ??_R2bad_alloc@std@@8 10037c10 vJoyInterface.obj + 0003:00003c1c ??_R1A@?0A@EA@bad_alloc@std@@8 10037c1c vJoyInterface.obj + 0003:00003c40 ??_R4bad_array_new_length@std@@6B@ 10037c40 vJoyInterface.obj + 0003:00003c58 ??_R3bad_array_new_length@std@@8 10037c58 vJoyInterface.obj + 0003:00003c6c ??_R2bad_array_new_length@std@@8 10037c6c vJoyInterface.obj + 0003:00003c7c ??_R1A@?0A@EA@bad_array_new_length@std@@8 10037c7c vJoyInterface.obj + 0003:00003ca0 ??_R4type_info@@6B@ 10037ca0 MSVCRTD:std_type_info_static.obj + 0003:00003cb8 ??_R3type_info@@8 10037cb8 MSVCRTD:std_type_info_static.obj + 0003:00003ccc ??_R2type_info@@8 10037ccc MSVCRTD:std_type_info_static.obj + 0003:00003cd4 ??_R1A@?0A@EA@type_info@@8 10037cd4 MSVCRTD:std_type_info_static.obj + 0003:00003f84 ___rtc_iaa 10037f84 MSVCRTD:initsect.obj + 0003:0000418c ___rtc_izz 1003818c MSVCRTD:initsect.obj + 0003:00004290 ___rtc_taa 10038290 MSVCRTD:initsect.obj + 0003:00004498 ___rtc_tzz 10038498 MSVCRTD:initsect.obj + 0003:00004b4c __TI3?AVbad_array_new_length@std@@ 10038b4c vJoyInterface.obj + 0003:00004b60 __CTA3?AVbad_array_new_length@std@@ 10038b60 vJoyInterface.obj + 0003:00004b74 __CT??_R0?AVbad_array_new_length@std@@@8??0bad_array_new_length@std@@QAE@ABV01@@Z12 10038b74 vJoyInterface.obj + 0003:00004b94 __CT??_R0?AVbad_alloc@std@@@8??0bad_alloc@std@@QAE@ABV01@@Z12 10038b94 vJoyInterface.obj + 0003:00004bb4 __CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12 10038bb4 vJoyInterface.obj + 0003:00004c68 __TI2?AVbad_alloc@std@@ 10038c68 MSVCRTD:throw_bad_alloc.obj + 0003:00004c7c __CTA2?AVbad_alloc@std@@ 10038c7c MSVCRTD:throw_bad_alloc.obj + 0004:00000000 ?h0@@3PAXA 1003a000 vJoyInterface.obj + 0004:00000050 ?__LINE__Var@?0??_Adjust_manually_vector_aligned@std@@YAXAAPAXAAI@Z@4JA 1003a050 vJoyInterface.obj + 0004:00000054 ___scrt_native_dllmain_reason 1003a054 MSVCRTD:utility.obj + 0004:00000060 ___security_cookie 1003a060 MSVCRTD:gs_cookie.obj + 0004:00000064 ___security_cookie_complement 1003a064 MSVCRTD:gs_cookie.obj + 0004:0000006c ___isa_enabled 1003a06c MSVCRTD:cpu_disp.obj + 0004:00000070 ?_RTC_ErrorLevels@@3PAHA 1003a070 MSVCRTD:error.obj + 0004:00000088 ___scrt_ucrt_dll_is_in_use 1003a088 MSVCRTD:ucrt_stubs.obj + 0004:00000194 ??_R0?AVbad_array_new_length@std@@@8 1003a194 vJoyInterface.obj + 0004:000001c4 ??_R0?AVbad_alloc@std@@@8 1003a1c4 vJoyInterface.obj + 0004:000001e8 ??_R0?AVexception@std@@@8 1003a1e8 vJoyInterface.obj + 0004:0000030c ??_R0?AVtype_info@@@8 1003a30c MSVCRTD:std_type_info_static.obj + 0004:00000428 ___@@_PchSym_@00@UfhvihUxbwUhlfixvUivklhUeqlbUzkkhUxlnnlmUeqlbrmgviuzxvUdrmDCUwvyftUhgwzucOlyq@4B2008FD98C1DD4 1003a428 stdafx.obj + 0004:0000042c ___@@_PchSym_@00@UfhvihUxbwUhlfixvUivklhUeqlbUzkkhUxlnnlmUeqlbrmgviuzxvUdrmDCUwvyftUeqlbrmgviuzxvOlyq@4B2008FD98C1DD4 1003a42c vJoyInterface.obj + 0004:00000430 ?Init@@3HA 1003a430 vJoyInterface.obj + 0004:00000434 ?hInst@@3PAUHINSTANCE__@@A 1003a434 vJoyInterface.obj + 0004:00000438 ?hWnd@@3PAUHWND__@@A 1003a438 vJoyInterface.obj + 0004:0000043c ?hDeviceNotifyInterFace@@3PAXA 1003a43c vJoyInterface.obj + 0004:00000440 ?hDeviceNotifyHandle0@@3PAXA 1003a440 vJoyInterface.obj + 0004:00000444 ?hEvent@@3PAXA 1003a444 vJoyInterface.obj + 0004:00000448 ?ppDisable@@3PAXA 1003a448 vJoyInterface.obj + 0004:0000044c ?ppEnable@@3PAXA 1003a44c vJoyInterface.obj + 0004:00000450 ?LogFileName@@3PADA 1003a450 vJoyInterface.obj + 0004:00000454 ?Logging@@3HA 1003a454 vJoyInterface.obj + 0004:00000458 ?LogStream@@3PAU_iobuf@@A 1003a458 vJoyInterface.obj + 0004:0000045c ?ProcessId@@3KA 1003a45c vJoyInterface.obj + 0004:00000460 ?RemovalFunc@@3P6GXHHPAX@ZA 1003a460 vJoyInterface.obj + 0004:00000464 ?RemovalData@@3PAXA 1003a464 vJoyInterface.obj + 0004:00000468 ?FfbDataPacket@@3U_FFB_DATA@@A 1003a468 vJoyInterface.obj + 0004:00000474 ?FfbGebFunc@@3P6GXPAX0@ZA 1003a474 vJoyInterface.obj + 0004:00000478 ?FfbUserData@@3PAXA 1003a478 vJoyInterface.obj + 0004:0000047c ?FfbEffectState@@3HA 1003a47c vJoyInterface.obj + 0004:00000480 ?FfbEffectType@@3W4FFBEType@@A 1003a480 vJoyInterface.obj + 0004:00000484 ?hFfbEvent@@3PAXA 1003a484 vJoyInterface.obj + 0004:00000488 ?vJoyDevices@@3V?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@A 1003a488 vJoyInterface.obj + 0004:00000494 ?mFfbEffect@@3V?$map@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@@std@@A 1003a494 vJoyInterface.obj + 0004:000004c8 ?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA 1003a4c8 vJoyInterface.obj + 0004:000004d8 ?_OptionsStorage@?1??__local_stdio_scanf_options@@9@4_KA 1003a4d8 vJoyInterface.obj + 0004:000004e4 ___scrt_current_native_startup_state 1003a4e4 MSVCRTD:utility.obj + 0004:000004e8 ___scrt_native_startup_lock 1003a4e8 MSVCRTD:utility.obj + 0004:00000514 ___isa_available 1003a514 MSVCRTD:cpu_disp.obj + 0004:00000518 ___favor 1003a518 MSVCRTD:cpu_disp.obj + 0004:00000520 ___scrt_debugger_hook_flag 1003a520 MSVCRTD:utility_desktop.obj + 0004:000008f0 ?__type_info_root_node@@3U__type_info_node@@A 1003a8f0 MSVCRTD:tncleanup.obj + 0004:00000904 ___dyn_tls_init_callback 1003a904 + 0004:00000910 ___DebuggerCurrentSteppingThreadId 1003a910 + 0005:00000000 __imp__RegCloseKey@4 1003b000 advapi32:ADVAPI32.dll + 0005:00000004 __imp__RegOpenKeyExW@20 1003b004 advapi32:ADVAPI32.dll + 0005:00000008 __imp__RegGetValueW@28 1003b008 advapi32:ADVAPI32.dll + 0005:0000000c \177ADVAPI32_NULL_THUNK_DATA 1003b00c advapi32:ADVAPI32.dll + 0005:00000038 __imp__HidD_GetSerialNumberString@12 1003b038 hid:HID.DLL + 0005:0000003c __imp__HidP_GetCaps@8 1003b03c hid:HID.DLL + 0005:00000040 __imp__HidP_GetLinkCollectionNodes@12 1003b040 hid:HID.DLL + 0005:00000044 __imp__HidP_GetButtonCaps@16 1003b044 hid:HID.DLL + 0005:00000048 __imp__HidP_GetSpecificValueCaps@28 1003b048 hid:HID.DLL + 0005:0000004c __imp__HidP_GetValueCaps@16 1003b04c hid:HID.DLL + 0005:00000050 __imp__HidP_GetUsageValue@32 1003b050 hid:HID.DLL + 0005:00000054 __imp__HidD_GetAttributes@8 1003b054 hid:HID.DLL + 0005:00000058 __imp__HidD_GetHidGuid@4 1003b058 hid:HID.DLL + 0005:0000005c __imp__HidD_GetPreparsedData@8 1003b05c hid:HID.DLL + 0005:00000060 __imp__HidD_FreePreparsedData@4 1003b060 hid:HID.DLL + 0005:00000064 __imp__HidD_GetManufacturerString@12 1003b064 hid:HID.DLL + 0005:00000068 __imp__HidD_GetProductString@12 1003b068 hid:HID.DLL + 0005:0000006c \177HID_NULL_THUNK_DATA 1003b06c hid:HID.DLL + 0005:000000a0 __imp__IsProcessorFeaturePresent@4 1003b0a0 kernel32:KERNEL32.dll + 0005:000000a4 __imp__FreeLibrary@4 1003b0a4 kernel32:KERNEL32.dll + 0005:000000a8 __imp__GetEnvironmentVariableA@12 1003b0a8 kernel32:KERNEL32.dll + 0005:000000ac __imp__CreateFileA@28 1003b0ac kernel32:KERNEL32.dll + 0005:000000b0 __imp__CloseHandle@4 1003b0b0 kernel32:KERNEL32.dll + 0005:000000b4 __imp__GetLastError@0 1003b0b4 kernel32:KERNEL32.dll + 0005:000000b8 __imp__DeviceIoControl@32 1003b0b8 kernel32:KERNEL32.dll + 0005:000000bc __imp__GetOverlappedResult@16 1003b0bc kernel32:KERNEL32.dll + 0005:000000c0 __imp__SetEvent@4 1003b0c0 kernel32:KERNEL32.dll + 0005:000000c4 __imp__WaitForSingleObject@8 1003b0c4 kernel32:KERNEL32.dll + 0005:000000c8 __imp__CreateEventA@16 1003b0c8 kernel32:KERNEL32.dll + 0005:000000cc __imp__GetCurrentProcessId@0 1003b0cc kernel32:KERNEL32.dll + 0005:000000d0 __imp__CreateThread@24 1003b0d0 kernel32:KERNEL32.dll + 0005:000000d4 __imp__GetModuleHandleA@4 1003b0d4 kernel32:KERNEL32.dll + 0005:000000d8 __imp__LocalAlloc@8 1003b0d8 kernel32:KERNEL32.dll + 0005:000000dc __imp__LocalFree@4 1003b0dc kernel32:KERNEL32.dll + 0005:000000e0 __imp__GetCommandLineA@0 1003b0e0 kernel32:KERNEL32.dll + 0005:000000e4 __imp__VirtualQuery@12 1003b0e4 kernel32:KERNEL32.dll + 0005:000000e8 __imp__GetProcessHeap@0 1003b0e8 kernel32:KERNEL32.dll + 0005:000000ec __imp__HeapFree@12 1003b0ec kernel32:KERNEL32.dll + 0005:000000f0 __imp__HeapAlloc@12 1003b0f0 kernel32:KERNEL32.dll + 0005:000000f4 __imp__InitializeSListHead@4 1003b0f4 kernel32:KERNEL32.dll + 0005:000000f8 __imp__DisableThreadLibraryCalls@4 1003b0f8 kernel32:KERNEL32.dll + 0005:000000fc __imp__GetSystemTimeAsFileTime@4 1003b0fc kernel32:KERNEL32.dll + 0005:00000100 __imp__QueryPerformanceCounter@4 1003b100 kernel32:KERNEL32.dll + 0005:00000104 __imp__TerminateProcess@8 1003b104 kernel32:KERNEL32.dll + 0005:00000108 __imp__GetCurrentProcess@0 1003b108 kernel32:KERNEL32.dll + 0005:0000010c __imp__WideCharToMultiByte@32 1003b10c kernel32:KERNEL32.dll + 0005:00000110 __imp__MultiByteToWideChar@24 1003b110 kernel32:KERNEL32.dll + 0005:00000114 __imp__RaiseException@16 1003b114 kernel32:KERNEL32.dll + 0005:00000118 __imp__GetModuleHandleW@4 1003b118 kernel32:KERNEL32.dll + 0005:0000011c __imp__GetStartupInfoW@4 1003b11c kernel32:KERNEL32.dll + 0005:00000120 __imp__SetUnhandledExceptionFilter@4 1003b120 kernel32:KERNEL32.dll + 0005:00000124 __imp__UnhandledExceptionFilter@4 1003b124 kernel32:KERNEL32.dll + 0005:00000128 __imp__IsDebuggerPresent@0 1003b128 kernel32:KERNEL32.dll + 0005:0000012c __imp__GetProcAddress@8 1003b12c kernel32:KERNEL32.dll + 0005:00000130 __imp__GetCurrentThreadId@0 1003b130 kernel32:KERNEL32.dll + 0005:00000134 \177KERNEL32_NULL_THUNK_DATA 1003b134 kernel32:KERNEL32.dll + 0005:0000017c __imp_??0_Lockit@std@@QAE@H@Z 1003b17c msvcprtd:MSVCP140D.dll + 0005:00000180 __imp_?_Xlength_error@std@@YAXPBD@Z 1003b180 msvcprtd:MSVCP140D.dll + 0005:00000184 __imp_??1_Lockit@std@@QAE@XZ 1003b184 msvcprtd:MSVCP140D.dll + 0005:00000188 \177MSVCP140D_NULL_THUNK_DATA 1003b188 msvcprtd:MSVCP140D.dll + 0005:000001b4 __imp__SetupDiEnumDeviceInterfaces@20 1003b1b4 setupapi:SETUPAPI.dll + 0005:000001b8 __imp__SetupDiGetClassDevsA@16 1003b1b8 setupapi:SETUPAPI.dll + 0005:000001bc __imp__SetupDiGetDeviceInterfaceDetailA@24 1003b1bc setupapi:SETUPAPI.dll + 0005:000001c0 __imp__SetupDiDestroyDeviceInfoList@4 1003b1c0 setupapi:SETUPAPI.dll + 0005:000001c4 \177SETUPAPI_NULL_THUNK_DATA 1003b1c4 setupapi:SETUPAPI.dll + 0005:000001f0 __imp__LoadIconA@8 1003b1f0 user32:USER32.dll + 0005:000001f4 __imp__LoadCursorA@8 1003b1f4 user32:USER32.dll + 0005:000001f8 __imp__MessageBoxA@16 1003b1f8 user32:USER32.dll + 0005:000001fc __imp__EndPaint@8 1003b1fc user32:USER32.dll + 0005:00000200 __imp__BeginPaint@8 1003b200 user32:USER32.dll + 0005:00000204 __imp__UpdateWindow@4 1003b204 user32:USER32.dll + 0005:00000208 __imp__ShowWindow@8 1003b208 user32:USER32.dll + 0005:0000020c __imp__CreateWindowExA@48 1003b20c user32:USER32.dll + 0005:00000210 __imp__RegisterClassExA@4 1003b210 user32:USER32.dll + 0005:00000214 __imp__PostQuitMessage@4 1003b214 user32:USER32.dll + 0005:00000218 __imp__DefWindowProcA@16 1003b218 user32:USER32.dll + 0005:0000021c __imp__DispatchMessageA@4 1003b21c user32:USER32.dll + 0005:00000220 __imp__GetMessageA@16 1003b220 user32:USER32.dll + 0005:00000224 __imp__TranslateMessage@4 1003b224 user32:USER32.dll + 0005:00000228 __imp__RegisterDeviceNotificationA@12 1003b228 user32:USER32.dll + 0005:0000022c __imp__SendMessageA@16 1003b22c user32:USER32.dll + 0005:00000230 __imp__UnregisterDeviceNotification@4 1003b230 user32:USER32.dll + 0005:00000234 \177USER32_NULL_THUNK_DATA 1003b234 user32:USER32.dll + 0005:0000026c __imp____vcrt_LoadLibraryExW 1003b26c vcruntimed:VCRUNTIME140D.dll + 0005:00000270 __imp____vcrt_GetModuleHandleW 1003b270 vcruntimed:VCRUNTIME140D.dll + 0005:00000274 __imp____vcrt_GetModuleFileNameW 1003b274 vcruntimed:VCRUNTIME140D.dll + 0005:00000278 __imp____std_type_info_destroy_list 1003b278 vcruntimed:VCRUNTIME140D.dll + 0005:0000027c __imp___except_handler4_common 1003b27c vcruntimed:VCRUNTIME140D.dll + 0005:00000280 __imp____current_exception_context 1003b280 vcruntimed:VCRUNTIME140D.dll + 0005:00000284 __imp__strrchr 1003b284 vcruntimed:VCRUNTIME140D.dll + 0005:00000288 __imp____CxxFrameHandler3 1003b288 vcruntimed:VCRUNTIME140D.dll + 0005:0000028c __imp___CxxThrowException@8 1003b28c vcruntimed:VCRUNTIME140D.dll + 0005:00000290 __imp____std_exception_destroy 1003b290 vcruntimed:VCRUNTIME140D.dll + 0005:00000294 __imp____std_exception_copy 1003b294 vcruntimed:VCRUNTIME140D.dll + 0005:00000298 __imp__strstr 1003b298 vcruntimed:VCRUNTIME140D.dll + 0005:0000029c __imp__memcpy 1003b29c vcruntimed:VCRUNTIME140D.dll + 0005:000002a0 __imp__memset 1003b2a0 vcruntimed:VCRUNTIME140D.dll + 0005:000002a4 __imp____current_exception 1003b2a4 vcruntimed:VCRUNTIME140D.dll + 0005:000002a8 \177VCRUNTIME140D_NULL_THUNK_DATA 1003b2a8 vcruntimed:VCRUNTIME140D.dll + 0005:000002e0 __imp___initialize_onexit_table 1003b2e0 ucrtd:ucrtbased.dll + 0005:000002e4 __imp___register_onexit_function 1003b2e4 ucrtd:ucrtbased.dll + 0005:000002e8 __imp___configure_narrow_argv 1003b2e8 ucrtd:ucrtbased.dll + 0005:000002ec __imp___crt_atexit 1003b2ec ucrtd:ucrtbased.dll + 0005:000002f0 __imp___crt_at_quick_exit 1003b2f0 ucrtd:ucrtbased.dll + 0005:000002f4 __imp___cexit 1003b2f4 ucrtd:ucrtbased.dll + 0005:000002f8 __imp___CrtDbgReportW 1003b2f8 ucrtd:ucrtbased.dll + 0005:000002fc __imp___initterm 1003b2fc ucrtd:ucrtbased.dll + 0005:00000300 __imp___initterm_e 1003b300 ucrtd:ucrtbased.dll + 0005:00000304 __imp___free_dbg 1003b304 ucrtd:ucrtbased.dll + 0005:00000308 __imp__terminate 1003b308 ucrtd:ucrtbased.dll + 0005:0000030c __imp__strcpy_s 1003b30c ucrtd:ucrtbased.dll + 0005:00000310 __imp__strcat_s 1003b310 ucrtd:ucrtbased.dll + 0005:00000314 __imp___wmakepath_s 1003b314 ucrtd:ucrtbased.dll + 0005:00000318 __imp___wsplitpath_s 1003b318 ucrtd:ucrtbased.dll + 0005:0000031c __imp__wcscpy_s 1003b31c ucrtd:ucrtbased.dll + 0005:00000320 __imp___initialize_narrow_environment 1003b320 ucrtd:ucrtbased.dll + 0005:00000324 __imp___seh_filter_dll 1003b324 ucrtd:ucrtbased.dll + 0005:00000328 __imp__malloc 1003b328 ucrtd:ucrtbased.dll + 0005:0000032c __imp___callnewh 1003b32c ucrtd:ucrtbased.dll + 0005:00000330 __imp___CrtDbgReport 1003b330 ucrtd:ucrtbased.dll + 0005:00000334 __imp____stdio_common_vsscanf 1003b334 ucrtd:ucrtbased.dll + 0005:00000338 __imp____stdio_common_vsprintf_s 1003b338 ucrtd:ucrtbased.dll + 0005:0000033c __imp____stdio_common_vfprintf_s 1003b33c ucrtd:ucrtbased.dll + 0005:00000340 __imp__fopen_s 1003b340 ucrtd:ucrtbased.dll + 0005:00000344 __imp____stdio_common_vswprintf_s 1003b344 ucrtd:ucrtbased.dll + 0005:00000348 __imp__wcstombs 1003b348 ucrtd:ucrtbased.dll + 0005:0000034c __imp__atoi 1003b34c ucrtd:ucrtbased.dll + 0005:00000350 __imp__free 1003b350 ucrtd:ucrtbased.dll + 0005:00000354 __imp__calloc 1003b354 ucrtd:ucrtbased.dll + 0005:00000358 __imp__strncpy 1003b358 ucrtd:ucrtbased.dll + 0005:0000035c __imp___strlwr_s 1003b35c ucrtd:ucrtbased.dll + 0005:00000360 __imp__strlen 1003b360 ucrtd:ucrtbased.dll + 0005:00000364 __imp___strdup 1003b364 ucrtd:ucrtbased.dll + 0005:00000368 __imp__wcslen 1003b368 ucrtd:ucrtbased.dll + 0005:0000036c __imp___wcsdup 1003b36c ucrtd:ucrtbased.dll + 0005:00000370 __imp___invalid_parameter 1003b370 ucrtd:ucrtbased.dll + 0005:00000374 __imp___execute_onexit_table 1003b374 ucrtd:ucrtbased.dll + 0005:00000378 \177ucrtbased_NULL_THUNK_DATA 1003b378 ucrtd:ucrtbased.dll + 0005:000003c0 __IMPORT_DESCRIPTOR_SETUPAPI 1003b3c0 setupapi:SETUPAPI.dll + 0005:000003d4 __IMPORT_DESCRIPTOR_HID 1003b3d4 hid:HID.DLL + 0005:000003e8 __IMPORT_DESCRIPTOR_KERNEL32 1003b3e8 kernel32:KERNEL32.dll + 0005:000003fc __IMPORT_DESCRIPTOR_USER32 1003b3fc user32:USER32.dll + 0005:00000410 __IMPORT_DESCRIPTOR_ADVAPI32 1003b410 advapi32:ADVAPI32.dll + 0005:00000424 __IMPORT_DESCRIPTOR_MSVCP140D 1003b424 msvcprtd:MSVCP140D.dll + 0005:00000438 __IMPORT_DESCRIPTOR_VCRUNTIME140D 1003b438 vcruntimed:VCRUNTIME140D.dll + 0005:0000044c __IMPORT_DESCRIPTOR_ucrtbased 1003b44c ucrtd:ucrtbased.dll + 0005:00000460 __NULL_IMPORT_DESCRIPTOR 1003b460 setupapi:SETUPAPI.dll + 0007:00000000 ___guard_check_icall_fptr 1003e000 MSVCRTD:guard_support.obj + 0007:00000004 ___guard_xfg_check_icall_fptr 1003e004 MSVCRTD:guard_support.obj + 0007:00000008 ___castguard_check_failure_os_handled_fptr 1003e008 MSVCRTD:guard_support.obj + + entry point at 0002:00000a91 + + Static symbols + + 0000:fffbe000 .debug$S 10000000 vJoyInterface.exp + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 advapi32:ADVAPI32.dll + 0000:fffbe000 .debug$S 10000000 advapi32:ADVAPI32.dll + 0000:fffbe000 .debug$S 10000000 advapi32:ADVAPI32.dll + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 setupapi:SETUPAPI.dll + 0000:fffbe000 .debug$S 10000000 setupapi:SETUPAPI.dll + 0000:fffbe000 .debug$S 10000000 setupapi:SETUPAPI.dll + 0000:fffbe000 .debug$S 10000000 setupapi:SETUPAPI.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffc3000 __guard_fids___except_handler4 10000000 MSVCRTD:chandler4gs.obj + 0000:00000000 _volmd 10000000 MSVCRTD:cpu_disp.obj + 0000:fffc3000 __guard_fids_?dllmain_dispatch@@YAHQAUHINSTANCE__@@KQAX@Z 10000000 MSVCRTD:dll_dllmain.obj + 0000:00000000 _volmd 10000000 MSVCRTD:gs_report.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:guard_support.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:guard_support.obj + 0000:fffc3000 __guard_fids___guard_icall_checks_enforced 10000000 MSVCRTD:guard_support.obj + 0000:00000000 _volmd 10000000 MSVCRTD:guard_support.obj + 0000:00000000 _volmd 10000000 MSVCRTD:guard_support.obj + 0000:fffc3000 __guard_fids___CRT_RTC_INIT 10000000 MSVCRTD:init.obj + 0000:fffc3000 __guard_fids___CRT_RTC_INITW 10000000 MSVCRTD:init.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:std_type_info_static.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids____scrt_set_unhandled_exception_filter 10000000 MSVCRTD:utility_desktop.obj + 0000:fffbe000 .debug$S 10000000 msvcprtd:MSVCP140D.dll + 0000:fffbe000 .debug$S 10000000 msvcprtd:MSVCP140D.dll + 0000:fffbe000 .debug$S 10000000 msvcprtd:MSVCP140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0002:000017e0 ??__EmFfbEffect@@YAXXZ 100127e0 f vJoyInterface.obj + 0002:00001840 ??__EvJoyDevices@@YAXXZ 10012840 f vJoyInterface.obj + 0002:000041f0 $LN5 100151f0 vJoyInterface.obj + 0002:000041f8 $LN4 100151f8 vJoyInterface.obj + 0002:00004204 $LN3 10015204 vJoyInterface.obj + 0002:000042e0 $LN5 100152e0 vJoyInterface.obj + 0002:000042e8 $LN4 100152e8 vJoyInterface.obj + 0002:000042f4 $LN3 100152f4 vJoyInterface.obj + 0002:00004a88 $LN7 10015a88 vJoyInterface.obj + 0002:00004a90 $LN6 10015a90 vJoyInterface.obj + 0002:00004a9c $LN5 10015a9c vJoyInterface.obj + 0002:00004cd4 $LN18 10015cd4 vJoyInterface.obj + 0002:00004cdc $LN17 10015cdc vJoyInterface.obj + 0002:00004cf4 $LN15 10015cf4 vJoyInterface.obj + 0002:00004cfc $LN14 10015cfc vJoyInterface.obj + 0002:00005078 $LN6 10016078 vJoyInterface.obj + 0002:00005080 $LN5 10016080 vJoyInterface.obj + 0002:0000508c $LN4 1001608c vJoyInterface.obj + 0002:000051bc $LN9 100161bc vJoyInterface.obj + 0002:000051c4 $LN8 100161c4 vJoyInterface.obj + 0002:000051d0 $LN7 100161d0 vJoyInterface.obj + 0002:00005948 $LN7 10016948 vJoyInterface.obj + 0002:00005950 $LN6 10016950 vJoyInterface.obj + 0002:0000595c $LN5 1001695c vJoyInterface.obj + 0002:00005b18 $LN7 10016b18 vJoyInterface.obj + 0002:00005b20 $LN6 10016b20 vJoyInterface.obj + 0002:00005b2c $LN5 10016b2c vJoyInterface.obj + 0002:00006420 $LN9 10017420 vJoyInterface.obj + 0002:00006428 $LN8 10017428 vJoyInterface.obj + 0002:00006440 $LN7 10017440 vJoyInterface.obj + 0002:00006447 $LN6 10017447 vJoyInterface.obj + 0002:00006560 $LN8 10017560 vJoyInterface.obj + 0002:00006568 $LN7 10017568 vJoyInterface.obj + 0002:00006574 $LN6 10017574 vJoyInterface.obj + 0002:00007084 $LN5 10018084 vJoyInterface.obj + 0002:0000708c $LN4 1001808c vJoyInterface.obj + 0002:00007098 $LN3 10018098 vJoyInterface.obj + 0002:000081a4 $LN5 100191a4 vJoyInterface.obj + 0002:000081ac $LN4 100191ac vJoyInterface.obj + 0002:000081b8 $LN3 100191b8 vJoyInterface.obj + 0002:00008284 $LN5 10019284 vJoyInterface.obj + 0002:0000828c $LN4 1001928c vJoyInterface.obj + 0002:00008298 $LN3 10019298 vJoyInterface.obj + 0002:00008c6c $LN5 10019c6c vJoyInterface.obj + 0002:00008c74 $LN4 10019c74 vJoyInterface.obj + 0002:00008c80 $LN3 10019c80 vJoyInterface.obj + 0002:00009408 $LN31 1001a408 vJoyInterface.obj + 0002:00009410 $LN30 1001a410 vJoyInterface.obj + 0002:00009440 $LN29 1001a440 vJoyInterface.obj + 0002:0000944b $LN28 1001a44b vJoyInterface.obj + 0002:00009456 $LN27 1001a456 vJoyInterface.obj + 0002:00009462 $LN26 1001a462 vJoyInterface.obj + 0002:000096c0 $LN9 1001a6c0 vJoyInterface.obj + 0002:000096c8 $LN8 1001a6c8 vJoyInterface.obj + 0002:000096d4 $LN7 1001a6d4 vJoyInterface.obj + 0002:00009960 $LN10 1001a960 vJoyInterface.obj + 0002:00009968 $LN9 1001a968 vJoyInterface.obj + 0002:00009980 $LN8 1001a980 vJoyInterface.obj + 0002:00009984 $LN7 1001a984 vJoyInterface.obj + 0002:0000a018 $LN35 1001b018 vJoyInterface.obj + 0002:0000a020 $LN34 1001b020 vJoyInterface.obj + 0002:0000a08c $LN33 1001b08c vJoyInterface.obj + 0002:0000a08f $LN32 1001b08f vJoyInterface.obj + 0002:0000a092 $LN31 1001b092 vJoyInterface.obj + 0002:0000a0a3 $LN30 1001b0a3 vJoyInterface.obj + 0002:0000a0aa $LN29 1001b0aa vJoyInterface.obj + 0002:0000a0bb $LN28 1001b0bb vJoyInterface.obj + 0002:0000a0c0 $LN27 1001b0c0 vJoyInterface.obj + 0002:0000a0c2 $LN26 1001b0c2 vJoyInterface.obj + 0002:0000a0cf $LN25 1001b0cf vJoyInterface.obj + 0002:0000a3b8 $LN11 1001b3b8 vJoyInterface.obj + 0002:0000a3c0 $LN10 1001b3c0 vJoyInterface.obj + 0002:0000a3cc $LN9 1001b3cc vJoyInterface.obj + 0002:0000a890 $LN17 1001b890 vJoyInterface.obj + 0002:0000a898 $LN16 1001b898 vJoyInterface.obj + 0002:0000a8bc $LN15 1001b8bc vJoyInterface.obj + 0002:0000a8be $LN14 1001b8be vJoyInterface.obj + 0002:0000a8cb $LN13 1001b8cb vJoyInterface.obj + 0002:0000aa20 $LN8 1001ba20 vJoyInterface.obj + 0002:0000aa28 $LN7 1001ba28 vJoyInterface.obj + 0002:0000aa34 $LN6 1001ba34 vJoyInterface.obj + 0002:0000ab90 $LN8 1001bb90 vJoyInterface.obj + 0002:0000ab98 $LN7 1001bb98 vJoyInterface.obj + 0002:0000aba4 $LN6 1001bba4 vJoyInterface.obj + 0002:0000b2a4 $LN34 1001c2a4 vJoyInterface.obj + 0002:0000b2ac $LN33 1001c2ac vJoyInterface.obj + 0002:0000b2d0 $LN32 1001c2d0 vJoyInterface.obj + 0002:0000b2d2 $LN31 1001c2d2 vJoyInterface.obj + 0002:0000b2df $LN30 1001c2df vJoyInterface.obj + 0002:0000b2f0 $LN29 1001c2f0 vJoyInterface.obj + 0002:0000b790 $LN20 1001c790 vJoyInterface.obj + 0002:0000b798 $LN19 1001c798 vJoyInterface.obj + 0002:0000b7bc $LN18 1001c7bc vJoyInterface.obj + 0002:0000b7c9 $LN17 1001c7c9 vJoyInterface.obj + 0002:0000b7d4 $LN16 1001c7d4 vJoyInterface.obj + 0002:0000bb00 $LN19 1001cb00 vJoyInterface.obj + 0002:0000bb08 $LN18 1001cb08 vJoyInterface.obj + 0002:0000bb2c $LN17 1001cb2c vJoyInterface.obj + 0002:0000bb39 $LN16 1001cb39 vJoyInterface.obj + 0002:0000bb44 $LN15 1001cb44 vJoyInterface.obj + 0002:0000bec4 $LN21 1001cec4 vJoyInterface.obj + 0002:0000becc $LN20 1001cecc vJoyInterface.obj + 0002:0000bef0 $LN19 1001cef0 vJoyInterface.obj + 0002:0000befd $LN18 1001cefd vJoyInterface.obj + 0002:0000bf08 $LN17 1001cf08 vJoyInterface.obj + 0002:0000c0d0 $LN8 1001d0d0 vJoyInterface.obj + 0002:0000c0d8 $LN7 1001d0d8 vJoyInterface.obj + 0002:0000c0e4 $LN6 1001d0e4 vJoyInterface.obj + 0002:0000c2e8 $LN14 1001d2e8 vJoyInterface.obj + 0002:0000c2f0 $LN13 1001d2f0 vJoyInterface.obj + 0002:0000c2fc $LN12 1001d2fc vJoyInterface.obj + 0002:0000c654 $LN9 1001d654 vJoyInterface.obj + 0002:0000c65c $LN8 1001d65c vJoyInterface.obj + 0002:0000c668 $LN7 1001d668 vJoyInterface.obj + 0002:0000cb24 $LN31 1001db24 vJoyInterface.obj + 0002:0000cb2c $LN30 1001db2c vJoyInterface.obj + 0002:0000cb50 $LN29 1001db50 vJoyInterface.obj + 0002:0000cb59 $LN28 1001db59 vJoyInterface.obj + 0002:0000cb68 $LN27 1001db68 vJoyInterface.obj + 0002:0000d02c $LN8 1001e02c vJoyInterface.obj + 0002:0000d034 $LN7 1001e034 vJoyInterface.obj + 0002:0000d040 $LN6 1001e040 vJoyInterface.obj + 0002:0000d320 $LN19 1001e320 vJoyInterface.obj + 0002:0000d328 $LN18 1001e328 vJoyInterface.obj + 0002:0000d34c $LN17 1001e34c vJoyInterface.obj + 0002:0000d359 $LN16 1001e359 vJoyInterface.obj + 0002:0000d364 $LN15 1001e364 vJoyInterface.obj + 0002:0000d898 $LN22 1001e898 vJoyInterface.obj + 0002:0000d8a0 $LN21 1001e8a0 vJoyInterface.obj + 0002:0000d8c4 $LN20 1001e8c4 vJoyInterface.obj + 0002:0000d8d3 $LN19 1001e8d3 vJoyInterface.obj + 0002:0000d8e2 $LN18 1001e8e2 vJoyInterface.obj + 0002:0000dd68 $LN21 1001ed68 vJoyInterface.obj + 0002:0000dd70 $LN20 1001ed70 vJoyInterface.obj + 0002:0000dda0 $LN19 1001eda0 vJoyInterface.obj + 0002:0000dda8 $LN18 1001eda8 vJoyInterface.obj + 0002:0000ddb0 $LN17 1001edb0 vJoyInterface.obj + 0002:0000ddb5 $LN16 1001edb5 vJoyInterface.obj + 0002:0000e04c $LN13 1001f04c vJoyInterface.obj + 0002:0000e054 $LN12 1001f054 vJoyInterface.obj + 0002:0000e060 $LN10 1001f060 vJoyInterface.obj + 0002:0000e7d4 $LN15 1001f7d4 vJoyInterface.obj + 0002:0000e7dc $LN14 1001f7dc vJoyInterface.obj + 0002:0000e80c $LN13 1001f80c vJoyInterface.obj + 0002:0000e80e $LN12 1001f80e vJoyInterface.obj + 0002:0000e813 $LN11 1001f813 vJoyInterface.obj + 0002:0000e820 $LN10 1001f820 vJoyInterface.obj + 0002:0000ea50 $LN9 1001fa50 vJoyInterface.obj + 0002:0000ea58 $LN8 1001fa58 vJoyInterface.obj + 0002:0000ea64 $LN7 1001fa64 vJoyInterface.obj + 0002:0000efc4 $LN15 1001ffc4 vJoyInterface.obj + 0002:0000efcc $LN14 1001ffcc vJoyInterface.obj + 0002:0000efd8 $LN13 1001ffd8 vJoyInterface.obj + 0002:0000f380 $LN18 10020380 vJoyInterface.obj + 0002:0000f388 $LN17 10020388 vJoyInterface.obj + 0002:0000f3ac $LN16 100203ac vJoyInterface.obj + 0002:0000f3b1 $LN15 100203b1 vJoyInterface.obj + 0002:0000f3bb $LN14 100203bb vJoyInterface.obj + 0002:0000f528 $LN7 10020528 vJoyInterface.obj + 0002:0000f530 $LN6 10020530 vJoyInterface.obj + 0002:0000f53c $LN5 1002053c vJoyInterface.obj + 0002:0000f678 $LN7 10020678 vJoyInterface.obj + 0002:0000f680 $LN6 10020680 vJoyInterface.obj + 0002:0000f698 $LN5 10020698 vJoyInterface.obj + 0002:0000f6ab $LN4 100206ab vJoyInterface.obj + 0002:0000fb10 $LN14 10020b10 vJoyInterface.obj + 0002:0000fb18 $LN13 10020b18 vJoyInterface.obj + 0002:0000fb24 $LN11 10020b24 vJoyInterface.obj + 0002:00010234 $LN15 10021234 vJoyInterface.obj + 0002:0001023c $LN14 1002123c vJoyInterface.obj + 0002:00010260 $LN13 10021260 vJoyInterface.obj + 0002:00010269 $LN12 10021269 vJoyInterface.obj + 0002:00010272 $LN11 10021272 vJoyInterface.obj + 0002:00010474 $LN11 10021474 vJoyInterface.obj + 0002:0001047c $LN10 1002147c vJoyInterface.obj + 0002:00010488 $LN8 10021488 vJoyInterface.obj + 0002:000107cc $LN21 100217cc vJoyInterface.obj + 0002:000107d4 $LN20 100217d4 vJoyInterface.obj + 0002:000107ec $LN18 100217ec vJoyInterface.obj + 0002:000107f7 $LN17 100217f7 vJoyInterface.obj + 0002:000109f8 $LN13 100219f8 vJoyInterface.obj + 0002:00010a00 $LN12 10021a00 vJoyInterface.obj + 0002:00010a0c $LN11 10021a0c vJoyInterface.obj + 0002:00010d74 $LN5 10021d74 vJoyInterface.obj + 0002:00010d7c $LN4 10021d7c vJoyInterface.obj + 0002:00010d88 $LN3 10021d88 vJoyInterface.obj + 0002:00010f60 $LN8 10021f60 vJoyInterface.obj + 0002:00010f68 $LN7 10021f68 vJoyInterface.obj + 0002:00010f80 $LN5 10021f80 vJoyInterface.obj + 0002:00010f87 $LN4 10021f87 vJoyInterface.obj + 0002:000110b0 $LN8 100220b0 vJoyInterface.obj + 0002:000110b8 $LN7 100220b8 vJoyInterface.obj + 0002:000110d0 $LN5 100220d0 vJoyInterface.obj + 0002:000110d7 $LN4 100220d7 vJoyInterface.obj + 0002:00011274 $LN5 10022274 vJoyInterface.obj + 0002:0001127c $LN4 1002227c vJoyInterface.obj + 0002:00011288 $LN3 10022288 vJoyInterface.obj + 0002:00011480 $LN7 10022480 vJoyInterface.obj + 0002:00011488 $LN6 10022488 vJoyInterface.obj + 0002:000114a0 $LN4 100224a0 vJoyInterface.obj + 0002:000114a6 $LN3 100224a6 vJoyInterface.obj + 0002:000115ac $LN8 100225ac vJoyInterface.obj + 0002:000115b4 $LN7 100225b4 vJoyInterface.obj + 0002:000115c0 $LN6 100225c0 vJoyInterface.obj + 0002:000116a0 $LN5 100226a0 vJoyInterface.obj + 0002:000116a8 $LN4 100226a8 vJoyInterface.obj + 0002:000116b4 $LN3 100226b4 vJoyInterface.obj + 0002:00012700 $LN5 10023700 vJoyInterface.obj + 0002:00012708 $LN4 10023708 vJoyInterface.obj + 0002:00012714 $LN3 10023714 vJoyInterface.obj + 0002:00012870 $LN5 10023870 vJoyInterface.obj + 0002:00012878 $LN4 10023878 vJoyInterface.obj + 0002:00012884 $LN3 10023884 vJoyInterface.obj + 0002:00012ab8 $LN10 10023ab8 vJoyInterface.obj + 0002:00012ac0 $LN9 10023ac0 vJoyInterface.obj + 0002:00012acc $LN8 10023acc vJoyInterface.obj + 0002:00012be8 $LN10 10023be8 vJoyInterface.obj + 0002:00012bf0 $LN9 10023bf0 vJoyInterface.obj + 0002:00012bfc $LN8 10023bfc vJoyInterface.obj + 0002:00013864 $LN11 10024864 vJoyInterface.obj + 0002:0001386c $LN10 1002486c vJoyInterface.obj + 0002:00013884 $LN9 10024884 vJoyInterface.obj + 0002:00013886 $LN8 10024886 vJoyInterface.obj + 0002:00013d24 $LN11 10024d24 vJoyInterface.obj + 0002:00013d2c $LN10 10024d2c vJoyInterface.obj + 0002:00013d38 $LN8 10024d38 vJoyInterface.obj + 0002:00014164 $LN11 10025164 vJoyInterface.obj + 0002:0001416c $LN10 1002516c vJoyInterface.obj + 0002:00014178 $LN9 10025178 vJoyInterface.obj + 0002:000147bc $LN20 100257bc vJoyInterface.obj + 0002:000147c4 $LN19 100257c4 vJoyInterface.obj + 0002:000147f4 $LN18 100257f4 vJoyInterface.obj + 0002:00014801 $LN17 10025801 vJoyInterface.obj + 0002:0001480c $LN16 1002580c vJoyInterface.obj + 0002:00014811 $LN15 10025811 vJoyInterface.obj + 0002:00014c1c $LN9 10025c1c vJoyInterface.obj + 0002:00014c24 $LN8 10025c24 vJoyInterface.obj + 0002:00014c30 $LN7 10025c30 vJoyInterface.obj + 0002:00014fd8 $LN23 10025fd8 vJoyInterface.obj + 0002:00014fe0 $LN22 10025fe0 vJoyInterface.obj + 0002:00015010 $LN21 10026010 vJoyInterface.obj + 0002:0001501e $LN20 1002601e vJoyInterface.obj + 0002:0001502b $LN19 1002602b vJoyInterface.obj + 0002:00015033 $LN18 10026033 vJoyInterface.obj + 0002:000151b8 $LN9 100261b8 vJoyInterface.obj + 0002:000151c0 $LN8 100261c0 vJoyInterface.obj + 0002:000151cc $LN7 100261cc vJoyInterface.obj + 0002:000152b8 $LN9 100262b8 vJoyInterface.obj + 0002:000152c0 $LN8 100262c0 vJoyInterface.obj + 0002:000152cc $LN7 100262cc vJoyInterface.obj + 0002:00015480 $LN10 10026480 vJoyInterface.obj + 0002:00015488 $LN9 10026488 vJoyInterface.obj + 0002:00015494 $LN8 10026494 vJoyInterface.obj + 0002:00015578 $LN9 10026578 vJoyInterface.obj + 0002:00015580 $LN8 10026580 vJoyInterface.obj + 0002:0001558c $LN7 1002658c vJoyInterface.obj + 0002:000156a4 $LN9 100266a4 vJoyInterface.obj + 0002:000156ac $LN8 100266ac vJoyInterface.obj + 0002:000156b8 $LN7 100266b8 vJoyInterface.obj + 0002:000158e4 $LN9 100268e4 vJoyInterface.obj + 0002:000158ec $LN8 100268ec vJoyInterface.obj + 0002:000158f8 $LN7 100268f8 vJoyInterface.obj + 0002:00015a54 $LN9 10026a54 vJoyInterface.obj + 0002:00015a5c $LN8 10026a5c vJoyInterface.obj + 0002:00015a68 $LN7 10026a68 vJoyInterface.obj + 0002:00015c7c $LN9 10026c7c vJoyInterface.obj + 0002:00015c84 $LN8 10026c84 vJoyInterface.obj + 0002:00015c90 $LN7 10026c90 vJoyInterface.obj + 0002:00015eac $LN9 10026eac vJoyInterface.obj + 0002:00015eb4 $LN8 10026eb4 vJoyInterface.obj + 0002:00015ec0 $LN7 10026ec0 vJoyInterface.obj + 0002:0001604c $LN9 1002704c vJoyInterface.obj + 0002:00016054 $LN8 10027054 vJoyInterface.obj + 0002:00016060 $LN7 10027060 vJoyInterface.obj + 0002:000162c0 $LN13 100272c0 vJoyInterface.obj + 0002:000162c8 $LN12 100272c8 vJoyInterface.obj + 0002:000162d4 $LN11 100272d4 vJoyInterface.obj + 0002:0001657c $LN9 1002757c vJoyInterface.obj + 0002:00016584 $LN8 10027584 vJoyInterface.obj + 0002:0001659c $LN7 1002759c vJoyInterface.obj + 0002:000165a3 $LN6 100275a3 vJoyInterface.obj + 0002:00016750 $LN12 10027750 vJoyInterface.obj + 0002:00016758 $LN11 10027758 vJoyInterface.obj + 0002:00016770 $LN10 10027770 vJoyInterface.obj + 0002:00016777 $LN9 10027777 vJoyInterface.obj + 0002:00016a10 $LN18 10027a10 vJoyInterface.obj + 0002:00016a18 $LN17 10027a18 vJoyInterface.obj + 0002:00016a24 $LN16 10027a24 vJoyInterface.obj + 0002:00016a30 $LN15 10027a30 vJoyInterface.obj + 0002:00016b78 $LN6 10027b78 vJoyInterface.obj + 0002:00016b80 $LN5 10027b80 vJoyInterface.obj + 0002:00016b8c $LN4 10027b8c vJoyInterface.obj + 0002:00016c48 $LN6 10027c48 vJoyInterface.obj + 0002:00016c50 $LN5 10027c50 vJoyInterface.obj + 0002:00016c5c $LN4 10027c5c vJoyInterface.obj + 0002:00017264 $LN24 10028264 vJoyInterface.obj + 0002:0001726c $LN23 1002826c vJoyInterface.obj + 0002:00017290 $LN22 10028290 vJoyInterface.obj + 0002:00017292 $LN21 10028292 vJoyInterface.obj + 0002:0001729f $LN20 1002829f vJoyInterface.obj + 0002:000176ac $LN16 100286ac vJoyInterface.obj + 0002:000176b4 $LN15 100286b4 vJoyInterface.obj + 0002:000176d8 $LN14 100286d8 vJoyInterface.obj + 0002:000176da $LN13 100286da vJoyInterface.obj + 0002:000176e7 $LN12 100286e7 vJoyInterface.obj + 0002:00017a2c $LN16 10028a2c vJoyInterface.obj + 0002:00017a34 $LN15 10028a34 vJoyInterface.obj + 0002:00017a58 $LN14 10028a58 vJoyInterface.obj + 0002:00017a5a $LN13 10028a5a vJoyInterface.obj + 0002:00017a67 $LN12 10028a67 vJoyInterface.obj + 0002:00017d3c $LN15 10028d3c vJoyInterface.obj + 0002:00017d44 $LN14 10028d44 vJoyInterface.obj + 0002:00017d5c $LN13 10028d5c vJoyInterface.obj + 0002:00017d63 $LN12 10028d63 vJoyInterface.obj + 0002:00017e94 $LN7 10028e94 vJoyInterface.obj + 0002:00017e9c $LN6 10028e9c vJoyInterface.obj + 0002:00017ea8 $LN5 10028ea8 vJoyInterface.obj + 0002:00017fb0 $LN9 10028fb0 vJoyInterface.obj + 0002:00017fb8 $LN8 10028fb8 vJoyInterface.obj + 0002:00017fd0 $LN7 10028fd0 vJoyInterface.obj + 0002:00017fd7 $LN6 10028fd7 vJoyInterface.obj + 0002:000180b4 $LN7 100290b4 vJoyInterface.obj + 0002:000180bc $LN6 100290bc vJoyInterface.obj + 0002:000180c8 $LN5 100290c8 vJoyInterface.obj + 0002:000181a4 $LN7 100291a4 vJoyInterface.obj + 0002:000181ac $LN6 100291ac vJoyInterface.obj + 0002:000181b8 $LN5 100291b8 vJoyInterface.obj + 0002:0001829c $LN7 1002929c vJoyInterface.obj + 0002:000182a4 $LN6 100292a4 vJoyInterface.obj + 0002:000182b0 $LN5 100292b0 vJoyInterface.obj + 0002:00018530 $LN16 10029530 vJoyInterface.obj + 0002:00018538 $LN15 10029538 vJoyInterface.obj + 0002:00018568 $LN14 10029568 vJoyInterface.obj + 0002:0001856d $LN13 1002956d vJoyInterface.obj + 0002:0001856f $LN12 1002956f vJoyInterface.obj + 0002:0001857c $LN11 1002957c vJoyInterface.obj + 0002:000188d4 $LN19 100298d4 vJoyInterface.obj + 0002:000188dc $LN18 100298dc vJoyInterface.obj + 0002:00018900 $LN17 10029900 vJoyInterface.obj + 0002:00018903 $LN16 10029903 vJoyInterface.obj + 0002:00018910 $LN15 10029910 vJoyInterface.obj + 0002:00018cac $LN7 10029cac vJoyInterface.obj + 0002:00018cb4 $LN6 10029cb4 vJoyInterface.obj + 0002:00018cc0 $LN5 10029cc0 vJoyInterface.obj + 0002:00018fcc $LN15 10029fcc vJoyInterface.obj + 0002:00018fd4 $LN14 10029fd4 vJoyInterface.obj + 0002:00018fe0 $LN13 10029fe0 vJoyInterface.obj + 0002:000192b0 $LN16 1002a2b0 vJoyInterface.obj + 0002:000192b8 $LN15 1002a2b8 vJoyInterface.obj + 0002:000192d0 $LN14 1002a2d0 vJoyInterface.obj + 0002:000192d6 $LN13 1002a2d6 vJoyInterface.obj + 0002:000195fc $LN17 1002a5fc vJoyInterface.obj + 0002:00019874 $LN14 1002a874 vJoyInterface.obj + 0002:00019ab8 $LN12 1002aab8 vJoyInterface.obj + 0002:0001a1c4 $LN10 1002b1c4 vJoyInterface.obj + 0002:0001a1cc $LN9 1002b1cc vJoyInterface.obj + 0002:0001a1e4 $LN8 1002b1e4 vJoyInterface.obj + 0002:0001a1eb $LN7 1002b1eb vJoyInterface.obj + 0002:0001a2c8 $LN7 1002b2c8 vJoyInterface.obj + 0002:0001a2d0 $LN6 1002b2d0 vJoyInterface.obj + 0002:0001a2dc $LN5 1002b2dc vJoyInterface.obj + 0002:0001a504 $LN7 1002b504 vJoyInterface.obj + 0002:0001a50c $LN6 1002b50c vJoyInterface.obj + 0002:0001a524 $LN5 1002b524 vJoyInterface.obj + 0002:0001a529 $LN4 1002b529 vJoyInterface.obj + 0002:0001a61c $LN8 1002b61c vJoyInterface.obj + 0002:0001a624 $LN7 1002b624 vJoyInterface.obj + 0002:0001a63c $LN6 1002b63c vJoyInterface.obj + 0002:0001a643 $LN5 1002b643 vJoyInterface.obj + 0002:0001a920 ?find_pe_section@@YAPAU_IMAGE_SECTION_HEADER@@QAEI@Z 1002b920 f MSVCRTD:utility.obj + 0002:0001a9e0 ?is_potentially_valid_image_base@@YA_NQAX@Z 1002b9e0 f MSVCRTD:utility.obj + 0002:0001b3d0 $$000000 1002c3d0 MSVCRTD:chkstk.obj + 0002:0001b3e4 cs10 1002c3e4 MSVCRTD:chkstk.obj + 0002:0001b3f2 cs20 1002c3f2 MSVCRTD:chkstk.obj + 0002:0001b470 ?dllmain_crt_dispatch@@YGHQAUHINSTANCE__@@KQAX@Z 1002c470 f MSVCRTD:dll_dllmain.obj + 0002:0001b4dc $LN11 1002c4dc MSVCRTD:dll_dllmain.obj + 0002:0001b510 ?dllmain_crt_process_attach@@YAHQAUHINSTANCE__@@QAX@Z 1002c510 f MSVCRTD:dll_dllmain.obj + 0002:0001b6e0 ?dllmain_crt_process_detach@@YAH_N@Z 1002c6e0 f MSVCRTD:dll_dllmain.obj + 0002:0001b820 ?dllmain_dispatch@@YAHQAUHINSTANCE__@@KQAX@Z 1002c820 f MSVCRTD:dll_dllmain.obj + 0002:0001ba10 ?dllmain_raw@@YGHQAUHINSTANCE__@@KQAX@Z 1002ca10 f MSVCRTD:dll_dllmain.obj + 0002:0001c480 ___castguard_check_failure_os_handled_wrapper 1002d480 f MSVCRTD:guard_support.obj + 0002:0001c4b0 ___castguard_compat_check 1002d4b0 f MSVCRTD:guard_support.obj + 0002:0001c5f0 ___castguard_slow_path_compat_check 1002d5f0 f MSVCRTD:guard_support.obj + 0002:0001c680 ?DebuggerProbe@@YA_NK@Z 1002d680 f MSVCRTD:error.obj + 0002:0001c6d0 ?DebuggerRuntime@@YA_NKHPAXPB_W@Z 1002d6d0 f MSVCRTD:error.obj + 0002:0001c9a0 ?_getMemBlockDataString@@YAXPAD0PBDI@Z 1002d9a0 f MSVCRTD:error.obj + 0002:0001ca30 ?_strlen_priv@@YAIPBD@Z 1002da30 f MSVCRTD:error.obj + 0002:0001ca50 ?failwithmessage@@YAXPAXHHPBD@Z 1002da50 f MSVCRTD:error.obj + 0002:0001ccd0 ?notify_debugger@@YAXABUtagEXCEPTION_VISUALCPP_DEBUG_INFO@@@Z 1002dcd0 f MSVCRTD:error.obj + 0002:0001d350 ___get_entropy 1002e350 f MSVCRTD:gs_support.obj + 0002:0001d5d0 ?GetPdbDll@@YAPAUHINSTANCE__@@XZ 1002e5d0 f MSVCRTD:pdblkup.obj + 0002:0001d770 ?GetPdbDllFromInstallPath@@YAPAUHINSTANCE__@@XZ 1002e770 f MSVCRTD:pdblkup.obj + 0002:0001da60 ?GetPdbDllPathFromFilePath@@YAHPB_WPA_WI@Z 1002ea60 f MSVCRTD:pdblkup.obj + 0002:0001f950 __unwindfunclet$??$?0AAHUDeviceStat@@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@AAH$$QAUDeviceStat@@@Z$0 10030950 f vJoyInterface.obj + 0002:0001f95d __ehhandler$??$?0AAHUDeviceStat@@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@AAH$$QAUDeviceStat@@@Z 1003095d f vJoyInterface.obj + 0002:0001f990 __ehhandler$??$?0ABH$0A@@?$tuple@ABH@std@@QAE@ABH@Z 10030990 f vJoyInterface.obj + 0002:0001f9c0 __unwindfunclet$??$?0ABUpiecewise_construct_t@std@@V?$tuple@$$QAH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@$$QAH@1@$$QAV?$tuple@$$V@1@@Z$0 100309c0 f vJoyInterface.obj + 0002:0001f9cd __ehhandler$??$?0ABUpiecewise_construct_t@std@@V?$tuple@$$QAH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@$$QAH@1@$$QAV?$tuple@$$V@1@@Z 100309cd f vJoyInterface.obj + 0002:0001fa00 __unwindfunclet$??$?0ABUpiecewise_construct_t@std@@V?$tuple@ABH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@ABH@1@$$QAV?$tuple@$$V@1@@Z$0 10030a00 f vJoyInterface.obj + 0002:0001fa0d __ehhandler$??$?0ABUpiecewise_construct_t@std@@V?$tuple@ABH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@ABH@1@$$QAV?$tuple@$$V@1@@Z 10030a0d f vJoyInterface.obj + 0002:0001fa40 __ehhandler$??$?0H$$V$0A@@?$tuple@$$QAH@std@@QAE@$$QAH@Z 10030a40 f vJoyInterface.obj + 0002:0001fa70 __ehhandler$??$_Deallocate@$07$0A@@std@@YAXPAXI@Z 10030a70 f vJoyInterface.obj + 0002:0001faa0 __ehhandler$??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAAV?$allocator@U_Container_proxy@std@@@0@QAU_Container_proxy@0@@Z 10030aa0 f vJoyInterface.obj + 0002:0001fad0 __ehhandler$??$_Eqrange@H@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBE?AU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@1@ABH@Z 10030ad0 f vJoyInterface.obj + 0002:0001fb00 __ehhandler$??$_Freenode0@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU01@@Z 10030b00 f vJoyInterface.obj + 0002:0001fb30 __ehhandler$??$_Freenode0@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU01@@Z 10030b30 f vJoyInterface.obj + 0002:0001fb60 __ehhandler$??$_Freenode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU01@@Z 10030b60 f vJoyInterface.obj + 0002:0001fb90 __ehhandler$??$_Freenode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU01@@Z 10030b90 f vJoyInterface.obj + 0002:0001fbc0 __unwindfunclet$??0?$_Tree_temp_node_alloc@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z$0 10030bc0 f vJoyInterface.obj + 0002:0001fbcd __ehhandler$??0?$_Tree_temp_node_alloc@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 10030bcd f vJoyInterface.obj + 0002:0001fc00 __ehhandler$??1?$_Alloc_construct_ptr@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 10030c00 f vJoyInterface.obj + 0002:0001fc30 __ehhandler$??1?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 10030c30 f vJoyInterface.obj + 0002:0001fc60 __unwindfunclet$?AreControlsInit@@YAHI@Z$0 10030c60 f vJoyInterface.obj + 0002:0001fc87 __ehhandler$?AreControlsInit@@YAHI@Z 10030c87 f vJoyInterface.obj + 0002:0001fcc0 __unwindfunclet$?Get_PreparsedData@@YAHHPAPAU_HIDP_PREPARSED_DATA@@@Z$0 10030cc0 f vJoyInterface.obj + 0002:0001fcd0 __ehhandler$?Get_PreparsedData@@YAHHPAPAU_HIDP_PREPARSED_DATA@@@Z 10030cd0 f vJoyInterface.obj + 0002:0001fd10 __unwindfunclet$?Get_h@@YAPAXH@Z$0 10030d10 f vJoyInterface.obj + 0002:0001fd20 __ehhandler$?Get_h@@YAPAXH@Z 10030d20 f vJoyInterface.obj + 0002:0001fd50 __unwindfunclet$?Get_hNotify@@YAPAXH@Z$0 10030d50 f vJoyInterface.obj + 0002:0001fd60 __ehhandler$?Get_hNotify@@YAPAXH@Z 10030d60 f vJoyInterface.obj + 0002:0001fd90 __unwindfunclet$?Get_stat@@YA?AW4VjdStat@@H@Z$0 10030d90 f vJoyInterface.obj + 0002:0001fda0 __ehhandler$?Get_stat@@YA?AW4VjdStat@@H@Z 10030da0 f vJoyInterface.obj + 0002:0001fdd0 __unwindfunclet$?SavePosition@@YAXIPAX@Z$0 10030dd0 f vJoyInterface.obj + 0002:0001fdf7 __ehhandler$?SavePosition@@YAXIPAX@Z 10030df7 f vJoyInterface.obj + 0002:0001fe30 __unwindfunclet$?Set_PreparsedData@@YAHH@Z$0 10030e30 f vJoyInterface.obj + 0002:0001fe40 __ehhandler$?Set_PreparsedData@@YAHH@Z 10030e40 f vJoyInterface.obj + 0002:0001fe70 __unwindfunclet$?Set_h@@YAXHPAX@Z$0 10030e70 f vJoyInterface.obj + 0002:0001fe80 __ehhandler$?Set_h@@YAXHPAX@Z 10030e80 f vJoyInterface.obj + 0002:0001feb0 __unwindfunclet$?Set_hNotify@@YAXHPAX@Z$0 10030eb0 f vJoyInterface.obj + 0002:0001fec0 __ehhandler$?Set_hNotify@@YAXHPAX@Z 10030ec0 f vJoyInterface.obj + 0002:0001fef0 __unwindfunclet$?Set_stat@@YAXHW4VjdStat@@@Z$0 10030ef0 f vJoyInterface.obj + 0002:0001ff00 __ehhandler$?Set_stat@@YAXHW4VjdStat@@@Z 10030f00 f vJoyInterface.obj + 0002:0001ff30 __unwindfunclet$?Sync_Position@@YAXH@Z$0 10030f30 f vJoyInterface.obj + 0002:0001ff40 __ehhandler$?Sync_Position@@YAXH@Z 10030f40 f vJoyInterface.obj + 0002:0001ff80 __unwindfunclet$?Update@@YAHI@Z$0 10030f80 f vJoyInterface.obj + 0002:0001ffa2 __unwindfunclet$?Update@@YAHI@Z$1 10030fa2 f vJoyInterface.obj + 0002:0001ffc9 __ehhandler$?Update@@YAHI@Z 10030fc9 f vJoyInterface.obj + 0002:00020010 __unwindfunclet$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEXXZ$0 10031010 f vJoyInterface.obj + 0002:0002001d __ehhandler$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEXXZ 1003101d f vJoyInterface.obj + 0002:00020050 __unwindfunclet$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEXXZ$0 10031050 f vJoyInterface.obj + 0002:0002005d __ehhandler$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEXXZ 1003105d f vJoyInterface.obj + 0002:00020090 __ehhandler$?_Erase@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@AAEIU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@2@@Z 10031090 f vJoyInterface.obj + 0002:000200c0 __unwindfunclet$?vJoyDeviceEntry@@YAHH@Z$0 100310c0 f vJoyInterface.obj + 0002:000200d0 __ehhandler$?vJoyDeviceEntry@@YAHH@Z 100310d0 f vJoyInterface.obj + 0002:00020110 __unwindfunclet$?vJoyDeviceRemove@@YAHH@Z$0 10031110 f vJoyInterface.obj + 0002:00020120 __ehhandler$?vJoyDeviceRemove@@YAHH@Z 10031120 f vJoyInterface.obj + 0002:00021190 ??__FmFfbEffect@@YAXXZ 10032190 f vJoyInterface.obj + 0002:000211e0 ??__FvJoyDevices@@YAXXZ 100321e0 f vJoyInterface.obj + 0003:00000104 ?vJoyDevices$initializer$@@3P6AXXZA 10034104 vJoyInterface.obj + 0003:00000108 ?mFfbEffect$initializer$@@3P6AXXZA 10034108 vJoyInterface.obj + 0003:00000943 ?piecewise_construct@std@@3Upiecewise_construct_t@1@B 10034943 vJoyInterface.obj + 0003:00002c28 ?_RTC_ErrorMessages@@3QBQBDB 10036c28 MSVCRTD:error.obj + 0003:00002c40 ?_RTC_NoFalsePositives@@3QBHB 10036c40 MSVCRTD:error.obj + 0003:00002c58 ?stack_premsg@@3QBDB 10036c58 MSVCRTD:error.obj + 0003:00002c74 ?stack_postmsg@@3QBDB 10036c74 MSVCRTD:error.obj + 0003:00002c88 ?uninit_premsg@@3QBDB 10036c88 MSVCRTD:error.obj + 0003:00002c98 ?uninit_postmsg@@3QBDB 10036c98 MSVCRTD:error.obj + 0003:000032e8 _GS_ExceptionPointers 100372e8 MSVCRTD:gs_report.obj + 0003:000032f4 ?_RTC_errlist@@3QBQBDB 100372f4 MSVCRTD:userapi.obj + 0003:000033d8 ?mspdbName@@3QB_WB 100373d8 MSVCRTD:pdblkup.obj + 0003:000033fc ?debugCrtFileName@@3QB_WB 100373fc MSVCRTD:pdblkup.obj + 0003:00003588 ?dllExt@?1??GetPdbDllPathFromFilePath@@YAHPB_WPA_WI@Z@4QB_WB 10037588 MSVCRTD:pdblkup.obj + 0003:00003594 ?mspdbFilename@?1??GetPdbDllPathFromFilePath@@YAHPB_WPA_WI@Z@4QB_WB 10037594 MSVCRTD:pdblkup.obj + 0003:00004088 __RTC_InitBase.rtc$IMZ 10038088 vJoyInterface.obj + 0003:00004394 __RTC_Shutdown.rtc$TMZ 10038394 vJoyInterface.obj + 0003:000045a0 __unwindtable$?SavePosition@@YAXIPAX@Z 100385a0 vJoyInterface.obj + 0003:000045a8 __ehfuncinfo$?SavePosition@@YAXIPAX@Z 100385a8 vJoyInterface.obj + 0003:000045d0 __unwindtable$?Update@@YAHI@Z 100385d0 vJoyInterface.obj + 0003:000045e0 __ehfuncinfo$?Update@@YAHI@Z 100385e0 vJoyInterface.obj + 0003:0000460c __unwindtable$?AreControlsInit@@YAHI@Z 1003860c vJoyInterface.obj + 0003:00004614 __ehfuncinfo$?AreControlsInit@@YAHI@Z 10038614 vJoyInterface.obj + 0003:0000463c __unwindtable$?vJoyDeviceEntry@@YAHH@Z 1003863c vJoyInterface.obj + 0003:00004644 __ehfuncinfo$?vJoyDeviceEntry@@YAHH@Z 10038644 vJoyInterface.obj + 0003:0000466c __unwindtable$?vJoyDeviceRemove@@YAHH@Z 1003866c vJoyInterface.obj + 0003:00004674 __ehfuncinfo$?vJoyDeviceRemove@@YAHH@Z 10038674 vJoyInterface.obj + 0003:0000469c __unwindtable$?Set_PreparsedData@@YAHH@Z 1003869c vJoyInterface.obj + 0003:000046a4 __ehfuncinfo$?Set_PreparsedData@@YAHH@Z 100386a4 vJoyInterface.obj + 0003:000046cc __unwindtable$?Get_PreparsedData@@YAHHPAPAU_HIDP_PREPARSED_DATA@@@Z 100386cc vJoyInterface.obj + 0003:000046d4 __ehfuncinfo$?Get_PreparsedData@@YAHHPAPAU_HIDP_PREPARSED_DATA@@@Z 100386d4 vJoyInterface.obj + 0003:000046fc __unwindtable$?Set_h@@YAXHPAX@Z 100386fc vJoyInterface.obj + 0003:00004704 __ehfuncinfo$?Set_h@@YAXHPAX@Z 10038704 vJoyInterface.obj + 0003:0000472c __unwindtable$?Sync_Position@@YAXH@Z 1003872c vJoyInterface.obj + 0003:00004734 __ehfuncinfo$?Sync_Position@@YAXH@Z 10038734 vJoyInterface.obj + 0003:0000475c __unwindtable$?Get_h@@YAPAXH@Z 1003875c vJoyInterface.obj + 0003:00004764 __ehfuncinfo$?Get_h@@YAPAXH@Z 10038764 vJoyInterface.obj + 0003:0000478c __unwindtable$?Set_stat@@YAXHW4VjdStat@@@Z 1003878c vJoyInterface.obj + 0003:00004794 __ehfuncinfo$?Set_stat@@YAXHW4VjdStat@@@Z 10038794 vJoyInterface.obj + 0003:000047bc __unwindtable$?Get_stat@@YA?AW4VjdStat@@H@Z 100387bc vJoyInterface.obj + 0003:000047c4 __ehfuncinfo$?Get_stat@@YA?AW4VjdStat@@H@Z 100387c4 vJoyInterface.obj + 0003:000047ec __unwindtable$?Set_hNotify@@YAXHPAX@Z 100387ec vJoyInterface.obj + 0003:000047f4 __ehfuncinfo$?Set_hNotify@@YAXHPAX@Z 100387f4 vJoyInterface.obj + 0003:0000481c __unwindtable$?Get_hNotify@@YAPAXH@Z 1003881c vJoyInterface.obj + 0003:00004824 __ehfuncinfo$?Get_hNotify@@YAPAXH@Z 10038824 vJoyInterface.obj + 0003:0000484c __ehfuncinfo$?_Erase@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@AAEIU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@2@@Z 1003884c vJoyInterface.obj + 0003:00004874 __unwindtable$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEXXZ 10038874 vJoyInterface.obj + 0003:0000487c __ehfuncinfo$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEXXZ 1003887c vJoyInterface.obj + 0003:000048a4 __unwindtable$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEXXZ 100388a4 vJoyInterface.obj + 0003:000048ac __ehfuncinfo$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEXXZ 100388ac vJoyInterface.obj + 0003:000048d4 __ehfuncinfo$??$_Eqrange@H@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBE?AU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@1@ABH@Z 100388d4 vJoyInterface.obj + 0003:000048fc __ehfuncinfo$??$_Freenode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU01@@Z 100388fc vJoyInterface.obj + 0003:00004924 __ehfuncinfo$??$_Freenode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU01@@Z 10038924 vJoyInterface.obj + 0003:0000494c __ehfuncinfo$??$_Freenode0@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU01@@Z 1003894c vJoyInterface.obj + 0003:00004974 __ehfuncinfo$??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAAV?$allocator@U_Container_proxy@std@@@0@QAU_Container_proxy@0@@Z 10038974 vJoyInterface.obj + 0003:0000499c __ehfuncinfo$??1?$_Alloc_construct_ptr@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 1003899c vJoyInterface.obj + 0003:000049c4 __unwindtable$??0?$_Tree_temp_node_alloc@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 100389c4 vJoyInterface.obj + 0003:000049cc __ehfuncinfo$??0?$_Tree_temp_node_alloc@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 100389cc vJoyInterface.obj + 0003:000049f4 __ehfuncinfo$??1?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 100389f4 vJoyInterface.obj + 0003:00004a1c __unwindtable$??$?0ABUpiecewise_construct_t@std@@V?$tuple@ABH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@ABH@1@$$QAV?$tuple@$$V@1@@Z 10038a1c vJoyInterface.obj + 0003:00004a24 __ehfuncinfo$??$?0ABUpiecewise_construct_t@std@@V?$tuple@ABH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@ABH@1@$$QAV?$tuple@$$V@1@@Z 10038a24 vJoyInterface.obj + 0003:00004a4c __unwindtable$??$?0ABUpiecewise_construct_t@std@@V?$tuple@$$QAH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@$$QAH@1@$$QAV?$tuple@$$V@1@@Z 10038a4c vJoyInterface.obj + 0003:00004a54 __ehfuncinfo$??$?0ABUpiecewise_construct_t@std@@V?$tuple@$$QAH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@$$QAH@1@$$QAV?$tuple@$$V@1@@Z 10038a54 vJoyInterface.obj + 0003:00004a7c __ehfuncinfo$??$_Freenode0@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU01@@Z 10038a7c vJoyInterface.obj + 0003:00004aa4 __ehfuncinfo$??$_Deallocate@$07$0A@@std@@YAXPAXI@Z 10038aa4 vJoyInterface.obj + 0003:00004acc __unwindtable$??$?0AAHUDeviceStat@@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@AAH$$QAUDeviceStat@@@Z 10038acc vJoyInterface.obj + 0003:00004ad4 __ehfuncinfo$??$?0AAHUDeviceStat@@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@AAH$$QAUDeviceStat@@@Z 10038ad4 vJoyInterface.obj + 0003:00004afc __ehfuncinfo$??$?0ABH$0A@@?$tuple@ABH@std@@QAE@ABH@Z 10038afc vJoyInterface.obj + 0003:00004b24 __ehfuncinfo$??$?0H$$V$0A@@?$tuple@$$QAH@std@@QAE@$$QAH@Z 10038b24 vJoyInterface.obj + 0003:00004bd8 __sehtable$___scrt_is_nonwritable_in_current_image 10038bd8 MSVCRTD:utility.obj + 0003:00004bf8 __sehtable$?dllmain_crt_process_attach@@YAHQAUHINSTANCE__@@QAX@Z 10038bf8 MSVCRTD:dll_dllmain.obj + 0003:00004c18 __sehtable$?dllmain_crt_process_detach@@YAH_N@Z 10038c18 MSVCRTD:dll_dllmain.obj + 0003:00004c48 __sehtable$?dllmain_dispatch@@YAHQAUHINSTANCE__@@KQAX@Z 10038c48 MSVCRTD:dll_dllmain.obj + 0003:00004c90 __sehtable$?notify_debugger@@YAXABUtagEXCEPTION_VISUALCPP_DEBUG_INFO@@@Z 10038c90 MSVCRTD:error.obj + 0003:00004e70 .edata 10038e70 vJoyInterface.exp + 0003:00004e98 rgpv 10038e98 vJoyInterface.exp + 0003:00004f64 rgszName 10038f64 vJoyInterface.exp + 0003:00005030 rgwOrd 10039030 vJoyInterface.exp + 0003:00005096 szName 10039096 vJoyInterface.exp + 0003:000050a8 $N00001 100390a8 vJoyInterface.exp + 0003:000050b3 $N00002 100390b3 vJoyInterface.exp + 0003:000050bf $N00003 100390bf vJoyInterface.exp + 0003:000050cc $N00004 100390cc vJoyInterface.exp + 0003:000050dd $N00005 100390dd vJoyInterface.exp + 0003:000050e6 $N00006 100390e6 vJoyInterface.exp + 0003:000050ee $N00007 100390ee vJoyInterface.exp + 0003:000050fc $N00008 100390fc vJoyInterface.exp + 0003:0000510a $N00009 1003910a vJoyInterface.exp + 0003:00005119 $N00010 10039119 vJoyInterface.exp + 0003:00005123 $N00011 10039123 vJoyInterface.exp + 0003:00005130 $N00012 10039130 vJoyInterface.exp + 0003:0000513c $N00013 1003913c vJoyInterface.exp + 0003:0000514b $N00014 1003914b vJoyInterface.exp + 0003:0000515e $N00015 1003915e vJoyInterface.exp + 0003:0000516e $N00016 1003916e vJoyInterface.exp + 0003:0000517f $N00017 1003917f vJoyInterface.exp + 0003:0000518e $N00018 1003918e vJoyInterface.exp + 0003:0000519f $N00019 1003919f vJoyInterface.exp + 0003:000051ac $N00020 100391ac vJoyInterface.exp + 0003:000051b7 $N00021 100391b7 vJoyInterface.exp + 0003:000051cc $N00022 100391cc vJoyInterface.exp + 0003:000051d8 $N00023 100391d8 vJoyInterface.exp + 0003:000051e8 $N00024 100391e8 vJoyInterface.exp + 0003:000051f6 $N00025 100391f6 vJoyInterface.exp + 0003:00005204 $N00026 10039204 vJoyInterface.exp + 0003:00005217 $N00027 10039217 vJoyInterface.exp + 0003:0000522b $N00028 1003922b vJoyInterface.exp + 0003:0000523f $N00029 1003923f vJoyInterface.exp + 0003:0000524c $N00030 1003924c vJoyInterface.exp + 0003:00005266 $N00031 10039266 vJoyInterface.exp + 0003:00005278 $N00032 10039278 vJoyInterface.exp + 0003:0000528d $N00033 1003928d vJoyInterface.exp + 0003:000052a7 $N00034 100392a7 vJoyInterface.exp + 0003:000052b6 $N00035 100392b6 vJoyInterface.exp + 0003:000052c2 $N00036 100392c2 vJoyInterface.exp + 0003:000052d4 $N00037 100392d4 vJoyInterface.exp + 0003:000052e6 $N00038 100392e6 vJoyInterface.exp + 0003:000052f4 $N00039 100392f4 vJoyInterface.exp + 0003:000052fd $N00040 100392fd vJoyInterface.exp + 0003:0000530a $N00041 1003930a vJoyInterface.exp + 0003:00005314 $N00042 10039314 vJoyInterface.exp + 0003:0000531d $N00043 1003931d vJoyInterface.exp + 0003:00005325 $N00044 10039325 vJoyInterface.exp + 0003:0000532c $N00045 1003932c vJoyInterface.exp + 0003:00005337 $N00046 10039337 vJoyInterface.exp + 0003:00005342 $N00047 10039342 vJoyInterface.exp + 0003:0000534c $N00048 1003934c vJoyInterface.exp + 0003:00005358 $N00049 10039358 vJoyInterface.exp + 0003:00005362 $N00050 10039362 vJoyInterface.exp + 0003:0000536e $N00051 1003936e vJoyInterface.exp + 0004:00000004 ?szWindowClass@@3PADA 1003a004 vJoyInterface.obj + 0004:00000020 ?szTitle@@3PADA 1003a020 vJoyInterface.obj + 0004:000004a0 ?cnt_complete@?1??DeviceChange@@9@4HA 1003a4a0 vJoyInterface.obj + 0004:000004a4 ?cnt_arrive@?1??DeviceChange@@9@4HA 1003a4a4 vJoyInterface.obj + 0004:000004a8 ?StatNS@?1??GetDeviceNameSpace@@YAHPAPADPAHHPAK@Z@4PADA 1003a4a8 vJoyInterface.obj + 0004:000004ec ?is_initialized_as_dll@@3_NA 1003a4ec MSVCRTD:utility.obj + 0004:000004ed ?module_local_atexit_table_initialized@@3_NA 1003a4ed MSVCRTD:utility.obj + 0004:000004f0 ?module_local_atexit_table@@3U_onexit_table_t@@A 1003a4f0 MSVCRTD:utility.obj + 0004:000004fc ?module_local_at_quick_exit_table@@3U_onexit_table_t@@A 1003a4fc MSVCRTD:utility.obj + 0004:0000050f ?init@?1??_RTC_InitBase@@9@4_NA 1003a50f MSVCRTD:init.obj + 0004:00000510 ?__proc_attached@@3HA 1003a510 MSVCRTD:dll_dllmain.obj + 0004:00000528 _GS_ExceptionRecord 1003a528 MSVCRTD:gs_report.obj + 0004:00000578 _GS_ContextRecord 1003a578 MSVCRTD:gs_report.obj + 0004:000008e4 ?_RTC_ErrorReportFunc@@3P6AHHPBDH00ZZA 1003a8e4 MSVCRTD:userapi.obj + 0004:000008e8 ?_RTC_ErrorReportFuncW@@3P6AHHPB_WH00ZZA 1003a8e8 MSVCRTD:userapi.obj + 0004:000008fc ?mspdb@@3PAUHINSTANCE__@@A 1003a8fc MSVCRTD:pdblkup.obj + 0004:00000900 ?alreadyTried@?1??GetPdbDll@@YAPAUHINSTANCE__@@XZ@4_NA 1003a900 MSVCRTD:pdblkup.obj + 0004:00000901 ?PDBOK@?1??_RTC_GetSrcLine@@YAHPAEPA_WKPAH1K@Z@4_NA 1003a901 MSVCRTD:pdblkup.obj + 0005:000008ae .idata$6 1003b8ae setupapi:SETUPAPI.dll + 0005:000009f4 .idata$6 1003b9f4 hid:HID.DLL + 0005:00000b02 .idata$6 1003bb02 kernel32:KERNEL32.dll + 0005:00000c3e .idata$6 1003bc3e user32:USER32.dll + 0005:00000c78 .idata$6 1003bc78 advapi32:ADVAPI32.dll + 0005:00000cda .idata$6 1003bcda msvcprtd:MSVCP140D.dll + 0005:00000e2a .idata$6 1003be2a vcruntimed:VCRUNTIME140D.dll + 0005:000010aa .idata$6 1003c0aa ucrtd:ucrtbased.dll + 0006:00000000 __E1218CD7_targetver@h 1003d000 stdafx.obj + 0006:00000001 __3347223C_winpackagefamily@h 1003d001 stdafx.obj + 0006:00000002 __F5B671E4_winapifamily@h 1003d002 stdafx.obj + 0006:00000003 __6866F092_sdkddkver@h 1003d003 stdafx.obj + 0006:00000004 __CD417A16_concurrencysal@h 1003d004 stdafx.obj + 0006:00000005 __18C11F8D_sal@h 1003d005 stdafx.obj + 0006:00000006 __BD42D05E_vadefs@h 1003d006 stdafx.obj + 0006:00000007 __2DC9DF70_vcruntime@h 1003d007 stdafx.obj + 0006:00000008 __D7225C87_excpt@h 1003d008 stdafx.obj + 0006:00000009 __F19000F7_stdarg@h 1003d009 stdafx.obj + 0006:0000000a __4114BAD5_specstrings_undef@h 1003d00a stdafx.obj + 0006:0000000b __50F9AEDC_specstrings_strict@h 1003d00b stdafx.obj + 0006:0000000c __BEFC0098_sdv_driverspecs@h 1003d00c stdafx.obj + 0006:0000000d __39A39701_driverspecs@h 1003d00d stdafx.obj + 0006:0000000e __B4D8BDAA_specstrings@h 1003d00e stdafx.obj + 0006:0000000f __04C75F1C_corecrt@h 1003d00f stdafx.obj + 0006:00000010 __78D0C915_corecrt_wctype@h 1003d010 stdafx.obj + 0006:00000011 __6AECDA3E_ctype@h 1003d011 stdafx.obj + 0006:00000012 __B6CCE7CD_kernelspecs@h 1003d012 stdafx.obj + 0006:00000013 __201B1099_basetsd@h 1003d013 stdafx.obj + 0006:00000014 __15E49872_errno@h 1003d014 stdafx.obj + 0006:00000015 __6BB4896E_vcruntime_string@h 1003d015 stdafx.obj + 0006:00000016 __184F7456_corecrt_memcpy_s@h 1003d016 stdafx.obj + 0006:00000017 __82377222_corecrt_memory@h 1003d017 stdafx.obj + 0006:00000018 __5B29309E_corecrt_wstring@h 1003d018 stdafx.obj + 0006:00000019 __F787F5CD_string@h 1003d019 stdafx.obj + 0006:0000001a __8C99318D_guiddef@h 1003d01a stdafx.obj + 0006:0000001b __A3CAA675_pshpack4@h 1003d01b stdafx.obj + 0006:0000001c __2611E9B9_poppack@h 1003d01c stdafx.obj + 0006:0000001d __A747DAC7_pshpack2@h 1003d01d stdafx.obj + 0006:0000001e __AAD05F11_pshpack8@h 1003d01e stdafx.obj + 0006:0000001f __A501649E_pshpack1@h 1003d01f stdafx.obj + 0006:00000020 __0E9D9C0E_apiset@h 1003d020 stdafx.obj + 0006:00000021 __F9851A06_ktmtypes@h 1003d021 stdafx.obj + 0006:00000022 __9DA2B69E_winnt@h 1003d022 stdafx.obj + 0006:00000023 __E9AED855_minwindef@h 1003d023 stdafx.obj + 0006:00000024 __9668718B_windef@h 1003d024 stdafx.obj + 0006:00000025 __B47C9622_apisetcconv@h 1003d025 stdafx.obj + 0006:00000026 __77F4CE3E_minwinbase@h 1003d026 stdafx.obj + 0006:00000027 __42CF8FD5_apiquery2@h 1003d027 stdafx.obj + 0006:00000028 __A6C51434_processenv@h 1003d028 stdafx.obj + 0006:00000029 __415D7145_fileapi@h 1003d029 stdafx.obj + 0006:0000002a __A7316A9B_fileapifromapp@h 1003d02a stdafx.obj + 0006:0000002b __A0359A2D_debugapi@h 1003d02b stdafx.obj + 0006:0000002c __28BE1226_utilapiset@h 1003d02c stdafx.obj + 0006:0000002d __6933B394_handleapi@h 1003d02d stdafx.obj + 0006:0000002e __57F09DF9_errhandlingapi@h 1003d02e stdafx.obj + 0006:0000002f __E0622DF9_fibersapi@h 1003d02f stdafx.obj + 0006:00000030 __D531F6AB_namedpipeapi@h 1003d030 stdafx.obj + 0006:00000031 __ADD82BB4_profileapi@h 1003d031 stdafx.obj + 0006:00000032 __ECFC4D70_heapapi@h 1003d032 stdafx.obj + 0006:00000033 __4F41815B_ioapiset@h 1003d033 stdafx.obj + 0006:00000034 __8D44BFB7_synchapi@h 1003d034 stdafx.obj + 0006:00000035 __8CAEC090_interlockedapi@h 1003d035 stdafx.obj + 0006:00000036 __8ABF54F4_processthreadsapi@h 1003d036 stdafx.obj + 0006:00000037 __1462A586_sysinfoapi@h 1003d037 stdafx.obj + 0006:00000038 __369DBA4C_memoryapi@h 1003d038 stdafx.obj + 0006:00000039 __02D65571_enclaveapi@h 1003d039 stdafx.obj + 0006:0000003a __50387E19_threadpoollegacyapiset@h 1003d03a stdafx.obj + 0006:0000003b __C40195AA_threadpoolapiset@h 1003d03b stdafx.obj + 0006:0000003c __792B5764_jobapi@h 1003d03c stdafx.obj + 0006:0000003d __BAD0D5EB_jobapi2@h 1003d03d stdafx.obj + 0006:0000003e __C6FE0B21_wow64apiset@h 1003d03e stdafx.obj + 0006:0000003f __94EE79C1_libloaderapi@h 1003d03f stdafx.obj + 0006:00000040 __E203BDE6_securitybaseapi@h 1003d040 stdafx.obj + 0006:00000041 __9590F1DC_namespaceapi@h 1003d041 stdafx.obj + 0006:00000042 __0F4602F6_systemtopologyapi@h 1003d042 stdafx.obj + 0006:00000043 __B1B3B677_processtopologyapi@h 1003d043 stdafx.obj + 0006:00000044 __7DD200C2_securityappcontainer@h 1003d044 stdafx.obj + 0006:00000045 __130664A2_realtimeapiset@h 1003d045 stdafx.obj + 0006:00000046 __A8C6672F_winerror@h 1003d046 stdafx.obj + 0006:00000047 __A093DD28_timezoneapi@h 1003d047 stdafx.obj + 0006:00000048 __6BD3506C_winbase@h 1003d048 stdafx.obj + 0006:00000049 __DABCB3B7_wingdi@h 1003d049 stdafx.obj + 0006:0000004a __CD8F5E54_tvout@h 1003d04a stdafx.obj + 0006:0000004b __033B1B1B_winuser@h 1003d04b stdafx.obj + 0006:0000004c __F8663FCA_datetimeapi@h 1003d04c stdafx.obj + 0006:0000004d __03A9DF8F_winnls@h 1003d04d stdafx.obj + 0006:0000004e __CB7A78CC_stringapiset@h 1003d04e stdafx.obj + 0006:0000004f __3F149E59_wincontypes@h 1003d04f stdafx.obj + 0006:00000050 __7CC6F8F3_consoleapi@h 1003d050 stdafx.obj + 0006:00000051 __D4BE3EA3_consoleapi2@h 1003d051 stdafx.obj + 0006:00000052 __D57C5494_consoleapi3@h 1003d052 stdafx.obj + 0006:00000053 __FD7284F3_wincon@h 1003d053 stdafx.obj + 0006:00000054 __2EBE7A74_verrsrc@h 1003d054 stdafx.obj + 0006:00000055 __2FF32671_winver@h 1003d055 stdafx.obj + 0006:00000056 __E384C5B4_reason@h 1003d056 stdafx.obj + 0006:00000057 __C09EE12A_winreg@h 1003d057 stdafx.obj + 0006:00000058 __F1A080AC_wnnc@h 1003d058 stdafx.obj + 0006:00000059 __C375DB87_winnetwk@h 1003d059 stdafx.obj + 0006:0000005a __F202032E_cderr@h 1003d05a stdafx.obj + 0006:0000005b __96C2AB0F_dde@h 1003d05b stdafx.obj + 0006:0000005c __005A4F24_ddeml@h 1003d05c stdafx.obj + 0006:0000005d __8B7EE07A_dlgs@h 1003d05d stdafx.obj + 0006:0000005e __0D44BE7C_lzexpand@h 1003d05e stdafx.obj + 0006:0000005f __7DBDB4C6_mmsyscom@h 1003d05f stdafx.obj + 0006:00000060 __DE89C4CA_mciapi@h 1003d060 stdafx.obj + 0006:00000061 __42D37885_mmiscapi@h 1003d061 stdafx.obj + 0006:00000062 __6DE6FF2A_mmiscapi2@h 1003d062 stdafx.obj + 0006:00000063 __FF70E3D7_playsoundapi@h 1003d063 stdafx.obj + 0006:00000064 __F9747FEC_mmeapi@h 1003d064 stdafx.obj + 0006:00000065 __651C1006_timeapi@h 1003d065 stdafx.obj + 0006:00000066 __60A046E1_joystickapi@h 1003d066 stdafx.obj + 0006:00000067 __C0C01F30_mmsystem@h 1003d067 stdafx.obj + 0006:00000068 __A366D611_nb30@h 1003d068 stdafx.obj + 0006:00000069 __2CD5644B_rpcdcep@h 1003d069 stdafx.obj + 0006:0000006a __B77D54A9_rpcdce@h 1003d06a stdafx.obj + 0006:0000006b __1C5A7A47_rpcnsi@h 1003d06b stdafx.obj + 0006:0000006c __71643EA7_rpcnterr@h 1003d06c stdafx.obj + 0006:0000006d __38122515_rpcasync@h 1003d06d stdafx.obj + 0006:0000006e __DEF407DB_rpc@h 1003d06e stdafx.obj + 0006:0000006f __064CC72C_shellapi@h 1003d06f stdafx.obj + 0006:00000070 __6AB78C00_winperf@h 1003d070 stdafx.obj + 0006:00000071 __683BB200_inaddr@h 1003d071 stdafx.obj + 0006:00000072 __46EE45A6_winsock@h 1003d072 stdafx.obj + 0006:00000073 __924250EA_bcrypt@h 1003d073 stdafx.obj + 0006:00000074 __7D79DD11_ncrypt@h 1003d074 stdafx.obj + 0006:00000075 __C925E4C0_dpapi@h 1003d075 stdafx.obj + 0006:00000076 __CE4C9021_wincrypt@h 1003d076 stdafx.obj + 0006:00000077 __1BC40EFA_winefs@h 1003d077 stdafx.obj + 0006:00000078 __6BCC8C1A_rpcnsip@h 1003d078 stdafx.obj + 0006:00000079 __C065EC3F_rpcsal@h 1003d079 stdafx.obj + 0006:0000007a __7973C144_rpcndr@h 1003d07a stdafx.obj + 0006:0000007b __B58B1953_wtypesbase@h 1003d07b stdafx.obj + 0006:0000007c __013FEE7F_wtypes@h 1003d07c stdafx.obj + 0006:0000007d __62733496_winioctl@h 1003d07d stdafx.obj + 0006:0000007e __B9109027_winsmcrd@h 1003d07e stdafx.obj + 0006:0000007f __87A76A69_winscard@h 1003d07f stdafx.obj + 0006:00000080 __8C0F76A7_prsht@h 1003d080 stdafx.obj + 0006:00000081 __11B57AC7_winspool@h 1003d081 stdafx.obj + 0006:00000082 __494656A0_corecrt_malloc@h 1003d082 stdafx.obj + 0006:00000083 __0C5B3DCC_stddef@h 1003d083 stdafx.obj + 0006:00000084 __F1F53BCE_corecrt_search@h 1003d084 stdafx.obj + 0006:00000085 __DD5AA43A_corecrt_wstdlib@h 1003d085 stdafx.obj + 0006:00000086 __7B399007_limits@h 1003d086 stdafx.obj + 0006:00000087 __71F46169_stdlib@h 1003d087 stdafx.obj + 0006:00000088 __DBA05CC8_unknwnbase@h 1003d088 stdafx.obj + 0006:00000089 __D99DEA84_objidlbase@h 1003d089 stdafx.obj + 0006:0000008a __A2F85269_cguid@h 1003d08a stdafx.obj + 0006:0000008b __A856EBD7_combaseapi@h 1003d08b stdafx.obj + 0006:0000008c __47009772_unknwn@h 1003d08c stdafx.obj + 0006:0000008d __558FF34F_objidl@h 1003d08d stdafx.obj + 0006:0000008e __EA6828E6_oaidl@h 1003d08e stdafx.obj + 0006:0000008f __DD5918D8_propidlbase@h 1003d08f stdafx.obj + 0006:00000090 __A0E2593F_coml2api@h 1003d090 stdafx.obj + 0006:00000091 __F4E63AC7_oleidl@h 1003d091 stdafx.obj + 0006:00000092 __0E8757FF_servprov@h 1003d092 stdafx.obj + 0006:00000093 __13616BE7_msxml@h 1003d093 stdafx.obj + 0006:00000094 __287654D0_urlmon@h 1003d094 stdafx.obj + 0006:00000095 __3465A794_propidl@h 1003d095 stdafx.obj + 0006:00000096 __D5EE8840_objbase@h 1003d096 stdafx.obj + 0006:00000097 __B5981418_oleauto@h 1003d097 stdafx.obj + 0006:00000098 __3AE83FC5_ole2@h 1003d098 stdafx.obj + 0006:00000099 __5F30FE09_commdlg@h 1003d099 stdafx.obj + 0006:0000009a __DD9DD587_stralign@h 1003d09a stdafx.obj + 0006:0000009b __B85B9837_winsvc@h 1003d09b stdafx.obj + 0006:0000009c __12FBC1E4_mcx@h 1003d09c stdafx.obj + 0006:0000009d __BC6D10F5_ime_cmodes@h 1003d09d stdafx.obj + 0006:0000009e __1D49718C_imm@h 1003d09e stdafx.obj + 0006:0000009f __95734585_windows@h 1003d09f stdafx.obj + 0006:000000a0 __C9149A6D_xkeycheck@h 1003d0a0 stdafx.obj + 0006:000000a1 __94F3B4AE_yvals_core@h 1003d0a1 stdafx.obj + 0006:000000a2 __C54FBE38_stdint@h 1003d0a2 stdafx.obj + 0006:000000a3 __2308314D_cstdint 1003d0a3 stdafx.obj + 0006:000000a4 __05E338F6_xtr1common 1003d0a4 stdafx.obj + 0006:000000a5 __3B9D0A9D_cstddef 1003d0a5 stdafx.obj + 0006:000000a6 __92857972_corecrt_math@h 1003d0a6 stdafx.obj + 0006:000000a7 __A29DED85_math@h 1003d0a7 stdafx.obj + 0006:000000a8 __9E56D030_cstdlib 1003d0a8 stdafx.obj + 0006:000000a9 __D7870C25_initializer_list 1003d0a9 stdafx.obj + 0006:000000aa __5E44C2A9_xstddef 1003d0aa stdafx.obj + 0006:000000ab __87BD5CA6_type_traits 1003d0ab stdafx.obj + 0006:000000ac __A95B55BB_utility 1003d0ac stdafx.obj + 0006:000000ad __EE76B579___msvc_iter_core@hpp 1003d0ad stdafx.obj + 0006:000000ae __DC58087B_tuple 1003d0ae stdafx.obj + 0006:000000af __CDB0EEF0_float@h 1003d0af stdafx.obj + 0006:000000b0 __D5150992_cfloat 1003d0b0 stdafx.obj + 0006:000000b1 __1AB9F2C2_climits 1003d0b1 stdafx.obj + 0006:000000b2 __C44F8F6B_corecrt_stdio_config@h 1003d0b2 stdafx.obj + 0006:000000b3 __A7F89B2B_corecrt_wstdio@h 1003d0b3 stdafx.obj + 0006:000000b4 __B5C48800_stdio@h 1003d0b4 stdafx.obj + 0006:000000b5 __A651C215_cstdio 1003d0b5 stdafx.obj + 0006:000000b6 __E387ED1C_corecrt_wconio@h 1003d0b6 stdafx.obj + 0006:000000b7 __02A4DD57_corecrt_wdirect@h 1003d0b7 stdafx.obj + 0006:000000b8 __A056EFF3_corecrt_share@h 1003d0b8 stdafx.obj + 0006:000000b9 __91FC0EDF_corecrt_wio@h 1003d0b9 stdafx.obj + 0006:000000ba __6619318A_corecrt_wprocess@h 1003d0ba stdafx.obj + 0006:000000bb __18070508_corecrt_wtime@h 1003d0bb stdafx.obj + 0006:000000bc __3D2AFB26_types@h 1003d0bc stdafx.obj + 0006:000000bd __72103B05_stat@h 1003d0bd stdafx.obj + 0006:000000be __4BE26BFD_wchar@h 1003d0be stdafx.obj + 0006:000000bf __3CDA1446_cwchar 1003d0bf stdafx.obj + 0006:000000c0 __99FA516B_intrin0@inl@h 1003d0c0 stdafx.obj + 0006:000000c1 __8CEB98C2_intrin0@h 1003d0c1 stdafx.obj + 0006:000000c2 __B83F831D_isa_availability@h 1003d0c2 stdafx.obj + 0006:000000c3 __B3F344F6_limits 1003d0c3 stdafx.obj + 0006:000000c4 __E81B5085_vcruntime_new@h 1003d0c4 stdafx.obj + 0006:000000c5 __130137D5_vcruntime_new_debug@h 1003d0c5 stdafx.obj + 0006:000000c6 __8CF369C8_crtdbg@h 1003d0c6 stdafx.obj + 0006:000000c7 __95C621C9_crtdefs@h 1003d0c7 stdafx.obj + 0006:000000c8 __FEED0ABF_use_ansi@h 1003d0c8 stdafx.obj + 0006:000000c9 __2816668F_yvals@h 1003d0c9 stdafx.obj + 0006:000000ca __E5D9469F_malloc@h 1003d0ca stdafx.obj + 0006:000000cb __C78E68C1_corecrt_terminate@h 1003d0cb stdafx.obj + 0006:000000cc __510B0051_eh@h 1003d0cc stdafx.obj + 0006:000000cd __1BEF3287_vcruntime_exception@h 1003d0cd stdafx.obj + 0006:000000ce __5D994F5F_exception 1003d0ce stdafx.obj + 0006:000000cf __7E4C13A5_new 1003d0cf stdafx.obj + 0006:000000d0 __5795C389_xatomic@h 1003d0d0 stdafx.obj + 0006:000000d1 __D2C478D0_cstring 1003d0d1 stdafx.obj + 0006:000000d2 __A997C6C5_xutility 1003d0d2 stdafx.obj + 0006:000000d3 __C3CE3678_xmemory 1003d0d3 stdafx.obj + 0006:000000d4 __7352ED38_xtree 1003d0d4 stdafx.obj + 0006:000000d5 __8602FD5B_map 1003d0d5 stdafx.obj + 0006:000000d6 __7C4CD365_INITGUID@H 1003d0d6 stdafx.obj + 0006:000000d7 __D33F56CB_public@h 1003d0d7 stdafx.obj + 0006:000000d8 __701FEF85_stdafx@h 1003d0d8 stdafx.obj + 0006:000000d9 __5DDD8A17_vJoyInterface@pch 1003d0d9 stdafx.obj + 0006:000000da __8D78C31F_stdafx@cpp 1003d0da stdafx.obj + 0006:00000106 __E1218CD7_targetver@h 1003d106 vJoyInterface.obj + 0006:00000107 __3347223C_winpackagefamily@h 1003d107 vJoyInterface.obj + 0006:00000108 __F5B671E4_winapifamily@h 1003d108 vJoyInterface.obj + 0006:00000109 __6866F092_sdkddkver@h 1003d109 vJoyInterface.obj + 0006:0000010a __CD417A16_concurrencysal@h 1003d10a vJoyInterface.obj + 0006:0000010b __18C11F8D_sal@h 1003d10b vJoyInterface.obj + 0006:0000010c __BD42D05E_vadefs@h 1003d10c vJoyInterface.obj + 0006:0000010d __2DC9DF70_vcruntime@h 1003d10d vJoyInterface.obj + 0006:0000010e __D7225C87_excpt@h 1003d10e vJoyInterface.obj + 0006:0000010f __F19000F7_stdarg@h 1003d10f vJoyInterface.obj + 0006:00000110 __4114BAD5_specstrings_undef@h 1003d110 vJoyInterface.obj + 0006:00000111 __50F9AEDC_specstrings_strict@h 1003d111 vJoyInterface.obj + 0006:00000112 __BEFC0098_sdv_driverspecs@h 1003d112 vJoyInterface.obj + 0006:00000113 __39A39701_driverspecs@h 1003d113 vJoyInterface.obj + 0006:00000114 __B4D8BDAA_specstrings@h 1003d114 vJoyInterface.obj + 0006:00000115 __04C75F1C_corecrt@h 1003d115 vJoyInterface.obj + 0006:00000116 __78D0C915_corecrt_wctype@h 1003d116 vJoyInterface.obj + 0006:00000117 __6AECDA3E_ctype@h 1003d117 vJoyInterface.obj + 0006:00000118 __B6CCE7CD_kernelspecs@h 1003d118 vJoyInterface.obj + 0006:00000119 __201B1099_basetsd@h 1003d119 vJoyInterface.obj + 0006:0000011a __15E49872_errno@h 1003d11a vJoyInterface.obj + 0006:0000011b __6BB4896E_vcruntime_string@h 1003d11b vJoyInterface.obj + 0006:0000011c __184F7456_corecrt_memcpy_s@h 1003d11c vJoyInterface.obj + 0006:0000011d __82377222_corecrt_memory@h 1003d11d vJoyInterface.obj + 0006:0000011e __5B29309E_corecrt_wstring@h 1003d11e vJoyInterface.obj + 0006:0000011f __F787F5CD_string@h 1003d11f vJoyInterface.obj + 0006:00000120 __8C99318D_guiddef@h 1003d120 vJoyInterface.obj + 0006:00000121 __A3CAA675_pshpack4@h 1003d121 vJoyInterface.obj + 0006:00000122 __2611E9B9_poppack@h 1003d122 vJoyInterface.obj + 0006:00000123 __A747DAC7_pshpack2@h 1003d123 vJoyInterface.obj + 0006:00000124 __AAD05F11_pshpack8@h 1003d124 vJoyInterface.obj + 0006:00000125 __A501649E_pshpack1@h 1003d125 vJoyInterface.obj + 0006:00000126 __0E9D9C0E_apiset@h 1003d126 vJoyInterface.obj + 0006:00000127 __F9851A06_ktmtypes@h 1003d127 vJoyInterface.obj + 0006:00000128 __9DA2B69E_winnt@h 1003d128 vJoyInterface.obj + 0006:00000129 __E9AED855_minwindef@h 1003d129 vJoyInterface.obj + 0006:0000012a __9668718B_windef@h 1003d12a vJoyInterface.obj + 0006:0000012b __B47C9622_apisetcconv@h 1003d12b vJoyInterface.obj + 0006:0000012c __77F4CE3E_minwinbase@h 1003d12c vJoyInterface.obj + 0006:0000012d __42CF8FD5_apiquery2@h 1003d12d vJoyInterface.obj + 0006:0000012e __A6C51434_processenv@h 1003d12e vJoyInterface.obj + 0006:0000012f __415D7145_fileapi@h 1003d12f vJoyInterface.obj + 0006:00000130 __A7316A9B_fileapifromapp@h 1003d130 vJoyInterface.obj + 0006:00000131 __A0359A2D_debugapi@h 1003d131 vJoyInterface.obj + 0006:00000132 __28BE1226_utilapiset@h 1003d132 vJoyInterface.obj + 0006:00000133 __6933B394_handleapi@h 1003d133 vJoyInterface.obj + 0006:00000134 __57F09DF9_errhandlingapi@h 1003d134 vJoyInterface.obj + 0006:00000135 __E0622DF9_fibersapi@h 1003d135 vJoyInterface.obj + 0006:00000136 __D531F6AB_namedpipeapi@h 1003d136 vJoyInterface.obj + 0006:00000137 __ADD82BB4_profileapi@h 1003d137 vJoyInterface.obj + 0006:00000138 __ECFC4D70_heapapi@h 1003d138 vJoyInterface.obj + 0006:00000139 __4F41815B_ioapiset@h 1003d139 vJoyInterface.obj + 0006:0000013a __8D44BFB7_synchapi@h 1003d13a vJoyInterface.obj + 0006:0000013b __8CAEC090_interlockedapi@h 1003d13b vJoyInterface.obj + 0006:0000013c __8ABF54F4_processthreadsapi@h 1003d13c vJoyInterface.obj + 0006:0000013d __1462A586_sysinfoapi@h 1003d13d vJoyInterface.obj + 0006:0000013e __369DBA4C_memoryapi@h 1003d13e vJoyInterface.obj + 0006:0000013f __02D65571_enclaveapi@h 1003d13f vJoyInterface.obj + 0006:00000140 __50387E19_threadpoollegacyapiset@h 1003d140 vJoyInterface.obj + 0006:00000141 __C40195AA_threadpoolapiset@h 1003d141 vJoyInterface.obj + 0006:00000142 __792B5764_jobapi@h 1003d142 vJoyInterface.obj + 0006:00000143 __BAD0D5EB_jobapi2@h 1003d143 vJoyInterface.obj + 0006:00000144 __C6FE0B21_wow64apiset@h 1003d144 vJoyInterface.obj + 0006:00000145 __94EE79C1_libloaderapi@h 1003d145 vJoyInterface.obj + 0006:00000146 __E203BDE6_securitybaseapi@h 1003d146 vJoyInterface.obj + 0006:00000147 __9590F1DC_namespaceapi@h 1003d147 vJoyInterface.obj + 0006:00000148 __0F4602F6_systemtopologyapi@h 1003d148 vJoyInterface.obj + 0006:00000149 __B1B3B677_processtopologyapi@h 1003d149 vJoyInterface.obj + 0006:0000014a __7DD200C2_securityappcontainer@h 1003d14a vJoyInterface.obj + 0006:0000014b __130664A2_realtimeapiset@h 1003d14b vJoyInterface.obj + 0006:0000014c __A8C6672F_winerror@h 1003d14c vJoyInterface.obj + 0006:0000014d __A093DD28_timezoneapi@h 1003d14d vJoyInterface.obj + 0006:0000014e __6BD3506C_winbase@h 1003d14e vJoyInterface.obj + 0006:0000014f __DABCB3B7_wingdi@h 1003d14f vJoyInterface.obj + 0006:00000150 __CD8F5E54_tvout@h 1003d150 vJoyInterface.obj + 0006:00000151 __033B1B1B_winuser@h 1003d151 vJoyInterface.obj + 0006:00000152 __F8663FCA_datetimeapi@h 1003d152 vJoyInterface.obj + 0006:00000153 __03A9DF8F_winnls@h 1003d153 vJoyInterface.obj + 0006:00000154 __CB7A78CC_stringapiset@h 1003d154 vJoyInterface.obj + 0006:00000155 __3F149E59_wincontypes@h 1003d155 vJoyInterface.obj + 0006:00000156 __7CC6F8F3_consoleapi@h 1003d156 vJoyInterface.obj + 0006:00000157 __D4BE3EA3_consoleapi2@h 1003d157 vJoyInterface.obj + 0006:00000158 __D57C5494_consoleapi3@h 1003d158 vJoyInterface.obj + 0006:00000159 __FD7284F3_wincon@h 1003d159 vJoyInterface.obj + 0006:0000015a __2EBE7A74_verrsrc@h 1003d15a vJoyInterface.obj + 0006:0000015b __2FF32671_winver@h 1003d15b vJoyInterface.obj + 0006:0000015c __E384C5B4_reason@h 1003d15c vJoyInterface.obj + 0006:0000015d __C09EE12A_winreg@h 1003d15d vJoyInterface.obj + 0006:0000015e __F1A080AC_wnnc@h 1003d15e vJoyInterface.obj + 0006:0000015f __C375DB87_winnetwk@h 1003d15f vJoyInterface.obj + 0006:00000160 __F202032E_cderr@h 1003d160 vJoyInterface.obj + 0006:00000161 __96C2AB0F_dde@h 1003d161 vJoyInterface.obj + 0006:00000162 __005A4F24_ddeml@h 1003d162 vJoyInterface.obj + 0006:00000163 __8B7EE07A_dlgs@h 1003d163 vJoyInterface.obj + 0006:00000164 __0D44BE7C_lzexpand@h 1003d164 vJoyInterface.obj + 0006:00000165 __7DBDB4C6_mmsyscom@h 1003d165 vJoyInterface.obj + 0006:00000166 __DE89C4CA_mciapi@h 1003d166 vJoyInterface.obj + 0006:00000167 __42D37885_mmiscapi@h 1003d167 vJoyInterface.obj + 0006:00000168 __6DE6FF2A_mmiscapi2@h 1003d168 vJoyInterface.obj + 0006:00000169 __FF70E3D7_playsoundapi@h 1003d169 vJoyInterface.obj + 0006:0000016a __F9747FEC_mmeapi@h 1003d16a vJoyInterface.obj + 0006:0000016b __651C1006_timeapi@h 1003d16b vJoyInterface.obj + 0006:0000016c __60A046E1_joystickapi@h 1003d16c vJoyInterface.obj + 0006:0000016d __C0C01F30_mmsystem@h 1003d16d vJoyInterface.obj + 0006:0000016e __A366D611_nb30@h 1003d16e vJoyInterface.obj + 0006:0000016f __2CD5644B_rpcdcep@h 1003d16f vJoyInterface.obj + 0006:00000170 __B77D54A9_rpcdce@h 1003d170 vJoyInterface.obj + 0006:00000171 __1C5A7A47_rpcnsi@h 1003d171 vJoyInterface.obj + 0006:00000172 __71643EA7_rpcnterr@h 1003d172 vJoyInterface.obj + 0006:00000173 __38122515_rpcasync@h 1003d173 vJoyInterface.obj + 0006:00000174 __DEF407DB_rpc@h 1003d174 vJoyInterface.obj + 0006:00000175 __064CC72C_shellapi@h 1003d175 vJoyInterface.obj + 0006:00000176 __6AB78C00_winperf@h 1003d176 vJoyInterface.obj + 0006:00000177 __683BB200_inaddr@h 1003d177 vJoyInterface.obj + 0006:00000178 __46EE45A6_winsock@h 1003d178 vJoyInterface.obj + 0006:00000179 __924250EA_bcrypt@h 1003d179 vJoyInterface.obj + 0006:0000017a __7D79DD11_ncrypt@h 1003d17a vJoyInterface.obj + 0006:0000017b __C925E4C0_dpapi@h 1003d17b vJoyInterface.obj + 0006:0000017c __CE4C9021_wincrypt@h 1003d17c vJoyInterface.obj + 0006:0000017d __1BC40EFA_winefs@h 1003d17d vJoyInterface.obj + 0006:0000017e __6BCC8C1A_rpcnsip@h 1003d17e vJoyInterface.obj + 0006:0000017f __C065EC3F_rpcsal@h 1003d17f vJoyInterface.obj + 0006:00000180 __7973C144_rpcndr@h 1003d180 vJoyInterface.obj + 0006:00000181 __B58B1953_wtypesbase@h 1003d181 vJoyInterface.obj + 0006:00000182 __013FEE7F_wtypes@h 1003d182 vJoyInterface.obj + 0006:00000183 __62733496_winioctl@h 1003d183 vJoyInterface.obj + 0006:00000184 __B9109027_winsmcrd@h 1003d184 vJoyInterface.obj + 0006:00000185 __87A76A69_winscard@h 1003d185 vJoyInterface.obj + 0006:00000186 __8C0F76A7_prsht@h 1003d186 vJoyInterface.obj + 0006:00000187 __11B57AC7_winspool@h 1003d187 vJoyInterface.obj + 0006:00000188 __494656A0_corecrt_malloc@h 1003d188 vJoyInterface.obj + 0006:00000189 __0C5B3DCC_stddef@h 1003d189 vJoyInterface.obj + 0006:0000018a __F1F53BCE_corecrt_search@h 1003d18a vJoyInterface.obj + 0006:0000018b __DD5AA43A_corecrt_wstdlib@h 1003d18b vJoyInterface.obj + 0006:0000018c __7B399007_limits@h 1003d18c vJoyInterface.obj + 0006:0000018d __71F46169_stdlib@h 1003d18d vJoyInterface.obj + 0006:0000018e __DBA05CC8_unknwnbase@h 1003d18e vJoyInterface.obj + 0006:0000018f __D99DEA84_objidlbase@h 1003d18f vJoyInterface.obj + 0006:00000190 __A2F85269_cguid@h 1003d190 vJoyInterface.obj + 0006:00000191 __A856EBD7_combaseapi@h 1003d191 vJoyInterface.obj + 0006:00000192 __47009772_unknwn@h 1003d192 vJoyInterface.obj + 0006:00000193 __558FF34F_objidl@h 1003d193 vJoyInterface.obj + 0006:00000194 __EA6828E6_oaidl@h 1003d194 vJoyInterface.obj + 0006:00000195 __DD5918D8_propidlbase@h 1003d195 vJoyInterface.obj + 0006:00000196 __A0E2593F_coml2api@h 1003d196 vJoyInterface.obj + 0006:00000197 __F4E63AC7_oleidl@h 1003d197 vJoyInterface.obj + 0006:00000198 __0E8757FF_servprov@h 1003d198 vJoyInterface.obj + 0006:00000199 __13616BE7_msxml@h 1003d199 vJoyInterface.obj + 0006:0000019a __287654D0_urlmon@h 1003d19a vJoyInterface.obj + 0006:0000019b __3465A794_propidl@h 1003d19b vJoyInterface.obj + 0006:0000019c __D5EE8840_objbase@h 1003d19c vJoyInterface.obj + 0006:0000019d __B5981418_oleauto@h 1003d19d vJoyInterface.obj + 0006:0000019e __3AE83FC5_ole2@h 1003d19e vJoyInterface.obj + 0006:0000019f __5F30FE09_commdlg@h 1003d19f vJoyInterface.obj + 0006:000001a0 __DD9DD587_stralign@h 1003d1a0 vJoyInterface.obj + 0006:000001a1 __B85B9837_winsvc@h 1003d1a1 vJoyInterface.obj + 0006:000001a2 __12FBC1E4_mcx@h 1003d1a2 vJoyInterface.obj + 0006:000001a3 __BC6D10F5_ime_cmodes@h 1003d1a3 vJoyInterface.obj + 0006:000001a4 __1D49718C_imm@h 1003d1a4 vJoyInterface.obj + 0006:000001a5 __95734585_windows@h 1003d1a5 vJoyInterface.obj + 0006:000001a6 __C9149A6D_xkeycheck@h 1003d1a6 vJoyInterface.obj + 0006:000001a7 __94F3B4AE_yvals_core@h 1003d1a7 vJoyInterface.obj + 0006:000001a8 __C54FBE38_stdint@h 1003d1a8 vJoyInterface.obj + 0006:000001a9 __2308314D_cstdint 1003d1a9 vJoyInterface.obj + 0006:000001aa __05E338F6_xtr1common 1003d1aa vJoyInterface.obj + 0006:000001ab __3B9D0A9D_cstddef 1003d1ab vJoyInterface.obj + 0006:000001ac __92857972_corecrt_math@h 1003d1ac vJoyInterface.obj + 0006:000001ad __A29DED85_math@h 1003d1ad vJoyInterface.obj + 0006:000001ae __9E56D030_cstdlib 1003d1ae vJoyInterface.obj + 0006:000001af __D7870C25_initializer_list 1003d1af vJoyInterface.obj + 0006:000001b0 __5E44C2A9_xstddef 1003d1b0 vJoyInterface.obj + 0006:000001b1 __87BD5CA6_type_traits 1003d1b1 vJoyInterface.obj + 0006:000001b2 __A95B55BB_utility 1003d1b2 vJoyInterface.obj + 0006:000001b3 __EE76B579___msvc_iter_core@hpp 1003d1b3 vJoyInterface.obj + 0006:000001b4 __DC58087B_tuple 1003d1b4 vJoyInterface.obj + 0006:000001b5 __CDB0EEF0_float@h 1003d1b5 vJoyInterface.obj + 0006:000001b6 __D5150992_cfloat 1003d1b6 vJoyInterface.obj + 0006:000001b7 __1AB9F2C2_climits 1003d1b7 vJoyInterface.obj + 0006:000001b8 __C44F8F6B_corecrt_stdio_config@h 1003d1b8 vJoyInterface.obj + 0006:000001b9 __A7F89B2B_corecrt_wstdio@h 1003d1b9 vJoyInterface.obj + 0006:000001ba __B5C48800_stdio@h 1003d1ba vJoyInterface.obj + 0006:000001bb __A651C215_cstdio 1003d1bb vJoyInterface.obj + 0006:000001bc __E387ED1C_corecrt_wconio@h 1003d1bc vJoyInterface.obj + 0006:000001bd __02A4DD57_corecrt_wdirect@h 1003d1bd vJoyInterface.obj + 0006:000001be __A056EFF3_corecrt_share@h 1003d1be vJoyInterface.obj + 0006:000001bf __91FC0EDF_corecrt_wio@h 1003d1bf vJoyInterface.obj + 0006:000001c0 __6619318A_corecrt_wprocess@h 1003d1c0 vJoyInterface.obj + 0006:000001c1 __18070508_corecrt_wtime@h 1003d1c1 vJoyInterface.obj + 0006:000001c2 __3D2AFB26_types@h 1003d1c2 vJoyInterface.obj + 0006:000001c3 __72103B05_stat@h 1003d1c3 vJoyInterface.obj + 0006:000001c4 __4BE26BFD_wchar@h 1003d1c4 vJoyInterface.obj + 0006:000001c5 __3CDA1446_cwchar 1003d1c5 vJoyInterface.obj + 0006:000001c6 __99FA516B_intrin0@inl@h 1003d1c6 vJoyInterface.obj + 0006:000001c7 __8CEB98C2_intrin0@h 1003d1c7 vJoyInterface.obj + 0006:000001c8 __B83F831D_isa_availability@h 1003d1c8 vJoyInterface.obj + 0006:000001c9 __B3F344F6_limits 1003d1c9 vJoyInterface.obj + 0006:000001ca __E81B5085_vcruntime_new@h 1003d1ca vJoyInterface.obj + 0006:000001cb __130137D5_vcruntime_new_debug@h 1003d1cb vJoyInterface.obj + 0006:000001cc __8CF369C8_crtdbg@h 1003d1cc vJoyInterface.obj + 0006:000001cd __95C621C9_crtdefs@h 1003d1cd vJoyInterface.obj + 0006:000001ce __FEED0ABF_use_ansi@h 1003d1ce vJoyInterface.obj + 0006:000001cf __2816668F_yvals@h 1003d1cf vJoyInterface.obj + 0006:000001d0 __E5D9469F_malloc@h 1003d1d0 vJoyInterface.obj + 0006:000001d1 __C78E68C1_corecrt_terminate@h 1003d1d1 vJoyInterface.obj + 0006:000001d2 __510B0051_eh@h 1003d1d2 vJoyInterface.obj + 0006:000001d3 __1BEF3287_vcruntime_exception@h 1003d1d3 vJoyInterface.obj + 0006:000001d4 __5D994F5F_exception 1003d1d4 vJoyInterface.obj + 0006:000001d5 __7E4C13A5_new 1003d1d5 vJoyInterface.obj + 0006:000001d6 __5795C389_xatomic@h 1003d1d6 vJoyInterface.obj + 0006:000001d7 __D2C478D0_cstring 1003d1d7 vJoyInterface.obj + 0006:000001d8 __A997C6C5_xutility 1003d1d8 vJoyInterface.obj + 0006:000001d9 __C3CE3678_xmemory 1003d1d9 vJoyInterface.obj + 0006:000001da __7352ED38_xtree 1003d1da vJoyInterface.obj + 0006:000001db __8602FD5B_map 1003d1db vJoyInterface.obj + 0006:000001dc __7C4CD365_INITGUID@H 1003d1dc vJoyInterface.obj + 0006:000001dd __D33F56CB_public@h 1003d1dd vJoyInterface.obj + 0006:000001de __701FEF85_stdafx@h 1003d1de vJoyInterface.obj + 0006:000001df __5DDD8A17_vJoyInterface@pch 1003d1df vJoyInterface.obj + 0006:000001e0 __06BD36BF_assert@h 1003d1e0 vJoyInterface.obj + 0006:000001e1 __C1D62156_spapidef@h 1003d1e1 vJoyInterface.obj + 0006:000001e2 __1C2F47EE_dpa_dsa@h 1003d1e2 vJoyInterface.obj + 0006:000001e3 __C5859B4B_commctrl@h 1003d1e3 vJoyInterface.obj + 0006:000001e4 __77B432AB_devpropdef@h 1003d1e4 vJoyInterface.obj + 0006:000001e5 __C1400A33_setupapi@h 1003d1e5 vJoyInterface.obj + 0006:000001e6 __B8BC9EA1_hidusage@h 1003d1e6 vJoyInterface.obj + 0006:000001e7 __CB81E9A0_hidpi@h 1003d1e7 vJoyInterface.obj + 0006:000001e8 __0A3E78F6_Hidsdi@h 1003d1e8 vJoyInterface.obj + 0006:000001e9 __6F8C1290_Dbt@h 1003d1e9 vJoyInterface.obj + 0006:000001ea __7A0A7160_tchar@h 1003d1ea vJoyInterface.obj + 0006:000001eb __67E0D18C_vJoyInterface@h 1003d1eb vJoyInterface.obj + 0006:000001ec __8D63CA82_vJoyInterface@cpp 1003d1ec vJoyInterface.obj + 0008:00000270 $R000000 1003f270 version.res + 0008:00000280 $R000010 1003f280 version.res + 0008:00000288 $R000018 1003f288 version.res + 0008:00000608 $R000398 1003f608 version.res diff --git a/legacy/static_debug_vJoy/vJoyInterface.exp b/legacy/static_debug_vJoy/vJoyInterface.exp new file mode 100644 index 0000000..9dcc650 Binary files /dev/null and b/legacy/static_debug_vJoy/vJoyInterface.exp differ diff --git a/legacy/static_debug_vJoy/vJoyInterface.idb b/legacy/static_debug_vJoy/vJoyInterface.idb new file mode 100644 index 0000000..101a03e Binary files /dev/null and b/legacy/static_debug_vJoy/vJoyInterface.idb differ diff --git a/legacy/static_debug_vJoy/vJoyInterface.lib b/legacy/static_debug_vJoy/vJoyInterface.lib new file mode 100644 index 0000000..4c2e7db Binary files /dev/null and b/legacy/static_debug_vJoy/vJoyInterface.lib differ diff --git a/legacy/stdafx.cpp b/legacy/stdafx.cpp new file mode 100644 index 0000000..2938c08 --- /dev/null +++ b/legacy/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// riovjoy.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/legacy/stdafx.h b/legacy/stdafx.h new file mode 100644 index 0000000..3310996 --- /dev/null +++ b/legacy/stdafx.h @@ -0,0 +1,33 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "SimpleIni.h" +#include "vjoyinterface.h" +#include "public.h" +#include "c232comm.h" +#include "CPlasma.h" +#include "CRIO.h" +#include "CRIOMAIN.h" + + + + + +// TODO: reference additional headers your program requires here diff --git a/legacy/vJoyInterface - Copy.dll b/legacy/vJoyInterface - Copy.dll new file mode 100644 index 0000000..c0663ee Binary files /dev/null and b/legacy/vJoyInterface - Copy.dll differ diff --git a/legacy/vJoyInterface - Copy.lib b/legacy/vJoyInterface - Copy.lib new file mode 100644 index 0000000..e879f23 Binary files /dev/null and b/legacy/vJoyInterface - Copy.lib differ diff --git a/legacy/vJoyInterface.idb b/legacy/vJoyInterface.idb new file mode 100644 index 0000000..17fccdd Binary files /dev/null and b/legacy/vJoyInterface.idb differ diff --git a/legacy/vJoyInterface.lib.org b/legacy/vJoyInterface.lib.org new file mode 100644 index 0000000..c205ae9 Binary files /dev/null and b/legacy/vJoyInterface.lib.org differ diff --git a/legacy/vJoyInterface.map b/legacy/vJoyInterface.map new file mode 100644 index 0000000..b6c4c70 --- /dev/null +++ b/legacy/vJoyInterface.map @@ -0,0 +1,2400 @@ + vJoyInterface + + Timestamp is 63bd7cb3 (Tue Jan 10 08:56:51 2023) + + Preferred load address is 10000000 + + Start Length Name Class + 0001:00000000 00010000H .textbss DATA + 0002:00000000 00002ea0H .text$di CODE + 0002:00002ea0 0001cab0H .text$mn CODE + 0002:0001f950 00001840H .text$x CODE + 0002:00021190 00001096H .text$yd CODE + 0003:00000000 00000104H .CRT$XCA DATA + 0003:00000104 0000010cH .CRT$XCU DATA + 0003:00000210 00000104H .CRT$XCZ DATA + 0003:00000314 00000104H .CRT$XIA DATA + 0003:00000418 00000104H .CRT$XIZ DATA + 0003:0000051c 00000104H .CRT$XPA DATA + 0003:00000620 00000104H .CRT$XPZ DATA + 0003:00000724 00000104H .CRT$XTA DATA + 0003:00000828 00000108H .CRT$XTZ DATA + 0003:00000930 00002f90H .rdata DATA + 0003:000038c0 00000180H .rdata$CastGuardVftablesA DATA + 0003:00003a40 0000014cH .rdata$CastGuardVftablesC DATA + 0003:00003b8c 00000274H .rdata$r DATA + 0003:00003e00 00000184H .rdata$zzzdbg DATA + 0003:00003f84 00000104H .rtc$IAA DATA + 0003:00004088 00000104H .rtc$IMZ DATA + 0003:0000418c 00000104H .rtc$IZZ DATA + 0003:00004290 00000104H .rtc$TAA DATA + 0003:00004394 00000104H .rtc$TMZ DATA + 0003:00004498 00000108H .rtc$TZZ DATA + 0003:000045a0 000008d0H .xdata$x DATA + 0003:00004e70 0000070aH .edata DATA + 0004:00000000 00000194H .data DATA + 0004:00000194 00000178H .data$r DATA + 0004:0000030c 0000011cH .data$rs DATA + 0004:00000428 000004f4H .bss DATA + 0005:00000000 000003c0H .idata$5 DATA + 0005:000003c0 000000a0H .idata$2 DATA + 0005:00000460 00000014H .idata$3 DATA + 0005:00000474 000003c0H .idata$4 DATA + 0005:00000834 00000c58H .idata$6 DATA + 0006:00000000 0000031cH .msvcjmc DATA + 0007:00000000 0000010eH .00cfg DATA + 0008:00000000 00000270H .rsrc$01 DATA + 0008:00000270 0000071cH .rsrc$02 DATA + + Address Publics by Value Rva+Base Lib:Object + + 0000:00000000 ___AbsoluteZero 00000000 + 0000:00000000 ___arm64x_extra_rfe_table 00000000 + 0000:00000000 ___arm64x_extra_rfe_table_size 00000000 + 0000:00000000 ___arm64x_native_entrypoint 00000000 + 0000:00000000 ___arm64x_redirection_metadata 00000000 + 0000:00000000 ___arm64x_redirection_metadata_count 00000000 + 0000:00000000 ___dynamic_value_reloc_table 00000000 + 0000:00000000 ___enclave_config 00000000 + 0000:00000000 ___guard_check_icall_a64n_fptr 00000000 + 0000:00000000 ___guard_eh_cont_count 00000000 + 0000:00000000 ___guard_eh_cont_table 00000000 + 0000:00000000 ___guard_fids_count 00000000 + 0000:00000000 ___guard_fids_table 00000000 + 0000:00000000 ___guard_iat_count 00000000 + 0000:00000000 ___guard_iat_table 00000000 + 0000:00000000 ___guard_longjmp_count 00000000 + 0000:00000000 ___guard_longjmp_table 00000000 + 0000:00000000 ___hybrid_auxiliary_iat 00000000 + 0000:00000000 ___hybrid_auxiliary_iat_copy 00000000 + 0000:00000000 ___hybrid_code_map 00000000 + 0000:00000000 ___hybrid_code_map_count 00000000 + 0000:00000000 ___safe_se_handler_count 00000000 + 0000:00000000 ___safe_se_handler_table 00000000 + 0000:00000000 ___volatile_metadata 00000000 + 0000:00000000 ___x64_code_ranges_to_entry_points 00000000 + 0000:00000000 ___x64_code_ranges_to_entry_points_count 00000000 + 0000:00000100 ___guard_flags 00000100 + 0000:00000000 ___ImageBase 10000000 + 0001:00000000 __enc$textbss$begin 10001000 + 0001:00010000 __enc$textbss$end 10011000 + 0002:00002ea0 __JustMyCode_Default 10013ea0 f i stdafx.obj + 0002:00002eb0 ??$?0$$QAH$$Z$$V@?$pair@$$CBHUDeviceStat@@@std@@QAE@Upiecewise_construct_t@1@V?$tuple@$$QAH@1@V?$tuple@$$V@1@@Z 10013eb0 f i vJoyInterface.obj + 0002:00002f40 ??$?0$$V@?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@$00@std@@QAE@U_Zero_then_variadic_args_t@1@@Z 10013f40 f i vJoyInterface.obj + 0002:00002fb0 ??$?0$$V@?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@2@$00@std@@QAE@U_Zero_then_variadic_args_t@1@@Z 10013fb0 f i vJoyInterface.obj + 0002:00003020 ??$?0AAHUDeviceStat@@$0A@@?$pair@$$CBHUDeviceStat@@@std@@QAE@AAH$$QAUDeviceStat@@@Z 10014020 f i vJoyInterface.obj + 0002:000030b0 ??$?0AAHUDeviceStat@@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@AAH$$QAUDeviceStat@@@Z 100140b0 f i vJoyInterface.obj + 0002:00003210 ??$?0AAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@AAPAU01@$0A@@?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@std@@QAE@AAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@0@Z 10014210 f i vJoyInterface.obj + 0002:000032a0 ??$?0AAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N$0A@@?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N@std@@QAE@AAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@$$QA_N@Z 100142a0 f i vJoyInterface.obj + 0002:00003330 ??$?0ABH$$Z$$V@?$pair@$$CBHUDeviceStat@@@std@@QAE@Upiecewise_construct_t@1@V?$tuple@ABH@1@V?$tuple@$$V@1@@Z 10014330 f i vJoyInterface.obj + 0002:000033c0 ??$?0ABH$0A@@?$tuple@ABH@std@@QAE@ABH@Z 100143c0 f i vJoyInterface.obj + 0002:00003470 ??$?0ABH@?$_Tuple_val@ABH@std@@QAE@ABH@Z 10014470 f i vJoyInterface.obj + 0002:000034e0 ??$?0ABQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N$0A@@?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N@std@@QAE@ABQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@$$QA_N@Z 100144e0 f i vJoyInterface.obj + 0002:00003570 ??$?0ABU?$less@H@std@@U_Zero_then_variadic_args_t@1@@?$_Compressed_pair@U?$less@H@std@@V?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@$00@2@$00@std@@QAE@U_One_then_variadic_args_t@1@ABU?$less@H@1@$$QAU_Zero_then_variadic_args_t@1@@Z 10014570 f i vJoyInterface.obj + 0002:00003600 ??$?0ABU?$less@H@std@@U_Zero_then_variadic_args_t@1@@?$_Compressed_pair@U?$less@H@std@@V?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@2@$00@2@$00@std@@QAE@U_One_then_variadic_args_t@1@ABU?$less@H@1@$$QAU_Zero_then_variadic_args_t@1@@Z 10014600 f i vJoyInterface.obj + 0002:00003690 ??$?0ABUpiecewise_construct_t@std@@V?$tuple@$$QAH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@$$QAH@1@$$QAV?$tuple@$$V@1@@Z 10014690 f i vJoyInterface.obj + 0002:00003800 ??$?0ABUpiecewise_construct_t@std@@V?$tuple@ABH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@ABH@1@$$QAV?$tuple@$$V@1@@Z 10014800 f i vJoyInterface.obj + 0002:00003970 ??$?0H$$V$0A@@?$tuple@$$QAH@std@@QAE@$$QAH@Z 10014970 f i vJoyInterface.obj + 0002:00003a30 ??$?0H@?$_Tuple_val@$$QAH@std@@QAE@$$QAH@Z 10014a30 f i vJoyInterface.obj + 0002:00003aa0 ??$?0PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N$0A@@?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N@std@@QAE@$$QAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@$$QA_N@Z 10014aa0 f i vJoyInterface.obj + 0002:00003b30 ??$?0U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@?$allocator@U_Container_proxy@std@@@std@@QAE@ABV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 10014b30 f i vJoyInterface.obj + 0002:00003b90 ??$?0U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@?$allocator@U_Container_proxy@std@@@std@@QAE@ABV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@@Z 10014b90 f i vJoyInterface.obj + 0002:00003bf0 ??$?0U_Exact_args_t@std@@$0A@@?$tuple@$$V@std@@QAE@U_Exact_args_t@1@@Z 10014bf0 f i vJoyInterface.obj + 0002:00003c50 ??$?0U_Exact_args_t@std@@ABH$$V$0A@@?$tuple@ABH@std@@QAE@U_Exact_args_t@1@ABH@Z 10014c50 f i vJoyInterface.obj + 0002:00003ce0 ??$?0U_Exact_args_t@std@@H$$V$0A@@?$tuple@$$QAH@std@@QAE@U_Exact_args_t@1@$$QAH@Z 10014ce0 f i vJoyInterface.obj + 0002:00003d70 ??$?0V?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@AB_N$0A@@?$pair@V?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@_N@std@@QAE@$$QAV?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@1@AB_N@Z 10014d70 f i vJoyInterface.obj + 0002:00003e00 ??$?0V?$tuple@$$QAH@std@@V?$tuple@$$V@1@$0A@$$Z$S@?$pair@$$CBHUDeviceStat@@@std@@QAE@AAV?$tuple@$$QAH@1@AAV?$tuple@$$V@1@U?$integer_sequence@I$0A@@1@U?$integer_sequence@I$S@1@@Z 10014e00 f i vJoyInterface.obj + 0002:00003ea0 ??$?0V?$tuple@ABH@std@@V?$tuple@$$V@1@$0A@$$Z$S@?$pair@$$CBHUDeviceStat@@@std@@QAE@AAV?$tuple@ABH@1@AAV?$tuple@$$V@1@U?$integer_sequence@I$0A@@1@U?$integer_sequence@I$S@1@@Z 10014ea0 f i vJoyInterface.obj + 0002:00003f40 ??$_Adl_verify_range@V?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@V12@@std@@YAXABV?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@0@0@Z 10014f40 f i vJoyInterface.obj + 0002:00003f90 ??$_Allocate@$07U_Default_allocate_traits@std@@$0A@@std@@YAPAXI@Z 10014f90 f i vJoyInterface.obj + 0002:00004010 ??$_Allocate_manually_vector_aligned@U_Default_allocate_traits@std@@@std@@YAPAXI@Z 10015010 f i vJoyInterface.obj + 0002:00004150 ??$_Buyheadnode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAPAU01@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 10015150 f i vJoyInterface.obj + 0002:00004240 ??$_Buyheadnode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAPAU01@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@@Z 10015240 f i vJoyInterface.obj + 0002:00004330 ??$_Construct_in_place@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@AAPAU12@@std@@YAXAAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@0@Z 10015330 f i vJoyInterface.obj + 0002:000043d0 ??$_Construct_in_place@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@ABQAU12@@std@@YAXAAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@ABQAU10@@Z 100153d0 f i vJoyInterface.obj + 0002:00004470 ??$_Construct_in_place@PAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@ABQAU12@@std@@YAXAAPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@0@ABQAU10@@Z 10015470 f i vJoyInterface.obj + 0002:00004510 ??$_Construct_in_place@U_Container_proxy@std@@PAU_Container_base12@2@@std@@YAXAAU_Container_proxy@0@$$QAPAU_Container_base12@0@@Z 10015510 f i vJoyInterface.obj + 0002:000045b0 ??$_Deallocate@$07$0A@@std@@YAXPAXI@Z 100155b0 f i vJoyInterface.obj + 0002:00004670 ??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAAV?$allocator@U_Container_proxy@std@@@0@QAU_Container_proxy@0@@Z 10015670 f i vJoyInterface.obj + 0002:00004710 ??$_Debug_lt_pred@ABU?$less@H@std@@ABHABH$0A@@std@@YA_NABU?$less@H@0@ABH1@Z 10015710 f i vJoyInterface.obj + 0002:00004820 ??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAAV?$allocator@U_Container_proxy@std@@@0@QAU_Container_proxy@0@@Z 10015820 f i vJoyInterface.obj + 0002:00004880 ??$_Destroy_in_place@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@YAXAAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@@Z 10015880 f i vJoyInterface.obj + 0002:000048d0 ??$_Destroy_in_place@PAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@YAXAAPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@0@@Z 100158d0 f i vJoyInterface.obj + 0002:00004920 ??$_Emplace@AAHUDeviceStat@@@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAE?AU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N@1@AAH$$QAUDeviceStat@@@Z 10015920 f i vJoyInterface.obj + 0002:00004b10 ??$_Eqrange@H@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBE?AU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@1@ABH@Z 10015b10 f i vJoyInterface.obj + 0002:00004d90 ??$_Erase_head@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 10015d90 f i vJoyInterface.obj + 0002:00004e20 ??$_Erase_head@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@std@@QAEXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@@Z 10015e20 f i vJoyInterface.obj + 0002:00004eb0 ??$_Erase_tree@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@@Z 10015eb0 f i vJoyInterface.obj + 0002:00004f50 ??$_Erase_tree@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@std@@QAEXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@1@@Z 10015f50 f i vJoyInterface.obj + 0002:00004ff0 ??$_Find@H@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@ABEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABH@Z 10015ff0 f i vJoyInterface.obj + 0002:000050c0 ??$_Find_lower_bound@H@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBE?AU?$_Tree_find_result@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@ABH@Z 100160c0 f i vJoyInterface.obj + 0002:00005220 ??$_Freenode0@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU01@@Z 10016220 f i vJoyInterface.obj + 0002:000052f0 ??$_Freenode0@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU01@@Z 100162f0 f i vJoyInterface.obj + 0002:000053c0 ??$_Freenode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU01@@Z 100163c0 f i vJoyInterface.obj + 0002:00005480 ??$_Freenode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU01@@Z 10016480 f i vJoyInterface.obj + 0002:00005540 ??$_Get_size_of_n@$07@std@@YAII@Z 10016540 f i vJoyInterface.obj + 0002:000055b0 ??$_Get_size_of_n@$0BI@@std@@YAII@Z 100165b0 f i vJoyInterface.obj + 0002:00005620 ??$_Get_size_of_n@$0OE@@std@@YAII@Z 10016620 f i vJoyInterface.obj + 0002:00005690 ??$_Get_unwrapped@AAV?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@@std@@YA?A_TAAV?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@0@@Z 10016690 f i vJoyInterface.obj + 0002:000056e0 ??$_Kfn@$$CBHUDeviceStat@@@?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@SAABHABU?$pair@$$CBHUDeviceStat@@@1@@Z 100166e0 f i vJoyInterface.obj + 0002:00005730 ??$_Lower_bound_duplicate@H@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBE_NQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABH@Z 10016730 f i vJoyInterface.obj + 0002:000057f0 ??$_Try_emplace@ABH$$V@?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@AAE?AU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N@1@ABH@Z 100167f0 f i vJoyInterface.obj + 0002:000059c0 ??$_Try_emplace@H$$V@?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@AAE?AU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@_N@1@$$QAH@Z 100169c0 f i vJoyInterface.obj + 0002:00005b90 ??$_Tuple_get@$0A@$$QAH@std@@YA$$QA_P$$QAV?$tuple@$$QAH@0@@Z 10016b90 f i vJoyInterface.obj + 0002:00005be0 ??$_Tuple_get@$0A@ABH@std@@YA$$QA_P$$QAV?$tuple@ABH@0@@Z 10016be0 f i vJoyInterface.obj + 0002:00005c30 ??$_Unfancy@U_Container_proxy@std@@@std@@YAPAU_Container_proxy@0@PAU10@@Z 10016c30 f i vJoyInterface.obj + 0002:00005c80 ??$_Voidify_iter@PAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@YAPAXPAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@@Z 10016c80 f i vJoyInterface.obj + 0002:00005cd0 ??$_Voidify_iter@PAPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@YAPAXPAPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@0@@Z 10016cd0 f i vJoyInterface.obj + 0002:00005d20 ??$_Voidify_iter@PAU?$pair@$$CBHUDeviceStat@@@std@@@std@@YAPAXPAU?$pair@$$CBHUDeviceStat@@@0@@Z 10016d20 f i vJoyInterface.obj + 0002:00005d70 ??$_Voidify_iter@PAU_Container_proxy@std@@@std@@YAPAXPAU_Container_proxy@0@@Z 10016d70 f i vJoyInterface.obj + 0002:00005dc0 ??$addressof@$$CBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@YAPBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@0@ABV10@@Z 10016dc0 f i vJoyInterface.obj + 0002:00005e10 ??$addressof@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@YAPAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@AAPAU10@@Z 10016e10 f i vJoyInterface.obj + 0002:00005e60 ??$addressof@PAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@YAPAPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@0@AAPAU10@@Z 10016e60 f i vJoyInterface.obj + 0002:00005eb0 ??$addressof@U?$pair@$$CBHUDeviceStat@@@std@@@std@@YAPAU?$pair@$$CBHUDeviceStat@@@0@AAU10@@Z 10016eb0 f i vJoyInterface.obj + 0002:00005f00 ??$addressof@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@YAPAU?$pair@$$CBHW4FFB_EFFECTS@@@0@AAU10@@Z 10016f00 f i vJoyInterface.obj + 0002:00005f50 ??$addressof@U_Container_base12@std@@@std@@YAPAU_Container_base12@0@AAU10@@Z 10016f50 f i vJoyInterface.obj + 0002:00005fa0 ??$addressof@U_Container_proxy@std@@@std@@YAPAU_Container_proxy@0@AAU10@@Z 10016fa0 f i vJoyInterface.obj + 0002:00005ff0 ??$addressof@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@YAPAV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@0@AAV10@@Z 10016ff0 f i vJoyInterface.obj + 0002:00006040 ??$addressof@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@std@@@std@@YAPAV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@0@AAV10@@Z 10017040 f i vJoyInterface.obj + 0002:00006090 ??$construct@U?$pair@$$CBHUDeviceStat@@@std@@AAHUDeviceStat@@@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@QAU?$pair@$$CBHUDeviceStat@@@1@AAH$$QAUDeviceStat@@@Z 10017090 f i vJoyInterface.obj + 0002:00006130 ??$construct@U?$pair@$$CBHUDeviceStat@@@std@@ABUpiecewise_construct_t@2@V?$tuple@$$QAH@2@V?$tuple@$$V@2@@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@QAU?$pair@$$CBHUDeviceStat@@@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@$$QAH@1@$$QAV?$tuple@$$V@1@@Z 10017130 f i vJoyInterface.obj + 0002:00006200 ??$construct@U?$pair@$$CBHUDeviceStat@@@std@@ABUpiecewise_construct_t@2@V?$tuple@ABH@2@V?$tuple@$$V@2@@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@QAU?$pair@$$CBHUDeviceStat@@@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@ABH@1@$$QAV?$tuple@$$V@1@@Z 10017200 f i vJoyInterface.obj + 0002:000062d0 ??$destroy@U?$pair@$$CBHUDeviceStat@@@std@@@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@QAU?$pair@$$CBHUDeviceStat@@@1@@Z 100172d0 f i vJoyInterface.obj + 0002:00006320 ??$destroy@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@QAU?$pair@$$CBHW4FFB_EFFECTS@@@1@@Z 10017320 f i vJoyInterface.obj + 0002:00006370 ??$distance@V?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@@std@@YAHV?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@0@0@Z 10017370 f i vJoyInterface.obj + 0002:00006490 ??$emplace@AAHUDeviceStat@@@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAE?AU?$pair@V?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@_N@1@AAH$$QAUDeviceStat@@@Z 10017490 f i vJoyInterface.obj + 0002:000065c0 ??$exchange@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@$$T@std@@YAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@AAPAU10@$$QA$$T@Z 100175c0 f i vJoyInterface.obj + 0002:00006630 ??$exchange@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@AAPAU12@@std@@YAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@AAPAU10@0@Z 10017630 f i vJoyInterface.obj + 0002:000066a0 ??$exchange@PAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@AAPAU12@@std@@YAPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@0@AAPAU10@0@Z 100176a0 f i vJoyInterface.obj + 0002:00006710 ??$exchange@PAU_Iterator_base12@std@@$$T@std@@YAPAU_Iterator_base12@0@AAPAU10@$$QA$$T@Z 10017710 f i vJoyInterface.obj + 0002:00006780 ??$forward@AAH@std@@YAAAHAAH@Z 10017780 f i vJoyInterface.obj + 0002:000067d0 ??$forward@AAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@YAAAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@AAPAU10@@Z 100177d0 f i vJoyInterface.obj + 0002:00006820 ??$forward@ABH@std@@YAABHABH@Z 10017820 f i vJoyInterface.obj + 0002:00006870 ??$forward@ABQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@YAABQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@ABQAU10@@Z 10017870 f i vJoyInterface.obj + 0002:000068c0 ??$forward@ABQAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@YAABQAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@0@ABQAU10@@Z 100178c0 f i vJoyInterface.obj + 0002:00006910 ??$forward@ABU?$less@H@std@@@std@@YAABU?$less@H@0@ABU10@@Z 10017910 f i vJoyInterface.obj + 0002:00006960 ??$forward@ABUpiecewise_construct_t@std@@@std@@YAABUpiecewise_construct_t@0@ABU10@@Z 10017960 f i vJoyInterface.obj + 0002:000069b0 ??$forward@AB_N@std@@YAAB_NAB_N@Z 100179b0 f i vJoyInterface.obj + 0002:00006a00 ??$forward@H@std@@YA$$QAHAAH@Z 10017a00 f i vJoyInterface.obj + 0002:00006a50 ??$forward@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@YA$$QAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@0@AAPAU10@@Z 10017a50 f i vJoyInterface.obj + 0002:00006aa0 ??$forward@PAU_Container_base12@std@@@std@@YA$$QAPAU_Container_base12@0@AAPAU10@@Z 10017aa0 f i vJoyInterface.obj + 0002:00006af0 ??$forward@UDeviceStat@@@std@@YA$$QAUDeviceStat@@AAU1@@Z 10017af0 f i vJoyInterface.obj + 0002:00006b40 ??$forward@U_Zero_then_variadic_args_t@std@@@std@@YA$$QAU_Zero_then_variadic_args_t@0@AAU10@@Z 10017b40 f i vJoyInterface.obj + 0002:00006b90 ??$forward@V?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@@std@@YA$$QAV?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@0@AAV10@@Z 10017b90 f i vJoyInterface.obj + 0002:00006be0 ??$forward@V?$tuple@$$QAH@std@@@std@@YA$$QAV?$tuple@$$QAH@0@AAV10@@Z 10017be0 f i vJoyInterface.obj + 0002:00006c30 ??$forward@V?$tuple@$$V@std@@@std@@YA$$QAV?$tuple@$$V@0@AAV10@@Z 10017c30 f i vJoyInterface.obj + 0002:00006c80 ??$forward@V?$tuple@ABH@std@@@std@@YA$$QAV?$tuple@ABH@0@AAV10@@Z 10017c80 f i vJoyInterface.obj + 0002:00006cd0 ??$forward@_N@std@@YA$$QA_NAA_N@Z 10017cd0 f i vJoyInterface.obj + 0002:00006d20 ??$forward_as_tuple@$$V@std@@YA?AV?$tuple@$$V@0@XZ 10017d20 f i vJoyInterface.obj + 0002:00006d70 ??$forward_as_tuple@ABH@std@@YA?AV?$tuple@ABH@0@ABH@Z 10017d70 f i vJoyInterface.obj + 0002:00006dd0 ??$forward_as_tuple@H@std@@YA?AV?$tuple@$$QAH@0@$$QAH@Z 10017dd0 f i vJoyInterface.obj + 0002:00006e30 ??$min@I@std@@YAABIABI0@Z 10017e30 f i vJoyInterface.obj + 0002:00006ec0 ??$move@AAD@std@@YA$$QADAAD@Z 10017ec0 f i vJoyInterface.obj + 0002:00006f10 ??$move@AAH@std@@YA$$QAHAAH@Z 10017f10 f i vJoyInterface.obj + 0002:00006f60 ??$move@AAV?$tuple@$$QAH@std@@@std@@YA$$QAV?$tuple@$$QAH@0@AAV10@@Z 10017f60 f i vJoyInterface.obj + 0002:00006fb0 ??$move@AAV?$tuple@ABH@std@@@std@@YA$$QAV?$tuple@ABH@0@AAV10@@Z 10017fb0 f i vJoyInterface.obj + 0002:00007000 ??$swap@D$0A@@std@@YAXAAD0@Z 10018000 f i vJoyInterface.obj + 0002:000070d0 ??0?$_Alloc_construct_ptr@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 100180d0 f i vJoyInterface.obj + 0002:00007140 ??0?$_Container_proxy_ptr12@V?$allocator@U_Container_proxy@std@@@std@@@std@@QAE@AAV?$allocator@U_Container_proxy@std@@@1@AAU_Container_base12@1@@Z 10018140 f i vJoyInterface.obj + 0002:00007210 ??0?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAE@ABU?$less@H@1@@Z 10018210 f i vJoyInterface.obj + 0002:00007290 ??0?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@QAE@ABU?$less@H@1@@Z 10018290 f i vJoyInterface.obj + 0002:00007310 ??0?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@$$QAV01@@Z 10018310 f i vJoyInterface.obj + 0002:00007370 ??0?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@PBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@1@@Z 10018370 f i vJoyInterface.obj + 0002:000073d0 ??0?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@$$QAV01@@Z 100183d0 f i vJoyInterface.obj + 0002:00007430 ??0?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@PBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@1@@Z 10018430 f i vJoyInterface.obj + 0002:00007490 ??0?$_Tree_temp_node_alloc@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 10018490 f i vJoyInterface.obj + 0002:00007550 ??0?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@QAE@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@PBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@1@@Z 10018550 f i vJoyInterface.obj + 0002:000075c0 ??0?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base12@2@@std@@QAE@$$QAV01@@Z 100185c0 f i vJoyInterface.obj + 0002:00007630 ??0?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base12@2@@std@@QAE@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@PBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@1@@Z 10018630 f i vJoyInterface.obj + 0002:000076b0 ??0?$_Tree_unchecked_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@PBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@1@@Z 100186b0 f i vJoyInterface.obj + 0002:00007710 ??0?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAE@XZ 10018710 f i vJoyInterface.obj + 0002:00007790 ??0?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@std@@QAE@XZ 10018790 f i vJoyInterface.obj + 0002:00007810 ??0?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@QAE@XZ 10018810 f i vJoyInterface.obj + 0002:00007870 ??0?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@QAE@XZ 10018870 f i vJoyInterface.obj + 0002:000078d0 ??0?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@QAE@XZ 100188d0 f i vJoyInterface.obj + 0002:00007940 ??0?$map@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@@std@@QAE@XZ 10018940 f i vJoyInterface.obj + 0002:000079b0 ??0?$tuple@$$QAH@std@@QAE@$$QAV01@@Z 100189b0 f i vJoyInterface.obj + 0002:00007a20 ??0?$tuple@$$V@std@@QAE@ABV01@@Z 10018a20 f i vJoyInterface.obj + 0002:00007a80 ??0?$tuple@ABH@std@@QAE@$$QAV01@@Z 10018a80 f i vJoyInterface.obj + 0002:00007af0 ??0_Basic_container_proxy_ptr12@std@@IAE@XZ 10018af0 f i vJoyInterface.obj + 0002:00007b50 ??0_Container_base12@std@@QAE@XZ 10018b50 f i vJoyInterface.obj + 0002:00007bb0 ??0_Container_proxy@std@@QAE@PAU_Container_base12@1@@Z 10018bb0 f i vJoyInterface.obj + 0002:00007c20 ??0_Iterator_base12@std@@QAE@ABU01@@Z 10018c20 f i vJoyInterface.obj + 0002:00007ca0 ??0_Iterator_base12@std@@QAE@XZ 10018ca0 f i vJoyInterface.obj + 0002:00007d10 ??0bad_alloc@std@@AAE@QBD@Z 10018d10 f i vJoyInterface.obj + 0002:00007d80 ??0bad_alloc@std@@QAE@ABV01@@Z 10018d80 f i vJoyInterface.obj + 0002:00007df0 ??0bad_array_new_length@std@@QAE@ABV01@@Z 10018df0 f i vJoyInterface.obj + 0002:00007e60 ??0bad_array_new_length@std@@QAE@XZ 10018e60 f i vJoyInterface.obj + 0002:00007ed0 ??0exception@std@@QAE@ABV01@@Z 10018ed0 f i vJoyInterface.obj + 0002:00007f60 ??0exception@std@@QAE@QBDH@Z 10018f60 f i vJoyInterface.obj + 0002:00007fe0 ??1?$_Alloc_construct_ptr@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 10018fe0 f i vJoyInterface.obj + 0002:00008090 ??1?$_Container_proxy_ptr12@V?$allocator@U_Container_proxy@std@@@std@@@std@@QAE@XZ 10019090 f i vJoyInterface.obj + 0002:00008110 ??1?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAE@XZ 10019110 f i vJoyInterface.obj + 0002:000081f0 ??1?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@QAE@XZ 100191f0 f i vJoyInterface.obj + 0002:000082d0 ??1?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@XZ 100192d0 f i vJoyInterface.obj + 0002:00008320 ??1?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QAE@XZ 10019320 f i vJoyInterface.obj + 0002:00008370 ??1?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 10019370 f i vJoyInterface.obj + 0002:00008480 ??1?$_Tree_temp_node_alloc@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 10019480 f i vJoyInterface.obj + 0002:000084d0 ??1?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base12@2@@std@@QAE@XZ 100194d0 f i vJoyInterface.obj + 0002:00008520 ??1?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@QAE@XZ 10019520 f i vJoyInterface.obj + 0002:00008570 ??1?$map@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@@std@@QAE@XZ 10019570 f i vJoyInterface.obj + 0002:000085c0 ??1?$pair@V?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@_N@std@@QAE@XZ 100195c0 f i vJoyInterface.obj + 0002:00008610 ??1_Iterator_base12@std@@QAE@XZ 10019610 f i vJoyInterface.obj + 0002:00008670 ??1bad_alloc@std@@UAE@XZ 10019670 f i vJoyInterface.obj + 0002:000086c0 ??1bad_array_new_length@std@@UAE@XZ 100196c0 f i vJoyInterface.obj + 0002:00008710 ??1exception@std@@UAE@XZ 10019710 f i vJoyInterface.obj + 0002:00008780 ??2@YAPAXIPAX@Z 10019780 f i vJoyInterface.obj + 0002:000087d0 ??4_Iterator_base12@std@@QAEAAU01@ABU01@@Z 100197d0 f i vJoyInterface.obj + 0002:00008840 ??8?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QBE_NABV01@@Z 10019840 f i vJoyInterface.obj + 0002:00008960 ??8?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@QBE_NABV01@@Z 10019960 f i vJoyInterface.obj + 0002:000089f0 ??9?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@std@@QBE_NABV01@@Z 100199f0 f i vJoyInterface.obj + 0002:00008a80 ??9?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@QBE_NABV01@@Z 10019a80 f i vJoyInterface.obj + 0002:00008b10 ??A?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@QAEAAUDeviceStat@@$$QAH@Z 10019b10 f i vJoyInterface.obj + 0002:00008b90 ??A?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@QAEAAUDeviceStat@@ABH@Z 10019b90 f i vJoyInterface.obj + 0002:00008c00 ??E?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@QAE?AV01@H@Z 10019c00 f i vJoyInterface.obj + 0002:00008cb0 ??E?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@std@@QAEAAV01@XZ 10019cb0 f i vJoyInterface.obj + 0002:00008d80 ??R?$less@H@std@@QBE_NABH0@Z 10019d80 f i vJoyInterface.obj + 0002:00008e10 ??_Ebad_alloc@std@@UAEPAXI@Z 10019e10 f i vJoyInterface.obj + 0002:00008e10 ??_Gbad_alloc@std@@UAEPAXI@Z 10019e10 f i vJoyInterface.obj + 0002:00008e80 ??_Ebad_array_new_length@std@@UAEPAXI@Z 10019e80 f i vJoyInterface.obj + 0002:00008e80 ??_Gbad_array_new_length@std@@UAEPAXI@Z 10019e80 f i vJoyInterface.obj + 0002:00008ef0 ??_Eexception@std@@UAEPAXI@Z 10019ef0 f i vJoyInterface.obj + 0002:00008ef0 ??_Gexception@std@@UAEPAXI@Z 10019ef0 f i vJoyInterface.obj + 0002:00008f60 ?AreControlsInit@@YAHI@Z 10019f60 f vJoyInterface.obj + 0002:00009160 ?CalcInitValue@@YAXGPAUDEVICE_INIT_VALS@@@Z 1001a160 f vJoyInterface.obj + 0002:00009540 ?CreateDevicePath@@YA_NPBDHPADH@Z 1001a540 f vJoyInterface.obj + 0002:00009750 ?CreateDummyWindow@@YGHXZ 1001a750 f vJoyInterface.obj + 0002:00009a20 ?DbgGetCaps@@YAHXZ 1001aa20 f vJoyInterface.obj + 0002:0000a290 ?ExtractNamespace@@YA_NPBDPADPAH@Z 1001b290 f vJoyInterface.obj + 0002:0000a430 ?FfbGetEffectState@@YAHXZ 1001b430 f vJoyInterface.obj + 0002:0000a590 ?FfbGetEffectType@@YA?AW4FFBEType@@XZ 1001b590 f vJoyInterface.obj + 0002:0000a630 ?GetAxisCaps@@YAHIIPAU_HIDP_VALUE_CAPS@@@Z 1001b630 f vJoyInterface.obj + 0002:0000a990 ?GetAxisLogMax@@YAJII@Z 1001b990 f vJoyInterface.obj + 0002:0000aa70 ?GetAxisLogMid@@YAJII@Z 1001ba70 f vJoyInterface.obj + 0002:0000ab00 ?GetAxisLogMin@@YAJII@Z 1001bb00 f vJoyInterface.obj + 0002:0000abe0 ?GetControls@@YAHI@Z 1001bbe0 f vJoyInterface.obj + 0002:0000b4f0 ?GetDevInfo@@YA_NPAX0@Z 1001c4f0 f vJoyInterface.obj + 0002:0000b8a0 ?GetDevPosition@@YAHEPAU_JOYSTICK_POSITION_V2@@@Z 1001c8a0 f vJoyInterface.obj + 0002:0000bc00 ?GetDevStat@@YA_NEPAHPAE@Z 1001cc00 f vJoyInterface.obj + 0002:0000bfe0 ?GetDeviceAttributes@@YAHHPAG00@Z 1001cfe0 f vJoyInterface.obj + 0002:0000c140 ?GetDeviceIndexById@@YAHGGH@Z 1001d140 f vJoyInterface.obj + 0002:0000c380 ?GetDeviceIndexByReportId@@YAHGGE@Z 1001d380 f vJoyInterface.obj + 0002:0000c530 ?GetDeviceManufacturerString@@YAHHPAPA_W@Z 1001d530 f vJoyInterface.obj + 0002:0000c6c0 ?GetDeviceNameSpace@@YAHPAPADPAHHPAK@Z 1001d6c0 f vJoyInterface.obj + 0002:0000ccb0 ?GetDeviceProductString@@YAHHPAPA_W@Z 1001dcb0 f vJoyInterface.obj + 0002:0000ce10 ?GetDeviceSerialNumberString@@YAHHPAPA_W@Z 1001de10 f vJoyInterface.obj + 0002:0000cf50 ?GetDeviceVersionNumber@@YAHHPAG@Z 1001df50 f vJoyInterface.obj + 0002:0000d090 ?GetDrvStat@@YA_NPAHPAE@Z 1001e090 f vJoyInterface.obj + 0002:0000d420 ?GetGenControlHadle@@YAPAXXZ 1001e420 f vJoyInterface.obj + 0002:0000d4e0 ?GetHandleByIndex@@YAPAXH@Z 1001e4e0 f vJoyInterface.obj + 0002:0000d9f0 ?GetInitValueFromRegistry@@YAIGPAUDEVICE_INIT_VALS@@@Z 1001e9f0 f vJoyInterface.obj + 0002:0000deb0 ?Get_PreparsedData@@YAHHPAPAU_HIDP_PREPARSED_DATA@@@Z 1001eeb0 f vJoyInterface.obj + 0002:0000e0e0 ?Get_h@@YAPAXH@Z 1001f0e0 f vJoyInterface.obj + 0002:0000e220 ?Get_hNotify@@YAPAXH@Z 1001f220 f vJoyInterface.obj + 0002:0000e370 ?Get_stat@@YA?AW4VjdStat@@H@Z 1001f370 f vJoyInterface.obj + 0002:0000e4c0 ?GetvJoyReportId@@YAHH@Z 1001f4c0 f vJoyInterface.obj + 0002:0000e910 ?InitDll@@YAXXZ 1001f910 f vJoyInterface.obj + 0002:0000ead0 ?InitPosition@@YAHH@Z 1001fad0 f vJoyInterface.obj + 0002:0000f130 ?OpenDeviceInterface@@YAPAXIPAK@Z 10020130 f vJoyInterface.obj + 0002:0000f470 ?RegisterHandleNotification@@YAPAXPAUHWND__@@PAX@Z 10020470 f vJoyInterface.obj + 0002:0000f590 ?RegistervJoyNotification@@YAPAXPAUHWND__@@@Z 10020590 f vJoyInterface.obj + 0002:0000f710 ?SavePosition@@YAXIPAX@Z 10020710 f vJoyInterface.obj + 0002:0000f920 ?Set_PreparsedData@@YAHH@Z 10020920 f vJoyInterface.obj + 0002:0000fbc0 ?Set_h@@YAXHPAX@Z 10020bc0 f vJoyInterface.obj + 0002:0000fd50 ?Set_hNotify@@YAXHPAX@Z 10020d50 f vJoyInterface.obj + 0002:0000fed0 ?Set_stat@@YAXHW4VjdStat@@@Z 10020ed0 f vJoyInterface.obj + 0002:00010020 ?StartLogging@@YAXXZ 10021020 f vJoyInterface.obj + 0002:00010320 ?Sync_Position@@YAXH@Z 10021320 f vJoyInterface.obj + 0002:000104f0 ?Update@@YAHI@Z 100214f0 f vJoyInterface.obj + 0002:000108c0 ?WndProc@@YGJPAUHWND__@@IIJ@Z 100218c0 f vJoyInterface.obj + 0002:00010a70 ?_Adjust_manually_vector_aligned@std@@YAXAAPAXAAI@Z 10021a70 f i vJoyInterface.obj + 0002:00010c40 ?_Adopt@_Iterator_base0@std@@QAEXPBX@Z 10021c40 f i vJoyInterface.obj + 0002:00010c90 ?_Adopt@_Iterator_base12@std@@QAEXPBU_Container_base12@2@@Z 10021c90 f i vJoyInterface.obj + 0002:00010cf0 ?_Adopt_locked@_Iterator_base12@std@@AAEXPBU_Container_base12@2@@Z 10021cf0 f i vJoyInterface.obj + 0002:00010dc0 ?_Adopt_unlocked@_Iterator_base12@std@@AAEXPBU_Container_base12@2@@Z 10021dc0 f i vJoyInterface.obj + 0002:00010e80 ?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEXXZ 10021e80 f i vJoyInterface.obj + 0002:00010fd0 ?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEXXZ 10021fd0 f i vJoyInterface.obj + 0002:00011120 ?_Allocate@?$_Alloc_construct_ptr@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAEXXZ 10022120 f i vJoyInterface.obj + 0002:00011190 ?_Allocate@_Default_allocate_traits@std@@SAPAXI@Z 10022190 f i vJoyInterface.obj + 0002:000111f0 ?_Assign_locked@_Iterator_base12@std@@AAEXABU12@@Z 100221f0 f i vJoyInterface.obj + 0002:000112c0 ?_Assign_unlocked@_Iterator_base12@std@@AAEXABU12@@Z 100222c0 f i vJoyInterface.obj + 0002:00011350 ?_Check_grow_by_1@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEXXZ 10022350 f i vJoyInterface.obj + 0002:000113c0 ?_Erase@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@AAEIU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@2@@Z 100223c0 f i vJoyInterface.obj + 0002:000114f0 ?_Erase_unchecked@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@AAEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@V?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@2@0@Z 100224f0 f i vJoyInterface.obj + 0002:00011600 ?_Erase_unchecked@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@AAEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@V?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@2@@Z 10022600 f i vJoyInterface.obj + 0002:000116f0 ?_Extract@?$_In_place_key_extract_map@HHUDeviceStat@@@std@@SAABHABHABUDeviceStat@@@Z 100226f0 f i vJoyInterface.obj + 0002:00011740 ?_Extract@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@V?$_Tree_unchecked_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@U_Iterator_base0@2@@2@@Z 10022740 f i vJoyInterface.obj + 0002:00011cd0 ?_Get_first@?$_Compressed_pair@U?$less@H@std@@V?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@$00@2@$00@std@@QBEABU?$less@H@2@XZ 10022cd0 f i vJoyInterface.obj + 0002:00011d30 ?_Get_first@?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@$00@std@@QAEAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@XZ 10022d30 f i vJoyInterface.obj + 0002:00011d90 ?_Get_first@?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@$00@std@@QBEABV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@XZ 10022d90 f i vJoyInterface.obj + 0002:00011df0 ?_Get_first@?$_Compressed_pair@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@2@$00@std@@QAEAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@2@XZ 10022df0 f i vJoyInterface.obj + 0002:00011e50 ?_Get_scary@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEPAV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@XZ 10022e50 f i vJoyInterface.obj + 0002:00011eb0 ?_Get_scary@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBEPBV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@2@XZ 10022eb0 f i vJoyInterface.obj + 0002:00011f10 ?_Get_scary@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEPAV?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@2@XZ 10022f10 f i vJoyInterface.obj + 0002:00011f70 ?_Getal@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@XZ 10022f70 f i vJoyInterface.obj + 0002:00011fd0 ?_Getal@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBEABV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@XZ 10022fd0 f i vJoyInterface.obj + 0002:00012030 ?_Getal@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@2@XZ 10023030 f i vJoyInterface.obj + 0002:00012090 ?_Getcomp@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBEABU?$less@H@2@XZ 10023090 f i vJoyInterface.obj + 0002:000120f0 ?_Getcont@_Iterator_base12@std@@QBEPBU_Container_base12@2@XZ 100230f0 f i vJoyInterface.obj + 0002:00012170 ?_Insert_node@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@U?$_Tree_id@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@QAU32@@Z 10023170 f i vJoyInterface.obj + 0002:00012440 ?_Lrotate@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEXPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@@Z 10023440 f i vJoyInterface.obj + 0002:00012540 ?_Max@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@SAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@PAU32@@Z 10023540 f i vJoyInterface.obj + 0002:000125b0 ?_Min@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@SAPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@PAU32@@Z 100235b0 f i vJoyInterface.obj + 0002:00012620 ?_Orphan_all@_Container_base12@std@@QAEXXZ 10023620 f i vJoyInterface.obj + 0002:00012680 ?_Orphan_all_locked_v3@_Container_base12@std@@AAEXXZ 10023680 f i vJoyInterface.obj + 0002:00012740 ?_Orphan_all_unlocked_v3@_Container_base12@std@@AAEXXZ 10023740 f i vJoyInterface.obj + 0002:000127f0 ?_Orphan_me_locked_v3@_Iterator_base12@std@@AAEXXZ 100237f0 f i vJoyInterface.obj + 0002:000128b0 ?_Orphan_me_unlocked_v3@_Iterator_base12@std@@AAEXXZ 100238b0 f i vJoyInterface.obj + 0002:000129e0 ?_Orphan_ptr@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEXQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@@Z 100239e0 f i vJoyInterface.obj + 0002:00012b10 ?_Orphan_ptr@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@std@@@std@@QAEXQAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@2@@Z 10023b10 f i vJoyInterface.obj + 0002:00012c40 ?_Release@?$_Alloc_construct_ptr@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@XZ 10023c40 f i vJoyInterface.obj + 0002:00012cc0 ?_Release@_Basic_container_proxy_ptr12@std@@QAEXXZ 10023cc0 f i vJoyInterface.obj + 0002:00012d20 ?_Rrotate@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@QAEXPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@@Z 10023d20 f i vJoyInterface.obj + 0002:00012e30 ?_Throw_bad_array_new_length@std@@YAXXZ 10023e30 f i vJoyInterface.obj + 0002:00012ea0 ?_Throw_tree_length_error@std@@YAXXZ 10023ea0 f i vJoyInterface.obj + 0002:00012ef0 ?_Unchecked_begin@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAE?AV?$_Tree_unchecked_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@2@XZ 10023ef0 f i vJoyInterface.obj + 0002:00012f70 ?allocate@?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@QAEPAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@I@Z 10023f70 f i vJoyInterface.obj + 0002:00012fe0 ?allocate@?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@QAEPAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@2@I@Z 10023fe0 f i vJoyInterface.obj + 0002:00013050 ?allocate@?$allocator@U_Container_proxy@std@@@std@@QAEPAU_Container_proxy@2@I@Z 10024050 f i vJoyInterface.obj + 0002:000130c0 ?clear@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAEXXZ 100240c0 f i vJoyInterface.obj + 0002:00013180 ?clear@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@QAEXXZ 10024180 f i vJoyInterface.obj + 0002:00013240 ?deallocate@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@QAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@I@Z 10024240 f i vJoyInterface.obj + 0002:000132a0 ?deallocate@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@2@QAU?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@2@I@Z 100242a0 f i vJoyInterface.obj + 0002:00013300 ?deallocate@?$_Default_allocator_traits@V?$allocator@U_Container_proxy@std@@@std@@@std@@SAXAAV?$allocator@U_Container_proxy@std@@@2@QAU_Container_proxy@2@I@Z 10024300 f i vJoyInterface.obj + 0002:00013360 ?deallocate@?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@QAEXQAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@2@I@Z 10024360 f i vJoyInterface.obj + 0002:00013460 ?empty@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QBE_NXZ 10024460 f i vJoyInterface.obj + 0002:000134f0 ?end@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAE?AV?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@2@XZ 100244f0 f i vJoyInterface.obj + 0002:00013570 ?erase@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAEIABH@Z 10024570 f i vJoyInterface.obj + 0002:000135f0 ?find@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QAE?AV?$_Tree_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBHUDeviceStat@@@std@@@std@@@std@@@2@ABH@Z 100245f0 f i vJoyInterface.obj + 0002:00013690 ?isRawDevice@@YA_NPBDH@Z 10024690 f vJoyInterface.obj + 0002:00013920 ?max@?$numeric_limits@H@std@@SAHXZ 10024920 f i vJoyInterface.obj + 0002:00013970 ?max_size@?$_Default_allocator_traits@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@SAIABV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@2@@Z 10024970 f i vJoyInterface.obj + 0002:000139c0 ?max_size@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QBEIXZ 100249c0 f i vJoyInterface.obj + 0002:00013a60 ?size@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@QBEIXZ 10024a60 f i vJoyInterface.obj + 0002:00013ac0 ?strstr@@YAPADQADQBD@Z 10024ac0 f i vJoyInterface.obj + 0002:00013b20 ?vJoyDeviceClear@@YAXXZ 10024b20 f vJoyInterface.obj + 0002:00013b70 ?vJoyDeviceEntry@@YAHH@Z 10024b70 f vJoyInterface.obj + 0002:00013db0 ?vJoyDeviceRemove@@YAHH@Z 10024db0 f vJoyInterface.obj + 0002:00013fd0 ?what@exception@std@@UBEPBDXZ 10024fd0 f i vJoyInterface.obj + 0002:00014050 _AcquireVJD 10025050 f vJoyInterface.obj + 0002:000141d0 _DeviceChange 100251d0 f vJoyInterface.obj + 0002:00014440 _DriverMatch 10025440 f vJoyInterface.obj + 0002:00014500 _FfbGetEffect 10025500 f vJoyInterface.obj + 0002:00014560 _FfbIsStarted 10025560 f vJoyInterface.obj + 0002:000148d0 _FfbProcessData 100258d0 f vJoyInterface.obj + 0002:00014940 _FfbRegisterGenCB 10025940 f vJoyInterface.obj + 0002:000149a0 _FfbSendData 100259a0 f vJoyInterface.obj + 0002:00014aa0 _FfbStart 10025aa0 f vJoyInterface.obj + 0002:00014b30 _FfbStartThread 10025b30 f vJoyInterface.obj + 0002:00014c90 _FfbStop 10025c90 f vJoyInterface.obj + 0002:00014ce0 _FfbWaitForData@4 10025ce0 f vJoyInterface.obj + 0002:00015110 _Ffb_h_DevCtrl 10026110 f vJoyInterface.obj + 0002:00015210 _Ffb_h_DevGain 10026210 f vJoyInterface.obj + 0002:00015310 _Ffb_h_DeviceID 10026310 f vJoyInterface.obj + 0002:000153c0 _Ffb_h_EBI 100263c0 f vJoyInterface.obj + 0002:000154d0 _Ffb_h_EffNew 100264d0 f vJoyInterface.obj + 0002:000155d0 _Ffb_h_EffOp 100265d0 f vJoyInterface.obj + 0002:00015700 _Ffb_h_Eff_Cond 10026700 f vJoyInterface.obj + 0002:00015980 _Ffb_h_Eff_Constant 10026980 f vJoyInterface.obj + 0002:00015ab0 _Ffb_h_Eff_Envlp 10026ab0 f vJoyInterface.obj + 0002:00015d10 _Ffb_h_Eff_Period 10026d10 f vJoyInterface.obj + 0002:00015f40 _Ffb_h_Eff_Ramp 10026f40 f vJoyInterface.obj + 0002:000160b0 _Ffb_h_Eff_Report 100270b0 f vJoyInterface.obj + 0002:00016370 _Ffb_h_Packet 10027370 f vJoyInterface.obj + 0002:00016410 _Ffb_h_Type 10027410 f vJoyInterface.obj + 0002:000164c0 _GetNumberExistingVJD 100274c0 f vJoyInterface.obj + 0002:000165f0 _GetOwnerPid 100275f0 f vJoyInterface.obj + 0002:000167f0 _GetVJDAxisExist 100277f0 f vJoyInterface.obj + 0002:00016af0 _GetVJDAxisMax 10027af0 f vJoyInterface.obj + 0002:00016bc0 _GetVJDAxisMin 10027bc0 f vJoyInterface.obj + 0002:00016c90 _GetVJDButtonNumber 10027c90 f vJoyInterface.obj + 0002:00017440 _GetVJDContPovNumber 10028440 f vJoyInterface.obj + 0002:000177b0 _GetVJDDiscPovNumber 100287b0 f vJoyInterface.obj + 0002:00017b30 _GetVJDStatus 10028b30 f vJoyInterface.obj + 0002:00017e00 _GetvJoyManufacturerString 10028e00 f vJoyInterface.obj + 0002:00017ef0 _GetvJoyMaxDevices 10028ef0 f vJoyInterface.obj + 0002:00018020 _GetvJoyProductString 10029020 f vJoyInterface.obj + 0002:00018110 _GetvJoySerialNumberString 10029110 f vJoyInterface.obj + 0002:00018200 _GetvJoyVersion 10029200 f vJoyInterface.obj + 0002:000182f0 _IsDeviceFfb 100292f0 f vJoyInterface.obj + 0002:00018630 _IsDeviceFfbEffect 10029630 f vJoyInterface.obj + 0002:000189e0 _RegisterRemovalCB 100299e0 f vJoyInterface.obj + 0002:00018a40 _RelinquishVJD 10029a40 f vJoyInterface.obj + 0002:00018af0 _ResetAll 10029af0 f vJoyInterface.obj + 0002:00018b40 _ResetButtons 10029b40 f vJoyInterface.obj + 0002:00018d30 _ResetPovs 10029d30 f vJoyInterface.obj + 0002:000190a0 _ResetVJD 1002a0a0 f vJoyInterface.obj + 0002:00019380 _RtlSecureZeroMemory 1002a380 f i vJoyInterface.obj + 0002:00019400 _SetAxis 1002a400 f vJoyInterface.obj + 0002:000196b0 _SetBtn 1002a6b0 f vJoyInterface.obj + 0002:00019900 _SetContPov 1002a900 f vJoyInterface.obj + 0002:00019b40 _SetDiscPov 1002ab40 f vJoyInterface.obj + 0002:00019cc0 _UpdateVJD 1002acc0 f vJoyInterface.obj + 0002:00019d30 ___local_stdio_printf_options 1002ad30 f i vJoyInterface.obj + 0002:00019d80 ___local_stdio_scanf_options 1002ad80 f i vJoyInterface.obj + 0002:00019dd0 __vfprintf_s_l 1002add0 f i vJoyInterface.obj + 0002:00019e50 __vsprintf_s_l 1002ae50 f i vJoyInterface.obj + 0002:00019f10 __vsscanf_s_l 1002af10 f i vJoyInterface.obj + 0002:00019fa0 __vswprintf_s_l 1002afa0 f i vJoyInterface.obj + 0002:0001a060 _fprintf_s 1002b060 f i vJoyInterface.obj + 0002:0001a0e0 _isVJDExists 1002b0e0 f vJoyInterface.obj + 0002:0001a240 _isVJDOpen 1002b240 f vJoyInterface.obj + 0002:0001a310 _sprintf_s 1002b310 f i vJoyInterface.obj + 0002:0001a390 _sscanf_s 1002b390 f i vJoyInterface.obj + 0002:0001a410 _swprintf_s 1002b410 f i vJoyInterface.obj + 0002:0001a490 _vJoyEnabled 1002b490 f vJoyInterface.obj + 0002:0001a560 _vJoyFfbCap 1002b560 f vJoyInterface.obj + 0002:0001a690 _vsscanf_s 1002b690 f i vJoyInterface.obj + 0002:0001a6ed _SetupDiDestroyDeviceInfoList@4 1002b6ed f setupapi:SETUPAPI.dll + 0002:0001a6f3 _SetupDiEnumDeviceInterfaces@20 1002b6f3 f setupapi:SETUPAPI.dll + 0002:0001a6f9 _SetupDiGetDeviceInterfaceDetailA@24 1002b6f9 f setupapi:SETUPAPI.dll + 0002:0001a6ff _SetupDiGetClassDevsA@16 1002b6ff f setupapi:SETUPAPI.dll + 0002:0001a705 _HidP_GetCaps@8 1002b705 f hid:HID.DLL + 0002:0001a70b _HidP_GetLinkCollectionNodes@12 1002b70b f hid:HID.DLL + 0002:0001a711 _HidP_GetButtonCaps@16 1002b711 f hid:HID.DLL + 0002:0001a717 _HidP_GetSpecificValueCaps@28 1002b717 f hid:HID.DLL + 0002:0001a71d _HidP_GetValueCaps@16 1002b71d f hid:HID.DLL + 0002:0001a723 _HidP_GetUsageValue@32 1002b723 f hid:HID.DLL + 0002:0001a729 _HidD_GetAttributes@8 1002b729 f hid:HID.DLL + 0002:0001a72f _HidD_GetHidGuid@4 1002b72f f hid:HID.DLL + 0002:0001a735 _HidD_GetPreparsedData@8 1002b735 f hid:HID.DLL + 0002:0001a73b _HidD_FreePreparsedData@4 1002b73b f hid:HID.DLL + 0002:0001a741 _HidD_GetManufacturerString@12 1002b741 f hid:HID.DLL + 0002:0001a747 _HidD_GetProductString@12 1002b747 f hid:HID.DLL + 0002:0001a74d _HidD_GetSerialNumberString@12 1002b74d f hid:HID.DLL + 0002:0001a753 _GetCommandLineA@0 1002b753 f kernel32:KERNEL32.dll + 0002:0001a759 _GetEnvironmentVariableA@12 1002b759 f kernel32:KERNEL32.dll + 0002:0001a75f _CreateFileA@28 1002b75f f kernel32:KERNEL32.dll + 0002:0001a765 _CloseHandle@4 1002b765 f kernel32:KERNEL32.dll + 0002:0001a76b _GetLastError@0 1002b76b f kernel32:KERNEL32.dll + 0002:0001a771 _DeviceIoControl@32 1002b771 f kernel32:KERNEL32.dll + 0002:0001a777 _GetOverlappedResult@16 1002b777 f kernel32:KERNEL32.dll + 0002:0001a77d _SetEvent@4 1002b77d f kernel32:KERNEL32.dll + 0002:0001a783 _WaitForSingleObject@8 1002b783 f kernel32:KERNEL32.dll + 0002:0001a789 _CreateEventA@16 1002b789 f kernel32:KERNEL32.dll + 0002:0001a78f _GetCurrentProcessId@0 1002b78f f kernel32:KERNEL32.dll + 0002:0001a795 _CreateThread@24 1002b795 f kernel32:KERNEL32.dll + 0002:0001a79b _GetModuleHandleA@4 1002b79b f kernel32:KERNEL32.dll + 0002:0001a7a1 _LocalAlloc@8 1002b7a1 f kernel32:KERNEL32.dll + 0002:0001a7a7 _LocalFree@4 1002b7a7 f kernel32:KERNEL32.dll + 0002:0001a7ad _GetMessageA@16 1002b7ad f user32:USER32.dll + 0002:0001a7b3 _TranslateMessage@4 1002b7b3 f user32:USER32.dll + 0002:0001a7b9 _DispatchMessageA@4 1002b7b9 f user32:USER32.dll + 0002:0001a7bf _SendMessageA@16 1002b7bf f user32:USER32.dll + 0002:0001a7c5 _RegisterDeviceNotificationA@12 1002b7c5 f user32:USER32.dll + 0002:0001a7cb _UnregisterDeviceNotification@4 1002b7cb f user32:USER32.dll + 0002:0001a7d1 _DefWindowProcA@16 1002b7d1 f user32:USER32.dll + 0002:0001a7d7 _PostQuitMessage@4 1002b7d7 f user32:USER32.dll + 0002:0001a7dd _RegisterClassExA@4 1002b7dd f user32:USER32.dll + 0002:0001a7e3 _CreateWindowExA@48 1002b7e3 f user32:USER32.dll + 0002:0001a7e9 _ShowWindow@8 1002b7e9 f user32:USER32.dll + 0002:0001a7ef _UpdateWindow@4 1002b7ef f user32:USER32.dll + 0002:0001a7f5 _BeginPaint@8 1002b7f5 f user32:USER32.dll + 0002:0001a7fb _EndPaint@8 1002b7fb f user32:USER32.dll + 0002:0001a801 _MessageBoxA@16 1002b801 f user32:USER32.dll + 0002:0001a807 _LoadCursorA@8 1002b807 f user32:USER32.dll + 0002:0001a80d _LoadIconA@8 1002b80d f user32:USER32.dll + 0002:0001a813 _RegCloseKey@4 1002b813 f advapi32:ADVAPI32.dll + 0002:0001a819 _RegOpenKeyExW@20 1002b819 f advapi32:ADVAPI32.dll + 0002:0001a81f _RegGetValueW@28 1002b81f f advapi32:ADVAPI32.dll + 0002:0001a825 ??0_Lockit@std@@QAE@H@Z 1002b825 f msvcprtd:MSVCP140D.dll + 0002:0001a82b ??1_Lockit@std@@QAE@XZ 1002b82b f msvcprtd:MSVCP140D.dll + 0002:0001a831 ?_Xlength_error@std@@YAXPBD@Z 1002b831 f msvcprtd:MSVCP140D.dll + 0002:0001a840 ??2@YAPAXI@Z 1002b840 f MSVCRTD:new_scalar.obj + 0002:0001a8a0 ??3@YAXPAXI@Z 1002b8a0 f MSVCRTD:delete_scalar_size.obj + 0002:0001a8c0 ??_U@YAPAXI@Z 1002b8c0 f MSVCRTD:new_array.obj + 0002:0001a8e0 ??_V@YAXPAX@Z 1002b8e0 f MSVCRTD:delete_array.obj + 0002:0001a900 ?configure_argv@__scrt_narrow_argv_policy@@SAHXZ 1002b900 f i MSVCRTD:utility.obj + 0002:0001a9d0 ?initialize_environment@__scrt_narrow_environment_policy@@SAHXZ 1002b9d0 f i MSVCRTD:utility.obj + 0002:0001aa70 _NtCurrentTeb 1002ba70 f i MSVCRTD:utility.obj + 0002:0001aa80 ___scrt_acquire_startup_lock 1002ba80 f MSVCRTD:utility.obj + 0002:0001aae0 ___scrt_dllmain_after_initialize_c 1002bae0 f MSVCRTD:utility.obj + 0002:0001ab20 ___scrt_dllmain_before_initialize_c 1002bb20 f MSVCRTD:utility.obj + 0002:0001ab50 ___scrt_dllmain_crt_thread_attach 1002bb50 f MSVCRTD:utility.obj + 0002:0001ab90 ___scrt_dllmain_crt_thread_detach 1002bb90 f MSVCRTD:utility.obj + 0002:0001abb0 ___scrt_dllmain_exception_filter 1002bbb0 f MSVCRTD:utility.obj + 0002:0001ac10 ___scrt_dllmain_uninitialize_c 1002bc10 f MSVCRTD:utility.obj + 0002:0001ac50 ___scrt_dllmain_uninitialize_critical 1002bc50 f MSVCRTD:utility.obj + 0002:0001ac70 ___scrt_initialize_crt 1002bc70 f MSVCRTD:utility.obj + 0002:0001acd0 ___scrt_initialize_onexit_tables 1002bcd0 f MSVCRTD:utility.obj + 0002:0001ade0 ___scrt_is_nonwritable_in_current_image 1002bde0 f MSVCRTD:utility.obj + 0002:0001af60 ___scrt_release_startup_lock 1002bf60 f MSVCRTD:utility.obj + 0002:0001af90 ___scrt_uninitialize_crt 1002bf90 f MSVCRTD:utility.obj + 0002:0001afe0 __onexit 1002bfe0 f MSVCRTD:utility.obj + 0002:0001b060 _at_quick_exit 1002c060 f MSVCRTD:utility.obj + 0002:0001b0b0 _atexit 1002c0b0 f MSVCRTD:utility.obj + 0002:0001b0f0 @_RTC_AllocaHelper@12 1002c0f0 f MSVCRTD:stack.obj + 0002:0001b130 @_RTC_CheckStackVars2@12 1002c130 f MSVCRTD:stack.obj + 0002:0001b240 @_RTC_CheckStackVars@8 1002c240 f MSVCRTD:stack.obj + 0002:0001b2b0 __RTC_CheckEsp 1002c2b0 f MSVCRTD:stack.obj + 0002:0001b2e0 @__CheckForDebuggerJustMyCode@4 1002c2e0 f MSVCRTD:debugger_jmc.obj + 0002:0001b330 @__security_check_cookie@4 1002c330 f MSVCRTD:secchk.obj + 0002:0001b350 __CRT_RTC_INIT 1002c350 f MSVCRTD:init.obj + 0002:0001b360 __CRT_RTC_INITW 1002c360 f MSVCRTD:init.obj + 0002:0001b370 __RTC_InitBase 1002c370 f MSVCRTD:init.obj + 0002:0001b3b0 __RTC_Shutdown 1002c3b0 f MSVCRTD:init.obj + 0002:0001b3d0 __alloca_probe 1002c3d0 f MSVCRTD:chkstk.obj + 0002:0001b3d0 __chkstk 1002c3d0 f MSVCRTD:chkstk.obj + 0002:0001b410 ??1type_info@@UAE@XZ 1002c410 f MSVCRTD:std_type_info_static.obj + 0002:0001b430 ??_Etype_info@@UAEPAXI@Z 1002c430 f i MSVCRTD:std_type_info_static.obj + 0002:0001b430 ??_Gtype_info@@UAEPAXI@Z 1002c430 f i MSVCRTD:std_type_info_static.obj + 0002:0001ba70 __CRT_INIT@12 1002ca70 f MSVCRTD:dll_dllmain.obj + 0002:0001ba90 __DllMainCRTStartup@12 1002ca90 f MSVCRTD:dll_dllmain.obj + 0002:0001bac0 ??0bad_alloc@std@@QAE@XZ 1002cac0 f i MSVCRTD:throw_bad_alloc.obj + 0002:0001baf0 ?__scrt_throw_std_bad_alloc@@YAXXZ 1002caf0 f MSVCRTD:throw_bad_alloc.obj + 0002:0001bb20 ?__scrt_throw_std_bad_array_new_length@@YAXXZ 1002cb20 f MSVCRTD:throw_bad_alloc.obj + 0002:0001bb50 ??3@YAXPAX@Z 1002cb50 f MSVCRTD:delete_scalar.obj + 0002:0001bb70 ___isa_available_init 1002cb70 f MSVCRTD:cpu_disp.obj + 0002:0001bf70 __get_startup_argv_mode 1002cf70 f MSVCRTD:argv_mode.obj + 0002:0001bf80 ___scrt_is_ucrt_dll_in_use 1002cf80 f MSVCRTD:ucrt_detection.obj + 0002:0001bfb0 ___scrt_fastfail 1002cfb0 f MSVCRTD:utility_desktop.obj + 0002:0001c140 ___scrt_get_show_window_mode 1002d140 f MSVCRTD:utility_desktop.obj + 0002:0001c190 ___scrt_initialize_mta 1002d190 f MSVCRTD:utility_desktop.obj + 0002:0001c1a0 ___scrt_initialize_winrt 1002d1a0 f MSVCRTD:utility_desktop.obj + 0002:0001c1b0 ___scrt_is_managed_app 1002d1b0 f MSVCRTD:utility_desktop.obj + 0002:0001c260 ___scrt_set_unhandled_exception_filter 1002d260 f MSVCRTD:utility_desktop.obj + 0002:0001c280 ___scrt_exe_initialize_mta 1002d280 f MSVCRTD:utility_desktop.obj + 0002:0001c280 ___scrt_stub_for_initialize_mta 1002d280 f MSVCRTD:utility_desktop.obj + 0002:0001c290 ___scrt_unhandled_exception_filter@4 1002d290 f MSVCRTD:utility_desktop.obj + 0002:0001c330 __crt_debugger_hook 1002d330 f MSVCRTD:utility_desktop.obj + 0002:0001c350 __except_handler4 1002d350 f MSVCRTD:chandler4gs.obj + 0002:0001c3a0 @_guard_check_icall_nop@4 1002d3a0 f i MSVCRTD:guard_support.obj + 0002:0001c3b0 _ReadNoFence 1002d3b0 f i MSVCRTD:guard_support.obj + 0002:0001c3d0 _ReadPointerNoFence 1002d3d0 f i MSVCRTD:guard_support.obj + 0002:0001c3f0 ___castguard_check_failure_debugbreak 1002d3f0 f i MSVCRTD:guard_support.obj + 0002:0001c410 ___castguard_check_failure_fastfail 1002d410 f i MSVCRTD:guard_support.obj + 0002:0001c440 ___castguard_check_failure_nop 1002d440 f i MSVCRTD:guard_support.obj + 0002:0001c450 ___castguard_check_failure_os_handled 1002d450 f i MSVCRTD:guard_support.obj + 0002:0001c500 ___castguard_slow_path_check_debugbreak 1002d500 f i MSVCRTD:guard_support.obj + 0002:0001c540 ___castguard_slow_path_check_fastfail 1002d540 f i MSVCRTD:guard_support.obj + 0002:0001c590 ___castguard_slow_path_check_nop 1002d590 f i MSVCRTD:guard_support.obj + 0002:0001c5a0 ___castguard_slow_path_check_os_handled 1002d5a0 f i MSVCRTD:guard_support.obj + 0002:0001c640 __guard_icall_checks_enforced 1002d640 f i MSVCRTD:guard_support.obj + 0002:0001c730 ?_RTC_AllocaFailure@@YAXPAXPAU_RTC_ALLOCA_NODE@@H@Z 1002d730 f MSVCRTD:error.obj + 0002:0001c850 ?_RTC_Failure@@YAXPAXH@Z 1002d850 f MSVCRTD:error.obj + 0002:0001c8c0 ?_RTC_StackFailure@@YAXPAXPBD@Z 1002d8c0 f MSVCRTD:error.obj + 0002:0001cd70 __RTC_UninitUse 1002dd70 f MSVCRTD:error.obj + 0002:0001ce50 ___raise_securityfailure 1002de50 f MSVCRTD:gs_report.obj + 0002:0001ce90 ___report_gsfailure 1002de90 f MSVCRTD:gs_report.obj + 0002:0001cfe0 ___report_rangecheckfailure 1002dfe0 f MSVCRTD:gs_report.obj + 0002:0001cff0 ___report_securityfailure 1002dff0 f MSVCRTD:gs_report.obj + 0002:0001d100 ___report_securityfailureEx 1002e100 f MSVCRTD:gs_report.obj + 0002:0001d270 ?_RTC_GetErrorFunc@@YAP6AHHPBDH00ZZPBX@Z 1002e270 f MSVCRTD:userapi.obj + 0002:0001d280 ?_RTC_GetErrorFuncW@@YAP6AHHPB_WH00ZZPBX@Z 1002e280 f MSVCRTD:userapi.obj + 0002:0001d290 __RTC_GetErrDesc 1002e290 f MSVCRTD:userapi.obj + 0002:0001d2b0 __RTC_NumErrors 1002e2b0 f MSVCRTD:userapi.obj + 0002:0001d2c0 __RTC_SetErrorFunc 1002e2c0 f MSVCRTD:userapi.obj + 0002:0001d2f0 __RTC_SetErrorFuncW 1002e2f0 f MSVCRTD:userapi.obj + 0002:0001d320 __RTC_SetErrorType 1002e320 f MSVCRTD:userapi.obj + 0002:0001d3e0 ___security_init_cookie 1002e3e0 f MSVCRTD:gs_support.obj + 0002:0001d480 _DllMain@12 1002e480 f MSVCRTD:dll_dllmain_stub.obj + 0002:0001d4b0 ?__scrt_initialize_type_info@@YAXXZ 1002e4b0 f MSVCRTD:tncleanup.obj + 0002:0001d4d0 ?__scrt_uninitialize_type_info@@YAXXZ 1002e4d0 f MSVCRTD:tncleanup.obj + 0002:0001d4f0 ___scrt_initialize_default_local_stdio_options 1002e4f0 f MSVCRTD:default_local_stdio_options.obj + 0002:0001d540 ___scrt_get_dyn_tls_init_callback 1002e540 f MSVCRTD:dyn_tls_init.obj + 0002:0001d550 __RTC_Initialize 1002e550 f MSVCRTD:initsect.obj + 0002:0001d590 __RTC_Terminate 1002e590 f MSVCRTD:initsect.obj + 0002:0001db70 ?_RTC_GetSrcLine@@YAHPAEPA_WKPAH1K@Z 1002eb70 f MSVCRTD:pdblkup.obj + 0002:0001dfd0 __except_handler4_noexcept 1002efd0 f MSVCRTD:chandler4_noexcept.obj + 0002:0001e041 _memcpy 1002f041 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e047 _memset 1002f047 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e04d _strrchr 1002f04d f vcruntimed:VCRUNTIME140D.dll + 0002:0001e053 _strstr 1002f053 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e059 ___std_exception_copy 1002f059 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e05f ___std_exception_destroy 1002f05f f vcruntimed:VCRUNTIME140D.dll + 0002:0001e065 __CxxThrowException@8 1002f065 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e06b ___CxxFrameHandler3 1002f06b f vcruntimed:VCRUNTIME140D.dll + 0002:0001e071 ___current_exception 1002f071 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e077 ___current_exception_context 1002f077 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e07d __except_handler4_common 1002f07d f vcruntimed:VCRUNTIME140D.dll + 0002:0001e083 ___std_type_info_destroy_list 1002f083 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e089 ___vcrt_GetModuleFileNameW 1002f089 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e08f ___vcrt_GetModuleHandleW 1002f08f f vcruntimed:VCRUNTIME140D.dll + 0002:0001e095 ___vcrt_LoadLibraryExW 1002f095 f vcruntimed:VCRUNTIME140D.dll + 0002:0001e09b __invalid_parameter 1002f09b f ucrtd:ucrtbased.dll + 0002:0001e0a1 __wcsdup 1002f0a1 f ucrtd:ucrtbased.dll + 0002:0001e0a7 _wcslen 1002f0a7 f ucrtd:ucrtbased.dll + 0002:0001e0ad __strdup 1002f0ad f ucrtd:ucrtbased.dll + 0002:0001e0b3 _strlen 1002f0b3 f ucrtd:ucrtbased.dll + 0002:0001e0b9 __strlwr_s 1002f0b9 f ucrtd:ucrtbased.dll + 0002:0001e0bf _strncpy 1002f0bf f ucrtd:ucrtbased.dll + 0002:0001e0c5 _calloc 1002f0c5 f ucrtd:ucrtbased.dll + 0002:0001e0cb _free 1002f0cb f ucrtd:ucrtbased.dll + 0002:0001e0d1 _atoi 1002f0d1 f ucrtd:ucrtbased.dll + 0002:0001e0d7 _wcstombs 1002f0d7 f ucrtd:ucrtbased.dll + 0002:0001e0dd ___stdio_common_vswprintf_s 1002f0dd f ucrtd:ucrtbased.dll + 0002:0001e0e3 _fopen_s 1002f0e3 f ucrtd:ucrtbased.dll + 0002:0001e0e9 ___stdio_common_vfprintf_s 1002f0e9 f ucrtd:ucrtbased.dll + 0002:0001e0ef ___stdio_common_vsprintf_s 1002f0ef f ucrtd:ucrtbased.dll + 0002:0001e0f5 ___stdio_common_vsscanf 1002f0f5 f ucrtd:ucrtbased.dll + 0002:0001e0fb __CrtDbgReport 1002f0fb f ucrtd:ucrtbased.dll + 0002:0001e101 __callnewh 1002f101 f ucrtd:ucrtbased.dll + 0002:0001e107 _malloc 1002f107 f ucrtd:ucrtbased.dll + 0002:0001e10d __seh_filter_dll 1002f10d f ucrtd:ucrtbased.dll + 0002:0001e113 __configure_narrow_argv 1002f113 f ucrtd:ucrtbased.dll + 0002:0001e119 __initialize_narrow_environment 1002f119 f ucrtd:ucrtbased.dll + 0002:0001e11f __initialize_onexit_table 1002f11f f ucrtd:ucrtbased.dll + 0002:0001e125 __register_onexit_function 1002f125 f ucrtd:ucrtbased.dll + 0002:0001e12b __execute_onexit_table 1002f12b f ucrtd:ucrtbased.dll + 0002:0001e131 __crt_atexit 1002f131 f ucrtd:ucrtbased.dll + 0002:0001e137 __crt_at_quick_exit 1002f137 f ucrtd:ucrtbased.dll + 0002:0001e13d __cexit 1002f13d f ucrtd:ucrtbased.dll + 0002:0001e143 __CrtDbgReportW 1002f143 f ucrtd:ucrtbased.dll + 0002:0001e149 __initterm 1002f149 f ucrtd:ucrtbased.dll + 0002:0001e14f __initterm_e 1002f14f f ucrtd:ucrtbased.dll + 0002:0001e155 __free_dbg 1002f155 f ucrtd:ucrtbased.dll + 0002:0001e15b _terminate 1002f15b f ucrtd:ucrtbased.dll + 0002:0001e161 _strcpy_s 1002f161 f ucrtd:ucrtbased.dll + 0002:0001e167 _strcat_s 1002f167 f ucrtd:ucrtbased.dll + 0002:0001e16d __wmakepath_s 1002f16d f ucrtd:ucrtbased.dll + 0002:0001e173 __wsplitpath_s 1002f173 f ucrtd:ucrtbased.dll + 0002:0001e179 _wcscpy_s 1002f179 f ucrtd:ucrtbased.dll + 0002:0001e17f _GetCurrentThreadId@0 1002f17f f kernel32:KERNEL32.dll + 0002:0001e185 _IsProcessorFeaturePresent@4 1002f185 f kernel32:KERNEL32.dll + 0002:0001e18b _IsDebuggerPresent@0 1002f18b f kernel32:KERNEL32.dll + 0002:0001e191 _UnhandledExceptionFilter@4 1002f191 f kernel32:KERNEL32.dll + 0002:0001e197 _SetUnhandledExceptionFilter@4 1002f197 f kernel32:KERNEL32.dll + 0002:0001e19d _GetStartupInfoW@4 1002f19d f kernel32:KERNEL32.dll + 0002:0001e1a3 _GetModuleHandleW@4 1002f1a3 f kernel32:KERNEL32.dll + 0002:0001e1a9 _RaiseException@16 1002f1a9 f kernel32:KERNEL32.dll + 0002:0001e1af _MultiByteToWideChar@24 1002f1af f kernel32:KERNEL32.dll + 0002:0001e1b5 _WideCharToMultiByte@32 1002f1b5 f kernel32:KERNEL32.dll + 0002:0001e1bb _GetCurrentProcess@0 1002f1bb f kernel32:KERNEL32.dll + 0002:0001e1c1 _TerminateProcess@8 1002f1c1 f kernel32:KERNEL32.dll + 0002:0001e1c7 _QueryPerformanceCounter@4 1002f1c7 f kernel32:KERNEL32.dll + 0002:0001e1cd _GetSystemTimeAsFileTime@4 1002f1cd f kernel32:KERNEL32.dll + 0002:0001e1d3 _DisableThreadLibraryCalls@4 1002f1d3 f kernel32:KERNEL32.dll + 0002:0001e1d9 _InitializeSListHead@4 1002f1d9 f kernel32:KERNEL32.dll + 0002:0001e1df _HeapAlloc@12 1002f1df f kernel32:KERNEL32.dll + 0002:0001e1e5 _HeapFree@12 1002f1e5 f kernel32:KERNEL32.dll + 0002:0001e1eb _GetProcessHeap@0 1002f1eb f kernel32:KERNEL32.dll + 0002:0001e1f1 _VirtualQuery@12 1002f1f1 f kernel32:KERNEL32.dll + 0002:0001e1f7 _FreeLibrary@4 1002f1f7 f kernel32:KERNEL32.dll + 0002:0001e1fd _GetProcAddress@8 1002f1fd f kernel32:KERNEL32.dll + 0002:0001e210 ___acrt_initialize 1002f210 f MSVCRTD:ucrt_stubs.obj + 0002:0001e210 ___scrt_stub_for_acrt_initialize 1002f210 f MSVCRTD:ucrt_stubs.obj + 0002:0001e210 ___vcrt_initialize 1002f210 f MSVCRTD:ucrt_stubs.obj + 0002:0001e220 ___acrt_thread_attach 1002f220 f MSVCRTD:ucrt_stubs.obj + 0002:0001e220 ___scrt_stub_for_acrt_thread_attach 1002f220 f MSVCRTD:ucrt_stubs.obj + 0002:0001e220 ___vcrt_thread_attach 1002f220 f MSVCRTD:ucrt_stubs.obj + 0002:0001e230 ___acrt_thread_detach 1002f230 f MSVCRTD:ucrt_stubs.obj + 0002:0001e230 ___scrt_stub_for_acrt_thread_detach 1002f230 f MSVCRTD:ucrt_stubs.obj + 0002:0001e230 ___vcrt_thread_detach 1002f230 f MSVCRTD:ucrt_stubs.obj + 0002:0001e240 ___acrt_uninitialize 1002f240 f MSVCRTD:ucrt_stubs.obj + 0002:0001e240 ___scrt_stub_for_acrt_uninitialize 1002f240 f MSVCRTD:ucrt_stubs.obj + 0002:0001e240 ___vcrt_uninitialize 1002f240 f MSVCRTD:ucrt_stubs.obj + 0002:0001e250 ___acrt_uninitialize_critical 1002f250 f MSVCRTD:ucrt_stubs.obj + 0002:0001e250 ___scrt_stub_for_acrt_uninitialize_critical 1002f250 f MSVCRTD:ucrt_stubs.obj + 0002:0001e250 ___vcrt_uninitialize_critical 1002f250 f MSVCRTD:ucrt_stubs.obj + 0002:0001e260 ___scrt_stub_for_is_c_termination_complete 1002f260 f MSVCRTD:ucrt_stubs.obj + 0002:0001e260 __is_c_termination_complete 1002f260 f MSVCRTD:ucrt_stubs.obj + 0002:0001e270 __filter_x86_sse2_floating_point_exception 1002f270 f MSVCRTD:x86_exception_filter.obj + 0002:0001e270 __filter_x86_sse2_floating_point_exception_default 1002f270 f MSVCRTD:x86_exception_filter.obj + 0003:00000000 ___xc_a 10034000 MSVCRTD:initializers.obj + 0003:00000210 ___xc_z 10034210 MSVCRTD:initializers.obj + 0003:00000314 ___xi_a 10034314 MSVCRTD:initializers.obj + 0003:00000418 ___xi_z 10034418 MSVCRTD:initializers.obj + 0003:0000051c ___xp_a 1003451c MSVCRTD:initializers.obj + 0003:00000620 ___xp_z 10034620 MSVCRTD:initializers.obj + 0003:00000724 ___xt_a 10034724 MSVCRTD:initializers.obj + 0003:00000828 ___xt_z 10034828 MSVCRTD:initializers.obj + 0003:00000930 _GUID_DEVINTERFACE_VJOY 10034930 stdafx.obj + 0003:00000948 ??_7exception@std@@6B@ 10034948 vJoyInterface.obj + 0003:00000954 ??_C@_0BC@EOODALEL@Unknown?5exception@ 10034954 vJoyInterface.obj + 0003:00000970 ??_7bad_alloc@std@@6B@ 10034970 vJoyInterface.obj + 0003:00000980 ??_7bad_array_new_length@std@@6B@ 10034980 vJoyInterface.obj + 0003:0000098c ??_C@_0BF@KINCDENJ@bad?5array?5new?5length@ 1003498c vJoyInterface.obj + 0003:000009a8 ??_C@_0BB@FCMFBGOM@invalid?5argument@ 100349a8 vJoyInterface.obj + 0003:000009bc ??_C@_02DKCKIIND@?$CFs@ 100349bc vJoyInterface.obj + 0003:000009c0 ??_C@_0GC@ONGHGEHM@C?3?2Program?5Files?2Microsoft?5Visu@ 100349c0 vJoyInterface.obj + 0003:00000a38 ??_C@_1ME@DGNBIMPE@?$AAC?$AA?3?$AA?2?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAF?$AAi?$AAl?$AAe@ 10034a38 vJoyInterface.obj + 0003:00000b24 ??_C@_11LOCGONAA@@ 10034b24 vJoyInterface.obj + 0003:00000b28 ??_C@_1CG@JNLFBNGN@?$AA?$CC?$AAi?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAa?$AAr?$AAg?$AAu?$AAm?$AAe@ 10034b28 vJoyInterface.obj + 0003:00000b58 ??_C@_0BJ@LFDBABJJ@ITERATOR?5LIST?5CORRUPTED?$CB@ 10034b58 vJoyInterface.obj + 0003:00000b78 ??_C@_1DG@PLBPCAEM@?$AA?$CC?$AAI?$AAT?$AAE?$AAR?$AAA?$AAT?$AAO?$AAR?$AA?5?$AAL?$AAI?$AAS?$AAT?$AA?5@ 10034b78 vJoyInterface.obj + 0003:00000bb8 ??_C@_0BB@GCADKGJO@map?1set?5too?5long@ 10034bb8 vJoyInterface.obj + 0003:00000bcc ??_C@_0BC@DJDCIKPO@vJoyInterface?5DLL@ 10034bcc vJoyInterface.obj + 0003:00000be4 ??_C@_0CC@CIGAOLEI@Creation?5of?5Ffb?5data?9loop?5faile@ 10034be4 vJoyInterface.obj + 0003:00000c0c ??_C@_0DI@KJIBHIIH@?6?$FL?$CF05u?$FNInfo?3?5FfbIsStarted?$CI?$CJ?5?9?5R@ 10034c0c vJoyInterface.obj + 0003:00000c50 ??_C@_0EN@BHLHLNJM@?6?$FL?$CF05u?$FNError?3?5FfbIsStarted?$CI?$CJ?5?9?5@ 10034c50 vJoyInterface.obj + 0003:00000cac ??_C@_0DK@FGNFEGKE@?6?$FL?$CF05u?$FNError?3?5FfbIsStarted?$CI?$CJ?5?9?5@ 10034cac vJoyInterface.obj + 0003:00000cf8 ??_C@_0EH@PLFLBPHB@?6?$FL?$CF05u?$FNInfo?3?5FfbIsStarted?$CI?$CJ?5?9?5g@ 10034cf8 vJoyInterface.obj + 0003:00000d50 ??_C@_0EI@PGBDCIOA@?6?$FL?$CF05u?$FNInfo?3?5FfbIsStarted?$CI?$CJ?5?9?5g@ 10034d50 vJoyInterface.obj + 0003:00000da8 ??_C@_0DK@GIIAHIKB@?6?$FL?$CF05u?$FNInfo?3?5FfbWaitForData?$CI?$CJ?5?9@ 10034da8 vJoyInterface.obj + 0003:00000df0 ??_C@_0DM@IDKPOECN@?6?$FL?$CF05u?$FNError?3?5FfbWaitForData?$CI?$CJ?5@ 10034df0 vJoyInterface.obj + 0003:00000e38 ??_C@_0DM@BMIPGAAK@?6?$FL?$CF05u?$FNError?3?5FfbWaitForData?$CI?$CJ?5@ 10034e38 vJoyInterface.obj + 0003:00000e80 ??_C@_0EJ@EHPDLIOH@?6?$FL?$CF05u?$FNInfo?3?5FfbWaitForData?$CI?$CJ?5?9@ 10034e80 vJoyInterface.obj + 0003:00000ed8 ??_C@_0EK@OPMDLGDG@?6?$FL?$CF05u?$FNInfo?3?5FfbWaitForData?$CI?$CJ?5?9@ 10034ed8 vJoyInterface.obj + 0003:00000f30 ??_C@_0DF@NEAODPPN@?6?$FL?$CF05u?$FNInfo?3?5GetVJDStatus?$CI?$CFu?$CJ?5?9@ 10034f30 vJoyInterface.obj + 0003:00000f70 ??_C@_0DB@BOIMBPGK@?6?$FL?$CF05u?$FNInfo?3?5GetOwnerPid?$CI?$CFu?$CJ?5?9?5@ 10034f70 vJoyInterface.obj + 0003:00000fac ??_C@_0DK@LCIAEING@?6?$FL?$CF05u?$FNInfo?3?5GetOwnerPid?$CI?$CFu?$CJ?5?9?5@ 10034fac vJoyInterface.obj + 0003:00000ff8 ??_C@_0EG@PHNGBCHH@?6?$FL?$CF05u?$FNInfo?3?5GetOwnerPid?$CI?$CFu?$CJ?5?9?5@ 10034ff8 vJoyInterface.obj + 0003:0000104c ??_C@_0DF@PEBAEFND@?6?$FL?$CF05u?$FNInfo?3?5GetVJDStatus?$CI?$CFu?$CJ?5?9@ 1003504c vJoyInterface.obj + 0003:0000108c ??_C@_0DF@OLMOEJ@?6?$FL?$CF05u?$FNInfo?3?5GetVJDStatus?$CI?$CFu?$CJ?5?9@ 1003508c vJoyInterface.obj + 0003:000010cc ??_C@_0CK@LDCNELEM@?6?$FL?$CF05u?$FNInfo?3?5GetVJDStatus?$CI?$CFu?$CJ?5?9@ 100350cc vJoyInterface.obj + 0003:00001100 ??_C@_0DD@KAPKAMLC@?6?$FL?$CF05u?$FNInfo?3?5GetVJDButtonNumber@ 10035100 vJoyInterface.obj + 0003:00001140 ??_C@_0EK@FGGFLGJK@?6?$FL?$CF05u?$FNError?3?5GetVJDButtonNumbe@ 10035140 vJoyInterface.obj + 0003:00001198 ??_C@_0EB@FANGHBNE@?6?$FL?$CF05u?$FNError?3?5GetVJDButtonNumbe@ 10035198 vJoyInterface.obj + 0003:000011e8 ??_C@_0DJ@MIPGFEPM@?6?$FL?$CF05u?$FNInfo?3?5GetVJDButtonNumber@ 100351e8 vJoyInterface.obj + 0003:0000122c ??_C@_0O@JLIIOHHC@?7?5Usage?$DN0x?$CFx?$DL@ 1003522c vJoyInterface.obj + 0003:0000123c ??_C@_0BC@CKIEAHHG@?7?5UsagePage?$DN0x?$CFx?$DL@ 1003523c vJoyInterface.obj + 0003:00001254 ??_C@_0BM@OAIBPHPL@?7?5InputReportByteLength?$DN?$CFu?$DL@ 10035254 vJoyInterface.obj + 0003:00001278 ??_C@_0CA@BEHPBJED@?7?5NumberLinkCollectionNodes?$DN?$CFu?$DL@ 10035278 vJoyInterface.obj + 0003:000012a0 ??_C@_0BM@KGMIHPPH@?7?5NumberInputButtonCaps?$DN?$CFu?$DL@ 100352a0 vJoyInterface.obj + 0003:000012c4 ??_C@_0BL@ONMDOCNJ@?7?5NumberInputValueCaps?$DN?$CFu?$DL@ 100352c4 vJoyInterface.obj + 0003:000012e4 ??_C@_0BN@OIMOIFFL@?7?5NumberInputDataIndices?$DN?$CFu?$DL@ 100352e4 vJoyInterface.obj + 0003:00001308 ??_C@_0EH@NJPFMMFA@?6?$FL?$CF05u?$FNError?3?5GetVJDButtonNumbe@ 10035308 vJoyInterface.obj + 0003:00001360 ??_C@_0EH@MBAONGNP@?6?$FL?$CF05u?$FNError?3?5GetVJDButtonNumbe@ 10035360 vJoyInterface.obj + 0003:000013b8 ??_C@_0EA@GDNDDCLC@?6?$FL?$CF05u?$FNInfo?3?5GetVJDButtonNumber@ 100353b8 vJoyInterface.obj + 0003:00001404 ??_C@_0P@IHBDGNNC@?7?5ReportID?$DN?$CFu?$DL@ 10035404 vJoyInterface.obj + 0003:00001418 ??_C@_0P@LICDKPKK@?7?5UsageMax?$DN?$CFu?$DL@ 10035418 vJoyInterface.obj + 0003:0000142c ??_C@_0P@FOEDAAEL@?7?5UsageMin?$DN?$CFu?$DL@ 1003542c vJoyInterface.obj + 0003:00001440 ??_C@_0BD@NLDJCFEO@?7?5DataIndexMin?$DN?$CFu?$DL@ 10035440 vJoyInterface.obj + 0003:00001458 ??_C@_0DF@BFHCKPPP@?6?$FL?$CF05u?$FNError?3?5GetVJDButtonNumbe@ 10035458 vJoyInterface.obj + 0003:00001498 ??_C@_0DO@JCMNNNLM@?6?$FL?$CF05u?$FNInfo?3?5GetVJDButtonNumber@ 10035498 vJoyInterface.obj + 0003:000014e4 ??_C@_0DN@GKMMOCPB@?6?$FL?$CF05u?$FNInfo?3?5UpdateVJD?$CI?$CJ?5?9?5Devi@ 100354e4 vJoyInterface.obj + 0003:00001530 ??_C@_0ED@DELKEJBK@?6?$FL?$CF05u?$FNError?3?5UpdateVJD?$CI?$CJ?5?9?5Dev@ 10035530 vJoyInterface.obj + 0003:00001580 ??_C@_0DO@HGJOBJA@?6?$FL?$CF05u?$FNError?3?5UpdateVJD?$CI?$CJ?5?9?5Wai@ 10035580 vJoyInterface.obj + 0003:000015cc ??_C@_0DG@CJNLHJGB@?6?$FL?$CF05u?$FNInfo?3?5UpdateVJD?$CI?$CJ?5?9?5Devi@ 100355cc vJoyInterface.obj + 0003:0000160c ??_C@_0DD@IIFFBAN@?6?$FL?$CF05u?$FNInfo?3?5GetHandleByIndex?$CIi@ 1003560c vJoyInterface.obj + 0003:00001650 ??_C@_0EI@IBKBMHEE@?6?$FL?$CF05u?$FNError?3?5GetHandleByIndex?$CI@ 10035650 vJoyInterface.obj + 0003:000016a8 ??_C@_0GC@CGJMBGOL@?6?$FL?$CF05u?$FNWarning?3?5GetHandleByInde@ 100356a8 vJoyInterface.obj + 0003:00001720 ??_C@_0FG@LNCIOGIE@?6?$FL?$CF05u?$FNError?3?5GetHandleByIndex?$CI@ 10035720 vJoyInterface.obj + 0003:00001788 ??_C@_0FI@JJKOJABN@?6?$FL?$CF05u?$FNError?3?5GetHandleByIndex?$CI@ 10035788 vJoyInterface.obj + 0003:000017f8 ??_C@_0EE@MAENKEJ@?6?$FL?$CF05u?$FNError?3?5GetHandleByIndex?$CI@ 100357f8 vJoyInterface.obj + 0003:00001850 ??_C@_0EB@CCPPMMLE@?6?$FL?$CF05u?$FNInfo?3?5GetHandleByIndex?$CIi@ 10035850 vJoyInterface.obj + 0003:000018a0 ??_C@_0DJ@JMJDKHHE@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceIndexById@ 100358a0 vJoyInterface.obj + 0003:000018e8 ??_C@_0GG@LIAAMOM@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceIndexById@ 100358e8 vJoyInterface.obj + 0003:00001964 ??_C@_0DN@MDKJEAGA@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceIndexById@ 10035964 vJoyInterface.obj + 0003:000019b0 ??_C@_0DF@MJJOJPJ@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceIndexByRe@ 100359b0 vJoyInterface.obj + 0003:000019f0 ??_C@_0EL@MGILLLMF@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceIndexByRe@ 100359f0 vJoyInterface.obj + 0003:00001a50 ??_C@_0EP@JHOMOKAP@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceIndexByRe@ 10035a50 vJoyInterface.obj + 0003:00001ab0 ??_C@_0DG@OKBDGNJH@?6?$FL?$CF05u?$FNError?3?5GetDeviceIndexByR@ 10035ab0 vJoyInterface.obj + 0003:00001af0 ??_C@_0EK@LGHKGAFF@?6?$FL?$CF05u?$FNError?3?5GetDeviceNameSpac@ 10035af0 vJoyInterface.obj + 0003:00001b48 ??_C@_0GE@ELAIFKLL@?6?$FL?$CF05u?$FNError?3?5GetDeviceNameSpac@ 10035b48 vJoyInterface.obj + 0003:00001bc0 ??_C@_0FM@GGCEMBPG@?6?$FL?$CF05u?$FNError?3?5GetDeviceNameSpac@ 10035bc0 vJoyInterface.obj + 0003:00001c30 ??_C@_0DC@GAEOPMNG@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceNameSpace@ 10035c30 vJoyInterface.obj + 0003:00001c70 ??_C@_0ED@HKFFFIGA@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceNameSpace@ 10035c70 vJoyInterface.obj + 0003:00001cc0 ??_C@_0GE@NMJIIJJJ@?6?$FL?$CF05u?$FNInfo?3?5GetDeviceNameSpace@ 10035cc0 vJoyInterface.obj + 0003:00001d38 ??_C@_1BA@JCMDMCHI@?$AAD?$AAe?$AAv?$AAi?$AAc?$AAe?$AA_@ 10035d38 vJoyInterface.obj + 0003:00001d50 ??_C@_0EK@PCNOOKNC@?6?$FL?$CF05u?$FNError?3?5OpenDeviceInterfa@ 10035d50 vJoyInterface.obj + 0003:00001da8 ??_C@_0DM@BJLJHKNP@?6?$FL?$CF05u?$FNError?3?5OpenDeviceInterfa@ 10035da8 vJoyInterface.obj + 0003:00001df0 ??_C@_0FI@BMOHPPPH@?6?$FL?$CF05u?$FNInfo?3?5OpenDeviceInterfac@ 10035df0 vJoyInterface.obj + 0003:00001e5c ??_C@_0CP@LKIMKJMP@?6?$FL?$CF05u?$FNInfo?3?5OpenDeviceInterfac@ 10035e5c vJoyInterface.obj + 0003:00001e98 ??_C@_0GG@OMJAJDPH@?6?$FL?$CF05u?$FNInfo?3?5GetDevInfo?$CI?$CJ?5?9?5Ret@ 10035e98 vJoyInterface.obj + 0003:00001f14 ??_C@_0DI@FLNFFGAD@?6?$FL?$CF05u?$FNError?3?5GetDevInfo?$CI?$CJ?5?9?5Re@ 10035f14 vJoyInterface.obj + 0003:00001f58 ??_C@_0DI@MEPFNCCE@?6?$FL?$CF05u?$FNError?3?5GetDevInfo?$CI?$CJ?5?9?5er@ 10035f58 vJoyInterface.obj + 0003:00001fa0 ??_C@_0EF@GKLKBJFI@?6?$FL?$CF05u?$FNInfo?3?5GetDevInfo?$CI?$CJ?5?9?5got@ 10035fa0 vJoyInterface.obj + 0003:00001ff8 ??_C@_0EG@LEDAFBIK@?6?$FL?$CF05u?$FNInfo?3?5GetDevInfo?$CI?$CJ?5?9?5got@ 10035ff8 vJoyInterface.obj + 0003:00002050 ??_C@_0FL@OCDCLCEL@?6?$FL?$CF05u?$FNInfo?3?5GetDevStat?$CI?$CJ?5?9?5Ret@ 10036050 vJoyInterface.obj + 0003:000020c0 ??_C@_0DI@OLOAGCHJ@?6?$FL?$CF05u?$FNError?3?5GetDevStat?$CI?$CJ?5?9?5Re@ 100360c0 vJoyInterface.obj + 0003:00002104 ??_C@_0DI@HEMAOGFO@?6?$FL?$CF05u?$FNError?3?5GetDevStat?$CI?$CJ?5?9?5er@ 10036104 vJoyInterface.obj + 0003:00002148 ??_C@_0EF@EGCDMIKI@?6?$FL?$CF05u?$FNInfo?3?5GetDevStat?$CI?$CJ?5?9?5got@ 10036148 vJoyInterface.obj + 0003:000021a0 ??_C@_0EG@JKBDKEH@?6?$FL?$CF05u?$FNInfo?3?5GetDevStat?$CI?$CJ?5?9?5got@ 100361a0 vJoyInterface.obj + 0003:000021f8 ??_C@_0FD@GAKHOCIG@?6?$FL?$CF05u?$FNInfo?3?5GetDrvStat?$CI?$CJ?5?9?5Ret@ 100361f8 vJoyInterface.obj + 0003:0000225c ??_C@_0DI@EIAKGMDI@?6?$FL?$CF05u?$FNError?3?5GetDrvStat?$CI?$CJ?5?9?5Re@ 1003625c vJoyInterface.obj + 0003:000022a0 ??_C@_0DI@NHCKOIBP@?6?$FL?$CF05u?$FNError?3?5GetDrvStat?$CI?$CJ?5?9?5er@ 100362a0 vJoyInterface.obj + 0003:000022e8 ??_C@_0EF@KKEOOFFP@?6?$FL?$CF05u?$FNInfo?3?5GetDrvStat?$CI?$CJ?5?9?5got@ 100362e8 vJoyInterface.obj + 0003:00002340 ??_C@_0EG@CKJEDANF@?6?$FL?$CF05u?$FNInfo?3?5GetDrvStat?$CI?$CJ?5?9?5got@ 10036340 vJoyInterface.obj + 0003:00002394 ??_C@_08DNMKHOCF@?$CFs?$CFs?$CF03d@ 10036394 vJoyInterface.obj + 0003:000023a0 ??_C@_04OHGLKFFN@?$CF03d@ 100363a0 vJoyInterface.obj + 0003:000023a8 ??_C@_0DI@GCJLPGON@?6?$FL?$CF05u?$FNInfo?3?5isRawDevice?$CI?$CFd?$CJ?5?9?5@ 100363a8 vJoyInterface.obj + 0003:000023ec ??_C@_0CA@PGPJAAEK@Call?5to?5RegisterClassEx?5failed?$CB@ 100363ec vJoyInterface.obj + 0003:00002414 ??_C@_0BG@CDOIHGNF@VJOYINTERFACELOGLEVEL@ 10036414 vJoyInterface.obj + 0003:00002430 ??_C@_0BF@FPKMOGPD@VJOYINTERFACELOGFILE@ 10036430 vJoyInterface.obj + 0003:0000244c ??_C@_04JKHNIKCB@TEMP@ 1003644c vJoyInterface.obj + 0003:00002454 ??_C@_0BC@KPPPLGJO@vJoyInterface?4log@ 10036454 vJoyInterface.obj + 0003:0000246c ??_C@_05BMGBEOOC@?$CFs?2?$CFs@ 1003646c vJoyInterface.obj + 0003:00002474 ??_C@_02DPNLHKJD@a?$CL@ 10036474 vJoyInterface.obj + 0003:00002478 ??_C@_0BF@PEEFBMH@?6?6?6?$FL?$CF05u?$FNProcess?3?$CFs?6@ 10036478 vJoyInterface.obj + 0003:00002494 ??_C@_0DA@IHMOFIMD@Create?5window?5process?5on?5anothe@ 10036494 vJoyInterface.obj + 0003:000024d0 ??_C@_0CB@HPGJNH@Creation?5of?5dummy?5window?5failed@ 100364d0 vJoyInterface.obj + 0003:000024f8 ??_C@_13NAACAHKO@?$AAX@ 100364f8 vJoyInterface.obj + 0003:000024fc ??_C@_13GILOGAML@?$AAY@ 100364fc vJoyInterface.obj + 0003:00002500 ??_C@_13HKALMPCF@?$AAZ@ 10036500 vJoyInterface.obj + 0003:00002504 ??_C@_15BMCNAON@?$AAR?$AAX@ 10036504 vJoyInterface.obj + 0003:0000250c ??_C@_15LJHOLHII@?$AAR?$AAY@ 1003650c vJoyInterface.obj + 0003:00002514 ??_C@_15KLMLBIGG@?$AAR?$AAZ@ 10036514 vJoyInterface.obj + 0003:0000251c ??_C@_17HBHJIBGA@?$AAS?$AAL?$AA1@ 1003651c vJoyInterface.obj + 0003:00002528 ??_C@_17GDMMCOIO@?$AAS?$AAL?$AA2@ 10036528 vJoyInterface.obj + 0003:00002534 ??_C@_19MHJMLFKO@?$AAP?$AAO?$AAV?$AA1@ 10036534 vJoyInterface.obj + 0003:00002540 ??_C@_19NFCJBKEA@?$AAP?$AAO?$AAV?$AA2@ 10036540 vJoyInterface.obj + 0003:0000254c ??_C@_19GNJFHNCF@?$AAP?$AAO?$AAV?$AA3@ 1003654c vJoyInterface.obj + 0003:00002558 ??_C@_19PAECEFJM@?$AAP?$AAO?$AAV?$AA4@ 10036558 vJoyInterface.obj + 0003:00002568 ??_C@_1HC@DPIGBNJN@?$AAS?$AAY?$AAS?$AAT?$AAE?$AAM?$AA?2?$AAC?$AAu?$AAr?$AAr?$AAe?$AAn?$AAt?$AAC@ 10036568 vJoyInterface.obj + 0003:000025f0 ??_C@_19HABNGADD@?$AAI?$AAn?$AAi?$AAt@ 100365f0 vJoyInterface.obj + 0003:000025fc ??_C@_1BG@NFFGKCLM@?$AA?$CF?$AAs?$AA?$CF?$AA0?$AA2?$AAu?$AA?2?$AA?$CF?$AAs?$AA?$AA@ 100365fc vJoyInterface.obj + 0003:00002618 ??_C@_19LLLMHGHI@?$AAB?$AAT?$AAN?$AAS@ 10036618 vJoyInterface.obj + 0003:00002624 ??_C@_0DK@KMKOEHCO@?6?$FL?$CF05u?$FNInfo?3?5GetDevPosition?$CI?$CJ?5?9@ 10036624 vJoyInterface.obj + 0003:0000266c ??_C@_0DM@POGMFEKD@?6?$FL?$CF05u?$FNError?3?5GetDevPosition?$CI?$CJ?5@ 1003666c vJoyInterface.obj + 0003:000026b4 ??_C@_0DM@GBEMNAIE@?6?$FL?$CF05u?$FNError?3?5GetDevPosition?$CI?$CJ?5@ 100366b4 vJoyInterface.obj + 0003:00002700 ??_C@_0EJ@LKIENPKJ@?6?$FL?$CF05u?$FNInfo?3?5GetDevPosition?$CI?$CJ?5?9@ 10036700 vJoyInterface.obj + 0003:00002758 ??_C@_0EK@HOFKKNMG@?6?$FL?$CF05u?$FNInfo?3?5GetDevPosition?$CI?$CJ?5?9@ 10036758 vJoyInterface.obj + 0003:000027b0 ??_C@_0BP@OLDKBHLM@map?1set?5iterators?5incompatible@ 100367b0 vJoyInterface.obj + 0003:000027d8 ??_C@_0GA@GNHKHACC@C?3?2Program?5Files?2Microsoft?5Visu@ 100367d8 vJoyInterface.obj + 0003:00002850 ??_C@_1MA@LENEFKFL@?$AAC?$AA?3?$AA?2?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAF?$AAi?$AAl?$AAe@ 10036850 vJoyInterface.obj + 0003:00002938 ??_C@_1EC@JLIDLCDH@?$AA?$CC?$AAm?$AAa?$AAp?$AA?1?$AAs?$AAe?$AAt?$AA?5?$AAi?$AAt?$AAe?$AAr?$AAa?$AAt@ 10036938 vJoyInterface.obj + 0003:00002988 ??_C@_0DG@KGHKKGBC@null?5pointer?5cannot?5point?5to?5a?5@ 10036988 vJoyInterface.obj + 0003:000029c8 ??_C@_1HA@FACCKGGH@?$AA?$CC?$AAn?$AAu?$AAl?$AAl?$AA?5?$AAp?$AAo?$AAi?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAc@ 100369c8 vJoyInterface.obj + 0003:00002a50 ??_C@_0BD@FEEMDEPI@invalid?5comparator@ 10036a50 vJoyInterface.obj + 0003:00002a68 ??_C@_0GD@JKKFFOCD@C?3?2Program?5Files?2Microsoft?5Visu@ 10036a68 vJoyInterface.obj + 0003:00002ae0 ??_C@_1MG@JJBOPAGB@?$AAC?$AA?3?$AA?2?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAF?$AAi?$AAl?$AAe@ 10036ae0 vJoyInterface.obj + 0003:00002bd0 ??_C@_1CK@NDNHPKPI@?$AA?$CC?$AAi?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAc?$AAo?$AAm?$AAp?$AAa?$AAr@ 10036bd0 vJoyInterface.obj + 0003:00002c08 ??_7type_info@@6B@ 10036c08 MSVCRTD:std_type_info_static.obj + 0003:00002c10 __pDefaultRawDllMain 10036c10 MSVCRTD:dll_dllmain.obj + 0003:00002c10 __pRawDllMain 10036c10 MSVCRTD:dll_dllmain.obj + 0003:00002c14 ??_C@_0P@GHFPNOJB@bad?5allocation@ 10036c14 MSVCRTD:throw_bad_alloc.obj + 0003:00002ce8 ??_C@_0NN@JMPELKLB@The?5value?5of?5ESP?5was?5not?5proper@ 10036ce8 MSVCRTD:error.obj + 0003:00002df8 ??_C@_0BBN@ELNNILBE@A?5cast?5to?5a?5smaller?5data?5type?5h@ 10036df8 MSVCRTD:error.obj + 0003:00002f50 ??_C@_0BN@BPOGFMJL@Stack?5memory?5was?5corrupted?$AN?6@ 10036f50 MSVCRTD:error.obj + 0003:00002f74 ??_C@_0DG@DAJCDLPN@A?5local?5variable?5was?5used?5befor@ 10036f74 MSVCRTD:error.obj + 0003:00002fb4 ??_C@_0CM@JMIDGKLA@Stack?5memory?5around?5_alloca?5was@ 10036fb4 MSVCRTD:error.obj + 0003:00002fe8 ??_C@_0BO@CHIONIOI@Unknown?5Runtime?5Check?5Error?$AN?6@ 10036fe8 MSVCRTD:error.obj + 0003:00003010 ??_C@_1GM@CNOOJIHC@?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAC?$AAh?$AAe?$AAc?$AAk?$AA?5?$AAE@ 10037010 MSVCRTD:error.obj + 0003:00003098 ??_C@_1EA@NFKNIFJP@?$AAR?$AAu?$AAn?$AA?9?$AAT?$AAi?$AAm?$AAe?$AA?5?$AAC?$AAh?$AAe?$AAc?$AAk?$AA?5@ 10037098 MSVCRTD:error.obj + 0003:000030e4 ??_C@_0BB@PFFGGCJP@Unknown?5Filename@ 100370e4 MSVCRTD:error.obj + 0003:000030f8 ??_C@_0BE@GNBOBNCK@Unknown?5Module?5Name@ 100370f8 MSVCRTD:error.obj + 0003:00003110 ??_C@_0CA@IODNCDPG@Run?9Time?5Check?5Failure?5?$CD?$CFd?5?9?5?$CFs@ 10037110 MSVCRTD:error.obj + 0003:00003138 ??_C@_0CG@IAFNJNEE@Stack?5corrupted?5near?5unknown?5va@ 10037138 MSVCRTD:error.obj + 0003:00003168 ??_C@_05MKKEDADM@?$CF?42X?5@ 10037168 MSVCRTD:error.obj + 0003:00003170 ??_C@_0EJ@LJKNEOLN@Stack?5area?5around?5_alloca?5memor@ 10037170 MSVCRTD:error.obj + 0003:000031c8 ??_C@_01EEMJAFIK@?6@ 100371c8 MSVCRTD:error.obj + 0003:000031cc ??_C@_02LLMPMKNF@?$DO?5@ 100371cc MSVCRTD:error.obj + 0003:000031d0 ??_C@_08OMAHNMHJ@?6Data?3?5?$DM@ 100371d0 MSVCRTD:error.obj + 0003:000031dc ??_C@_0CK@DKGBICFE@?6Allocation?5number?5within?5this?5@ 100371dc MSVCRTD:error.obj + 0003:00003210 ??_C@_07DFDJCKFN@?6Size?3?5@ 10037210 MSVCRTD:error.obj + 0003:0000321c ??_C@_0N@MHFFIMFG@?6Address?3?50x@ 1003721c MSVCRTD:error.obj + 0003:00003230 ??_C@_0EI@CLEPFNGI@Stack?5area?5around?5_alloca?5memor@ 10037230 MSVCRTD:error.obj + 0003:00003288 ??_C@_0BK@ODNDAGKB@?$CFs?$CFs?$CFp?$CFs?$CFzd?$CFs?$CFd?$CFs?$CFs?$CFs?$CFs?$CFs@ 10037288 MSVCRTD:error.obj + 0003:000032a8 ??_C@_0DE@OHJBPMBP@A?5variable?5is?5being?5used?5withou@ 100372a8 MSVCRTD:error.obj + 0003:0000330c ??_C@_0BJ@HEGAHDFO@Stack?5pointer?5corruption@ 1003730c MSVCRTD:userapi.obj + 0003:0000332c ??_C@_0CK@FEGOIOPB@Cast?5to?5smaller?5type?5causing?5lo@ 1003732c MSVCRTD:userapi.obj + 0003:00003360 ??_C@_0BI@CIGMDCBH@Stack?5memory?5corruption@ 10037360 MSVCRTD:userapi.obj + 0003:0000337c ??_C@_0CK@CNLNOEPB@Local?5variable?5used?5before?5init@ 1003737c MSVCRTD:userapi.obj + 0003:000033b0 ??_C@_0BP@OGBCLIBO@Stack?5around?5_alloca?5corrupted@ 100373b0 MSVCRTD:userapi.obj + 0003:00003430 ??_C@_1EI@MLPKHBGE@?$AAa?$AAp?$AAi?$AA?9?$AAm?$AAs?$AA?9?$AAw?$AAi?$AAn?$AA?9?$AAc?$AAo?$AAr?$AAe@ 10037430 MSVCRTD:pdblkup.obj + 0003:00003488 ??_C@_1BK@JHLNAEJL@?$AAa?$AAd?$AAv?$AAa?$AAp?$AAi?$AA3?$AA2?$AA?4?$AAd?$AAl?$AAl@ 10037488 MSVCRTD:pdblkup.obj + 0003:000034a8 ??_C@_0O@COHOBMLB@RegOpenKeyExW@ 100374a8 MSVCRTD:pdblkup.obj + 0003:000034b8 ??_C@_0BB@GLNAEDBD@RegQueryValueExW@ 100374b8 MSVCRTD:pdblkup.obj + 0003:000034cc ??_C@_0M@HLOHPNFA@RegCloseKey@ 100374cc MSVCRTD:pdblkup.obj + 0003:000034e0 ??_C@_1HE@EBEAGLFB@?$AAS?$AAO?$AAF?$AAT?$AAW?$AAA?$AAR?$AAE?$AA?2?$AAW?$AAo?$AAw?$AA6?$AA4?$AA3@ 100374e0 MSVCRTD:pdblkup.obj + 0003:0000356c ??_C@_1BG@EABPBLLF@?$AAP?$AAr?$AAo?$AAd?$AAu?$AAc?$AAt?$AAD?$AAi?$AAr@ 1003756c MSVCRTD:pdblkup.obj + 0003:000035ac ??_C@_1BC@JINFINNJ@?$AAM?$AAS?$AAP?$AAD?$AAB?$AA1?$AA4?$AA0@ 100375ac MSVCRTD:pdblkup.obj + 0003:000035c4 ??_C@_0BB@KCIACLNC@PDBOpenValidate5@ 100375c4 MSVCRTD:pdblkup.obj + 0003:000035d8 ??_C@_01KDCPPGHE@r@ 100375d8 MSVCRTD:pdblkup.obj + 0003:000035e0 __load_config_used 100375e0 MSVCRTD:loadcfg.obj + 0003:000038c0 ___CastGuardVftablesStart 100378c0 MSVCRTD:guard_support.obj + 0003:00003a40 ___CastGuardVftablesEnd 10037a40 MSVCRTD:guard_support.obj + 0003:00003b8c ??_R4exception@std@@6B@ 10037b8c vJoyInterface.obj + 0003:00003ba4 ??_R3exception@std@@8 10037ba4 vJoyInterface.obj + 0003:00003bb8 ??_R2exception@std@@8 10037bb8 vJoyInterface.obj + 0003:00003bc0 ??_R1A@?0A@EA@exception@std@@8 10037bc0 vJoyInterface.obj + 0003:00003be4 ??_R4bad_alloc@std@@6B@ 10037be4 vJoyInterface.obj + 0003:00003bfc ??_R3bad_alloc@std@@8 10037bfc vJoyInterface.obj + 0003:00003c10 ??_R2bad_alloc@std@@8 10037c10 vJoyInterface.obj + 0003:00003c1c ??_R1A@?0A@EA@bad_alloc@std@@8 10037c1c vJoyInterface.obj + 0003:00003c40 ??_R4bad_array_new_length@std@@6B@ 10037c40 vJoyInterface.obj + 0003:00003c58 ??_R3bad_array_new_length@std@@8 10037c58 vJoyInterface.obj + 0003:00003c6c ??_R2bad_array_new_length@std@@8 10037c6c vJoyInterface.obj + 0003:00003c7c ??_R1A@?0A@EA@bad_array_new_length@std@@8 10037c7c vJoyInterface.obj + 0003:00003ca0 ??_R4type_info@@6B@ 10037ca0 MSVCRTD:std_type_info_static.obj + 0003:00003cb8 ??_R3type_info@@8 10037cb8 MSVCRTD:std_type_info_static.obj + 0003:00003ccc ??_R2type_info@@8 10037ccc MSVCRTD:std_type_info_static.obj + 0003:00003cd4 ??_R1A@?0A@EA@type_info@@8 10037cd4 MSVCRTD:std_type_info_static.obj + 0003:00003f84 ___rtc_iaa 10037f84 MSVCRTD:initsect.obj + 0003:0000418c ___rtc_izz 1003818c MSVCRTD:initsect.obj + 0003:00004290 ___rtc_taa 10038290 MSVCRTD:initsect.obj + 0003:00004498 ___rtc_tzz 10038498 MSVCRTD:initsect.obj + 0003:00004b4c __TI3?AVbad_array_new_length@std@@ 10038b4c vJoyInterface.obj + 0003:00004b60 __CTA3?AVbad_array_new_length@std@@ 10038b60 vJoyInterface.obj + 0003:00004b74 __CT??_R0?AVbad_array_new_length@std@@@8??0bad_array_new_length@std@@QAE@ABV01@@Z12 10038b74 vJoyInterface.obj + 0003:00004b94 __CT??_R0?AVbad_alloc@std@@@8??0bad_alloc@std@@QAE@ABV01@@Z12 10038b94 vJoyInterface.obj + 0003:00004bb4 __CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12 10038bb4 vJoyInterface.obj + 0003:00004c68 __TI2?AVbad_alloc@std@@ 10038c68 MSVCRTD:throw_bad_alloc.obj + 0003:00004c7c __CTA2?AVbad_alloc@std@@ 10038c7c MSVCRTD:throw_bad_alloc.obj + 0004:00000000 ?h0@@3PAXA 1003a000 vJoyInterface.obj + 0004:00000050 ?__LINE__Var@?0??_Adjust_manually_vector_aligned@std@@YAXAAPAXAAI@Z@4JA 1003a050 vJoyInterface.obj + 0004:00000054 ___scrt_native_dllmain_reason 1003a054 MSVCRTD:utility.obj + 0004:00000060 ___security_cookie 1003a060 MSVCRTD:gs_cookie.obj + 0004:00000064 ___security_cookie_complement 1003a064 MSVCRTD:gs_cookie.obj + 0004:0000006c ___isa_enabled 1003a06c MSVCRTD:cpu_disp.obj + 0004:00000070 ?_RTC_ErrorLevels@@3PAHA 1003a070 MSVCRTD:error.obj + 0004:00000088 ___scrt_ucrt_dll_is_in_use 1003a088 MSVCRTD:ucrt_stubs.obj + 0004:00000194 ??_R0?AVbad_array_new_length@std@@@8 1003a194 vJoyInterface.obj + 0004:000001c4 ??_R0?AVbad_alloc@std@@@8 1003a1c4 vJoyInterface.obj + 0004:000001e8 ??_R0?AVexception@std@@@8 1003a1e8 vJoyInterface.obj + 0004:0000030c ??_R0?AVtype_info@@@8 1003a30c MSVCRTD:std_type_info_static.obj + 0004:00000428 ___@@_PchSym_@00@UfhvihUxbwUhlfixvUivklhUeqlbUzkkhUxlnnlmUeqlbrmgviuzxvUdrmDCUwvyftUhgwzucOlyq@4B2008FD98C1DD4 1003a428 stdafx.obj + 0004:0000042c ___@@_PchSym_@00@UfhvihUxbwUhlfixvUivklhUeqlbUzkkhUxlnnlmUeqlbrmgviuzxvUdrmDCUwvyftUeqlbrmgviuzxvOlyq@4B2008FD98C1DD4 1003a42c vJoyInterface.obj + 0004:00000430 ?Init@@3HA 1003a430 vJoyInterface.obj + 0004:00000434 ?hInst@@3PAUHINSTANCE__@@A 1003a434 vJoyInterface.obj + 0004:00000438 ?hWnd@@3PAUHWND__@@A 1003a438 vJoyInterface.obj + 0004:0000043c ?hDeviceNotifyInterFace@@3PAXA 1003a43c vJoyInterface.obj + 0004:00000440 ?hDeviceNotifyHandle0@@3PAXA 1003a440 vJoyInterface.obj + 0004:00000444 ?hEvent@@3PAXA 1003a444 vJoyInterface.obj + 0004:00000448 ?ppDisable@@3PAXA 1003a448 vJoyInterface.obj + 0004:0000044c ?ppEnable@@3PAXA 1003a44c vJoyInterface.obj + 0004:00000450 ?LogFileName@@3PADA 1003a450 vJoyInterface.obj + 0004:00000454 ?Logging@@3HA 1003a454 vJoyInterface.obj + 0004:00000458 ?LogStream@@3PAU_iobuf@@A 1003a458 vJoyInterface.obj + 0004:0000045c ?ProcessId@@3KA 1003a45c vJoyInterface.obj + 0004:00000460 ?RemovalFunc@@3P6GXHHPAX@ZA 1003a460 vJoyInterface.obj + 0004:00000464 ?RemovalData@@3PAXA 1003a464 vJoyInterface.obj + 0004:00000468 ?FfbDataPacket@@3U_FFB_DATA@@A 1003a468 vJoyInterface.obj + 0004:00000474 ?FfbGebFunc@@3P6GXPAX0@ZA 1003a474 vJoyInterface.obj + 0004:00000478 ?FfbUserData@@3PAXA 1003a478 vJoyInterface.obj + 0004:0000047c ?FfbEffectState@@3HA 1003a47c vJoyInterface.obj + 0004:00000480 ?FfbEffectType@@3W4FFBEType@@A 1003a480 vJoyInterface.obj + 0004:00000484 ?hFfbEvent@@3PAXA 1003a484 vJoyInterface.obj + 0004:00000488 ?vJoyDevices@@3V?$map@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@@std@@A 1003a488 vJoyInterface.obj + 0004:00000494 ?mFfbEffect@@3V?$map@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@@std@@A 1003a494 vJoyInterface.obj + 0004:000004c8 ?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA 1003a4c8 vJoyInterface.obj + 0004:000004d8 ?_OptionsStorage@?1??__local_stdio_scanf_options@@9@4_KA 1003a4d8 vJoyInterface.obj + 0004:000004e4 ___scrt_current_native_startup_state 1003a4e4 MSVCRTD:utility.obj + 0004:000004e8 ___scrt_native_startup_lock 1003a4e8 MSVCRTD:utility.obj + 0004:00000514 ___isa_available 1003a514 MSVCRTD:cpu_disp.obj + 0004:00000518 ___favor 1003a518 MSVCRTD:cpu_disp.obj + 0004:00000520 ___scrt_debugger_hook_flag 1003a520 MSVCRTD:utility_desktop.obj + 0004:000008f0 ?__type_info_root_node@@3U__type_info_node@@A 1003a8f0 MSVCRTD:tncleanup.obj + 0004:00000904 ___dyn_tls_init_callback 1003a904 + 0004:00000910 ___DebuggerCurrentSteppingThreadId 1003a910 + 0005:00000000 __imp__RegCloseKey@4 1003b000 advapi32:ADVAPI32.dll + 0005:00000004 __imp__RegOpenKeyExW@20 1003b004 advapi32:ADVAPI32.dll + 0005:00000008 __imp__RegGetValueW@28 1003b008 advapi32:ADVAPI32.dll + 0005:0000000c \177ADVAPI32_NULL_THUNK_DATA 1003b00c advapi32:ADVAPI32.dll + 0005:00000038 __imp__HidD_GetSerialNumberString@12 1003b038 hid:HID.DLL + 0005:0000003c __imp__HidP_GetCaps@8 1003b03c hid:HID.DLL + 0005:00000040 __imp__HidP_GetLinkCollectionNodes@12 1003b040 hid:HID.DLL + 0005:00000044 __imp__HidP_GetButtonCaps@16 1003b044 hid:HID.DLL + 0005:00000048 __imp__HidP_GetSpecificValueCaps@28 1003b048 hid:HID.DLL + 0005:0000004c __imp__HidP_GetValueCaps@16 1003b04c hid:HID.DLL + 0005:00000050 __imp__HidP_GetUsageValue@32 1003b050 hid:HID.DLL + 0005:00000054 __imp__HidD_GetAttributes@8 1003b054 hid:HID.DLL + 0005:00000058 __imp__HidD_GetHidGuid@4 1003b058 hid:HID.DLL + 0005:0000005c __imp__HidD_GetPreparsedData@8 1003b05c hid:HID.DLL + 0005:00000060 __imp__HidD_FreePreparsedData@4 1003b060 hid:HID.DLL + 0005:00000064 __imp__HidD_GetManufacturerString@12 1003b064 hid:HID.DLL + 0005:00000068 __imp__HidD_GetProductString@12 1003b068 hid:HID.DLL + 0005:0000006c \177HID_NULL_THUNK_DATA 1003b06c hid:HID.DLL + 0005:000000a0 __imp__IsProcessorFeaturePresent@4 1003b0a0 kernel32:KERNEL32.dll + 0005:000000a4 __imp__FreeLibrary@4 1003b0a4 kernel32:KERNEL32.dll + 0005:000000a8 __imp__GetEnvironmentVariableA@12 1003b0a8 kernel32:KERNEL32.dll + 0005:000000ac __imp__CreateFileA@28 1003b0ac kernel32:KERNEL32.dll + 0005:000000b0 __imp__CloseHandle@4 1003b0b0 kernel32:KERNEL32.dll + 0005:000000b4 __imp__GetLastError@0 1003b0b4 kernel32:KERNEL32.dll + 0005:000000b8 __imp__DeviceIoControl@32 1003b0b8 kernel32:KERNEL32.dll + 0005:000000bc __imp__GetOverlappedResult@16 1003b0bc kernel32:KERNEL32.dll + 0005:000000c0 __imp__SetEvent@4 1003b0c0 kernel32:KERNEL32.dll + 0005:000000c4 __imp__WaitForSingleObject@8 1003b0c4 kernel32:KERNEL32.dll + 0005:000000c8 __imp__CreateEventA@16 1003b0c8 kernel32:KERNEL32.dll + 0005:000000cc __imp__GetCurrentProcessId@0 1003b0cc kernel32:KERNEL32.dll + 0005:000000d0 __imp__CreateThread@24 1003b0d0 kernel32:KERNEL32.dll + 0005:000000d4 __imp__GetModuleHandleA@4 1003b0d4 kernel32:KERNEL32.dll + 0005:000000d8 __imp__LocalAlloc@8 1003b0d8 kernel32:KERNEL32.dll + 0005:000000dc __imp__LocalFree@4 1003b0dc kernel32:KERNEL32.dll + 0005:000000e0 __imp__GetCommandLineA@0 1003b0e0 kernel32:KERNEL32.dll + 0005:000000e4 __imp__VirtualQuery@12 1003b0e4 kernel32:KERNEL32.dll + 0005:000000e8 __imp__GetProcessHeap@0 1003b0e8 kernel32:KERNEL32.dll + 0005:000000ec __imp__HeapFree@12 1003b0ec kernel32:KERNEL32.dll + 0005:000000f0 __imp__HeapAlloc@12 1003b0f0 kernel32:KERNEL32.dll + 0005:000000f4 __imp__InitializeSListHead@4 1003b0f4 kernel32:KERNEL32.dll + 0005:000000f8 __imp__DisableThreadLibraryCalls@4 1003b0f8 kernel32:KERNEL32.dll + 0005:000000fc __imp__GetSystemTimeAsFileTime@4 1003b0fc kernel32:KERNEL32.dll + 0005:00000100 __imp__QueryPerformanceCounter@4 1003b100 kernel32:KERNEL32.dll + 0005:00000104 __imp__TerminateProcess@8 1003b104 kernel32:KERNEL32.dll + 0005:00000108 __imp__GetCurrentProcess@0 1003b108 kernel32:KERNEL32.dll + 0005:0000010c __imp__WideCharToMultiByte@32 1003b10c kernel32:KERNEL32.dll + 0005:00000110 __imp__MultiByteToWideChar@24 1003b110 kernel32:KERNEL32.dll + 0005:00000114 __imp__RaiseException@16 1003b114 kernel32:KERNEL32.dll + 0005:00000118 __imp__GetModuleHandleW@4 1003b118 kernel32:KERNEL32.dll + 0005:0000011c __imp__GetStartupInfoW@4 1003b11c kernel32:KERNEL32.dll + 0005:00000120 __imp__SetUnhandledExceptionFilter@4 1003b120 kernel32:KERNEL32.dll + 0005:00000124 __imp__UnhandledExceptionFilter@4 1003b124 kernel32:KERNEL32.dll + 0005:00000128 __imp__IsDebuggerPresent@0 1003b128 kernel32:KERNEL32.dll + 0005:0000012c __imp__GetProcAddress@8 1003b12c kernel32:KERNEL32.dll + 0005:00000130 __imp__GetCurrentThreadId@0 1003b130 kernel32:KERNEL32.dll + 0005:00000134 \177KERNEL32_NULL_THUNK_DATA 1003b134 kernel32:KERNEL32.dll + 0005:0000017c __imp_??0_Lockit@std@@QAE@H@Z 1003b17c msvcprtd:MSVCP140D.dll + 0005:00000180 __imp_?_Xlength_error@std@@YAXPBD@Z 1003b180 msvcprtd:MSVCP140D.dll + 0005:00000184 __imp_??1_Lockit@std@@QAE@XZ 1003b184 msvcprtd:MSVCP140D.dll + 0005:00000188 \177MSVCP140D_NULL_THUNK_DATA 1003b188 msvcprtd:MSVCP140D.dll + 0005:000001b4 __imp__SetupDiEnumDeviceInterfaces@20 1003b1b4 setupapi:SETUPAPI.dll + 0005:000001b8 __imp__SetupDiGetClassDevsA@16 1003b1b8 setupapi:SETUPAPI.dll + 0005:000001bc __imp__SetupDiGetDeviceInterfaceDetailA@24 1003b1bc setupapi:SETUPAPI.dll + 0005:000001c0 __imp__SetupDiDestroyDeviceInfoList@4 1003b1c0 setupapi:SETUPAPI.dll + 0005:000001c4 \177SETUPAPI_NULL_THUNK_DATA 1003b1c4 setupapi:SETUPAPI.dll + 0005:000001f0 __imp__LoadIconA@8 1003b1f0 user32:USER32.dll + 0005:000001f4 __imp__LoadCursorA@8 1003b1f4 user32:USER32.dll + 0005:000001f8 __imp__MessageBoxA@16 1003b1f8 user32:USER32.dll + 0005:000001fc __imp__EndPaint@8 1003b1fc user32:USER32.dll + 0005:00000200 __imp__BeginPaint@8 1003b200 user32:USER32.dll + 0005:00000204 __imp__UpdateWindow@4 1003b204 user32:USER32.dll + 0005:00000208 __imp__ShowWindow@8 1003b208 user32:USER32.dll + 0005:0000020c __imp__CreateWindowExA@48 1003b20c user32:USER32.dll + 0005:00000210 __imp__RegisterClassExA@4 1003b210 user32:USER32.dll + 0005:00000214 __imp__PostQuitMessage@4 1003b214 user32:USER32.dll + 0005:00000218 __imp__DefWindowProcA@16 1003b218 user32:USER32.dll + 0005:0000021c __imp__DispatchMessageA@4 1003b21c user32:USER32.dll + 0005:00000220 __imp__GetMessageA@16 1003b220 user32:USER32.dll + 0005:00000224 __imp__TranslateMessage@4 1003b224 user32:USER32.dll + 0005:00000228 __imp__RegisterDeviceNotificationA@12 1003b228 user32:USER32.dll + 0005:0000022c __imp__SendMessageA@16 1003b22c user32:USER32.dll + 0005:00000230 __imp__UnregisterDeviceNotification@4 1003b230 user32:USER32.dll + 0005:00000234 \177USER32_NULL_THUNK_DATA 1003b234 user32:USER32.dll + 0005:0000026c __imp____vcrt_LoadLibraryExW 1003b26c vcruntimed:VCRUNTIME140D.dll + 0005:00000270 __imp____vcrt_GetModuleHandleW 1003b270 vcruntimed:VCRUNTIME140D.dll + 0005:00000274 __imp____vcrt_GetModuleFileNameW 1003b274 vcruntimed:VCRUNTIME140D.dll + 0005:00000278 __imp____std_type_info_destroy_list 1003b278 vcruntimed:VCRUNTIME140D.dll + 0005:0000027c __imp___except_handler4_common 1003b27c vcruntimed:VCRUNTIME140D.dll + 0005:00000280 __imp____current_exception_context 1003b280 vcruntimed:VCRUNTIME140D.dll + 0005:00000284 __imp__strrchr 1003b284 vcruntimed:VCRUNTIME140D.dll + 0005:00000288 __imp____CxxFrameHandler3 1003b288 vcruntimed:VCRUNTIME140D.dll + 0005:0000028c __imp___CxxThrowException@8 1003b28c vcruntimed:VCRUNTIME140D.dll + 0005:00000290 __imp____std_exception_destroy 1003b290 vcruntimed:VCRUNTIME140D.dll + 0005:00000294 __imp____std_exception_copy 1003b294 vcruntimed:VCRUNTIME140D.dll + 0005:00000298 __imp__strstr 1003b298 vcruntimed:VCRUNTIME140D.dll + 0005:0000029c __imp__memcpy 1003b29c vcruntimed:VCRUNTIME140D.dll + 0005:000002a0 __imp__memset 1003b2a0 vcruntimed:VCRUNTIME140D.dll + 0005:000002a4 __imp____current_exception 1003b2a4 vcruntimed:VCRUNTIME140D.dll + 0005:000002a8 \177VCRUNTIME140D_NULL_THUNK_DATA 1003b2a8 vcruntimed:VCRUNTIME140D.dll + 0005:000002e0 __imp___initialize_onexit_table 1003b2e0 ucrtd:ucrtbased.dll + 0005:000002e4 __imp___register_onexit_function 1003b2e4 ucrtd:ucrtbased.dll + 0005:000002e8 __imp___configure_narrow_argv 1003b2e8 ucrtd:ucrtbased.dll + 0005:000002ec __imp___crt_atexit 1003b2ec ucrtd:ucrtbased.dll + 0005:000002f0 __imp___crt_at_quick_exit 1003b2f0 ucrtd:ucrtbased.dll + 0005:000002f4 __imp___cexit 1003b2f4 ucrtd:ucrtbased.dll + 0005:000002f8 __imp___CrtDbgReportW 1003b2f8 ucrtd:ucrtbased.dll + 0005:000002fc __imp___initterm 1003b2fc ucrtd:ucrtbased.dll + 0005:00000300 __imp___initterm_e 1003b300 ucrtd:ucrtbased.dll + 0005:00000304 __imp___free_dbg 1003b304 ucrtd:ucrtbased.dll + 0005:00000308 __imp__terminate 1003b308 ucrtd:ucrtbased.dll + 0005:0000030c __imp__strcpy_s 1003b30c ucrtd:ucrtbased.dll + 0005:00000310 __imp__strcat_s 1003b310 ucrtd:ucrtbased.dll + 0005:00000314 __imp___wmakepath_s 1003b314 ucrtd:ucrtbased.dll + 0005:00000318 __imp___wsplitpath_s 1003b318 ucrtd:ucrtbased.dll + 0005:0000031c __imp__wcscpy_s 1003b31c ucrtd:ucrtbased.dll + 0005:00000320 __imp___initialize_narrow_environment 1003b320 ucrtd:ucrtbased.dll + 0005:00000324 __imp___seh_filter_dll 1003b324 ucrtd:ucrtbased.dll + 0005:00000328 __imp__malloc 1003b328 ucrtd:ucrtbased.dll + 0005:0000032c __imp___callnewh 1003b32c ucrtd:ucrtbased.dll + 0005:00000330 __imp___CrtDbgReport 1003b330 ucrtd:ucrtbased.dll + 0005:00000334 __imp____stdio_common_vsscanf 1003b334 ucrtd:ucrtbased.dll + 0005:00000338 __imp____stdio_common_vsprintf_s 1003b338 ucrtd:ucrtbased.dll + 0005:0000033c __imp____stdio_common_vfprintf_s 1003b33c ucrtd:ucrtbased.dll + 0005:00000340 __imp__fopen_s 1003b340 ucrtd:ucrtbased.dll + 0005:00000344 __imp____stdio_common_vswprintf_s 1003b344 ucrtd:ucrtbased.dll + 0005:00000348 __imp__wcstombs 1003b348 ucrtd:ucrtbased.dll + 0005:0000034c __imp__atoi 1003b34c ucrtd:ucrtbased.dll + 0005:00000350 __imp__free 1003b350 ucrtd:ucrtbased.dll + 0005:00000354 __imp__calloc 1003b354 ucrtd:ucrtbased.dll + 0005:00000358 __imp__strncpy 1003b358 ucrtd:ucrtbased.dll + 0005:0000035c __imp___strlwr_s 1003b35c ucrtd:ucrtbased.dll + 0005:00000360 __imp__strlen 1003b360 ucrtd:ucrtbased.dll + 0005:00000364 __imp___strdup 1003b364 ucrtd:ucrtbased.dll + 0005:00000368 __imp__wcslen 1003b368 ucrtd:ucrtbased.dll + 0005:0000036c __imp___wcsdup 1003b36c ucrtd:ucrtbased.dll + 0005:00000370 __imp___invalid_parameter 1003b370 ucrtd:ucrtbased.dll + 0005:00000374 __imp___execute_onexit_table 1003b374 ucrtd:ucrtbased.dll + 0005:00000378 \177ucrtbased_NULL_THUNK_DATA 1003b378 ucrtd:ucrtbased.dll + 0005:000003c0 __IMPORT_DESCRIPTOR_SETUPAPI 1003b3c0 setupapi:SETUPAPI.dll + 0005:000003d4 __IMPORT_DESCRIPTOR_HID 1003b3d4 hid:HID.DLL + 0005:000003e8 __IMPORT_DESCRIPTOR_KERNEL32 1003b3e8 kernel32:KERNEL32.dll + 0005:000003fc __IMPORT_DESCRIPTOR_USER32 1003b3fc user32:USER32.dll + 0005:00000410 __IMPORT_DESCRIPTOR_ADVAPI32 1003b410 advapi32:ADVAPI32.dll + 0005:00000424 __IMPORT_DESCRIPTOR_MSVCP140D 1003b424 msvcprtd:MSVCP140D.dll + 0005:00000438 __IMPORT_DESCRIPTOR_VCRUNTIME140D 1003b438 vcruntimed:VCRUNTIME140D.dll + 0005:0000044c __IMPORT_DESCRIPTOR_ucrtbased 1003b44c ucrtd:ucrtbased.dll + 0005:00000460 __NULL_IMPORT_DESCRIPTOR 1003b460 setupapi:SETUPAPI.dll + 0007:00000000 ___guard_check_icall_fptr 1003e000 MSVCRTD:guard_support.obj + 0007:00000004 ___guard_xfg_check_icall_fptr 1003e004 MSVCRTD:guard_support.obj + 0007:00000008 ___castguard_check_failure_os_handled_fptr 1003e008 MSVCRTD:guard_support.obj + + entry point at 0002:00000a91 + + Static symbols + + 0000:fffbe000 .debug$S 10000000 vJoyInterface.exp + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:00000000 _volmd 10000000 vJoyInterface.obj + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 ucrtd:ucrtbased.dll + 0000:fffbe000 .debug$S 10000000 advapi32:ADVAPI32.dll + 0000:fffbe000 .debug$S 10000000 advapi32:ADVAPI32.dll + 0000:fffbe000 .debug$S 10000000 advapi32:ADVAPI32.dll + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 hid:HID.DLL + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 kernel32:KERNEL32.dll + 0000:fffbe000 .debug$S 10000000 setupapi:SETUPAPI.dll + 0000:fffbe000 .debug$S 10000000 setupapi:SETUPAPI.dll + 0000:fffbe000 .debug$S 10000000 setupapi:SETUPAPI.dll + 0000:fffbe000 .debug$S 10000000 setupapi:SETUPAPI.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffbe000 .debug$S 10000000 user32:USER32.dll + 0000:fffc3000 __guard_fids___except_handler4 10000000 MSVCRTD:chandler4gs.obj + 0000:00000000 _volmd 10000000 MSVCRTD:cpu_disp.obj + 0000:fffc3000 __guard_fids_?dllmain_dispatch@@YAHQAUHINSTANCE__@@KQAX@Z 10000000 MSVCRTD:dll_dllmain.obj + 0000:00000000 _volmd 10000000 MSVCRTD:gs_report.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:guard_support.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:guard_support.obj + 0000:fffc3000 __guard_fids___guard_icall_checks_enforced 10000000 MSVCRTD:guard_support.obj + 0000:00000000 _volmd 10000000 MSVCRTD:guard_support.obj + 0000:00000000 _volmd 10000000 MSVCRTD:guard_support.obj + 0000:fffc3000 __guard_fids___CRT_RTC_INIT 10000000 MSVCRTD:init.obj + 0000:fffc3000 __guard_fids___CRT_RTC_INITW 10000000 MSVCRTD:init.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:std_type_info_static.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids__ 10000000 MSVCRTD:throw_bad_alloc.obj + 0000:fffc3000 __guard_fids____scrt_set_unhandled_exception_filter 10000000 MSVCRTD:utility_desktop.obj + 0000:fffbe000 .debug$S 10000000 msvcprtd:MSVCP140D.dll + 0000:fffbe000 .debug$S 10000000 msvcprtd:MSVCP140D.dll + 0000:fffbe000 .debug$S 10000000 msvcprtd:MSVCP140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0000:fffbe000 .debug$S 10000000 vcruntimed:VCRUNTIME140D.dll + 0002:000017e0 ??__EmFfbEffect@@YAXXZ 100127e0 f vJoyInterface.obj + 0002:00001840 ??__EvJoyDevices@@YAXXZ 10012840 f vJoyInterface.obj + 0002:000041f0 $LN5 100151f0 vJoyInterface.obj + 0002:000041f8 $LN4 100151f8 vJoyInterface.obj + 0002:00004204 $LN3 10015204 vJoyInterface.obj + 0002:000042e0 $LN5 100152e0 vJoyInterface.obj + 0002:000042e8 $LN4 100152e8 vJoyInterface.obj + 0002:000042f4 $LN3 100152f4 vJoyInterface.obj + 0002:00004a88 $LN7 10015a88 vJoyInterface.obj + 0002:00004a90 $LN6 10015a90 vJoyInterface.obj + 0002:00004a9c $LN5 10015a9c vJoyInterface.obj + 0002:00004cd4 $LN18 10015cd4 vJoyInterface.obj + 0002:00004cdc $LN17 10015cdc vJoyInterface.obj + 0002:00004cf4 $LN15 10015cf4 vJoyInterface.obj + 0002:00004cfc $LN14 10015cfc vJoyInterface.obj + 0002:00005078 $LN6 10016078 vJoyInterface.obj + 0002:00005080 $LN5 10016080 vJoyInterface.obj + 0002:0000508c $LN4 1001608c vJoyInterface.obj + 0002:000051bc $LN9 100161bc vJoyInterface.obj + 0002:000051c4 $LN8 100161c4 vJoyInterface.obj + 0002:000051d0 $LN7 100161d0 vJoyInterface.obj + 0002:00005948 $LN7 10016948 vJoyInterface.obj + 0002:00005950 $LN6 10016950 vJoyInterface.obj + 0002:0000595c $LN5 1001695c vJoyInterface.obj + 0002:00005b18 $LN7 10016b18 vJoyInterface.obj + 0002:00005b20 $LN6 10016b20 vJoyInterface.obj + 0002:00005b2c $LN5 10016b2c vJoyInterface.obj + 0002:00006420 $LN9 10017420 vJoyInterface.obj + 0002:00006428 $LN8 10017428 vJoyInterface.obj + 0002:00006440 $LN7 10017440 vJoyInterface.obj + 0002:00006447 $LN6 10017447 vJoyInterface.obj + 0002:00006560 $LN8 10017560 vJoyInterface.obj + 0002:00006568 $LN7 10017568 vJoyInterface.obj + 0002:00006574 $LN6 10017574 vJoyInterface.obj + 0002:00007084 $LN5 10018084 vJoyInterface.obj + 0002:0000708c $LN4 1001808c vJoyInterface.obj + 0002:00007098 $LN3 10018098 vJoyInterface.obj + 0002:000081a4 $LN5 100191a4 vJoyInterface.obj + 0002:000081ac $LN4 100191ac vJoyInterface.obj + 0002:000081b8 $LN3 100191b8 vJoyInterface.obj + 0002:00008284 $LN5 10019284 vJoyInterface.obj + 0002:0000828c $LN4 1001928c vJoyInterface.obj + 0002:00008298 $LN3 10019298 vJoyInterface.obj + 0002:00008c6c $LN5 10019c6c vJoyInterface.obj + 0002:00008c74 $LN4 10019c74 vJoyInterface.obj + 0002:00008c80 $LN3 10019c80 vJoyInterface.obj + 0002:00009408 $LN31 1001a408 vJoyInterface.obj + 0002:00009410 $LN30 1001a410 vJoyInterface.obj + 0002:00009440 $LN29 1001a440 vJoyInterface.obj + 0002:0000944b $LN28 1001a44b vJoyInterface.obj + 0002:00009456 $LN27 1001a456 vJoyInterface.obj + 0002:00009462 $LN26 1001a462 vJoyInterface.obj + 0002:000096c0 $LN9 1001a6c0 vJoyInterface.obj + 0002:000096c8 $LN8 1001a6c8 vJoyInterface.obj + 0002:000096d4 $LN7 1001a6d4 vJoyInterface.obj + 0002:00009960 $LN10 1001a960 vJoyInterface.obj + 0002:00009968 $LN9 1001a968 vJoyInterface.obj + 0002:00009980 $LN8 1001a980 vJoyInterface.obj + 0002:00009984 $LN7 1001a984 vJoyInterface.obj + 0002:0000a018 $LN35 1001b018 vJoyInterface.obj + 0002:0000a020 $LN34 1001b020 vJoyInterface.obj + 0002:0000a08c $LN33 1001b08c vJoyInterface.obj + 0002:0000a08f $LN32 1001b08f vJoyInterface.obj + 0002:0000a092 $LN31 1001b092 vJoyInterface.obj + 0002:0000a0a3 $LN30 1001b0a3 vJoyInterface.obj + 0002:0000a0aa $LN29 1001b0aa vJoyInterface.obj + 0002:0000a0bb $LN28 1001b0bb vJoyInterface.obj + 0002:0000a0c0 $LN27 1001b0c0 vJoyInterface.obj + 0002:0000a0c2 $LN26 1001b0c2 vJoyInterface.obj + 0002:0000a0cf $LN25 1001b0cf vJoyInterface.obj + 0002:0000a3b8 $LN11 1001b3b8 vJoyInterface.obj + 0002:0000a3c0 $LN10 1001b3c0 vJoyInterface.obj + 0002:0000a3cc $LN9 1001b3cc vJoyInterface.obj + 0002:0000a890 $LN17 1001b890 vJoyInterface.obj + 0002:0000a898 $LN16 1001b898 vJoyInterface.obj + 0002:0000a8bc $LN15 1001b8bc vJoyInterface.obj + 0002:0000a8be $LN14 1001b8be vJoyInterface.obj + 0002:0000a8cb $LN13 1001b8cb vJoyInterface.obj + 0002:0000aa20 $LN8 1001ba20 vJoyInterface.obj + 0002:0000aa28 $LN7 1001ba28 vJoyInterface.obj + 0002:0000aa34 $LN6 1001ba34 vJoyInterface.obj + 0002:0000ab90 $LN8 1001bb90 vJoyInterface.obj + 0002:0000ab98 $LN7 1001bb98 vJoyInterface.obj + 0002:0000aba4 $LN6 1001bba4 vJoyInterface.obj + 0002:0000b2a4 $LN34 1001c2a4 vJoyInterface.obj + 0002:0000b2ac $LN33 1001c2ac vJoyInterface.obj + 0002:0000b2d0 $LN32 1001c2d0 vJoyInterface.obj + 0002:0000b2d2 $LN31 1001c2d2 vJoyInterface.obj + 0002:0000b2df $LN30 1001c2df vJoyInterface.obj + 0002:0000b2f0 $LN29 1001c2f0 vJoyInterface.obj + 0002:0000b790 $LN20 1001c790 vJoyInterface.obj + 0002:0000b798 $LN19 1001c798 vJoyInterface.obj + 0002:0000b7bc $LN18 1001c7bc vJoyInterface.obj + 0002:0000b7c9 $LN17 1001c7c9 vJoyInterface.obj + 0002:0000b7d4 $LN16 1001c7d4 vJoyInterface.obj + 0002:0000bb00 $LN19 1001cb00 vJoyInterface.obj + 0002:0000bb08 $LN18 1001cb08 vJoyInterface.obj + 0002:0000bb2c $LN17 1001cb2c vJoyInterface.obj + 0002:0000bb39 $LN16 1001cb39 vJoyInterface.obj + 0002:0000bb44 $LN15 1001cb44 vJoyInterface.obj + 0002:0000bec4 $LN21 1001cec4 vJoyInterface.obj + 0002:0000becc $LN20 1001cecc vJoyInterface.obj + 0002:0000bef0 $LN19 1001cef0 vJoyInterface.obj + 0002:0000befd $LN18 1001cefd vJoyInterface.obj + 0002:0000bf08 $LN17 1001cf08 vJoyInterface.obj + 0002:0000c0d0 $LN8 1001d0d0 vJoyInterface.obj + 0002:0000c0d8 $LN7 1001d0d8 vJoyInterface.obj + 0002:0000c0e4 $LN6 1001d0e4 vJoyInterface.obj + 0002:0000c2e8 $LN14 1001d2e8 vJoyInterface.obj + 0002:0000c2f0 $LN13 1001d2f0 vJoyInterface.obj + 0002:0000c2fc $LN12 1001d2fc vJoyInterface.obj + 0002:0000c654 $LN9 1001d654 vJoyInterface.obj + 0002:0000c65c $LN8 1001d65c vJoyInterface.obj + 0002:0000c668 $LN7 1001d668 vJoyInterface.obj + 0002:0000cb24 $LN31 1001db24 vJoyInterface.obj + 0002:0000cb2c $LN30 1001db2c vJoyInterface.obj + 0002:0000cb50 $LN29 1001db50 vJoyInterface.obj + 0002:0000cb59 $LN28 1001db59 vJoyInterface.obj + 0002:0000cb68 $LN27 1001db68 vJoyInterface.obj + 0002:0000d02c $LN8 1001e02c vJoyInterface.obj + 0002:0000d034 $LN7 1001e034 vJoyInterface.obj + 0002:0000d040 $LN6 1001e040 vJoyInterface.obj + 0002:0000d320 $LN19 1001e320 vJoyInterface.obj + 0002:0000d328 $LN18 1001e328 vJoyInterface.obj + 0002:0000d34c $LN17 1001e34c vJoyInterface.obj + 0002:0000d359 $LN16 1001e359 vJoyInterface.obj + 0002:0000d364 $LN15 1001e364 vJoyInterface.obj + 0002:0000d898 $LN22 1001e898 vJoyInterface.obj + 0002:0000d8a0 $LN21 1001e8a0 vJoyInterface.obj + 0002:0000d8c4 $LN20 1001e8c4 vJoyInterface.obj + 0002:0000d8d3 $LN19 1001e8d3 vJoyInterface.obj + 0002:0000d8e2 $LN18 1001e8e2 vJoyInterface.obj + 0002:0000dd68 $LN21 1001ed68 vJoyInterface.obj + 0002:0000dd70 $LN20 1001ed70 vJoyInterface.obj + 0002:0000dda0 $LN19 1001eda0 vJoyInterface.obj + 0002:0000dda8 $LN18 1001eda8 vJoyInterface.obj + 0002:0000ddb0 $LN17 1001edb0 vJoyInterface.obj + 0002:0000ddb5 $LN16 1001edb5 vJoyInterface.obj + 0002:0000e04c $LN13 1001f04c vJoyInterface.obj + 0002:0000e054 $LN12 1001f054 vJoyInterface.obj + 0002:0000e060 $LN10 1001f060 vJoyInterface.obj + 0002:0000e7d4 $LN15 1001f7d4 vJoyInterface.obj + 0002:0000e7dc $LN14 1001f7dc vJoyInterface.obj + 0002:0000e80c $LN13 1001f80c vJoyInterface.obj + 0002:0000e80e $LN12 1001f80e vJoyInterface.obj + 0002:0000e813 $LN11 1001f813 vJoyInterface.obj + 0002:0000e820 $LN10 1001f820 vJoyInterface.obj + 0002:0000ea50 $LN9 1001fa50 vJoyInterface.obj + 0002:0000ea58 $LN8 1001fa58 vJoyInterface.obj + 0002:0000ea64 $LN7 1001fa64 vJoyInterface.obj + 0002:0000efc4 $LN15 1001ffc4 vJoyInterface.obj + 0002:0000efcc $LN14 1001ffcc vJoyInterface.obj + 0002:0000efd8 $LN13 1001ffd8 vJoyInterface.obj + 0002:0000f380 $LN18 10020380 vJoyInterface.obj + 0002:0000f388 $LN17 10020388 vJoyInterface.obj + 0002:0000f3ac $LN16 100203ac vJoyInterface.obj + 0002:0000f3b1 $LN15 100203b1 vJoyInterface.obj + 0002:0000f3bb $LN14 100203bb vJoyInterface.obj + 0002:0000f528 $LN7 10020528 vJoyInterface.obj + 0002:0000f530 $LN6 10020530 vJoyInterface.obj + 0002:0000f53c $LN5 1002053c vJoyInterface.obj + 0002:0000f678 $LN7 10020678 vJoyInterface.obj + 0002:0000f680 $LN6 10020680 vJoyInterface.obj + 0002:0000f698 $LN5 10020698 vJoyInterface.obj + 0002:0000f6ab $LN4 100206ab vJoyInterface.obj + 0002:0000fb10 $LN14 10020b10 vJoyInterface.obj + 0002:0000fb18 $LN13 10020b18 vJoyInterface.obj + 0002:0000fb24 $LN11 10020b24 vJoyInterface.obj + 0002:00010234 $LN15 10021234 vJoyInterface.obj + 0002:0001023c $LN14 1002123c vJoyInterface.obj + 0002:00010260 $LN13 10021260 vJoyInterface.obj + 0002:00010269 $LN12 10021269 vJoyInterface.obj + 0002:00010272 $LN11 10021272 vJoyInterface.obj + 0002:00010474 $LN11 10021474 vJoyInterface.obj + 0002:0001047c $LN10 1002147c vJoyInterface.obj + 0002:00010488 $LN8 10021488 vJoyInterface.obj + 0002:000107cc $LN21 100217cc vJoyInterface.obj + 0002:000107d4 $LN20 100217d4 vJoyInterface.obj + 0002:000107ec $LN18 100217ec vJoyInterface.obj + 0002:000107f7 $LN17 100217f7 vJoyInterface.obj + 0002:000109f8 $LN13 100219f8 vJoyInterface.obj + 0002:00010a00 $LN12 10021a00 vJoyInterface.obj + 0002:00010a0c $LN11 10021a0c vJoyInterface.obj + 0002:00010d74 $LN5 10021d74 vJoyInterface.obj + 0002:00010d7c $LN4 10021d7c vJoyInterface.obj + 0002:00010d88 $LN3 10021d88 vJoyInterface.obj + 0002:00010f60 $LN8 10021f60 vJoyInterface.obj + 0002:00010f68 $LN7 10021f68 vJoyInterface.obj + 0002:00010f80 $LN5 10021f80 vJoyInterface.obj + 0002:00010f87 $LN4 10021f87 vJoyInterface.obj + 0002:000110b0 $LN8 100220b0 vJoyInterface.obj + 0002:000110b8 $LN7 100220b8 vJoyInterface.obj + 0002:000110d0 $LN5 100220d0 vJoyInterface.obj + 0002:000110d7 $LN4 100220d7 vJoyInterface.obj + 0002:00011274 $LN5 10022274 vJoyInterface.obj + 0002:0001127c $LN4 1002227c vJoyInterface.obj + 0002:00011288 $LN3 10022288 vJoyInterface.obj + 0002:00011480 $LN7 10022480 vJoyInterface.obj + 0002:00011488 $LN6 10022488 vJoyInterface.obj + 0002:000114a0 $LN4 100224a0 vJoyInterface.obj + 0002:000114a6 $LN3 100224a6 vJoyInterface.obj + 0002:000115ac $LN8 100225ac vJoyInterface.obj + 0002:000115b4 $LN7 100225b4 vJoyInterface.obj + 0002:000115c0 $LN6 100225c0 vJoyInterface.obj + 0002:000116a0 $LN5 100226a0 vJoyInterface.obj + 0002:000116a8 $LN4 100226a8 vJoyInterface.obj + 0002:000116b4 $LN3 100226b4 vJoyInterface.obj + 0002:00012700 $LN5 10023700 vJoyInterface.obj + 0002:00012708 $LN4 10023708 vJoyInterface.obj + 0002:00012714 $LN3 10023714 vJoyInterface.obj + 0002:00012870 $LN5 10023870 vJoyInterface.obj + 0002:00012878 $LN4 10023878 vJoyInterface.obj + 0002:00012884 $LN3 10023884 vJoyInterface.obj + 0002:00012ab8 $LN10 10023ab8 vJoyInterface.obj + 0002:00012ac0 $LN9 10023ac0 vJoyInterface.obj + 0002:00012acc $LN8 10023acc vJoyInterface.obj + 0002:00012be8 $LN10 10023be8 vJoyInterface.obj + 0002:00012bf0 $LN9 10023bf0 vJoyInterface.obj + 0002:00012bfc $LN8 10023bfc vJoyInterface.obj + 0002:00013864 $LN11 10024864 vJoyInterface.obj + 0002:0001386c $LN10 1002486c vJoyInterface.obj + 0002:00013884 $LN9 10024884 vJoyInterface.obj + 0002:00013886 $LN8 10024886 vJoyInterface.obj + 0002:00013d24 $LN11 10024d24 vJoyInterface.obj + 0002:00013d2c $LN10 10024d2c vJoyInterface.obj + 0002:00013d38 $LN8 10024d38 vJoyInterface.obj + 0002:00014164 $LN11 10025164 vJoyInterface.obj + 0002:0001416c $LN10 1002516c vJoyInterface.obj + 0002:00014178 $LN9 10025178 vJoyInterface.obj + 0002:000147bc $LN20 100257bc vJoyInterface.obj + 0002:000147c4 $LN19 100257c4 vJoyInterface.obj + 0002:000147f4 $LN18 100257f4 vJoyInterface.obj + 0002:00014801 $LN17 10025801 vJoyInterface.obj + 0002:0001480c $LN16 1002580c vJoyInterface.obj + 0002:00014811 $LN15 10025811 vJoyInterface.obj + 0002:00014c1c $LN9 10025c1c vJoyInterface.obj + 0002:00014c24 $LN8 10025c24 vJoyInterface.obj + 0002:00014c30 $LN7 10025c30 vJoyInterface.obj + 0002:00014fd8 $LN23 10025fd8 vJoyInterface.obj + 0002:00014fe0 $LN22 10025fe0 vJoyInterface.obj + 0002:00015010 $LN21 10026010 vJoyInterface.obj + 0002:0001501e $LN20 1002601e vJoyInterface.obj + 0002:0001502b $LN19 1002602b vJoyInterface.obj + 0002:00015033 $LN18 10026033 vJoyInterface.obj + 0002:000151b8 $LN9 100261b8 vJoyInterface.obj + 0002:000151c0 $LN8 100261c0 vJoyInterface.obj + 0002:000151cc $LN7 100261cc vJoyInterface.obj + 0002:000152b8 $LN9 100262b8 vJoyInterface.obj + 0002:000152c0 $LN8 100262c0 vJoyInterface.obj + 0002:000152cc $LN7 100262cc vJoyInterface.obj + 0002:00015480 $LN10 10026480 vJoyInterface.obj + 0002:00015488 $LN9 10026488 vJoyInterface.obj + 0002:00015494 $LN8 10026494 vJoyInterface.obj + 0002:00015578 $LN9 10026578 vJoyInterface.obj + 0002:00015580 $LN8 10026580 vJoyInterface.obj + 0002:0001558c $LN7 1002658c vJoyInterface.obj + 0002:000156a4 $LN9 100266a4 vJoyInterface.obj + 0002:000156ac $LN8 100266ac vJoyInterface.obj + 0002:000156b8 $LN7 100266b8 vJoyInterface.obj + 0002:000158e4 $LN9 100268e4 vJoyInterface.obj + 0002:000158ec $LN8 100268ec vJoyInterface.obj + 0002:000158f8 $LN7 100268f8 vJoyInterface.obj + 0002:00015a54 $LN9 10026a54 vJoyInterface.obj + 0002:00015a5c $LN8 10026a5c vJoyInterface.obj + 0002:00015a68 $LN7 10026a68 vJoyInterface.obj + 0002:00015c7c $LN9 10026c7c vJoyInterface.obj + 0002:00015c84 $LN8 10026c84 vJoyInterface.obj + 0002:00015c90 $LN7 10026c90 vJoyInterface.obj + 0002:00015eac $LN9 10026eac vJoyInterface.obj + 0002:00015eb4 $LN8 10026eb4 vJoyInterface.obj + 0002:00015ec0 $LN7 10026ec0 vJoyInterface.obj + 0002:0001604c $LN9 1002704c vJoyInterface.obj + 0002:00016054 $LN8 10027054 vJoyInterface.obj + 0002:00016060 $LN7 10027060 vJoyInterface.obj + 0002:000162c0 $LN13 100272c0 vJoyInterface.obj + 0002:000162c8 $LN12 100272c8 vJoyInterface.obj + 0002:000162d4 $LN11 100272d4 vJoyInterface.obj + 0002:0001657c $LN9 1002757c vJoyInterface.obj + 0002:00016584 $LN8 10027584 vJoyInterface.obj + 0002:0001659c $LN7 1002759c vJoyInterface.obj + 0002:000165a3 $LN6 100275a3 vJoyInterface.obj + 0002:00016750 $LN12 10027750 vJoyInterface.obj + 0002:00016758 $LN11 10027758 vJoyInterface.obj + 0002:00016770 $LN10 10027770 vJoyInterface.obj + 0002:00016777 $LN9 10027777 vJoyInterface.obj + 0002:00016a10 $LN18 10027a10 vJoyInterface.obj + 0002:00016a18 $LN17 10027a18 vJoyInterface.obj + 0002:00016a24 $LN16 10027a24 vJoyInterface.obj + 0002:00016a30 $LN15 10027a30 vJoyInterface.obj + 0002:00016b78 $LN6 10027b78 vJoyInterface.obj + 0002:00016b80 $LN5 10027b80 vJoyInterface.obj + 0002:00016b8c $LN4 10027b8c vJoyInterface.obj + 0002:00016c48 $LN6 10027c48 vJoyInterface.obj + 0002:00016c50 $LN5 10027c50 vJoyInterface.obj + 0002:00016c5c $LN4 10027c5c vJoyInterface.obj + 0002:00017264 $LN24 10028264 vJoyInterface.obj + 0002:0001726c $LN23 1002826c vJoyInterface.obj + 0002:00017290 $LN22 10028290 vJoyInterface.obj + 0002:00017292 $LN21 10028292 vJoyInterface.obj + 0002:0001729f $LN20 1002829f vJoyInterface.obj + 0002:000176ac $LN16 100286ac vJoyInterface.obj + 0002:000176b4 $LN15 100286b4 vJoyInterface.obj + 0002:000176d8 $LN14 100286d8 vJoyInterface.obj + 0002:000176da $LN13 100286da vJoyInterface.obj + 0002:000176e7 $LN12 100286e7 vJoyInterface.obj + 0002:00017a2c $LN16 10028a2c vJoyInterface.obj + 0002:00017a34 $LN15 10028a34 vJoyInterface.obj + 0002:00017a58 $LN14 10028a58 vJoyInterface.obj + 0002:00017a5a $LN13 10028a5a vJoyInterface.obj + 0002:00017a67 $LN12 10028a67 vJoyInterface.obj + 0002:00017d3c $LN15 10028d3c vJoyInterface.obj + 0002:00017d44 $LN14 10028d44 vJoyInterface.obj + 0002:00017d5c $LN13 10028d5c vJoyInterface.obj + 0002:00017d63 $LN12 10028d63 vJoyInterface.obj + 0002:00017e94 $LN7 10028e94 vJoyInterface.obj + 0002:00017e9c $LN6 10028e9c vJoyInterface.obj + 0002:00017ea8 $LN5 10028ea8 vJoyInterface.obj + 0002:00017fb0 $LN9 10028fb0 vJoyInterface.obj + 0002:00017fb8 $LN8 10028fb8 vJoyInterface.obj + 0002:00017fd0 $LN7 10028fd0 vJoyInterface.obj + 0002:00017fd7 $LN6 10028fd7 vJoyInterface.obj + 0002:000180b4 $LN7 100290b4 vJoyInterface.obj + 0002:000180bc $LN6 100290bc vJoyInterface.obj + 0002:000180c8 $LN5 100290c8 vJoyInterface.obj + 0002:000181a4 $LN7 100291a4 vJoyInterface.obj + 0002:000181ac $LN6 100291ac vJoyInterface.obj + 0002:000181b8 $LN5 100291b8 vJoyInterface.obj + 0002:0001829c $LN7 1002929c vJoyInterface.obj + 0002:000182a4 $LN6 100292a4 vJoyInterface.obj + 0002:000182b0 $LN5 100292b0 vJoyInterface.obj + 0002:00018530 $LN16 10029530 vJoyInterface.obj + 0002:00018538 $LN15 10029538 vJoyInterface.obj + 0002:00018568 $LN14 10029568 vJoyInterface.obj + 0002:0001856d $LN13 1002956d vJoyInterface.obj + 0002:0001856f $LN12 1002956f vJoyInterface.obj + 0002:0001857c $LN11 1002957c vJoyInterface.obj + 0002:000188d4 $LN19 100298d4 vJoyInterface.obj + 0002:000188dc $LN18 100298dc vJoyInterface.obj + 0002:00018900 $LN17 10029900 vJoyInterface.obj + 0002:00018903 $LN16 10029903 vJoyInterface.obj + 0002:00018910 $LN15 10029910 vJoyInterface.obj + 0002:00018cac $LN7 10029cac vJoyInterface.obj + 0002:00018cb4 $LN6 10029cb4 vJoyInterface.obj + 0002:00018cc0 $LN5 10029cc0 vJoyInterface.obj + 0002:00018fcc $LN15 10029fcc vJoyInterface.obj + 0002:00018fd4 $LN14 10029fd4 vJoyInterface.obj + 0002:00018fe0 $LN13 10029fe0 vJoyInterface.obj + 0002:000192b0 $LN16 1002a2b0 vJoyInterface.obj + 0002:000192b8 $LN15 1002a2b8 vJoyInterface.obj + 0002:000192d0 $LN14 1002a2d0 vJoyInterface.obj + 0002:000192d6 $LN13 1002a2d6 vJoyInterface.obj + 0002:000195fc $LN17 1002a5fc vJoyInterface.obj + 0002:00019874 $LN14 1002a874 vJoyInterface.obj + 0002:00019ab8 $LN12 1002aab8 vJoyInterface.obj + 0002:0001a1c4 $LN10 1002b1c4 vJoyInterface.obj + 0002:0001a1cc $LN9 1002b1cc vJoyInterface.obj + 0002:0001a1e4 $LN8 1002b1e4 vJoyInterface.obj + 0002:0001a1eb $LN7 1002b1eb vJoyInterface.obj + 0002:0001a2c8 $LN7 1002b2c8 vJoyInterface.obj + 0002:0001a2d0 $LN6 1002b2d0 vJoyInterface.obj + 0002:0001a2dc $LN5 1002b2dc vJoyInterface.obj + 0002:0001a504 $LN7 1002b504 vJoyInterface.obj + 0002:0001a50c $LN6 1002b50c vJoyInterface.obj + 0002:0001a524 $LN5 1002b524 vJoyInterface.obj + 0002:0001a529 $LN4 1002b529 vJoyInterface.obj + 0002:0001a61c $LN8 1002b61c vJoyInterface.obj + 0002:0001a624 $LN7 1002b624 vJoyInterface.obj + 0002:0001a63c $LN6 1002b63c vJoyInterface.obj + 0002:0001a643 $LN5 1002b643 vJoyInterface.obj + 0002:0001a920 ?find_pe_section@@YAPAU_IMAGE_SECTION_HEADER@@QAEI@Z 1002b920 f MSVCRTD:utility.obj + 0002:0001a9e0 ?is_potentially_valid_image_base@@YA_NQAX@Z 1002b9e0 f MSVCRTD:utility.obj + 0002:0001b3d0 $$000000 1002c3d0 MSVCRTD:chkstk.obj + 0002:0001b3e4 cs10 1002c3e4 MSVCRTD:chkstk.obj + 0002:0001b3f2 cs20 1002c3f2 MSVCRTD:chkstk.obj + 0002:0001b470 ?dllmain_crt_dispatch@@YGHQAUHINSTANCE__@@KQAX@Z 1002c470 f MSVCRTD:dll_dllmain.obj + 0002:0001b4dc $LN11 1002c4dc MSVCRTD:dll_dllmain.obj + 0002:0001b510 ?dllmain_crt_process_attach@@YAHQAUHINSTANCE__@@QAX@Z 1002c510 f MSVCRTD:dll_dllmain.obj + 0002:0001b6e0 ?dllmain_crt_process_detach@@YAH_N@Z 1002c6e0 f MSVCRTD:dll_dllmain.obj + 0002:0001b820 ?dllmain_dispatch@@YAHQAUHINSTANCE__@@KQAX@Z 1002c820 f MSVCRTD:dll_dllmain.obj + 0002:0001ba10 ?dllmain_raw@@YGHQAUHINSTANCE__@@KQAX@Z 1002ca10 f MSVCRTD:dll_dllmain.obj + 0002:0001c480 ___castguard_check_failure_os_handled_wrapper 1002d480 f MSVCRTD:guard_support.obj + 0002:0001c4b0 ___castguard_compat_check 1002d4b0 f MSVCRTD:guard_support.obj + 0002:0001c5f0 ___castguard_slow_path_compat_check 1002d5f0 f MSVCRTD:guard_support.obj + 0002:0001c680 ?DebuggerProbe@@YA_NK@Z 1002d680 f MSVCRTD:error.obj + 0002:0001c6d0 ?DebuggerRuntime@@YA_NKHPAXPB_W@Z 1002d6d0 f MSVCRTD:error.obj + 0002:0001c9a0 ?_getMemBlockDataString@@YAXPAD0PBDI@Z 1002d9a0 f MSVCRTD:error.obj + 0002:0001ca30 ?_strlen_priv@@YAIPBD@Z 1002da30 f MSVCRTD:error.obj + 0002:0001ca50 ?failwithmessage@@YAXPAXHHPBD@Z 1002da50 f MSVCRTD:error.obj + 0002:0001ccd0 ?notify_debugger@@YAXABUtagEXCEPTION_VISUALCPP_DEBUG_INFO@@@Z 1002dcd0 f MSVCRTD:error.obj + 0002:0001d350 ___get_entropy 1002e350 f MSVCRTD:gs_support.obj + 0002:0001d5d0 ?GetPdbDll@@YAPAUHINSTANCE__@@XZ 1002e5d0 f MSVCRTD:pdblkup.obj + 0002:0001d770 ?GetPdbDllFromInstallPath@@YAPAUHINSTANCE__@@XZ 1002e770 f MSVCRTD:pdblkup.obj + 0002:0001da60 ?GetPdbDllPathFromFilePath@@YAHPB_WPA_WI@Z 1002ea60 f MSVCRTD:pdblkup.obj + 0002:0001f950 __unwindfunclet$??$?0AAHUDeviceStat@@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@AAH$$QAUDeviceStat@@@Z$0 10030950 f vJoyInterface.obj + 0002:0001f95d __ehhandler$??$?0AAHUDeviceStat@@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@AAH$$QAUDeviceStat@@@Z 1003095d f vJoyInterface.obj + 0002:0001f990 __ehhandler$??$?0ABH$0A@@?$tuple@ABH@std@@QAE@ABH@Z 10030990 f vJoyInterface.obj + 0002:0001f9c0 __unwindfunclet$??$?0ABUpiecewise_construct_t@std@@V?$tuple@$$QAH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@$$QAH@1@$$QAV?$tuple@$$V@1@@Z$0 100309c0 f vJoyInterface.obj + 0002:0001f9cd __ehhandler$??$?0ABUpiecewise_construct_t@std@@V?$tuple@$$QAH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@$$QAH@1@$$QAV?$tuple@$$V@1@@Z 100309cd f vJoyInterface.obj + 0002:0001fa00 __unwindfunclet$??$?0ABUpiecewise_construct_t@std@@V?$tuple@ABH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@ABH@1@$$QAV?$tuple@$$V@1@@Z$0 10030a00 f vJoyInterface.obj + 0002:0001fa0d __ehhandler$??$?0ABUpiecewise_construct_t@std@@V?$tuple@ABH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@ABH@1@$$QAV?$tuple@$$V@1@@Z 10030a0d f vJoyInterface.obj + 0002:0001fa40 __ehhandler$??$?0H$$V$0A@@?$tuple@$$QAH@std@@QAE@$$QAH@Z 10030a40 f vJoyInterface.obj + 0002:0001fa70 __ehhandler$??$_Deallocate@$07$0A@@std@@YAXPAXI@Z 10030a70 f vJoyInterface.obj + 0002:0001faa0 __ehhandler$??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAAV?$allocator@U_Container_proxy@std@@@0@QAU_Container_proxy@0@@Z 10030aa0 f vJoyInterface.obj + 0002:0001fad0 __ehhandler$??$_Eqrange@H@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBE?AU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@1@ABH@Z 10030ad0 f vJoyInterface.obj + 0002:0001fb00 __ehhandler$??$_Freenode0@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU01@@Z 10030b00 f vJoyInterface.obj + 0002:0001fb30 __ehhandler$??$_Freenode0@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU01@@Z 10030b30 f vJoyInterface.obj + 0002:0001fb60 __ehhandler$??$_Freenode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU01@@Z 10030b60 f vJoyInterface.obj + 0002:0001fb90 __ehhandler$??$_Freenode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU01@@Z 10030b90 f vJoyInterface.obj + 0002:0001fbc0 __unwindfunclet$??0?$_Tree_temp_node_alloc@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z$0 10030bc0 f vJoyInterface.obj + 0002:0001fbcd __ehhandler$??0?$_Tree_temp_node_alloc@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 10030bcd f vJoyInterface.obj + 0002:0001fc00 __ehhandler$??1?$_Alloc_construct_ptr@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 10030c00 f vJoyInterface.obj + 0002:0001fc30 __ehhandler$??1?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 10030c30 f vJoyInterface.obj + 0002:0001fc60 __unwindfunclet$?AreControlsInit@@YAHI@Z$0 10030c60 f vJoyInterface.obj + 0002:0001fc87 __ehhandler$?AreControlsInit@@YAHI@Z 10030c87 f vJoyInterface.obj + 0002:0001fcc0 __unwindfunclet$?Get_PreparsedData@@YAHHPAPAU_HIDP_PREPARSED_DATA@@@Z$0 10030cc0 f vJoyInterface.obj + 0002:0001fcd0 __ehhandler$?Get_PreparsedData@@YAHHPAPAU_HIDP_PREPARSED_DATA@@@Z 10030cd0 f vJoyInterface.obj + 0002:0001fd10 __unwindfunclet$?Get_h@@YAPAXH@Z$0 10030d10 f vJoyInterface.obj + 0002:0001fd20 __ehhandler$?Get_h@@YAPAXH@Z 10030d20 f vJoyInterface.obj + 0002:0001fd50 __unwindfunclet$?Get_hNotify@@YAPAXH@Z$0 10030d50 f vJoyInterface.obj + 0002:0001fd60 __ehhandler$?Get_hNotify@@YAPAXH@Z 10030d60 f vJoyInterface.obj + 0002:0001fd90 __unwindfunclet$?Get_stat@@YA?AW4VjdStat@@H@Z$0 10030d90 f vJoyInterface.obj + 0002:0001fda0 __ehhandler$?Get_stat@@YA?AW4VjdStat@@H@Z 10030da0 f vJoyInterface.obj + 0002:0001fdd0 __unwindfunclet$?SavePosition@@YAXIPAX@Z$0 10030dd0 f vJoyInterface.obj + 0002:0001fdf7 __ehhandler$?SavePosition@@YAXIPAX@Z 10030df7 f vJoyInterface.obj + 0002:0001fe30 __unwindfunclet$?Set_PreparsedData@@YAHH@Z$0 10030e30 f vJoyInterface.obj + 0002:0001fe40 __ehhandler$?Set_PreparsedData@@YAHH@Z 10030e40 f vJoyInterface.obj + 0002:0001fe70 __unwindfunclet$?Set_h@@YAXHPAX@Z$0 10030e70 f vJoyInterface.obj + 0002:0001fe80 __ehhandler$?Set_h@@YAXHPAX@Z 10030e80 f vJoyInterface.obj + 0002:0001feb0 __unwindfunclet$?Set_hNotify@@YAXHPAX@Z$0 10030eb0 f vJoyInterface.obj + 0002:0001fec0 __ehhandler$?Set_hNotify@@YAXHPAX@Z 10030ec0 f vJoyInterface.obj + 0002:0001fef0 __unwindfunclet$?Set_stat@@YAXHW4VjdStat@@@Z$0 10030ef0 f vJoyInterface.obj + 0002:0001ff00 __ehhandler$?Set_stat@@YAXHW4VjdStat@@@Z 10030f00 f vJoyInterface.obj + 0002:0001ff30 __unwindfunclet$?Sync_Position@@YAXH@Z$0 10030f30 f vJoyInterface.obj + 0002:0001ff40 __ehhandler$?Sync_Position@@YAXH@Z 10030f40 f vJoyInterface.obj + 0002:0001ff80 __unwindfunclet$?Update@@YAHI@Z$0 10030f80 f vJoyInterface.obj + 0002:0001ffa2 __unwindfunclet$?Update@@YAHI@Z$1 10030fa2 f vJoyInterface.obj + 0002:0001ffc9 __ehhandler$?Update@@YAHI@Z 10030fc9 f vJoyInterface.obj + 0002:00020010 __unwindfunclet$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEXXZ$0 10031010 f vJoyInterface.obj + 0002:0002001d __ehhandler$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEXXZ 1003101d f vJoyInterface.obj + 0002:00020050 __unwindfunclet$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEXXZ$0 10031050 f vJoyInterface.obj + 0002:0002005d __ehhandler$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEXXZ 1003105d f vJoyInterface.obj + 0002:00020090 __ehhandler$?_Erase@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@AAEIU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@2@@Z 10031090 f vJoyInterface.obj + 0002:000200c0 __unwindfunclet$?vJoyDeviceEntry@@YAHH@Z$0 100310c0 f vJoyInterface.obj + 0002:000200d0 __ehhandler$?vJoyDeviceEntry@@YAHH@Z 100310d0 f vJoyInterface.obj + 0002:00020110 __unwindfunclet$?vJoyDeviceRemove@@YAHH@Z$0 10031110 f vJoyInterface.obj + 0002:00020120 __ehhandler$?vJoyDeviceRemove@@YAHH@Z 10031120 f vJoyInterface.obj + 0002:00021190 ??__FmFfbEffect@@YAXXZ 10032190 f vJoyInterface.obj + 0002:000211e0 ??__FvJoyDevices@@YAXXZ 100321e0 f vJoyInterface.obj + 0003:00000104 ?vJoyDevices$initializer$@@3P6AXXZA 10034104 vJoyInterface.obj + 0003:00000108 ?mFfbEffect$initializer$@@3P6AXXZA 10034108 vJoyInterface.obj + 0003:00000943 ?piecewise_construct@std@@3Upiecewise_construct_t@1@B 10034943 vJoyInterface.obj + 0003:00002c28 ?_RTC_ErrorMessages@@3QBQBDB 10036c28 MSVCRTD:error.obj + 0003:00002c40 ?_RTC_NoFalsePositives@@3QBHB 10036c40 MSVCRTD:error.obj + 0003:00002c58 ?stack_premsg@@3QBDB 10036c58 MSVCRTD:error.obj + 0003:00002c74 ?stack_postmsg@@3QBDB 10036c74 MSVCRTD:error.obj + 0003:00002c88 ?uninit_premsg@@3QBDB 10036c88 MSVCRTD:error.obj + 0003:00002c98 ?uninit_postmsg@@3QBDB 10036c98 MSVCRTD:error.obj + 0003:000032e8 _GS_ExceptionPointers 100372e8 MSVCRTD:gs_report.obj + 0003:000032f4 ?_RTC_errlist@@3QBQBDB 100372f4 MSVCRTD:userapi.obj + 0003:000033d8 ?mspdbName@@3QB_WB 100373d8 MSVCRTD:pdblkup.obj + 0003:000033fc ?debugCrtFileName@@3QB_WB 100373fc MSVCRTD:pdblkup.obj + 0003:00003588 ?dllExt@?1??GetPdbDllPathFromFilePath@@YAHPB_WPA_WI@Z@4QB_WB 10037588 MSVCRTD:pdblkup.obj + 0003:00003594 ?mspdbFilename@?1??GetPdbDllPathFromFilePath@@YAHPB_WPA_WI@Z@4QB_WB 10037594 MSVCRTD:pdblkup.obj + 0003:00004088 __RTC_InitBase.rtc$IMZ 10038088 vJoyInterface.obj + 0003:00004394 __RTC_Shutdown.rtc$TMZ 10038394 vJoyInterface.obj + 0003:000045a0 __unwindtable$?SavePosition@@YAXIPAX@Z 100385a0 vJoyInterface.obj + 0003:000045a8 __ehfuncinfo$?SavePosition@@YAXIPAX@Z 100385a8 vJoyInterface.obj + 0003:000045d0 __unwindtable$?Update@@YAHI@Z 100385d0 vJoyInterface.obj + 0003:000045e0 __ehfuncinfo$?Update@@YAHI@Z 100385e0 vJoyInterface.obj + 0003:0000460c __unwindtable$?AreControlsInit@@YAHI@Z 1003860c vJoyInterface.obj + 0003:00004614 __ehfuncinfo$?AreControlsInit@@YAHI@Z 10038614 vJoyInterface.obj + 0003:0000463c __unwindtable$?vJoyDeviceEntry@@YAHH@Z 1003863c vJoyInterface.obj + 0003:00004644 __ehfuncinfo$?vJoyDeviceEntry@@YAHH@Z 10038644 vJoyInterface.obj + 0003:0000466c __unwindtable$?vJoyDeviceRemove@@YAHH@Z 1003866c vJoyInterface.obj + 0003:00004674 __ehfuncinfo$?vJoyDeviceRemove@@YAHH@Z 10038674 vJoyInterface.obj + 0003:0000469c __unwindtable$?Set_PreparsedData@@YAHH@Z 1003869c vJoyInterface.obj + 0003:000046a4 __ehfuncinfo$?Set_PreparsedData@@YAHH@Z 100386a4 vJoyInterface.obj + 0003:000046cc __unwindtable$?Get_PreparsedData@@YAHHPAPAU_HIDP_PREPARSED_DATA@@@Z 100386cc vJoyInterface.obj + 0003:000046d4 __ehfuncinfo$?Get_PreparsedData@@YAHHPAPAU_HIDP_PREPARSED_DATA@@@Z 100386d4 vJoyInterface.obj + 0003:000046fc __unwindtable$?Set_h@@YAXHPAX@Z 100386fc vJoyInterface.obj + 0003:00004704 __ehfuncinfo$?Set_h@@YAXHPAX@Z 10038704 vJoyInterface.obj + 0003:0000472c __unwindtable$?Sync_Position@@YAXH@Z 1003872c vJoyInterface.obj + 0003:00004734 __ehfuncinfo$?Sync_Position@@YAXH@Z 10038734 vJoyInterface.obj + 0003:0000475c __unwindtable$?Get_h@@YAPAXH@Z 1003875c vJoyInterface.obj + 0003:00004764 __ehfuncinfo$?Get_h@@YAPAXH@Z 10038764 vJoyInterface.obj + 0003:0000478c __unwindtable$?Set_stat@@YAXHW4VjdStat@@@Z 1003878c vJoyInterface.obj + 0003:00004794 __ehfuncinfo$?Set_stat@@YAXHW4VjdStat@@@Z 10038794 vJoyInterface.obj + 0003:000047bc __unwindtable$?Get_stat@@YA?AW4VjdStat@@H@Z 100387bc vJoyInterface.obj + 0003:000047c4 __ehfuncinfo$?Get_stat@@YA?AW4VjdStat@@H@Z 100387c4 vJoyInterface.obj + 0003:000047ec __unwindtable$?Set_hNotify@@YAXHPAX@Z 100387ec vJoyInterface.obj + 0003:000047f4 __ehfuncinfo$?Set_hNotify@@YAXHPAX@Z 100387f4 vJoyInterface.obj + 0003:0000481c __unwindtable$?Get_hNotify@@YAPAXH@Z 1003881c vJoyInterface.obj + 0003:00004824 __ehfuncinfo$?Get_hNotify@@YAPAXH@Z 10038824 vJoyInterface.obj + 0003:0000484c __ehfuncinfo$?_Erase@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@AAEIU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@2@@Z 1003884c vJoyInterface.obj + 0003:00004874 __unwindtable$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEXXZ 10038874 vJoyInterface.obj + 0003:0000487c __ehfuncinfo$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IAEXXZ 1003887c vJoyInterface.obj + 0003:000048a4 __unwindtable$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEXXZ 100388a4 vJoyInterface.obj + 0003:000048ac __ehfuncinfo$?_Alloc_sentinel_and_proxy@?$_Tree@V?$_Tmap_traits@HW4FFB_EFFECTS@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@@3@$0A@@std@@@std@@IAEXXZ 100388ac vJoyInterface.obj + 0003:000048d4 __ehfuncinfo$??$_Eqrange@H@?$_Tree@V?$_Tmap_traits@HUDeviceStat@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHUDeviceStat@@@std@@@3@$0A@@std@@@std@@IBE?AU?$pair@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@PAU12@@1@ABH@Z 100388d4 vJoyInterface.obj + 0003:000048fc __ehfuncinfo$??$_Freenode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU01@@Z 100388fc vJoyInterface.obj + 0003:00004924 __ehfuncinfo$??$_Freenode@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU01@@Z 10038924 vJoyInterface.obj + 0003:0000494c __ehfuncinfo$??$_Freenode0@V?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHW4FFB_EFFECTS@@@std@@PAX@std@@@1@PAU01@@Z 1003894c vJoyInterface.obj + 0003:00004974 __ehfuncinfo$??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAAV?$allocator@U_Container_proxy@std@@@0@QAU_Container_proxy@0@@Z 10038974 vJoyInterface.obj + 0003:0000499c __ehfuncinfo$??1?$_Alloc_construct_ptr@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 1003899c vJoyInterface.obj + 0003:000049c4 __unwindtable$??0?$_Tree_temp_node_alloc@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 100389c4 vJoyInterface.obj + 0003:000049cc __ehfuncinfo$??0?$_Tree_temp_node_alloc@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@@Z 100389cc vJoyInterface.obj + 0003:000049f4 __ehfuncinfo$??1?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@XZ 100389f4 vJoyInterface.obj + 0003:00004a1c __unwindtable$??$?0ABUpiecewise_construct_t@std@@V?$tuple@ABH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@ABH@1@$$QAV?$tuple@$$V@1@@Z 10038a1c vJoyInterface.obj + 0003:00004a24 __ehfuncinfo$??$?0ABUpiecewise_construct_t@std@@V?$tuple@ABH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@ABH@1@$$QAV?$tuple@$$V@1@@Z 10038a24 vJoyInterface.obj + 0003:00004a4c __unwindtable$??$?0ABUpiecewise_construct_t@std@@V?$tuple@$$QAH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@$$QAH@1@$$QAV?$tuple@$$V@1@@Z 10038a4c vJoyInterface.obj + 0003:00004a54 __ehfuncinfo$??$?0ABUpiecewise_construct_t@std@@V?$tuple@$$QAH@1@V?$tuple@$$V@1@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@ABUpiecewise_construct_t@1@$$QAV?$tuple@$$QAH@1@$$QAV?$tuple@$$V@1@@Z 10038a54 vJoyInterface.obj + 0003:00004a7c __ehfuncinfo$??$_Freenode0@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@SAXAAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU01@@Z 10038a7c vJoyInterface.obj + 0003:00004aa4 __ehfuncinfo$??$_Deallocate@$07$0A@@std@@YAXPAXI@Z 10038aa4 vJoyInterface.obj + 0003:00004acc __unwindtable$??$?0AAHUDeviceStat@@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@AAH$$QAUDeviceStat@@@Z 10038acc vJoyInterface.obj + 0003:00004ad4 __ehfuncinfo$??$?0AAHUDeviceStat@@@?$_Tree_temp_node@V?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@std@@@std@@QAE@AAV?$allocator@U?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@std@@@1@PAU?$_Tree_node@U?$pair@$$CBHUDeviceStat@@@std@@PAX@1@AAH$$QAUDeviceStat@@@Z 10038ad4 vJoyInterface.obj + 0003:00004afc __ehfuncinfo$??$?0ABH$0A@@?$tuple@ABH@std@@QAE@ABH@Z 10038afc vJoyInterface.obj + 0003:00004b24 __ehfuncinfo$??$?0H$$V$0A@@?$tuple@$$QAH@std@@QAE@$$QAH@Z 10038b24 vJoyInterface.obj + 0003:00004bd8 __sehtable$___scrt_is_nonwritable_in_current_image 10038bd8 MSVCRTD:utility.obj + 0003:00004bf8 __sehtable$?dllmain_crt_process_attach@@YAHQAUHINSTANCE__@@QAX@Z 10038bf8 MSVCRTD:dll_dllmain.obj + 0003:00004c18 __sehtable$?dllmain_crt_process_detach@@YAH_N@Z 10038c18 MSVCRTD:dll_dllmain.obj + 0003:00004c48 __sehtable$?dllmain_dispatch@@YAHQAUHINSTANCE__@@KQAX@Z 10038c48 MSVCRTD:dll_dllmain.obj + 0003:00004c90 __sehtable$?notify_debugger@@YAXABUtagEXCEPTION_VISUALCPP_DEBUG_INFO@@@Z 10038c90 MSVCRTD:error.obj + 0003:00004e70 .edata 10038e70 vJoyInterface.exp + 0003:00004e98 rgpv 10038e98 vJoyInterface.exp + 0003:00004f64 rgszName 10038f64 vJoyInterface.exp + 0003:00005030 rgwOrd 10039030 vJoyInterface.exp + 0003:00005096 szName 10039096 vJoyInterface.exp + 0003:000050a8 $N00001 100390a8 vJoyInterface.exp + 0003:000050b3 $N00002 100390b3 vJoyInterface.exp + 0003:000050bf $N00003 100390bf vJoyInterface.exp + 0003:000050cc $N00004 100390cc vJoyInterface.exp + 0003:000050dd $N00005 100390dd vJoyInterface.exp + 0003:000050e6 $N00006 100390e6 vJoyInterface.exp + 0003:000050ee $N00007 100390ee vJoyInterface.exp + 0003:000050fc $N00008 100390fc vJoyInterface.exp + 0003:0000510a $N00009 1003910a vJoyInterface.exp + 0003:00005119 $N00010 10039119 vJoyInterface.exp + 0003:00005123 $N00011 10039123 vJoyInterface.exp + 0003:00005130 $N00012 10039130 vJoyInterface.exp + 0003:0000513c $N00013 1003913c vJoyInterface.exp + 0003:0000514b $N00014 1003914b vJoyInterface.exp + 0003:0000515e $N00015 1003915e vJoyInterface.exp + 0003:0000516e $N00016 1003916e vJoyInterface.exp + 0003:0000517f $N00017 1003917f vJoyInterface.exp + 0003:0000518e $N00018 1003918e vJoyInterface.exp + 0003:0000519f $N00019 1003919f vJoyInterface.exp + 0003:000051ac $N00020 100391ac vJoyInterface.exp + 0003:000051b7 $N00021 100391b7 vJoyInterface.exp + 0003:000051cc $N00022 100391cc vJoyInterface.exp + 0003:000051d8 $N00023 100391d8 vJoyInterface.exp + 0003:000051e8 $N00024 100391e8 vJoyInterface.exp + 0003:000051f6 $N00025 100391f6 vJoyInterface.exp + 0003:00005204 $N00026 10039204 vJoyInterface.exp + 0003:00005217 $N00027 10039217 vJoyInterface.exp + 0003:0000522b $N00028 1003922b vJoyInterface.exp + 0003:0000523f $N00029 1003923f vJoyInterface.exp + 0003:0000524c $N00030 1003924c vJoyInterface.exp + 0003:00005266 $N00031 10039266 vJoyInterface.exp + 0003:00005278 $N00032 10039278 vJoyInterface.exp + 0003:0000528d $N00033 1003928d vJoyInterface.exp + 0003:000052a7 $N00034 100392a7 vJoyInterface.exp + 0003:000052b6 $N00035 100392b6 vJoyInterface.exp + 0003:000052c2 $N00036 100392c2 vJoyInterface.exp + 0003:000052d4 $N00037 100392d4 vJoyInterface.exp + 0003:000052e6 $N00038 100392e6 vJoyInterface.exp + 0003:000052f4 $N00039 100392f4 vJoyInterface.exp + 0003:000052fd $N00040 100392fd vJoyInterface.exp + 0003:0000530a $N00041 1003930a vJoyInterface.exp + 0003:00005314 $N00042 10039314 vJoyInterface.exp + 0003:0000531d $N00043 1003931d vJoyInterface.exp + 0003:00005325 $N00044 10039325 vJoyInterface.exp + 0003:0000532c $N00045 1003932c vJoyInterface.exp + 0003:00005337 $N00046 10039337 vJoyInterface.exp + 0003:00005342 $N00047 10039342 vJoyInterface.exp + 0003:0000534c $N00048 1003934c vJoyInterface.exp + 0003:00005358 $N00049 10039358 vJoyInterface.exp + 0003:00005362 $N00050 10039362 vJoyInterface.exp + 0003:0000536e $N00051 1003936e vJoyInterface.exp + 0004:00000004 ?szWindowClass@@3PADA 1003a004 vJoyInterface.obj + 0004:00000020 ?szTitle@@3PADA 1003a020 vJoyInterface.obj + 0004:000004a0 ?cnt_complete@?1??DeviceChange@@9@4HA 1003a4a0 vJoyInterface.obj + 0004:000004a4 ?cnt_arrive@?1??DeviceChange@@9@4HA 1003a4a4 vJoyInterface.obj + 0004:000004a8 ?StatNS@?1??GetDeviceNameSpace@@YAHPAPADPAHHPAK@Z@4PADA 1003a4a8 vJoyInterface.obj + 0004:000004ec ?is_initialized_as_dll@@3_NA 1003a4ec MSVCRTD:utility.obj + 0004:000004ed ?module_local_atexit_table_initialized@@3_NA 1003a4ed MSVCRTD:utility.obj + 0004:000004f0 ?module_local_atexit_table@@3U_onexit_table_t@@A 1003a4f0 MSVCRTD:utility.obj + 0004:000004fc ?module_local_at_quick_exit_table@@3U_onexit_table_t@@A 1003a4fc MSVCRTD:utility.obj + 0004:0000050f ?init@?1??_RTC_InitBase@@9@4_NA 1003a50f MSVCRTD:init.obj + 0004:00000510 ?__proc_attached@@3HA 1003a510 MSVCRTD:dll_dllmain.obj + 0004:00000528 _GS_ExceptionRecord 1003a528 MSVCRTD:gs_report.obj + 0004:00000578 _GS_ContextRecord 1003a578 MSVCRTD:gs_report.obj + 0004:000008e4 ?_RTC_ErrorReportFunc@@3P6AHHPBDH00ZZA 1003a8e4 MSVCRTD:userapi.obj + 0004:000008e8 ?_RTC_ErrorReportFuncW@@3P6AHHPB_WH00ZZA 1003a8e8 MSVCRTD:userapi.obj + 0004:000008fc ?mspdb@@3PAUHINSTANCE__@@A 1003a8fc MSVCRTD:pdblkup.obj + 0004:00000900 ?alreadyTried@?1??GetPdbDll@@YAPAUHINSTANCE__@@XZ@4_NA 1003a900 MSVCRTD:pdblkup.obj + 0004:00000901 ?PDBOK@?1??_RTC_GetSrcLine@@YAHPAEPA_WKPAH1K@Z@4_NA 1003a901 MSVCRTD:pdblkup.obj + 0005:000008ae .idata$6 1003b8ae setupapi:SETUPAPI.dll + 0005:000009f4 .idata$6 1003b9f4 hid:HID.DLL + 0005:00000b02 .idata$6 1003bb02 kernel32:KERNEL32.dll + 0005:00000c3e .idata$6 1003bc3e user32:USER32.dll + 0005:00000c78 .idata$6 1003bc78 advapi32:ADVAPI32.dll + 0005:00000cda .idata$6 1003bcda msvcprtd:MSVCP140D.dll + 0005:00000e2a .idata$6 1003be2a vcruntimed:VCRUNTIME140D.dll + 0005:000010aa .idata$6 1003c0aa ucrtd:ucrtbased.dll + 0006:00000000 __E1218CD7_targetver@h 1003d000 stdafx.obj + 0006:00000001 __3347223C_winpackagefamily@h 1003d001 stdafx.obj + 0006:00000002 __F5B671E4_winapifamily@h 1003d002 stdafx.obj + 0006:00000003 __6866F092_sdkddkver@h 1003d003 stdafx.obj + 0006:00000004 __CD417A16_concurrencysal@h 1003d004 stdafx.obj + 0006:00000005 __18C11F8D_sal@h 1003d005 stdafx.obj + 0006:00000006 __BD42D05E_vadefs@h 1003d006 stdafx.obj + 0006:00000007 __2DC9DF70_vcruntime@h 1003d007 stdafx.obj + 0006:00000008 __D7225C87_excpt@h 1003d008 stdafx.obj + 0006:00000009 __F19000F7_stdarg@h 1003d009 stdafx.obj + 0006:0000000a __4114BAD5_specstrings_undef@h 1003d00a stdafx.obj + 0006:0000000b __50F9AEDC_specstrings_strict@h 1003d00b stdafx.obj + 0006:0000000c __BEFC0098_sdv_driverspecs@h 1003d00c stdafx.obj + 0006:0000000d __39A39701_driverspecs@h 1003d00d stdafx.obj + 0006:0000000e __B4D8BDAA_specstrings@h 1003d00e stdafx.obj + 0006:0000000f __04C75F1C_corecrt@h 1003d00f stdafx.obj + 0006:00000010 __78D0C915_corecrt_wctype@h 1003d010 stdafx.obj + 0006:00000011 __6AECDA3E_ctype@h 1003d011 stdafx.obj + 0006:00000012 __B6CCE7CD_kernelspecs@h 1003d012 stdafx.obj + 0006:00000013 __201B1099_basetsd@h 1003d013 stdafx.obj + 0006:00000014 __15E49872_errno@h 1003d014 stdafx.obj + 0006:00000015 __6BB4896E_vcruntime_string@h 1003d015 stdafx.obj + 0006:00000016 __184F7456_corecrt_memcpy_s@h 1003d016 stdafx.obj + 0006:00000017 __82377222_corecrt_memory@h 1003d017 stdafx.obj + 0006:00000018 __5B29309E_corecrt_wstring@h 1003d018 stdafx.obj + 0006:00000019 __F787F5CD_string@h 1003d019 stdafx.obj + 0006:0000001a __8C99318D_guiddef@h 1003d01a stdafx.obj + 0006:0000001b __A3CAA675_pshpack4@h 1003d01b stdafx.obj + 0006:0000001c __2611E9B9_poppack@h 1003d01c stdafx.obj + 0006:0000001d __A747DAC7_pshpack2@h 1003d01d stdafx.obj + 0006:0000001e __AAD05F11_pshpack8@h 1003d01e stdafx.obj + 0006:0000001f __A501649E_pshpack1@h 1003d01f stdafx.obj + 0006:00000020 __0E9D9C0E_apiset@h 1003d020 stdafx.obj + 0006:00000021 __F9851A06_ktmtypes@h 1003d021 stdafx.obj + 0006:00000022 __9DA2B69E_winnt@h 1003d022 stdafx.obj + 0006:00000023 __E9AED855_minwindef@h 1003d023 stdafx.obj + 0006:00000024 __9668718B_windef@h 1003d024 stdafx.obj + 0006:00000025 __B47C9622_apisetcconv@h 1003d025 stdafx.obj + 0006:00000026 __77F4CE3E_minwinbase@h 1003d026 stdafx.obj + 0006:00000027 __42CF8FD5_apiquery2@h 1003d027 stdafx.obj + 0006:00000028 __A6C51434_processenv@h 1003d028 stdafx.obj + 0006:00000029 __415D7145_fileapi@h 1003d029 stdafx.obj + 0006:0000002a __A7316A9B_fileapifromapp@h 1003d02a stdafx.obj + 0006:0000002b __A0359A2D_debugapi@h 1003d02b stdafx.obj + 0006:0000002c __28BE1226_utilapiset@h 1003d02c stdafx.obj + 0006:0000002d __6933B394_handleapi@h 1003d02d stdafx.obj + 0006:0000002e __57F09DF9_errhandlingapi@h 1003d02e stdafx.obj + 0006:0000002f __E0622DF9_fibersapi@h 1003d02f stdafx.obj + 0006:00000030 __D531F6AB_namedpipeapi@h 1003d030 stdafx.obj + 0006:00000031 __ADD82BB4_profileapi@h 1003d031 stdafx.obj + 0006:00000032 __ECFC4D70_heapapi@h 1003d032 stdafx.obj + 0006:00000033 __4F41815B_ioapiset@h 1003d033 stdafx.obj + 0006:00000034 __8D44BFB7_synchapi@h 1003d034 stdafx.obj + 0006:00000035 __8CAEC090_interlockedapi@h 1003d035 stdafx.obj + 0006:00000036 __8ABF54F4_processthreadsapi@h 1003d036 stdafx.obj + 0006:00000037 __1462A586_sysinfoapi@h 1003d037 stdafx.obj + 0006:00000038 __369DBA4C_memoryapi@h 1003d038 stdafx.obj + 0006:00000039 __02D65571_enclaveapi@h 1003d039 stdafx.obj + 0006:0000003a __50387E19_threadpoollegacyapiset@h 1003d03a stdafx.obj + 0006:0000003b __C40195AA_threadpoolapiset@h 1003d03b stdafx.obj + 0006:0000003c __792B5764_jobapi@h 1003d03c stdafx.obj + 0006:0000003d __BAD0D5EB_jobapi2@h 1003d03d stdafx.obj + 0006:0000003e __C6FE0B21_wow64apiset@h 1003d03e stdafx.obj + 0006:0000003f __94EE79C1_libloaderapi@h 1003d03f stdafx.obj + 0006:00000040 __E203BDE6_securitybaseapi@h 1003d040 stdafx.obj + 0006:00000041 __9590F1DC_namespaceapi@h 1003d041 stdafx.obj + 0006:00000042 __0F4602F6_systemtopologyapi@h 1003d042 stdafx.obj + 0006:00000043 __B1B3B677_processtopologyapi@h 1003d043 stdafx.obj + 0006:00000044 __7DD200C2_securityappcontainer@h 1003d044 stdafx.obj + 0006:00000045 __130664A2_realtimeapiset@h 1003d045 stdafx.obj + 0006:00000046 __A8C6672F_winerror@h 1003d046 stdafx.obj + 0006:00000047 __A093DD28_timezoneapi@h 1003d047 stdafx.obj + 0006:00000048 __6BD3506C_winbase@h 1003d048 stdafx.obj + 0006:00000049 __DABCB3B7_wingdi@h 1003d049 stdafx.obj + 0006:0000004a __CD8F5E54_tvout@h 1003d04a stdafx.obj + 0006:0000004b __033B1B1B_winuser@h 1003d04b stdafx.obj + 0006:0000004c __F8663FCA_datetimeapi@h 1003d04c stdafx.obj + 0006:0000004d __03A9DF8F_winnls@h 1003d04d stdafx.obj + 0006:0000004e __CB7A78CC_stringapiset@h 1003d04e stdafx.obj + 0006:0000004f __3F149E59_wincontypes@h 1003d04f stdafx.obj + 0006:00000050 __7CC6F8F3_consoleapi@h 1003d050 stdafx.obj + 0006:00000051 __D4BE3EA3_consoleapi2@h 1003d051 stdafx.obj + 0006:00000052 __D57C5494_consoleapi3@h 1003d052 stdafx.obj + 0006:00000053 __FD7284F3_wincon@h 1003d053 stdafx.obj + 0006:00000054 __2EBE7A74_verrsrc@h 1003d054 stdafx.obj + 0006:00000055 __2FF32671_winver@h 1003d055 stdafx.obj + 0006:00000056 __E384C5B4_reason@h 1003d056 stdafx.obj + 0006:00000057 __C09EE12A_winreg@h 1003d057 stdafx.obj + 0006:00000058 __F1A080AC_wnnc@h 1003d058 stdafx.obj + 0006:00000059 __C375DB87_winnetwk@h 1003d059 stdafx.obj + 0006:0000005a __F202032E_cderr@h 1003d05a stdafx.obj + 0006:0000005b __96C2AB0F_dde@h 1003d05b stdafx.obj + 0006:0000005c __005A4F24_ddeml@h 1003d05c stdafx.obj + 0006:0000005d __8B7EE07A_dlgs@h 1003d05d stdafx.obj + 0006:0000005e __0D44BE7C_lzexpand@h 1003d05e stdafx.obj + 0006:0000005f __7DBDB4C6_mmsyscom@h 1003d05f stdafx.obj + 0006:00000060 __DE89C4CA_mciapi@h 1003d060 stdafx.obj + 0006:00000061 __42D37885_mmiscapi@h 1003d061 stdafx.obj + 0006:00000062 __6DE6FF2A_mmiscapi2@h 1003d062 stdafx.obj + 0006:00000063 __FF70E3D7_playsoundapi@h 1003d063 stdafx.obj + 0006:00000064 __F9747FEC_mmeapi@h 1003d064 stdafx.obj + 0006:00000065 __651C1006_timeapi@h 1003d065 stdafx.obj + 0006:00000066 __60A046E1_joystickapi@h 1003d066 stdafx.obj + 0006:00000067 __C0C01F30_mmsystem@h 1003d067 stdafx.obj + 0006:00000068 __A366D611_nb30@h 1003d068 stdafx.obj + 0006:00000069 __2CD5644B_rpcdcep@h 1003d069 stdafx.obj + 0006:0000006a __B77D54A9_rpcdce@h 1003d06a stdafx.obj + 0006:0000006b __1C5A7A47_rpcnsi@h 1003d06b stdafx.obj + 0006:0000006c __71643EA7_rpcnterr@h 1003d06c stdafx.obj + 0006:0000006d __38122515_rpcasync@h 1003d06d stdafx.obj + 0006:0000006e __DEF407DB_rpc@h 1003d06e stdafx.obj + 0006:0000006f __064CC72C_shellapi@h 1003d06f stdafx.obj + 0006:00000070 __6AB78C00_winperf@h 1003d070 stdafx.obj + 0006:00000071 __683BB200_inaddr@h 1003d071 stdafx.obj + 0006:00000072 __46EE45A6_winsock@h 1003d072 stdafx.obj + 0006:00000073 __924250EA_bcrypt@h 1003d073 stdafx.obj + 0006:00000074 __7D79DD11_ncrypt@h 1003d074 stdafx.obj + 0006:00000075 __C925E4C0_dpapi@h 1003d075 stdafx.obj + 0006:00000076 __CE4C9021_wincrypt@h 1003d076 stdafx.obj + 0006:00000077 __1BC40EFA_winefs@h 1003d077 stdafx.obj + 0006:00000078 __6BCC8C1A_rpcnsip@h 1003d078 stdafx.obj + 0006:00000079 __C065EC3F_rpcsal@h 1003d079 stdafx.obj + 0006:0000007a __7973C144_rpcndr@h 1003d07a stdafx.obj + 0006:0000007b __B58B1953_wtypesbase@h 1003d07b stdafx.obj + 0006:0000007c __013FEE7F_wtypes@h 1003d07c stdafx.obj + 0006:0000007d __62733496_winioctl@h 1003d07d stdafx.obj + 0006:0000007e __B9109027_winsmcrd@h 1003d07e stdafx.obj + 0006:0000007f __87A76A69_winscard@h 1003d07f stdafx.obj + 0006:00000080 __8C0F76A7_prsht@h 1003d080 stdafx.obj + 0006:00000081 __11B57AC7_winspool@h 1003d081 stdafx.obj + 0006:00000082 __494656A0_corecrt_malloc@h 1003d082 stdafx.obj + 0006:00000083 __0C5B3DCC_stddef@h 1003d083 stdafx.obj + 0006:00000084 __F1F53BCE_corecrt_search@h 1003d084 stdafx.obj + 0006:00000085 __DD5AA43A_corecrt_wstdlib@h 1003d085 stdafx.obj + 0006:00000086 __7B399007_limits@h 1003d086 stdafx.obj + 0006:00000087 __71F46169_stdlib@h 1003d087 stdafx.obj + 0006:00000088 __DBA05CC8_unknwnbase@h 1003d088 stdafx.obj + 0006:00000089 __D99DEA84_objidlbase@h 1003d089 stdafx.obj + 0006:0000008a __A2F85269_cguid@h 1003d08a stdafx.obj + 0006:0000008b __A856EBD7_combaseapi@h 1003d08b stdafx.obj + 0006:0000008c __47009772_unknwn@h 1003d08c stdafx.obj + 0006:0000008d __558FF34F_objidl@h 1003d08d stdafx.obj + 0006:0000008e __EA6828E6_oaidl@h 1003d08e stdafx.obj + 0006:0000008f __DD5918D8_propidlbase@h 1003d08f stdafx.obj + 0006:00000090 __A0E2593F_coml2api@h 1003d090 stdafx.obj + 0006:00000091 __F4E63AC7_oleidl@h 1003d091 stdafx.obj + 0006:00000092 __0E8757FF_servprov@h 1003d092 stdafx.obj + 0006:00000093 __13616BE7_msxml@h 1003d093 stdafx.obj + 0006:00000094 __287654D0_urlmon@h 1003d094 stdafx.obj + 0006:00000095 __3465A794_propidl@h 1003d095 stdafx.obj + 0006:00000096 __D5EE8840_objbase@h 1003d096 stdafx.obj + 0006:00000097 __B5981418_oleauto@h 1003d097 stdafx.obj + 0006:00000098 __3AE83FC5_ole2@h 1003d098 stdafx.obj + 0006:00000099 __5F30FE09_commdlg@h 1003d099 stdafx.obj + 0006:0000009a __DD9DD587_stralign@h 1003d09a stdafx.obj + 0006:0000009b __B85B9837_winsvc@h 1003d09b stdafx.obj + 0006:0000009c __12FBC1E4_mcx@h 1003d09c stdafx.obj + 0006:0000009d __BC6D10F5_ime_cmodes@h 1003d09d stdafx.obj + 0006:0000009e __1D49718C_imm@h 1003d09e stdafx.obj + 0006:0000009f __95734585_windows@h 1003d09f stdafx.obj + 0006:000000a0 __C9149A6D_xkeycheck@h 1003d0a0 stdafx.obj + 0006:000000a1 __94F3B4AE_yvals_core@h 1003d0a1 stdafx.obj + 0006:000000a2 __C54FBE38_stdint@h 1003d0a2 stdafx.obj + 0006:000000a3 __2308314D_cstdint 1003d0a3 stdafx.obj + 0006:000000a4 __05E338F6_xtr1common 1003d0a4 stdafx.obj + 0006:000000a5 __3B9D0A9D_cstddef 1003d0a5 stdafx.obj + 0006:000000a6 __92857972_corecrt_math@h 1003d0a6 stdafx.obj + 0006:000000a7 __A29DED85_math@h 1003d0a7 stdafx.obj + 0006:000000a8 __9E56D030_cstdlib 1003d0a8 stdafx.obj + 0006:000000a9 __D7870C25_initializer_list 1003d0a9 stdafx.obj + 0006:000000aa __5E44C2A9_xstddef 1003d0aa stdafx.obj + 0006:000000ab __87BD5CA6_type_traits 1003d0ab stdafx.obj + 0006:000000ac __A95B55BB_utility 1003d0ac stdafx.obj + 0006:000000ad __EE76B579___msvc_iter_core@hpp 1003d0ad stdafx.obj + 0006:000000ae __DC58087B_tuple 1003d0ae stdafx.obj + 0006:000000af __CDB0EEF0_float@h 1003d0af stdafx.obj + 0006:000000b0 __D5150992_cfloat 1003d0b0 stdafx.obj + 0006:000000b1 __1AB9F2C2_climits 1003d0b1 stdafx.obj + 0006:000000b2 __C44F8F6B_corecrt_stdio_config@h 1003d0b2 stdafx.obj + 0006:000000b3 __A7F89B2B_corecrt_wstdio@h 1003d0b3 stdafx.obj + 0006:000000b4 __B5C48800_stdio@h 1003d0b4 stdafx.obj + 0006:000000b5 __A651C215_cstdio 1003d0b5 stdafx.obj + 0006:000000b6 __E387ED1C_corecrt_wconio@h 1003d0b6 stdafx.obj + 0006:000000b7 __02A4DD57_corecrt_wdirect@h 1003d0b7 stdafx.obj + 0006:000000b8 __A056EFF3_corecrt_share@h 1003d0b8 stdafx.obj + 0006:000000b9 __91FC0EDF_corecrt_wio@h 1003d0b9 stdafx.obj + 0006:000000ba __6619318A_corecrt_wprocess@h 1003d0ba stdafx.obj + 0006:000000bb __18070508_corecrt_wtime@h 1003d0bb stdafx.obj + 0006:000000bc __3D2AFB26_types@h 1003d0bc stdafx.obj + 0006:000000bd __72103B05_stat@h 1003d0bd stdafx.obj + 0006:000000be __4BE26BFD_wchar@h 1003d0be stdafx.obj + 0006:000000bf __3CDA1446_cwchar 1003d0bf stdafx.obj + 0006:000000c0 __99FA516B_intrin0@inl@h 1003d0c0 stdafx.obj + 0006:000000c1 __8CEB98C2_intrin0@h 1003d0c1 stdafx.obj + 0006:000000c2 __B83F831D_isa_availability@h 1003d0c2 stdafx.obj + 0006:000000c3 __B3F344F6_limits 1003d0c3 stdafx.obj + 0006:000000c4 __E81B5085_vcruntime_new@h 1003d0c4 stdafx.obj + 0006:000000c5 __130137D5_vcruntime_new_debug@h 1003d0c5 stdafx.obj + 0006:000000c6 __8CF369C8_crtdbg@h 1003d0c6 stdafx.obj + 0006:000000c7 __95C621C9_crtdefs@h 1003d0c7 stdafx.obj + 0006:000000c8 __FEED0ABF_use_ansi@h 1003d0c8 stdafx.obj + 0006:000000c9 __2816668F_yvals@h 1003d0c9 stdafx.obj + 0006:000000ca __E5D9469F_malloc@h 1003d0ca stdafx.obj + 0006:000000cb __C78E68C1_corecrt_terminate@h 1003d0cb stdafx.obj + 0006:000000cc __510B0051_eh@h 1003d0cc stdafx.obj + 0006:000000cd __1BEF3287_vcruntime_exception@h 1003d0cd stdafx.obj + 0006:000000ce __5D994F5F_exception 1003d0ce stdafx.obj + 0006:000000cf __7E4C13A5_new 1003d0cf stdafx.obj + 0006:000000d0 __5795C389_xatomic@h 1003d0d0 stdafx.obj + 0006:000000d1 __D2C478D0_cstring 1003d0d1 stdafx.obj + 0006:000000d2 __A997C6C5_xutility 1003d0d2 stdafx.obj + 0006:000000d3 __C3CE3678_xmemory 1003d0d3 stdafx.obj + 0006:000000d4 __7352ED38_xtree 1003d0d4 stdafx.obj + 0006:000000d5 __8602FD5B_map 1003d0d5 stdafx.obj + 0006:000000d6 __7C4CD365_INITGUID@H 1003d0d6 stdafx.obj + 0006:000000d7 __D33F56CB_public@h 1003d0d7 stdafx.obj + 0006:000000d8 __701FEF85_stdafx@h 1003d0d8 stdafx.obj + 0006:000000d9 __5DDD8A17_vJoyInterface@pch 1003d0d9 stdafx.obj + 0006:000000da __8D78C31F_stdafx@cpp 1003d0da stdafx.obj + 0006:00000106 __E1218CD7_targetver@h 1003d106 vJoyInterface.obj + 0006:00000107 __3347223C_winpackagefamily@h 1003d107 vJoyInterface.obj + 0006:00000108 __F5B671E4_winapifamily@h 1003d108 vJoyInterface.obj + 0006:00000109 __6866F092_sdkddkver@h 1003d109 vJoyInterface.obj + 0006:0000010a __CD417A16_concurrencysal@h 1003d10a vJoyInterface.obj + 0006:0000010b __18C11F8D_sal@h 1003d10b vJoyInterface.obj + 0006:0000010c __BD42D05E_vadefs@h 1003d10c vJoyInterface.obj + 0006:0000010d __2DC9DF70_vcruntime@h 1003d10d vJoyInterface.obj + 0006:0000010e __D7225C87_excpt@h 1003d10e vJoyInterface.obj + 0006:0000010f __F19000F7_stdarg@h 1003d10f vJoyInterface.obj + 0006:00000110 __4114BAD5_specstrings_undef@h 1003d110 vJoyInterface.obj + 0006:00000111 __50F9AEDC_specstrings_strict@h 1003d111 vJoyInterface.obj + 0006:00000112 __BEFC0098_sdv_driverspecs@h 1003d112 vJoyInterface.obj + 0006:00000113 __39A39701_driverspecs@h 1003d113 vJoyInterface.obj + 0006:00000114 __B4D8BDAA_specstrings@h 1003d114 vJoyInterface.obj + 0006:00000115 __04C75F1C_corecrt@h 1003d115 vJoyInterface.obj + 0006:00000116 __78D0C915_corecrt_wctype@h 1003d116 vJoyInterface.obj + 0006:00000117 __6AECDA3E_ctype@h 1003d117 vJoyInterface.obj + 0006:00000118 __B6CCE7CD_kernelspecs@h 1003d118 vJoyInterface.obj + 0006:00000119 __201B1099_basetsd@h 1003d119 vJoyInterface.obj + 0006:0000011a __15E49872_errno@h 1003d11a vJoyInterface.obj + 0006:0000011b __6BB4896E_vcruntime_string@h 1003d11b vJoyInterface.obj + 0006:0000011c __184F7456_corecrt_memcpy_s@h 1003d11c vJoyInterface.obj + 0006:0000011d __82377222_corecrt_memory@h 1003d11d vJoyInterface.obj + 0006:0000011e __5B29309E_corecrt_wstring@h 1003d11e vJoyInterface.obj + 0006:0000011f __F787F5CD_string@h 1003d11f vJoyInterface.obj + 0006:00000120 __8C99318D_guiddef@h 1003d120 vJoyInterface.obj + 0006:00000121 __A3CAA675_pshpack4@h 1003d121 vJoyInterface.obj + 0006:00000122 __2611E9B9_poppack@h 1003d122 vJoyInterface.obj + 0006:00000123 __A747DAC7_pshpack2@h 1003d123 vJoyInterface.obj + 0006:00000124 __AAD05F11_pshpack8@h 1003d124 vJoyInterface.obj + 0006:00000125 __A501649E_pshpack1@h 1003d125 vJoyInterface.obj + 0006:00000126 __0E9D9C0E_apiset@h 1003d126 vJoyInterface.obj + 0006:00000127 __F9851A06_ktmtypes@h 1003d127 vJoyInterface.obj + 0006:00000128 __9DA2B69E_winnt@h 1003d128 vJoyInterface.obj + 0006:00000129 __E9AED855_minwindef@h 1003d129 vJoyInterface.obj + 0006:0000012a __9668718B_windef@h 1003d12a vJoyInterface.obj + 0006:0000012b __B47C9622_apisetcconv@h 1003d12b vJoyInterface.obj + 0006:0000012c __77F4CE3E_minwinbase@h 1003d12c vJoyInterface.obj + 0006:0000012d __42CF8FD5_apiquery2@h 1003d12d vJoyInterface.obj + 0006:0000012e __A6C51434_processenv@h 1003d12e vJoyInterface.obj + 0006:0000012f __415D7145_fileapi@h 1003d12f vJoyInterface.obj + 0006:00000130 __A7316A9B_fileapifromapp@h 1003d130 vJoyInterface.obj + 0006:00000131 __A0359A2D_debugapi@h 1003d131 vJoyInterface.obj + 0006:00000132 __28BE1226_utilapiset@h 1003d132 vJoyInterface.obj + 0006:00000133 __6933B394_handleapi@h 1003d133 vJoyInterface.obj + 0006:00000134 __57F09DF9_errhandlingapi@h 1003d134 vJoyInterface.obj + 0006:00000135 __E0622DF9_fibersapi@h 1003d135 vJoyInterface.obj + 0006:00000136 __D531F6AB_namedpipeapi@h 1003d136 vJoyInterface.obj + 0006:00000137 __ADD82BB4_profileapi@h 1003d137 vJoyInterface.obj + 0006:00000138 __ECFC4D70_heapapi@h 1003d138 vJoyInterface.obj + 0006:00000139 __4F41815B_ioapiset@h 1003d139 vJoyInterface.obj + 0006:0000013a __8D44BFB7_synchapi@h 1003d13a vJoyInterface.obj + 0006:0000013b __8CAEC090_interlockedapi@h 1003d13b vJoyInterface.obj + 0006:0000013c __8ABF54F4_processthreadsapi@h 1003d13c vJoyInterface.obj + 0006:0000013d __1462A586_sysinfoapi@h 1003d13d vJoyInterface.obj + 0006:0000013e __369DBA4C_memoryapi@h 1003d13e vJoyInterface.obj + 0006:0000013f __02D65571_enclaveapi@h 1003d13f vJoyInterface.obj + 0006:00000140 __50387E19_threadpoollegacyapiset@h 1003d140 vJoyInterface.obj + 0006:00000141 __C40195AA_threadpoolapiset@h 1003d141 vJoyInterface.obj + 0006:00000142 __792B5764_jobapi@h 1003d142 vJoyInterface.obj + 0006:00000143 __BAD0D5EB_jobapi2@h 1003d143 vJoyInterface.obj + 0006:00000144 __C6FE0B21_wow64apiset@h 1003d144 vJoyInterface.obj + 0006:00000145 __94EE79C1_libloaderapi@h 1003d145 vJoyInterface.obj + 0006:00000146 __E203BDE6_securitybaseapi@h 1003d146 vJoyInterface.obj + 0006:00000147 __9590F1DC_namespaceapi@h 1003d147 vJoyInterface.obj + 0006:00000148 __0F4602F6_systemtopologyapi@h 1003d148 vJoyInterface.obj + 0006:00000149 __B1B3B677_processtopologyapi@h 1003d149 vJoyInterface.obj + 0006:0000014a __7DD200C2_securityappcontainer@h 1003d14a vJoyInterface.obj + 0006:0000014b __130664A2_realtimeapiset@h 1003d14b vJoyInterface.obj + 0006:0000014c __A8C6672F_winerror@h 1003d14c vJoyInterface.obj + 0006:0000014d __A093DD28_timezoneapi@h 1003d14d vJoyInterface.obj + 0006:0000014e __6BD3506C_winbase@h 1003d14e vJoyInterface.obj + 0006:0000014f __DABCB3B7_wingdi@h 1003d14f vJoyInterface.obj + 0006:00000150 __CD8F5E54_tvout@h 1003d150 vJoyInterface.obj + 0006:00000151 __033B1B1B_winuser@h 1003d151 vJoyInterface.obj + 0006:00000152 __F8663FCA_datetimeapi@h 1003d152 vJoyInterface.obj + 0006:00000153 __03A9DF8F_winnls@h 1003d153 vJoyInterface.obj + 0006:00000154 __CB7A78CC_stringapiset@h 1003d154 vJoyInterface.obj + 0006:00000155 __3F149E59_wincontypes@h 1003d155 vJoyInterface.obj + 0006:00000156 __7CC6F8F3_consoleapi@h 1003d156 vJoyInterface.obj + 0006:00000157 __D4BE3EA3_consoleapi2@h 1003d157 vJoyInterface.obj + 0006:00000158 __D57C5494_consoleapi3@h 1003d158 vJoyInterface.obj + 0006:00000159 __FD7284F3_wincon@h 1003d159 vJoyInterface.obj + 0006:0000015a __2EBE7A74_verrsrc@h 1003d15a vJoyInterface.obj + 0006:0000015b __2FF32671_winver@h 1003d15b vJoyInterface.obj + 0006:0000015c __E384C5B4_reason@h 1003d15c vJoyInterface.obj + 0006:0000015d __C09EE12A_winreg@h 1003d15d vJoyInterface.obj + 0006:0000015e __F1A080AC_wnnc@h 1003d15e vJoyInterface.obj + 0006:0000015f __C375DB87_winnetwk@h 1003d15f vJoyInterface.obj + 0006:00000160 __F202032E_cderr@h 1003d160 vJoyInterface.obj + 0006:00000161 __96C2AB0F_dde@h 1003d161 vJoyInterface.obj + 0006:00000162 __005A4F24_ddeml@h 1003d162 vJoyInterface.obj + 0006:00000163 __8B7EE07A_dlgs@h 1003d163 vJoyInterface.obj + 0006:00000164 __0D44BE7C_lzexpand@h 1003d164 vJoyInterface.obj + 0006:00000165 __7DBDB4C6_mmsyscom@h 1003d165 vJoyInterface.obj + 0006:00000166 __DE89C4CA_mciapi@h 1003d166 vJoyInterface.obj + 0006:00000167 __42D37885_mmiscapi@h 1003d167 vJoyInterface.obj + 0006:00000168 __6DE6FF2A_mmiscapi2@h 1003d168 vJoyInterface.obj + 0006:00000169 __FF70E3D7_playsoundapi@h 1003d169 vJoyInterface.obj + 0006:0000016a __F9747FEC_mmeapi@h 1003d16a vJoyInterface.obj + 0006:0000016b __651C1006_timeapi@h 1003d16b vJoyInterface.obj + 0006:0000016c __60A046E1_joystickapi@h 1003d16c vJoyInterface.obj + 0006:0000016d __C0C01F30_mmsystem@h 1003d16d vJoyInterface.obj + 0006:0000016e __A366D611_nb30@h 1003d16e vJoyInterface.obj + 0006:0000016f __2CD5644B_rpcdcep@h 1003d16f vJoyInterface.obj + 0006:00000170 __B77D54A9_rpcdce@h 1003d170 vJoyInterface.obj + 0006:00000171 __1C5A7A47_rpcnsi@h 1003d171 vJoyInterface.obj + 0006:00000172 __71643EA7_rpcnterr@h 1003d172 vJoyInterface.obj + 0006:00000173 __38122515_rpcasync@h 1003d173 vJoyInterface.obj + 0006:00000174 __DEF407DB_rpc@h 1003d174 vJoyInterface.obj + 0006:00000175 __064CC72C_shellapi@h 1003d175 vJoyInterface.obj + 0006:00000176 __6AB78C00_winperf@h 1003d176 vJoyInterface.obj + 0006:00000177 __683BB200_inaddr@h 1003d177 vJoyInterface.obj + 0006:00000178 __46EE45A6_winsock@h 1003d178 vJoyInterface.obj + 0006:00000179 __924250EA_bcrypt@h 1003d179 vJoyInterface.obj + 0006:0000017a __7D79DD11_ncrypt@h 1003d17a vJoyInterface.obj + 0006:0000017b __C925E4C0_dpapi@h 1003d17b vJoyInterface.obj + 0006:0000017c __CE4C9021_wincrypt@h 1003d17c vJoyInterface.obj + 0006:0000017d __1BC40EFA_winefs@h 1003d17d vJoyInterface.obj + 0006:0000017e __6BCC8C1A_rpcnsip@h 1003d17e vJoyInterface.obj + 0006:0000017f __C065EC3F_rpcsal@h 1003d17f vJoyInterface.obj + 0006:00000180 __7973C144_rpcndr@h 1003d180 vJoyInterface.obj + 0006:00000181 __B58B1953_wtypesbase@h 1003d181 vJoyInterface.obj + 0006:00000182 __013FEE7F_wtypes@h 1003d182 vJoyInterface.obj + 0006:00000183 __62733496_winioctl@h 1003d183 vJoyInterface.obj + 0006:00000184 __B9109027_winsmcrd@h 1003d184 vJoyInterface.obj + 0006:00000185 __87A76A69_winscard@h 1003d185 vJoyInterface.obj + 0006:00000186 __8C0F76A7_prsht@h 1003d186 vJoyInterface.obj + 0006:00000187 __11B57AC7_winspool@h 1003d187 vJoyInterface.obj + 0006:00000188 __494656A0_corecrt_malloc@h 1003d188 vJoyInterface.obj + 0006:00000189 __0C5B3DCC_stddef@h 1003d189 vJoyInterface.obj + 0006:0000018a __F1F53BCE_corecrt_search@h 1003d18a vJoyInterface.obj + 0006:0000018b __DD5AA43A_corecrt_wstdlib@h 1003d18b vJoyInterface.obj + 0006:0000018c __7B399007_limits@h 1003d18c vJoyInterface.obj + 0006:0000018d __71F46169_stdlib@h 1003d18d vJoyInterface.obj + 0006:0000018e __DBA05CC8_unknwnbase@h 1003d18e vJoyInterface.obj + 0006:0000018f __D99DEA84_objidlbase@h 1003d18f vJoyInterface.obj + 0006:00000190 __A2F85269_cguid@h 1003d190 vJoyInterface.obj + 0006:00000191 __A856EBD7_combaseapi@h 1003d191 vJoyInterface.obj + 0006:00000192 __47009772_unknwn@h 1003d192 vJoyInterface.obj + 0006:00000193 __558FF34F_objidl@h 1003d193 vJoyInterface.obj + 0006:00000194 __EA6828E6_oaidl@h 1003d194 vJoyInterface.obj + 0006:00000195 __DD5918D8_propidlbase@h 1003d195 vJoyInterface.obj + 0006:00000196 __A0E2593F_coml2api@h 1003d196 vJoyInterface.obj + 0006:00000197 __F4E63AC7_oleidl@h 1003d197 vJoyInterface.obj + 0006:00000198 __0E8757FF_servprov@h 1003d198 vJoyInterface.obj + 0006:00000199 __13616BE7_msxml@h 1003d199 vJoyInterface.obj + 0006:0000019a __287654D0_urlmon@h 1003d19a vJoyInterface.obj + 0006:0000019b __3465A794_propidl@h 1003d19b vJoyInterface.obj + 0006:0000019c __D5EE8840_objbase@h 1003d19c vJoyInterface.obj + 0006:0000019d __B5981418_oleauto@h 1003d19d vJoyInterface.obj + 0006:0000019e __3AE83FC5_ole2@h 1003d19e vJoyInterface.obj + 0006:0000019f __5F30FE09_commdlg@h 1003d19f vJoyInterface.obj + 0006:000001a0 __DD9DD587_stralign@h 1003d1a0 vJoyInterface.obj + 0006:000001a1 __B85B9837_winsvc@h 1003d1a1 vJoyInterface.obj + 0006:000001a2 __12FBC1E4_mcx@h 1003d1a2 vJoyInterface.obj + 0006:000001a3 __BC6D10F5_ime_cmodes@h 1003d1a3 vJoyInterface.obj + 0006:000001a4 __1D49718C_imm@h 1003d1a4 vJoyInterface.obj + 0006:000001a5 __95734585_windows@h 1003d1a5 vJoyInterface.obj + 0006:000001a6 __C9149A6D_xkeycheck@h 1003d1a6 vJoyInterface.obj + 0006:000001a7 __94F3B4AE_yvals_core@h 1003d1a7 vJoyInterface.obj + 0006:000001a8 __C54FBE38_stdint@h 1003d1a8 vJoyInterface.obj + 0006:000001a9 __2308314D_cstdint 1003d1a9 vJoyInterface.obj + 0006:000001aa __05E338F6_xtr1common 1003d1aa vJoyInterface.obj + 0006:000001ab __3B9D0A9D_cstddef 1003d1ab vJoyInterface.obj + 0006:000001ac __92857972_corecrt_math@h 1003d1ac vJoyInterface.obj + 0006:000001ad __A29DED85_math@h 1003d1ad vJoyInterface.obj + 0006:000001ae __9E56D030_cstdlib 1003d1ae vJoyInterface.obj + 0006:000001af __D7870C25_initializer_list 1003d1af vJoyInterface.obj + 0006:000001b0 __5E44C2A9_xstddef 1003d1b0 vJoyInterface.obj + 0006:000001b1 __87BD5CA6_type_traits 1003d1b1 vJoyInterface.obj + 0006:000001b2 __A95B55BB_utility 1003d1b2 vJoyInterface.obj + 0006:000001b3 __EE76B579___msvc_iter_core@hpp 1003d1b3 vJoyInterface.obj + 0006:000001b4 __DC58087B_tuple 1003d1b4 vJoyInterface.obj + 0006:000001b5 __CDB0EEF0_float@h 1003d1b5 vJoyInterface.obj + 0006:000001b6 __D5150992_cfloat 1003d1b6 vJoyInterface.obj + 0006:000001b7 __1AB9F2C2_climits 1003d1b7 vJoyInterface.obj + 0006:000001b8 __C44F8F6B_corecrt_stdio_config@h 1003d1b8 vJoyInterface.obj + 0006:000001b9 __A7F89B2B_corecrt_wstdio@h 1003d1b9 vJoyInterface.obj + 0006:000001ba __B5C48800_stdio@h 1003d1ba vJoyInterface.obj + 0006:000001bb __A651C215_cstdio 1003d1bb vJoyInterface.obj + 0006:000001bc __E387ED1C_corecrt_wconio@h 1003d1bc vJoyInterface.obj + 0006:000001bd __02A4DD57_corecrt_wdirect@h 1003d1bd vJoyInterface.obj + 0006:000001be __A056EFF3_corecrt_share@h 1003d1be vJoyInterface.obj + 0006:000001bf __91FC0EDF_corecrt_wio@h 1003d1bf vJoyInterface.obj + 0006:000001c0 __6619318A_corecrt_wprocess@h 1003d1c0 vJoyInterface.obj + 0006:000001c1 __18070508_corecrt_wtime@h 1003d1c1 vJoyInterface.obj + 0006:000001c2 __3D2AFB26_types@h 1003d1c2 vJoyInterface.obj + 0006:000001c3 __72103B05_stat@h 1003d1c3 vJoyInterface.obj + 0006:000001c4 __4BE26BFD_wchar@h 1003d1c4 vJoyInterface.obj + 0006:000001c5 __3CDA1446_cwchar 1003d1c5 vJoyInterface.obj + 0006:000001c6 __99FA516B_intrin0@inl@h 1003d1c6 vJoyInterface.obj + 0006:000001c7 __8CEB98C2_intrin0@h 1003d1c7 vJoyInterface.obj + 0006:000001c8 __B83F831D_isa_availability@h 1003d1c8 vJoyInterface.obj + 0006:000001c9 __B3F344F6_limits 1003d1c9 vJoyInterface.obj + 0006:000001ca __E81B5085_vcruntime_new@h 1003d1ca vJoyInterface.obj + 0006:000001cb __130137D5_vcruntime_new_debug@h 1003d1cb vJoyInterface.obj + 0006:000001cc __8CF369C8_crtdbg@h 1003d1cc vJoyInterface.obj + 0006:000001cd __95C621C9_crtdefs@h 1003d1cd vJoyInterface.obj + 0006:000001ce __FEED0ABF_use_ansi@h 1003d1ce vJoyInterface.obj + 0006:000001cf __2816668F_yvals@h 1003d1cf vJoyInterface.obj + 0006:000001d0 __E5D9469F_malloc@h 1003d1d0 vJoyInterface.obj + 0006:000001d1 __C78E68C1_corecrt_terminate@h 1003d1d1 vJoyInterface.obj + 0006:000001d2 __510B0051_eh@h 1003d1d2 vJoyInterface.obj + 0006:000001d3 __1BEF3287_vcruntime_exception@h 1003d1d3 vJoyInterface.obj + 0006:000001d4 __5D994F5F_exception 1003d1d4 vJoyInterface.obj + 0006:000001d5 __7E4C13A5_new 1003d1d5 vJoyInterface.obj + 0006:000001d6 __5795C389_xatomic@h 1003d1d6 vJoyInterface.obj + 0006:000001d7 __D2C478D0_cstring 1003d1d7 vJoyInterface.obj + 0006:000001d8 __A997C6C5_xutility 1003d1d8 vJoyInterface.obj + 0006:000001d9 __C3CE3678_xmemory 1003d1d9 vJoyInterface.obj + 0006:000001da __7352ED38_xtree 1003d1da vJoyInterface.obj + 0006:000001db __8602FD5B_map 1003d1db vJoyInterface.obj + 0006:000001dc __7C4CD365_INITGUID@H 1003d1dc vJoyInterface.obj + 0006:000001dd __D33F56CB_public@h 1003d1dd vJoyInterface.obj + 0006:000001de __701FEF85_stdafx@h 1003d1de vJoyInterface.obj + 0006:000001df __5DDD8A17_vJoyInterface@pch 1003d1df vJoyInterface.obj + 0006:000001e0 __06BD36BF_assert@h 1003d1e0 vJoyInterface.obj + 0006:000001e1 __C1D62156_spapidef@h 1003d1e1 vJoyInterface.obj + 0006:000001e2 __1C2F47EE_dpa_dsa@h 1003d1e2 vJoyInterface.obj + 0006:000001e3 __C5859B4B_commctrl@h 1003d1e3 vJoyInterface.obj + 0006:000001e4 __77B432AB_devpropdef@h 1003d1e4 vJoyInterface.obj + 0006:000001e5 __C1400A33_setupapi@h 1003d1e5 vJoyInterface.obj + 0006:000001e6 __B8BC9EA1_hidusage@h 1003d1e6 vJoyInterface.obj + 0006:000001e7 __CB81E9A0_hidpi@h 1003d1e7 vJoyInterface.obj + 0006:000001e8 __0A3E78F6_Hidsdi@h 1003d1e8 vJoyInterface.obj + 0006:000001e9 __6F8C1290_Dbt@h 1003d1e9 vJoyInterface.obj + 0006:000001ea __7A0A7160_tchar@h 1003d1ea vJoyInterface.obj + 0006:000001eb __67E0D18C_vJoyInterface@h 1003d1eb vJoyInterface.obj + 0006:000001ec __8D63CA82_vJoyInterface@cpp 1003d1ec vJoyInterface.obj + 0008:00000270 $R000000 1003f270 version.res + 0008:00000280 $R000010 1003f280 version.res + 0008:00000288 $R000018 1003f288 version.res + 0008:00000608 $R000398 1003f608 version.res diff --git a/legacy/vjoyinterface - Copy.h b/legacy/vjoyinterface - Copy.h new file mode 100644 index 0000000..0272a0f --- /dev/null +++ b/legacy/vjoyinterface - Copy.h @@ -0,0 +1,107 @@ +// The following ifdef block is the standard way of creating macros which make exporting +// from a DLL simpler. All files within this DLL are compiled with the VJOYINTERFACE_EXPORTS +// symbol defined on the command line. this symbol should not be defined on any project +// that uses this DLL. This way any other project whose source files include this file see +// VJOYINTERFACE_API functions as being imported from a DLL, whereas this DLL sees symbols +// defined with this macro as being exported. +#ifdef VJOYINTERFACE_EXPORTS +#define VJOYINTERFACE_API __declspec(dllexport) +#else +#define VJOYINTERFACE_API __declspec(dllimport) +#endif + +///////////////////////////// vJoy device (collection) status //////////////////////////////////////////// +#ifndef VJDSTAT +#define VJDSTAT +enum VjdStat /* Declares an enumeration data type called BOOLEAN */ +{ + VJD_STAT_OWN, // The vJoy Device is owned by this application. + VJD_STAT_FREE, // The vJoy Device is NOT owned by any application (including this one). + VJD_STAT_BUSY, // The vJoy Device is owned by another application. It cannot be acquired by this application. + VJD_STAT_MISS, // The vJoy Device is missing. It either does not exist or the driver is down. + VJD_STAT_UNKN // Unknown +}; + +/* Error codes for some of the functions */ +#define NO_HANDLE_BY_INDEX -1 +#define BAD_PREPARSED_DATA -2 +#define NO_CAPS -3 +#define BAD_N_BTN_CAPS -4 +#define BAD_CALLOC -5 +#define BAD_BTN_CAPS -6 +#define BAD_BTN_RANGE -7 +#define BAD_N_VAL_CAPS -8 +#define BAD_ID_RANGE -9 +#define NO_SUCH_AXIS -10 + +/* Environment Variables */ +#define INTERFACE_LOG_LEVEL "VJOYINTERFACELOGLEVEL" +#define INTERFACE_LOG_FILE "VJOYINTERFACELOGFILE" +#define INTERFACE_DEF_LOG_FILE "vJoyInterface.log" + +struct DEV_INFO { + BYTE DeviceID; // Device ID: Valid values are 1-16 + BYTE nImplemented; // Number of implemented device: Valid values are 1-16 + BYTE isImplemented; // Is this device implemented? + BYTE MaxDevices; // Maximum number of devices that may be implemented (16) + BYTE DriverFFB; // Does this driver support FFB (False) + BYTE DeviceFFB; // Does this device support FFB (False) +} ; + +typedef void (CALLBACK *RemovalCB)(BOOL, BOOL, PVOID); + +#endif +extern "C" { +///////////////////////////// vJoy device (collection) Control interface ///////////////////////////////// +/* + These functions allow writing feeders and other applications that interface with vJoy + It is assumed that only one vJoy top-device (= Raw PDO) exists. + This top-level device can have up to 16 siblings (=top-level Reports/collections) + Each sibling is refered to as a "vJoy Device" and is attributed a unique Report ID (Range: 1-16). + + Naming convetion: + VJD = vJoy Device + rID = Report ID +*/ + +///// General driver data +VJOYINTERFACE_API SHORT __cdecl GetvJoyVersion(void); +VJOYINTERFACE_API BOOL __cdecl vJoyEnabled(void); +VJOYINTERFACE_API PVOID __cdecl GetvJoyProductString(void); +VJOYINTERFACE_API PVOID __cdecl GetvJoyManufacturerString(void); +VJOYINTERFACE_API PVOID __cdecl GetvJoySerialNumberString(void); +VJOYINTERFACE_API BOOL __cdecl DriverMatch(WORD * DllVer, WORD * DrvVer); +VJOYINTERFACE_API VOID __cdecl RegisterRemovalCB(RemovalCB cb, PVOID data); + + +///// vJoy Device properties +VJOYINTERFACE_API int __cdecl GetVJDButtonNumber(UINT rID); // Get the number of buttons defined in the specified VDJ +VJOYINTERFACE_API int __cdecl GetVJDDiscPovNumber(UINT rID); // Get the number of descrete-type POV hats defined in the specified VDJ +VJOYINTERFACE_API int __cdecl GetVJDContPovNumber(UINT rID); // Get the number of descrete-type POV hats defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl GetVJDAxisExist(UINT rID, UINT Axis); // Test if given axis defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl GetVJDAxisMax(UINT rID, UINT Axis, LONG * Max); // Get logical Maximum value for a given axis defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl GetVJDAxisMin(UINT rID, UINT Axis, LONG * Min); // Get logical Minimum value for a given axis defined in the specified VDJ + +///// Write access to vJoy Device - Basic +VJOYINTERFACE_API BOOL __cdecl AcquireVJD(UINT rID); // Acquire the specified vJoy Device. +VJOYINTERFACE_API VOID __cdecl RelinquishVJD(UINT rID); // Relinquish the specified vJoy Device. +VJOYINTERFACE_API BOOL __cdecl UpdateVJD(UINT rID, PVOID pData); // Update the position data of the specified vJoy Device. +VJOYINTERFACE_API enum VjdStat __cdecl GetVJDStatus(UINT rID); // Get the status of the specified vJoy Device. + +///// Write access to vJoy Device - Modifyiers +// This group of functions modify the current value of the position data +// They replace the need to create a structure of position data then call UpdateVJD + +//// Reset functions +VJOYINTERFACE_API BOOL __cdecl ResetVJD(UINT rID); // Reset all controls to predefined values in the specified VDJ +VJOYINTERFACE_API VOID __cdecl ResetAll(void); // Reset all controls to predefined values in all VDJ +VJOYINTERFACE_API BOOL __cdecl ResetButtons(UINT rID); // Reset all buttons (To 0) in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl ResetPovs(UINT rID); // Reset all POV Switches (To -1) in the specified VDJ + +// Write data +VJOYINTERFACE_API BOOL __cdecl SetAxis(LONG Value, UINT rID, UINT Axis); // Write Value to a given axis defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl SetBtn(BOOL Value, UINT rID, UCHAR nBtn); // Write Value to a given button defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl SetDiscPov(int Value, UINT rID, UCHAR nPov); // Write Value to a given descrete POV defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl SetContPov(DWORD Value, UINT rID, UCHAR nPov); // Write Value to a given continuous POV defined in the specified VDJ + +} // extern "C" \ No newline at end of file diff --git a/legacy/vjoyinterface-x86-XPcompat.zip b/legacy/vjoyinterface-x86-XPcompat.zip new file mode 100644 index 0000000..fcc7c9d Binary files /dev/null and b/legacy/vjoyinterface-x86-XPcompat.zip differ diff --git a/legacy/vjoyinterface-x86-XPcompat/vJoyInterface.dll b/legacy/vjoyinterface-x86-XPcompat/vJoyInterface.dll new file mode 100644 index 0000000..c0663ee Binary files /dev/null and b/legacy/vjoyinterface-x86-XPcompat/vJoyInterface.dll differ diff --git a/legacy/vjoyinterface-x86-XPcompat/vJoyInterface.lib b/legacy/vjoyinterface-x86-XPcompat/vJoyInterface.lib new file mode 100644 index 0000000..e879f23 Binary files /dev/null and b/legacy/vjoyinterface-x86-XPcompat/vJoyInterface.lib differ diff --git a/legacy/vjoyinterface-x86-XPcompat/vjoyinterface.h b/legacy/vjoyinterface-x86-XPcompat/vjoyinterface.h new file mode 100644 index 0000000..0272a0f --- /dev/null +++ b/legacy/vjoyinterface-x86-XPcompat/vjoyinterface.h @@ -0,0 +1,107 @@ +// The following ifdef block is the standard way of creating macros which make exporting +// from a DLL simpler. All files within this DLL are compiled with the VJOYINTERFACE_EXPORTS +// symbol defined on the command line. this symbol should not be defined on any project +// that uses this DLL. This way any other project whose source files include this file see +// VJOYINTERFACE_API functions as being imported from a DLL, whereas this DLL sees symbols +// defined with this macro as being exported. +#ifdef VJOYINTERFACE_EXPORTS +#define VJOYINTERFACE_API __declspec(dllexport) +#else +#define VJOYINTERFACE_API __declspec(dllimport) +#endif + +///////////////////////////// vJoy device (collection) status //////////////////////////////////////////// +#ifndef VJDSTAT +#define VJDSTAT +enum VjdStat /* Declares an enumeration data type called BOOLEAN */ +{ + VJD_STAT_OWN, // The vJoy Device is owned by this application. + VJD_STAT_FREE, // The vJoy Device is NOT owned by any application (including this one). + VJD_STAT_BUSY, // The vJoy Device is owned by another application. It cannot be acquired by this application. + VJD_STAT_MISS, // The vJoy Device is missing. It either does not exist or the driver is down. + VJD_STAT_UNKN // Unknown +}; + +/* Error codes for some of the functions */ +#define NO_HANDLE_BY_INDEX -1 +#define BAD_PREPARSED_DATA -2 +#define NO_CAPS -3 +#define BAD_N_BTN_CAPS -4 +#define BAD_CALLOC -5 +#define BAD_BTN_CAPS -6 +#define BAD_BTN_RANGE -7 +#define BAD_N_VAL_CAPS -8 +#define BAD_ID_RANGE -9 +#define NO_SUCH_AXIS -10 + +/* Environment Variables */ +#define INTERFACE_LOG_LEVEL "VJOYINTERFACELOGLEVEL" +#define INTERFACE_LOG_FILE "VJOYINTERFACELOGFILE" +#define INTERFACE_DEF_LOG_FILE "vJoyInterface.log" + +struct DEV_INFO { + BYTE DeviceID; // Device ID: Valid values are 1-16 + BYTE nImplemented; // Number of implemented device: Valid values are 1-16 + BYTE isImplemented; // Is this device implemented? + BYTE MaxDevices; // Maximum number of devices that may be implemented (16) + BYTE DriverFFB; // Does this driver support FFB (False) + BYTE DeviceFFB; // Does this device support FFB (False) +} ; + +typedef void (CALLBACK *RemovalCB)(BOOL, BOOL, PVOID); + +#endif +extern "C" { +///////////////////////////// vJoy device (collection) Control interface ///////////////////////////////// +/* + These functions allow writing feeders and other applications that interface with vJoy + It is assumed that only one vJoy top-device (= Raw PDO) exists. + This top-level device can have up to 16 siblings (=top-level Reports/collections) + Each sibling is refered to as a "vJoy Device" and is attributed a unique Report ID (Range: 1-16). + + Naming convetion: + VJD = vJoy Device + rID = Report ID +*/ + +///// General driver data +VJOYINTERFACE_API SHORT __cdecl GetvJoyVersion(void); +VJOYINTERFACE_API BOOL __cdecl vJoyEnabled(void); +VJOYINTERFACE_API PVOID __cdecl GetvJoyProductString(void); +VJOYINTERFACE_API PVOID __cdecl GetvJoyManufacturerString(void); +VJOYINTERFACE_API PVOID __cdecl GetvJoySerialNumberString(void); +VJOYINTERFACE_API BOOL __cdecl DriverMatch(WORD * DllVer, WORD * DrvVer); +VJOYINTERFACE_API VOID __cdecl RegisterRemovalCB(RemovalCB cb, PVOID data); + + +///// vJoy Device properties +VJOYINTERFACE_API int __cdecl GetVJDButtonNumber(UINT rID); // Get the number of buttons defined in the specified VDJ +VJOYINTERFACE_API int __cdecl GetVJDDiscPovNumber(UINT rID); // Get the number of descrete-type POV hats defined in the specified VDJ +VJOYINTERFACE_API int __cdecl GetVJDContPovNumber(UINT rID); // Get the number of descrete-type POV hats defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl GetVJDAxisExist(UINT rID, UINT Axis); // Test if given axis defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl GetVJDAxisMax(UINT rID, UINT Axis, LONG * Max); // Get logical Maximum value for a given axis defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl GetVJDAxisMin(UINT rID, UINT Axis, LONG * Min); // Get logical Minimum value for a given axis defined in the specified VDJ + +///// Write access to vJoy Device - Basic +VJOYINTERFACE_API BOOL __cdecl AcquireVJD(UINT rID); // Acquire the specified vJoy Device. +VJOYINTERFACE_API VOID __cdecl RelinquishVJD(UINT rID); // Relinquish the specified vJoy Device. +VJOYINTERFACE_API BOOL __cdecl UpdateVJD(UINT rID, PVOID pData); // Update the position data of the specified vJoy Device. +VJOYINTERFACE_API enum VjdStat __cdecl GetVJDStatus(UINT rID); // Get the status of the specified vJoy Device. + +///// Write access to vJoy Device - Modifyiers +// This group of functions modify the current value of the position data +// They replace the need to create a structure of position data then call UpdateVJD + +//// Reset functions +VJOYINTERFACE_API BOOL __cdecl ResetVJD(UINT rID); // Reset all controls to predefined values in the specified VDJ +VJOYINTERFACE_API VOID __cdecl ResetAll(void); // Reset all controls to predefined values in all VDJ +VJOYINTERFACE_API BOOL __cdecl ResetButtons(UINT rID); // Reset all buttons (To 0) in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl ResetPovs(UINT rID); // Reset all POV Switches (To -1) in the specified VDJ + +// Write data +VJOYINTERFACE_API BOOL __cdecl SetAxis(LONG Value, UINT rID, UINT Axis); // Write Value to a given axis defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl SetBtn(BOOL Value, UINT rID, UCHAR nBtn); // Write Value to a given button defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl SetDiscPov(int Value, UINT rID, UCHAR nPov); // Write Value to a given descrete POV defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl SetContPov(DWORD Value, UINT rID, UCHAR nPov); // Write Value to a given continuous POV defined in the specified VDJ + +} // extern "C" \ No newline at end of file diff --git a/legacy/vjoyinterface.h b/legacy/vjoyinterface.h new file mode 100644 index 0000000..0272a0f --- /dev/null +++ b/legacy/vjoyinterface.h @@ -0,0 +1,107 @@ +// The following ifdef block is the standard way of creating macros which make exporting +// from a DLL simpler. All files within this DLL are compiled with the VJOYINTERFACE_EXPORTS +// symbol defined on the command line. this symbol should not be defined on any project +// that uses this DLL. This way any other project whose source files include this file see +// VJOYINTERFACE_API functions as being imported from a DLL, whereas this DLL sees symbols +// defined with this macro as being exported. +#ifdef VJOYINTERFACE_EXPORTS +#define VJOYINTERFACE_API __declspec(dllexport) +#else +#define VJOYINTERFACE_API __declspec(dllimport) +#endif + +///////////////////////////// vJoy device (collection) status //////////////////////////////////////////// +#ifndef VJDSTAT +#define VJDSTAT +enum VjdStat /* Declares an enumeration data type called BOOLEAN */ +{ + VJD_STAT_OWN, // The vJoy Device is owned by this application. + VJD_STAT_FREE, // The vJoy Device is NOT owned by any application (including this one). + VJD_STAT_BUSY, // The vJoy Device is owned by another application. It cannot be acquired by this application. + VJD_STAT_MISS, // The vJoy Device is missing. It either does not exist or the driver is down. + VJD_STAT_UNKN // Unknown +}; + +/* Error codes for some of the functions */ +#define NO_HANDLE_BY_INDEX -1 +#define BAD_PREPARSED_DATA -2 +#define NO_CAPS -3 +#define BAD_N_BTN_CAPS -4 +#define BAD_CALLOC -5 +#define BAD_BTN_CAPS -6 +#define BAD_BTN_RANGE -7 +#define BAD_N_VAL_CAPS -8 +#define BAD_ID_RANGE -9 +#define NO_SUCH_AXIS -10 + +/* Environment Variables */ +#define INTERFACE_LOG_LEVEL "VJOYINTERFACELOGLEVEL" +#define INTERFACE_LOG_FILE "VJOYINTERFACELOGFILE" +#define INTERFACE_DEF_LOG_FILE "vJoyInterface.log" + +struct DEV_INFO { + BYTE DeviceID; // Device ID: Valid values are 1-16 + BYTE nImplemented; // Number of implemented device: Valid values are 1-16 + BYTE isImplemented; // Is this device implemented? + BYTE MaxDevices; // Maximum number of devices that may be implemented (16) + BYTE DriverFFB; // Does this driver support FFB (False) + BYTE DeviceFFB; // Does this device support FFB (False) +} ; + +typedef void (CALLBACK *RemovalCB)(BOOL, BOOL, PVOID); + +#endif +extern "C" { +///////////////////////////// vJoy device (collection) Control interface ///////////////////////////////// +/* + These functions allow writing feeders and other applications that interface with vJoy + It is assumed that only one vJoy top-device (= Raw PDO) exists. + This top-level device can have up to 16 siblings (=top-level Reports/collections) + Each sibling is refered to as a "vJoy Device" and is attributed a unique Report ID (Range: 1-16). + + Naming convetion: + VJD = vJoy Device + rID = Report ID +*/ + +///// General driver data +VJOYINTERFACE_API SHORT __cdecl GetvJoyVersion(void); +VJOYINTERFACE_API BOOL __cdecl vJoyEnabled(void); +VJOYINTERFACE_API PVOID __cdecl GetvJoyProductString(void); +VJOYINTERFACE_API PVOID __cdecl GetvJoyManufacturerString(void); +VJOYINTERFACE_API PVOID __cdecl GetvJoySerialNumberString(void); +VJOYINTERFACE_API BOOL __cdecl DriverMatch(WORD * DllVer, WORD * DrvVer); +VJOYINTERFACE_API VOID __cdecl RegisterRemovalCB(RemovalCB cb, PVOID data); + + +///// vJoy Device properties +VJOYINTERFACE_API int __cdecl GetVJDButtonNumber(UINT rID); // Get the number of buttons defined in the specified VDJ +VJOYINTERFACE_API int __cdecl GetVJDDiscPovNumber(UINT rID); // Get the number of descrete-type POV hats defined in the specified VDJ +VJOYINTERFACE_API int __cdecl GetVJDContPovNumber(UINT rID); // Get the number of descrete-type POV hats defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl GetVJDAxisExist(UINT rID, UINT Axis); // Test if given axis defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl GetVJDAxisMax(UINT rID, UINT Axis, LONG * Max); // Get logical Maximum value for a given axis defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl GetVJDAxisMin(UINT rID, UINT Axis, LONG * Min); // Get logical Minimum value for a given axis defined in the specified VDJ + +///// Write access to vJoy Device - Basic +VJOYINTERFACE_API BOOL __cdecl AcquireVJD(UINT rID); // Acquire the specified vJoy Device. +VJOYINTERFACE_API VOID __cdecl RelinquishVJD(UINT rID); // Relinquish the specified vJoy Device. +VJOYINTERFACE_API BOOL __cdecl UpdateVJD(UINT rID, PVOID pData); // Update the position data of the specified vJoy Device. +VJOYINTERFACE_API enum VjdStat __cdecl GetVJDStatus(UINT rID); // Get the status of the specified vJoy Device. + +///// Write access to vJoy Device - Modifyiers +// This group of functions modify the current value of the position data +// They replace the need to create a structure of position data then call UpdateVJD + +//// Reset functions +VJOYINTERFACE_API BOOL __cdecl ResetVJD(UINT rID); // Reset all controls to predefined values in the specified VDJ +VJOYINTERFACE_API VOID __cdecl ResetAll(void); // Reset all controls to predefined values in all VDJ +VJOYINTERFACE_API BOOL __cdecl ResetButtons(UINT rID); // Reset all buttons (To 0) in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl ResetPovs(UINT rID); // Reset all POV Switches (To -1) in the specified VDJ + +// Write data +VJOYINTERFACE_API BOOL __cdecl SetAxis(LONG Value, UINT rID, UINT Axis); // Write Value to a given axis defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl SetBtn(BOOL Value, UINT rID, UCHAR nBtn); // Write Value to a given button defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl SetDiscPov(int Value, UINT rID, UCHAR nPov); // Write Value to a given descrete POV defined in the specified VDJ +VJOYINTERFACE_API BOOL __cdecl SetContPov(DWORD Value, UINT rID, UCHAR nPov); // Write Value to a given continuous POV defined in the specified VDJ + +} // extern "C" \ No newline at end of file diff --git a/src/RioJoy.Core/RioJoy.Core.csproj b/src/RioJoy.Core/RioJoy.Core.csproj new file mode 100644 index 0000000..6420a8f --- /dev/null +++ b/src/RioJoy.Core/RioJoy.Core.csproj @@ -0,0 +1,17 @@ + + + + + net8.0-windows + x64 + enable + enable + latest + + + + + + + diff --git a/src/RioJoy.Core/RioJoyInfo.cs b/src/RioJoy.Core/RioJoyInfo.cs new file mode 100644 index 0000000..6035ae6 --- /dev/null +++ b/src/RioJoy.Core/RioJoyInfo.cs @@ -0,0 +1,17 @@ +namespace RioJoy.Core; + +/// +/// Shared metadata for the RIOJoy runtime. The real domain types +/// (RIO serial protocol, profile model, input mapper, virtual-HID feeder) +/// land here in later phases; see docs/PLAN.md. +/// +public static class RioJoyInfo +{ + /// Product display name. + public const string Name = "RIOJoy"; + + /// + /// Successor to the legacy vJoy-based "RIOvJoy v.03" (see legacy/riovjoy2.cpp). + /// + public const string Version = "0.1.0-dev"; +} diff --git a/src/RioJoy.Tray/Program.cs b/src/RioJoy.Tray/Program.cs new file mode 100644 index 0000000..ba57da7 --- /dev/null +++ b/src/RioJoy.Tray/Program.cs @@ -0,0 +1,16 @@ +namespace RioJoy.Tray; + +internal static class Program +{ + /// + /// Entry point. RIOJoy runs as a background tray application with no main + /// window: an ApplicationContext owns the NotifyIcon and the runtime, so the + /// message loop stays alive while the only UI is the tray icon and its menu. + /// + [STAThread] + private static void Main() + { + ApplicationConfiguration.Initialize(); + Application.Run(new TrayApplicationContext()); + } +} diff --git a/src/RioJoy.Tray/RioJoy.Tray.csproj b/src/RioJoy.Tray/RioJoy.Tray.csproj new file mode 100644 index 0000000..65b4e9f --- /dev/null +++ b/src/RioJoy.Tray/RioJoy.Tray.csproj @@ -0,0 +1,18 @@ + + + + WinExe + net8.0-windows + x64 + enable + true + enable + latest + app.manifest + + + + + + + diff --git a/src/RioJoy.Tray/TrayApplicationContext.cs b/src/RioJoy.Tray/TrayApplicationContext.cs new file mode 100644 index 0000000..6ff67d8 --- /dev/null +++ b/src/RioJoy.Tray/TrayApplicationContext.cs @@ -0,0 +1,42 @@ +namespace RioJoy.Tray; + +/// +/// Owns the tray icon and (eventually) the RIOJoy runtime: the serial link to +/// the RIO, the active profile, the virtual-HID feeder, and the profile +/// auto-switch watcher. +/// +/// Phase 0 scaffold: just the tray icon + a minimal menu. Wiring the runtime is +/// Phase 5 work; the menu items below are placeholders that mirror the legacy +/// console menu (reset/recalibrate axes, version/status, quit). +/// +internal sealed class TrayApplicationContext : ApplicationContext +{ + private readonly NotifyIcon _trayIcon; + + public TrayApplicationContext() + { + var menu = new ContextMenuStrip(); + menu.Items.Add("RIOJoy (scaffold)").Enabled = false; + menu.Items.Add(new ToolStripSeparator()); + menu.Items.Add("Exit", null, (_, _) => ExitThread()); + + _trayIcon = new NotifyIcon + { + Icon = SystemIcons.Application, + Text = "RIOJoy", + Visible = true, + ContextMenuStrip = menu, + }; + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + _trayIcon.Visible = false; + _trayIcon.Dispose(); + } + + base.Dispose(disposing); + } +} diff --git a/src/RioJoy.Tray/app.manifest b/src/RioJoy.Tray/app.manifest new file mode 100644 index 0000000..1f2db80 --- /dev/null +++ b/src/RioJoy.Tray/app.manifest @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + +