)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"f17fe8cff88d38a18f216926c99688669babc37c","unresolved":true,"context_lines":[{"line_number":10,"context_line":"win32_get_arch(). Looking at the code I decided to"},{"line_number":11,"context_line":"propose removing the various work-arounds from pre-Win10"},{"line_number":12,"context_line":"times. Microsoft certainly doesn\u0027t support these"},{"line_number":13,"context_line":"versions anymore, so let\u0027s also remove that."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Note that this does not remove all instances of GetProcAddress:"},{"line_number":16,"context_line":"- One is required due to a issue in MinGW toolchain (DiInstallDevice)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"594d6ebe_7e1296e7","line":13,"updated":"2026-09-28 14:21:30.000000000","message":"Unfortunately, if I\u0027m reading this correctly Microsoft still supports things like Windows Server 2016.","commit_id":"7f48516ea1d96c7a8545cbdb1292def401ac411e"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"220de9f4e2c132372c1433135d5955f22647b254","unresolved":true,"context_lines":[{"line_number":10,"context_line":"win32_get_arch(). Looking at the code I decided to"},{"line_number":11,"context_line":"propose removing the various work-arounds from pre-Win10"},{"line_number":12,"context_line":"times. Microsoft certainly doesn\u0027t support these"},{"line_number":13,"context_line":"versions anymore, so let\u0027s also remove that."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Note that this does not remove all instances of GetProcAddress:"},{"line_number":16,"context_line":"- One is required due to a issue in MinGW toolchain (DiInstallDevice)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5f702b35_a751a9ea","line":13,"in_reply_to":"594d6ebe_7e1296e7","updated":"2026-09-28 14:22:04.000000000","message":"And I forgot to include the link...\n\nhttps://learn.microsoft.com/en-us/lifecycle/products/?terms\u003dserver%202016","commit_id":"7f48516ea1d96c7a8545cbdb1292def401ac411e"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"7791ed932815172134b90f7eca10d271342eba6c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"win32_get_arch(). Looking at the code I decided to"},{"line_number":11,"context_line":"propose removing the various work-arounds from pre-Win10"},{"line_number":12,"context_line":"times. Microsoft certainly doesn\u0027t support these"},{"line_number":13,"context_line":"versions anymore, so let\u0027s also remove that."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Note that this does not remove all instances of GetProcAddress:"},{"line_number":16,"context_line":"- One is required due to a issue in MinGW toolchain (DiInstallDevice)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9ec55521_a4065670","line":13,"in_reply_to":"5f702b35_a751a9ea","updated":"2026-09-28 14:53:17.000000000","message":"Agreed that this is not relevant as long as we do make the change 2.8-only.","commit_id":"7f48516ea1d96c7a8545cbdb1292def401ac411e"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"41c6e46c58b804e5fb20fd0273a399d2772c391e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"371b69a7_bbbf27ad","updated":"2026-09-30 13:22:39.000000000","message":"Fixed issue in CMakeLists.txt","commit_id":"5f771fbfdf43a76d572bd3eb510e88358f56b7e8"}],"CMakeLists.txt":[{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"71b076d38cb5e322b0d7266f8444a913fdebddfd","unresolved":true,"context_lines":[{"line_number":254,"context_line":"if (WIN32)"},{"line_number":255,"context_line":"    # Required due to a bug in MinGW where the .h file is correct"},{"line_number":256,"context_line":"    # but the symbol is missing from newdev.dll"},{"line_number":257,"context_line":"    check_symbol_exists(DiInstallDevice newdev.h HAVE_DIINSTALLDEVICE)"},{"line_number":258,"context_line":"endif ()"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"# Some OS (e.g. FreeBSD) need some basic headers to allow"}],"source_content_type":"text/x-cmake","patch_set":2,"id":"959479ae_e78ba2a1","line":257,"updated":"2026-09-29 11:02:27.000000000","message":"This is actually wrong. Forgot to set `CMAKE_REQUIRED_LIBRARIES`","commit_id":"7f48516ea1d96c7a8545cbdb1292def401ac411e"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"e2dd9022bf73f98310a8de59f6487cba0dc4753b","unresolved":false,"context_lines":[{"line_number":254,"context_line":"if (WIN32)"},{"line_number":255,"context_line":"    # Required due to a bug in MinGW where the .h file is correct"},{"line_number":256,"context_line":"    # but the symbol is missing from newdev.dll"},{"line_number":257,"context_line":"    check_symbol_exists(DiInstallDevice newdev.h HAVE_DIINSTALLDEVICE)"},{"line_number":258,"context_line":"endif ()"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"# Some OS (e.g. FreeBSD) need some basic headers to allow"}],"source_content_type":"text/x-cmake","patch_set":2,"id":"dd235a37_5f58c852","line":257,"in_reply_to":"959479ae_e78ba2a1","updated":"2026-09-30 13:22:55.000000000","message":"Done","commit_id":"7f48516ea1d96c7a8545cbdb1292def401ac411e"}],"src/openvpn/win32.c":[{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"9d7185d777516cae1e22fdbe265ac00c795678ce","unresolved":true,"context_lines":[{"line_number":1347,"context_line":"    USHORT process_machine \u003d 0;"},{"line_number":1348,"context_line":"    USHORT native_machine \u003d 0;"},{"line_number":1349,"context_line":"    BOOL is_wow64 \u003d IsWow64Process2(GetCurrentProcess(), \u0026process_machine, \u0026native_machine);"},{"line_number":1350,"context_line":"    if (is_wow64)"},{"line_number":1351,"context_line":"    {"},{"line_number":1352,"context_line":"        switch (native_machine)"},{"line_number":1353,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"2e586562_54ee6de4","line":1350,"updated":"2026-09-28 13:36:29.000000000","message":"This is I believe a bug.\n\nThis patch doesn\u0027t introduce it, but after staring at the code for a bit, reading the Microsoft docs at https://learn.microsoft.com/en-us/windows/win32/api/wow64apiset/nf-wow64apiset-iswow64process2 and doing more research it looks like the `BOOL` returned by `IsWow64Process2()` only tells us if the function suceeded or failed.\n\nIt can fail for reasons such as `ERROR_ACCESS_DENIED`, `ERROR_INVALID_HANDLE` or `ERROR_INVALID_PARAMETER`, and if it succeds it doesn\u0027t mean the process `is_wow64` really.\n\n\nWe may want something like this:\n\n```\n    USHORT process_machine \u003d 0;\n    USHORT native_machine \u003d 0;\n    if (!IsWow64Process2(GetCurrentProcess(), \u0026process_machine, \u0026native_machine))\n    {\n        return;\n    }\n\n    switch (native_machine)\n    {\n        case IMAGE_FILE_MACHINE_ARM64:\n            *host_arch \u003d ARCH_ARM64;\n            break;\n\n        case IMAGE_FILE_MACHINE_AMD64:\n            *host_arch \u003d ARCH_AMD64;\n            break;\n\n        case IMAGE_FILE_MACHINE_I386:\n            *host_arch \u003d ARCH_X86;\n            break;\n\n        default:\n            *host_arch \u003d ARCH_UNKNOWN;\n            break;\n    }\n\n    if (*host_arch \u003d\u003d *process_arch)\n    {\n        *host_arch \u003d ARCH_NATIVE;\n    }\n```","commit_id":"5021b5a573c2cf4d791c625689bd920c94916de3"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"8532d28af152d01f39374c4e4b427837ecb6b6c6","unresolved":false,"context_lines":[{"line_number":1347,"context_line":"    USHORT process_machine \u003d 0;"},{"line_number":1348,"context_line":"    USHORT native_machine \u003d 0;"},{"line_number":1349,"context_line":"    BOOL is_wow64 \u003d IsWow64Process2(GetCurrentProcess(), \u0026process_machine, \u0026native_machine);"},{"line_number":1350,"context_line":"    if (is_wow64)"},{"line_number":1351,"context_line":"    {"},{"line_number":1352,"context_line":"        switch (native_machine)"},{"line_number":1353,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"153287c6_4f670f4f","line":1350,"in_reply_to":"2e586562_54ee6de4","updated":"2026-09-28 14:11:52.000000000","message":"Done","commit_id":"5021b5a573c2cf4d791c625689bd920c94916de3"}]}
