From 5e4a32c81936c1365f1b842abd0f5a8215edb3c3 Mon Sep 17 00:00:00 2001 From: es3n1n Date: Sun, 13 Jul 2025 04:16:40 +0200 Subject: [PATCH] fix(com): ensure com calling convention is `__stdcall` --- cxx-shared/shared/com.hpp | 8 ++++--- defendnot/core/com.hpp | 48 +++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/cxx-shared/shared/com.hpp b/cxx-shared/shared/com.hpp index 65f14d0..d528a0c 100644 --- a/cxx-shared/shared/com.hpp +++ b/cxx-shared/shared/com.hpp @@ -9,6 +9,8 @@ #include #include +#define COM_CALLCONV __stdcall + namespace com { inline HRESULT checked(HRESULT result, const std::source_location loc = std::source_location::current()) { if (result == 0) { @@ -94,11 +96,11 @@ namespace com { static constexpr GUID kIID = IID; private: - virtual HRESULT QueryInterface() = 0; - virtual std::uint32_t AddRef() = 0; + virtual HRESULT COM_CALLCONV QueryInterface() = 0; + virtual std::uint32_t COM_CALLCONV AddRef() = 0; public: - virtual std::uint32_t Release() = 0; + virtual std::uint32_t COM_CALLCONV Release() = 0; }; template diff --git a/defendnot/core/com.hpp b/defendnot/core/com.hpp index e98fd28..0e73888 100644 --- a/defendnot/core/com.hpp +++ b/defendnot/core/com.hpp @@ -40,33 +40,33 @@ namespace defendnot { class IWscAVStatus4 : public com::IBaseObject { public: - virtual HRESULT Register(BSTR path_to_signed_product_exe, BSTR display_name, std::uint32_t, std::uint32_t) = 0; - virtual HRESULT Unregister() = 0; - virtual HRESULT UpdateStatus(WSCSecurityProductState state, BOOL unk) = 0; - virtual HRESULT InitiateOfflineCleaning(std::uint16_t*, std::uint16_t*) = 0; - virtual HRESULT NotifyUserForNearExpiration(std::uint32_t) = 0; - virtual HRESULT MakeDefaultProductRequest() = 0; - virtual HRESULT IsDefaultProductEnforced(std::uint32_t* result) = 0; - virtual HRESULT UpdateScanSubstatus(WSCSecurityProductSubStatus status) = 0; - virtual HRESULT UpdateSettingsSubstatus(WSCSecurityProductSubStatus status) = 0; - virtual HRESULT UpdateProtectionUpdateSubstatus(WSCSecurityProductSubStatus status) = 0; - virtual HRESULT RegisterAV(std::uint16_t*, std::uint16_t*, std::uint32_t, std::uint32_t) = 0; - virtual HRESULT UnregisterAV() = 0; - virtual HRESULT UpdateStatusAV(WSCSecurityProductState state, BOOL unk) = 0; - virtual HRESULT InitiateOfflineCleaningAV(std::uint16_t*, std::uint16_t*) = 0; - virtual HRESULT NotifyUserForNearExpirationAV(std::uint32_t) = 0; - virtual HRESULT RegisterFW(std::uint16_t*, std::uint16_t*, std::uint32_t, std::uint32_t) = 0; - virtual HRESULT UnregisterFW() = 0; - virtual HRESULT UpdateStatusFW(WSCSecurityProductState state) = 0; - virtual HRESULT RegisterAS(std::uint16_t*, std::uint16_t*, std::uint32_t, std::uint32_t) = 0; - virtual HRESULT UnregisterAS() = 0; - virtual HRESULT UpdateStatusAS(WSCSecurityProductState state, BOOL unk) = 0; + virtual HRESULT COM_CALLCONV Register(BSTR path_to_signed_product_exe, BSTR display_name, std::uint32_t, std::uint32_t) = 0; + virtual HRESULT COM_CALLCONV Unregister() = 0; + virtual HRESULT COM_CALLCONV UpdateStatus(WSCSecurityProductState state, BOOL unk) = 0; + virtual HRESULT COM_CALLCONV InitiateOfflineCleaning(std::uint16_t*, std::uint16_t*) = 0; + virtual HRESULT COM_CALLCONV NotifyUserForNearExpiration(std::uint32_t) = 0; + virtual HRESULT COM_CALLCONV MakeDefaultProductRequest() = 0; + virtual HRESULT COM_CALLCONV IsDefaultProductEnforced(std::uint32_t* result) = 0; + virtual HRESULT COM_CALLCONV UpdateScanSubstatus(WSCSecurityProductSubStatus status) = 0; + virtual HRESULT COM_CALLCONV UpdateSettingsSubstatus(WSCSecurityProductSubStatus status) = 0; + virtual HRESULT COM_CALLCONV UpdateProtectionUpdateSubstatus(WSCSecurityProductSubStatus status) = 0; + virtual HRESULT COM_CALLCONV RegisterAV(std::uint16_t*, std::uint16_t*, std::uint32_t, std::uint32_t) = 0; + virtual HRESULT COM_CALLCONV UnregisterAV() = 0; + virtual HRESULT COM_CALLCONV UpdateStatusAV(WSCSecurityProductState state, BOOL unk) = 0; + virtual HRESULT COM_CALLCONV InitiateOfflineCleaningAV(std::uint16_t*, std::uint16_t*) = 0; + virtual HRESULT COM_CALLCONV NotifyUserForNearExpirationAV(std::uint32_t) = 0; + virtual HRESULT COM_CALLCONV RegisterFW(std::uint16_t*, std::uint16_t*, std::uint32_t, std::uint32_t) = 0; + virtual HRESULT COM_CALLCONV UnregisterFW() = 0; + virtual HRESULT COM_CALLCONV UpdateStatusFW(WSCSecurityProductState state) = 0; + virtual HRESULT COM_CALLCONV RegisterAS(std::uint16_t*, std::uint16_t*, std::uint32_t, std::uint32_t) = 0; + virtual HRESULT COM_CALLCONV UnregisterAS() = 0; + virtual HRESULT COM_CALLCONV UpdateStatusAS(WSCSecurityProductState state, BOOL unk) = 0; }; class IWscASStatus : public com::IBaseObject { public: - virtual HRESULT Register(BSTR path_to_signed_product_exe, BSTR display_name, std::uint32_t, std::uint32_t) = 0; - virtual HRESULT Unregister() = 0; - virtual HRESULT UpdateStatus(WSCSecurityProductState state, BOOL unk) = 0; + virtual HRESULT COM_CALLCONV Register(BSTR path_to_signed_product_exe, BSTR display_name, std::uint32_t, std::uint32_t) = 0; + virtual HRESULT COM_CALLCONV Unregister() = 0; + virtual HRESULT COM_CALLCONV UpdateStatus(WSCSecurityProductState state, BOOL unk) = 0; }; } // namespace defendnot