windows.networking.connectivity: Fake success for IsWwanConnectionProfile and IsWlanConnectionProfile
From: Fabian Maurer dark.shadow4@web.de
--- include/windows.networking.connectivity.idl | 207 ++++++++++++++++++++ 1 file changed, 207 insertions(+)
diff --git a/include/windows.networking.connectivity.idl b/include/windows.networking.connectivity.idl index 451e67df096..0507882d73f 100644 --- a/include/windows.networking.connectivity.idl +++ b/include/windows.networking.connectivity.idl @@ -60,6 +60,10 @@ namespace Windows.Networking.Connectivity runtimeclass NetworkItem; runtimeclass NetworkSecuritySettings; runtimeclass ProxyConfiguration; + runtimeclass WwanConnectionProfileDetails; + runtimeclass WlanConnectionProfileDetails; + runtimeclass NetworkUsage; + runtimeclass ConnectivityInterval;
typedef enum NetworkAuthenticationType NetworkAuthenticationType; typedef enum NetworkConnectivityLevel NetworkConnectivityLevel; @@ -67,6 +71,13 @@ namespace Windows.Networking.Connectivity typedef enum NetworkEncryptionType NetworkEncryptionType; typedef enum NetworkTypes NetworkTypes; typedef enum RoamingStates RoamingStates; + typedef enum DomainConnectivityLevel DomainConnectivityLevel; + typedef enum DataUsageGranularity DataUsageGranularity; + typedef enum TriStates TriStates; + typedef enum WwanNetworkRegistrationState WwanNetworkRegistrationState; + typedef enum WwanDataClass WwanDataClass; + + typedef struct NetworkUsageStates NetworkUsageStates;
declare { @@ -79,6 +90,20 @@ namespace Windows.Networking.Connectivity interface Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.LanIdentifier *>; interface Windows.Foundation.Collections.IVectorView<Windows.Networking.HostName *>; interface Windows.Foundation.Collections.IVectorView<Windows.Networking.EndpointPair *>; + interface Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.NetworkUsage*>; + interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.NetworkUsage*>*>; + interface Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.ConnectivityInterval*>; + interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.ConnectivityInterval*>*>; + interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.ConnectivityInterval*>*>; + interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Networking.Connectivity.ConnectionProfile*>; + interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.NetworkUsage*>*>; + } + + [ + contractversion(2.0), + ] + apicontract WwanContract + { }
[ @@ -159,6 +184,83 @@ namespace Windows.Networking.Connectivity Roaming = 0x2, };
+ [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + ] + enum DomainConnectivityLevel + { + None = 0, + Unauthenticated = 1, + Authenticated = 2 + }; + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + ] + enum DataUsageGranularity + { + PerMinute = 0, + PerHour = 1, + PerDay = 2, + Total = 3 + }; + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + ] + enum TriStates + { + DoNotCare = 0, + No = 1, + Yes = 2 + }; + + [ + contract(Windows.Networking.Connectivity.WwanContract, 1.0), + ] + enum WwanNetworkRegistrationState + { + None = 0, + Deregistered = 1, + Searching = 2, + Home = 3, + Roaming = 4, + Partner = 5, + Denied = 6 + }; + + [ + contract(Windows.Networking.Connectivity.WwanContract, 1.0), + flags, + ] + enum WwanDataClass + { + None = 0x0, + Gprs = 0x1, + Edge = 0x2, + Umts = 0x4, + Hsdpa = 0x8, + Hsupa = 0x10, + LteAdvanced = 0x20, + Cdma1xRtt = 0x10000, + Cdma1xEvdo = 0x20000, + Cdma1xEvdoRevA = 0x40000, + Cdma1xEvdv = 0x80000, + Cdma3xRtt = 0x100000, + Cdma1xEvdoRevB = 0x200000, + CdmaUmb = 0x400000, + Custom = 0x80000000 + }; + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + ] + struct NetworkUsageStates + { + Windows.Networking.Connectivity.TriStates Roaming; + Windows.Networking.Connectivity.TriStates Shared; + }; + [ contract(Windows.Foundation.UniversalApiContract, 1.0), uuid(71ba143f-598e-49d0-84eb-8febaedcc195), @@ -199,6 +301,28 @@ namespace Windows.Networking.Connectivity [propget] HRESULT NetworkSecuritySettings([out, retval] Windows.Networking.Connectivity.NetworkSecuritySettings **value); }
+ [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + exclusiveto(Windows.Networking.Connectivity.ConnectionProfile), + uuid(e2045145-4c9f-400c-9150-7ec7d6e2888a), + ] + interface IConnectionProfile2 : IInspectable + { + [propget] HRESULT IsWwanConnectionProfile([out, retval] boolean *value); + [propget] HRESULT IsWlanConnectionProfile([out, retval] boolean *value); + [propget] HRESULT WwanConnectionProfileDetails([out, retval] Windows.Networking.Connectivity.WwanConnectionProfileDetails **value); + [propget] HRESULT WlanConnectionProfileDetails([out, retval] Windows.Networking.Connectivity.WlanConnectionProfileDetails **value); + [propget] HRESULT ServiceProviderGuid([out, retval] Windows.Foundation.IReference<GUID> **value); + HRESULT GetSignalBars([out, retval] Windows.Foundation.IReference<BYTE> **value); + HRESULT GetDomainConnectivityLevel([out, retval] Windows.Networking.Connectivity.DomainConnectivityLevel *value); + HRESULT GetNetworkUsageAsync([in] Windows.Foundation.DateTime time_start, [in] Windows.Foundation.DateTime time_end, + [in] Windows.Networking.Connectivity.DataUsageGranularity granularity, [in] Windows.Networking.Connectivity.NetworkUsageStates states, + [out, retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.NetworkUsage*>*> **value); + HRESULT GetConnectivityIntervalsAsync([in] Windows.Foundation.DateTime time_start, [in] Windows.Foundation.DateTime time_end, + [in] Windows.Networking.Connectivity.NetworkUsageStates states, + [out, retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.Connectivity.ConnectivityInterval*>*> **value); + } + [ contract(Windows.Foundation.UniversalApiContract, 1.0), exclusiveto(Windows.Networking.Connectivity.DataPlanStatus), @@ -339,6 +463,52 @@ namespace Windows.Networking.Connectivity [propget] HRESULT CanConnectDirectly([out, retval] boolean *value); }
+ [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + exclusiveto(Windows.Networking.Connectivity.NetworkUsage), + uuid(49da8fce-9985-4927-bf5b-072b5c65f8d9), + ] + interface INetworkUsage : IInspectable + { + [propget] HRESULT BytesSent([out, retval] UINT64 *value); + [propget] HRESULT BytesReceived([out, retval] UINT64 *value); + [propget] HRESULT ConnectionDuration([out, retval] Windows.Foundation.TimeSpan *duration); + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + exclusiveto(Windows.Networking.Connectivity.ConnectivityInterval), + uuid(4faa3fff-6746-4824-a964-eed8e87f8709), + ] + interface IConnectivityInterval : IInspectable + { + [propget] HRESULT StartTime([out, retval] Windows.Foundation.DateTime *time_start); + [propget] HRESULT ConnectionDuration([out, retval] Windows.Foundation.TimeSpan *duration); + } + + [ + contract(Windows.Networking.Connectivity.WwanContract, 1.0), + exclusiveto(Windows.Networking.Connectivity.WwanConnectionProfileDetails), + uuid(0e4da8fe-835f-4df3-82fd-df556ebc09ef), + ] + interface IWwanConnectionProfileDetails : IInspectable + { + [propget] HRESULT HomeProviderId([out, retval] HSTRING *value); + [propget] HRESULT AccessPointName([out, retval] HSTRING *value); + HRESULT GetNetworkRegistrationState([out, retval] Windows.Networking.Connectivity.WwanNetworkRegistrationState *value); + HRESULT GetCurrentDataClass([out, retval] Windows.Networking.Connectivity.WwanDataClass *value); + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + exclusiveto(Windows.Networking.Connectivity.WlanConnectionProfileDetails), + uuid(562098cb-b35a-4bf1-a884-b7557e88ff86), + ] + interface IWlanConnectionProfileDetails : IInspectable + { + HRESULT GetConnectedSsid([out] [retval] HSTRING *value); + } + [ contract(Windows.Foundation.UniversalApiContract, 1.0), marshaling_behavior(agile), @@ -460,4 +630,41 @@ namespace Windows.Networking.Connectivity { [default] interface Windows.Networking.Connectivity.IProxyConfiguration; } + + [ + contract(Windows.Networking.Connectivity.WwanContract, 1.0), + marshaling_behavior(agile), + ] + runtimeclass WwanConnectionProfileDetails + { + [default] interface Windows.Networking.Connectivity.IWwanConnectionProfileDetails; + [contract(Windows.Networking.Connectivity.WwanContract, 2.0)] interface Windows.Networking.Connectivity.IWwanConnectionProfileDetails2; + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + marshaling_behavior(agile), + ] + runtimeclass WlanConnectionProfileDetails + { + [default] interface Windows.Networking.Connectivity.IWlanConnectionProfileDetails; + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + marshaling_behavior(agile), + ] + runtimeclass NetworkUsage + { + [default] interface Windows.Networking.Connectivity.INetworkUsage; + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + marshaling_behavior(agile), + ] + runtimeclass ConnectivityInterval + { + [default] interface Windows.Networking.Connectivity.IConnectivityInterval; + } }
From: Fabian Maurer dark.shadow4@web.de
--- .../network_information.c | 128 ++++++++++++++++++ .../tests/connectivity.c | 63 +++++++++ 2 files changed, 191 insertions(+)
diff --git a/dlls/windows.networking.connectivity/network_information.c b/dlls/windows.networking.connectivity/network_information.c index 7ac1dfc1244..4d64ba507c4 100644 --- a/dlls/windows.networking.connectivity/network_information.c +++ b/dlls/windows.networking.connectivity/network_information.c @@ -121,6 +121,7 @@ static const struct IActivationFactoryVtbl factory_vtbl = struct connection_profile { IConnectionProfile IConnectionProfile_iface; + IConnectionProfile2 IConnectionProfile2_iface; LONG ref;
INetworkListManager *network_list_manager; @@ -147,6 +148,12 @@ static HRESULT WINAPI connection_profile_QueryInterface( IConnectionProfile *ifa return S_OK; }
+ if (IsEqualGUID( iid, &IID_IConnectionProfile2 )) + { + *out = &impl->IConnectionProfile2_iface; + IInspectable_AddRef( *out ); + return S_OK; + } FIXME( "%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid( iid ) ); *out = NULL; return E_NOINTERFACE; @@ -287,6 +294,126 @@ static const struct IConnectionProfileVtbl connection_profile_vtbl = connection_profile_get_NetworkSecuritySettings, };
+static inline struct connection_profile *impl_from_IConnectionProfile2( IConnectionProfile2 *iface ) +{ + return CONTAINING_RECORD( iface, struct connection_profile, IConnectionProfile2_iface ); +} + +static HRESULT WINAPI connection_profile2_QueryInterface( IConnectionProfile2 *iface, REFIID iid, void **out ) +{ + struct connection_profile *impl = impl_from_IConnectionProfile2( iface ); + return IConnectionProfile_QueryInterface(&impl->IConnectionProfile_iface, iid, out); +} + +static ULONG WINAPI connection_profile2_AddRef( IConnectionProfile2 *iface ) +{ + struct connection_profile *impl = impl_from_IConnectionProfile2( iface ); + return IConnectionProfile_AddRef(&impl->IConnectionProfile_iface); +} + +static ULONG WINAPI connection_profile2_Release( IConnectionProfile2 *iface ) +{ + struct connection_profile *impl = impl_from_IConnectionProfile2( iface ); + return IConnectionProfile_Release(&impl->IConnectionProfile_iface); +} + +static HRESULT WINAPI connection_profile2_GetIids( IConnectionProfile2 *iface, ULONG *iid_count, IID **iids ) +{ + FIXME( "iface %p, iid_count %p, iids %p stub!\n", iface, iid_count, iids ); + return E_NOTIMPL; +} + +static HRESULT WINAPI connection_profile2_GetRuntimeClassName( IConnectionProfile2 *iface, HSTRING *class_name ) +{ + FIXME( "iface %p, class_name %p stub!\n", iface, class_name ); + return E_NOTIMPL; +} + +static HRESULT WINAPI connection_profile2_GetTrustLevel( IConnectionProfile2 *iface, TrustLevel *trust_level ) +{ + FIXME( "iface %p, trust_level %p stub!\n", iface, trust_level ); + return E_NOTIMPL; +} + +HRESULT WINAPI connection_profile2_get_IsWwanConnectionProfile( IConnectionProfile2 *iface, boolean *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +HRESULT WINAPI connection_profile2_get_IsWlanConnectionProfile( IConnectionProfile2 *iface, boolean *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +HRESULT WINAPI connection_profile2_get_WwanConnectionProfileDetails( IConnectionProfile2 *iface, IWwanConnectionProfileDetails **value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +HRESULT WINAPI connection_profile2_get_WlanConnectionProfileDetails( IConnectionProfile2 *iface, IWlanConnectionProfileDetails **value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +HRESULT WINAPI connection_profile2_get_ServiceProviderGuid( IConnectionProfile2 *iface, IReference_GUID **value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +HRESULT WINAPI connection_profile2_GetSignalBars( IConnectionProfile2 *iface, IReference_BYTE **value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +HRESULT WINAPI connection_profile2_GetDomainConnectivityLevel( IConnectionProfile2 *iface, DomainConnectivityLevel *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +HRESULT WINAPI connection_profile2_GetNetworkUsageAsync( IConnectionProfile2 *iface, DateTime time_start, DateTime time_end, + DataUsageGranularity granularity, NetworkUsageStates states, IAsyncOperation_IVectorView_NetworkUsage **value ) +{ + FIXME( "iface %p, time_start %I64d, time_end %I64d, granularity %d, states %d-%d, value %p stub!\n", + iface, time_start.UniversalTime, time_end.UniversalTime, granularity, states.Roaming, states.Shared, value ); + return E_NOTIMPL; +} + +HRESULT WINAPI connection_profile2_GetConnectivityIntervalsAsync( IConnectionProfile2 *iface, DateTime time_start, DateTime time_end, + NetworkUsageStates states, IAsyncOperation_IVectorView_ConnectivityInterval **value ) +{ + FIXME( "iface %p, time_start %I64d, time_end %I64d, states %d-%d, value %p stub!\n", + iface, time_start.UniversalTime, time_end.UniversalTime, states.Roaming, states.Shared, value ); + return E_NOTIMPL; +} + +static const struct IConnectionProfile2Vtbl connection_profile2_vtbl = +{ + connection_profile2_QueryInterface, + connection_profile2_AddRef, + connection_profile2_Release, + /* IInspectable methods */ + connection_profile2_GetIids, + connection_profile2_GetRuntimeClassName, + connection_profile2_GetTrustLevel, + /* IConnectionProfile2 methods */ + connection_profile2_get_IsWwanConnectionProfile, + connection_profile2_get_IsWlanConnectionProfile, + connection_profile2_get_WwanConnectionProfileDetails, + connection_profile2_get_WlanConnectionProfileDetails, + connection_profile2_get_ServiceProviderGuid, + connection_profile2_GetSignalBars, + connection_profile2_GetDomainConnectivityLevel, + connection_profile2_GetNetworkUsageAsync, + connection_profile2_GetConnectivityIntervalsAsync, +}; + DEFINE_IINSPECTABLE( network_information_statics, INetworkInformationStatics, struct network_information_statics, IActivationFactory_iface )
static HRESULT WINAPI network_information_statics_GetConnectionProfiles( INetworkInformationStatics *iface, IVectorView_ConnectionProfile **value ) @@ -313,6 +440,7 @@ static HRESULT WINAPI network_information_statics_GetInternetConnectionProfile( }
impl->IConnectionProfile_iface.lpVtbl = &connection_profile_vtbl; + impl->IConnectionProfile2_iface.lpVtbl = &connection_profile2_vtbl; impl->ref = 1; impl->network_list_manager = network_list_manager;
diff --git a/dlls/windows.networking.connectivity/tests/connectivity.c b/dlls/windows.networking.connectivity/tests/connectivity.c index cbeda9ade0f..88634cbea95 100644 --- a/dlls/windows.networking.connectivity/tests/connectivity.c +++ b/dlls/windows.networking.connectivity/tests/connectivity.c @@ -53,6 +53,7 @@ static void test_NetworkInformationStatics(void) INetworkInformationStatics *network_information_statics = (void *)0xdeadbeef; INetworkListManager *network_list_manager = (void *)0xdeadbeef; IConnectionProfile *connection_profile = (void *)0xdeadbeef; + IConnectionProfile2 *connection_profile2; NetworkConnectivityLevel network_connectivity_level; IActivationFactory *factory = (void *)0xdeadbeef; NLM_CONNECTIVITY connectivity; @@ -102,6 +103,68 @@ static void test_NetworkInformationStatics(void) goto cleanup; }
+ hr = IConnectionProfile_QueryInterface( connection_profile, &IID_IConnectionProfile2, (void **)&connection_profile2 ); + + if (hr == E_NOINTERFACE) + { + skip ( "IConnectionProfile2 not available, skipping those tests\n" ); + } + else + { + IUnknown *unknown1 = 0, *unknown2 = 0; + IInspectable *inspectable1 = 0, *inspectable2 = 0; + IAgileObject *agile1 = 0, *agile2 = 0; + IConnectionProfile *profile1 = 0; + IConnectionProfile2 *profile2 = 0; + + hr = IUnknown_QueryInterface( connection_profile, &IID_IUnknown, (void **)&unknown1 ); + ok( hr == S_OK, "got hr %#lx.\n", hr ); + + hr = IUnknown_QueryInterface( connection_profile, &IID_IInspectable, (void **)&inspectable1 ); + ok( hr == S_OK, "got hr %#lx.\n", hr ); + + hr = IUnknown_QueryInterface( connection_profile, &IID_IAgileObject, (void **)&agile1 ); + ok( hr == S_OK, "got hr %#lx.\n", hr ); + + hr = IUnknown_QueryInterface( connection_profile2, &IID_IUnknown, (void **)&unknown2 ); + ok( hr == S_OK, "got hr %#lx.\n", hr ); + + hr = IUnknown_QueryInterface( connection_profile2, &IID_IInspectable, (void **)&inspectable2 ); + ok( hr == S_OK, "got hr %#lx.\n", hr ); + + hr = IUnknown_QueryInterface( connection_profile2, &IID_IAgileObject, (void **)&agile2 ); + ok( hr == S_OK, "got hr %#lx.\n", hr ); + + hr = IUnknown_QueryInterface( connection_profile2, &IID_IConnectionProfile, (void **)&profile1 ); + ok( hr == S_OK, "got hr %#lx.\n", hr ); + + hr = IUnknown_QueryInterface( connection_profile2, &IID_IConnectionProfile2, (void **)&profile2 ); + ok( hr == S_OK, "got hr %#lx.\n", hr ); + + ok( (void*)connection_profile != (void*)connection_profile2, "Interfaces should not be equal\n"); + + ok( (void*)connection_profile == (void*)unknown1, "Interfaces not equal\n"); + ok( (void*)connection_profile == (void*)inspectable1, "Interfaces not equal\n"); + todo_wine ok( (void*)connection_profile != (void*)agile1, "Interfaces should not be equal\n"); + + ok( (void*)unknown1 == (void*)unknown2, "Interfaces not equal\n"); + ok( (void*)inspectable1 == (void*)inspectable2, "Interfaces not equal\n"); + ok( (void*)agile1 == (void*)agile2, "Interfaces not equal\n"); + + ok( (void*)connection_profile2 == (void*)profile2, "Interfaces not equal\n"); + ok( (void*)connection_profile == (void*)profile1, "Interfaces not equal\n"); + + if (unknown1) IUnknown_Release( unknown1 ); + if (unknown2) IUnknown_Release( unknown2 ); + if (inspectable1) IInspectable_Release( inspectable1 ); + if (inspectable2) IInspectable_Release( inspectable2 ); + if (agile1) IAgileObject_Release( agile1 ); + if (agile2) IAgileObject_Release( agile2 ); + if (profile1) IConnectionProfile_Release( profile1 ); + if (profile2) IConnectionProfile2_Release( profile2 ); + IConnectionProfile2_Release( connection_profile2 ); + } + hr = IConnectionProfile_GetNetworkConnectivityLevel( connection_profile, NULL ); ok( hr == E_POINTER, "got hr %#lx.\n", hr ); network_connectivity_level = 0xdeadbeef;
From: Fabian Maurer dark.shadow4@web.de
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57529 --- dlls/windows.networking.connectivity/network_information.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/windows.networking.connectivity/network_information.c b/dlls/windows.networking.connectivity/network_information.c index 4d64ba507c4..fa041fce754 100644 --- a/dlls/windows.networking.connectivity/network_information.c +++ b/dlls/windows.networking.connectivity/network_information.c @@ -338,13 +338,15 @@ static HRESULT WINAPI connection_profile2_GetTrustLevel( IConnectionProfile2 *if HRESULT WINAPI connection_profile2_get_IsWwanConnectionProfile( IConnectionProfile2 *iface, boolean *value ) { FIXME( "iface %p, value %p stub!\n", iface, value ); - return E_NOTIMPL; + *value = 0; + return S_OK; }
HRESULT WINAPI connection_profile2_get_IsWlanConnectionProfile( IConnectionProfile2 *iface, boolean *value ) { FIXME( "iface %p, value %p stub!\n", iface, value ); - return E_NOTIMPL; + *value = 0; + return S_OK; }
HRESULT WINAPI connection_profile2_get_WwanConnectionProfileDetails( IConnectionProfile2 *iface, IWwanConnectionProfileDetails **value )
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=151238
Your paranoid android.
=== debian11b (64 bit WoW report) ===
user32: input.c:4306: Test succeeded inside todo block: button_down_hwnd_todo 1: got MSG_TEST_WIN hwnd 0000000000C90104, msg WM_LBUTTONDOWN, wparam 0x1, lparam 0x320032