Browse Source

Taskbar10: Fixed Windows 10 taskbar not showing up on Windows 11 builds with "Never combine" on the new taskbar

pull/2165/head 22621.2283.57.2_bc3bbc7
Amrsatrio 2 years ago
parent
commit
bc3bbc7e5e
  1. 40
      ExplorerPatcher/dllmain.c
  2. 170
      ExplorerPatcher/utility.c
  3. 169
      ExplorerPatcher/utility.h

40
ExplorerPatcher/dllmain.c

@ -4277,19 +4277,22 @@ INT64 winrt_Windows_Internal_Shell_implementation_MeetAndChatManager_OnMessageHo
#pragma region "Enable old taskbar" #pragma region "Enable old taskbar"
#ifdef _WIN64 #ifdef _WIN64
DEFINE_GUID(GUID_18C02F2E_2754_5A20_8BD5_0B34CE79DA2B,
0x18C02F2E,
0x2754, 0x5A20, 0x8b, 0xd5,
0x0b, 0x34, 0xce, 0x79, 0xda, 0x2b
);
HRESULT explorer_RoGetActivationFactoryHook(HSTRING activatableClassId, GUID* iid, void** factory) HRESULT explorer_RoGetActivationFactoryHook(HSTRING activatableClassId, GUID* iid, void** factory)
{ {
PCWSTR StringRawBuffer = WindowsGetStringRawBuffer(activatableClassId, 0); PCWSTR StringRawBuffer = WindowsGetStringRawBuffer(activatableClassId, 0);
if (!wcscmp(StringRawBuffer, L"WindowsUdk.ApplicationModel.AppExtensions.XamlExtensions") && IsEqualGUID(iid, &GUID_18C02F2E_2754_5A20_8BD5_0B34CE79DA2B)) if (!wcscmp(StringRawBuffer, L"WindowsUdk.ApplicationModel.AppExtensions.XamlExtensions"))
{
if (IsEqualGUID(iid, &IID_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics))
{
*factory = &instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics;
return S_OK;
}
if (IsEqualGUID(iid, &IID_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2))
{ {
*factory = &XamlExtensionsFactory; *factory = &instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2;
return S_OK; return S_OK;
} }
}
return RoGetActivationFactory(activatableClassId, iid, factory); return RoGetActivationFactory(activatableClassId, iid, factory);
} }
@ -9629,8 +9632,13 @@ struct RTL_FEATURE_CONFIGURATION {
int (*RtlQueryFeatureConfigurationFunc)(UINT32 featureId, int sectionType, INT64* changeStamp, struct RTL_FEATURE_CONFIGURATION* buffer); int (*RtlQueryFeatureConfigurationFunc)(UINT32 featureId, int sectionType, INT64* changeStamp, struct RTL_FEATURE_CONFIGURATION* buffer);
int RtlQueryFeatureConfigurationHook(UINT32 featureId, int sectionType, INT64* changeStamp, struct RTL_FEATURE_CONFIGURATION* buffer) { int RtlQueryFeatureConfigurationHook(UINT32 featureId, int sectionType, INT64* changeStamp, struct RTL_FEATURE_CONFIGURATION* buffer) {
int rv = RtlQueryFeatureConfigurationFunc(featureId, sectionType, changeStamp, buffer); int rv = RtlQueryFeatureConfigurationFunc(featureId, sectionType, changeStamp, buffer);
switch (featureId)
{
#if !USE_MOMENT_3_FIXES_ON_MOMENT_2 #if !USE_MOMENT_3_FIXES_ON_MOMENT_2
if (IsWindows11Version22H2Build1413OrHigher() && bOldTaskbar && featureId == 26008830) { case 26008830: // STTest
{
if (bOldTaskbar)
{
// Disable tablet optimized taskbar feature when using the Windows 10 taskbar // Disable tablet optimized taskbar feature when using the Windows 10 taskbar
// //
// For now, this fixes Task View and Win-Tab, Alt-Tab breaking after pressing Win-Tab, // For now, this fixes Task View and Win-Tab, Alt-Tab breaking after pressing Win-Tab,
@ -9639,7 +9647,21 @@ int RtlQueryFeatureConfigurationHook(UINT32 featureId, int sectionType, INT64* c
// //
buffer->enabledState = FEATURE_ENABLED_STATE_DISABLED; buffer->enabledState = FEATURE_ENABLED_STATE_DISABLED;
} }
break;
}
#endif
#if 0
case 42952021: // CategorySpecificXamlExtensions
{
if (bOldTaskbar)
{
// Make CTray::Init() use IXamlExtensionsStatics (first version, that we can modify)
buffer->enabledState = FEATURE_ENABLED_STATE_DISABLED;
}
break;
}
#endif #endif
}
return rv; return rv;
} }
#pragma endregion #pragma endregion
@ -10962,7 +10984,7 @@ DWORD Inject(BOOL bIsExplorer)
} }
if (!symbols_PTRS.twinui_pcshell_PTRS[8] || symbols_PTRS.twinui_pcshell_PTRS[8] == 0xFFFFFFFF) if (!symbols_PTRS.twinui_pcshell_PTRS[8] || symbols_PTRS.twinui_pcshell_PTRS[8] == 0xFFFFFFFF)
{ {
// Ref: CMultitaskingViewManager::_CreateMTVHost // Ref: CMultitaskingViewManager::_CreateMTVHost()
// 4C 89 74 24 ? ? 8B ? ? 8B ? 8B D7 48 8B CE E8 ? ? ? ? 90 // 4C 89 74 24 ? ? 8B ? ? 8B ? 8B D7 48 8B CE E8 ? ? ? ? 90
// ^^^^^^^ // ^^^^^^^
PBYTE match = FindPattern( PBYTE match = FindPattern(

170
ExplorerPatcher/utility.c

@ -6,102 +6,124 @@ RTL_OSVERSIONINFOW global_rovi;
DWORD32 global_ubr; DWORD32 global_ubr;
#pragma region "Weird stuff" #pragma region "Weird stuff"
INT64 STDMETHODCALLTYPE nimpl4_1(INT64 a1, DWORD* a2) /***
{ Let me explain the weird stuff. This was not documented here before so updating this was a hell of a task.
*a2 = 1;
return 0; Our target is in `CTray::Init()`. It constructs either the Windows 11 or the Windows 10 taskbar based on the result of
} `winrt::WindowsUdk::ApplicationModel::AppExtensions::XamlExtensions::IsExtensionAvailable()`. We have to make the last
INT64 STDMETHODCALLTYPE nimpl4_0(INT64 a1, DWORD* a2) argument of that function be set to false, so that we'll get the Windows 10 taskbar. In order to make a patch that does
{ not use patterns, we hook `RoGetActivationFactory` and return a dummy object with our own specially crafted vtable.
*a2 = 0;
return 0; So the calls are as follows:
}
__int64 STDMETHODCALLTYPE nimpl2(__int64 a1, uintptr_t* a2) `CTray::Init()` calls `factory_cache_entry<XamlExtensions, IXamlExtensionsStatics>::call()` to get an interface to
{ `XamlExtensions` (located in windowsudk.shellcommon.dll) through `IXamlExtensionsStatics`. First, the factory cache
__int64 v2; // rax system tries to retrieve its activation factory. It calls `RoGetActivationFactory` with the `IID` of
`IXamlExtensionsStatics`. Our hook makes that function return a dummy `IXamlExtensionsStatics` with our own vtable.
v2 = a1 + 8; Despite the name, it is an activation factory. (Ref: `explorer_RoGetActivationFactoryHook()` in dllmain.c)
if (!a1)
v2 = 0i64; Then, the cache system checks if the factory implements `IAgileObject` by calling `QueryInterface(IID_IAgileObject)` of
the factory. This will be used to determine if the factory should be cached or not. We intercept this call and do
*a2 = v2; nothing to make the process easy, so the factory will never be cached. In reality, `XamlExtensions` does not implement
return 0i64; `IAgileObject`.
}
ULONG STDMETHODCALLTYPE nimpl3() Then, the cache system calls the lambda that's passed into `factory_cache_entry<~>::call()` in order to retrieve an
interface that can be used. The lambda that `CTray::Init()` passes into the system, retrieves an instance of
`XamlExtensions` by calling `IXamlExtensionsStatics::Current()` of the factory using COM. Here, we intercept the call
through our custom `IXamlExtensionsStatics` vtable and return a dummy `XamlExtensions` instance with our own vtable
whose `QueryInterface()` with the IID of `IXamlExtensions2` returns a dummy `IXamlExtensions2` with our own vtable.
On builds with the "Never combine" feature on the new taskbar, it uses `IXamlExtensionsStatics2::GetForCategory()`
instead of `IXamlExtensionsStatics::Current()`.
Now that `CTray::Init()` has an instance of `XamlExtensions`, it calls `IXamlExtensions2::IsExtensionAvailable()`.
As the name says, if the extension (or Windows 11 taskbar) is available, `CTray::Init()` will continue to make the
Windows 11 taskbar through `CTray::InitializeTrayUIComponent()`. Otherwise, it will make the Windows 10 taskbar through
`TrayUI_CreateInstance()` that has been since ages.
`CTray::Init()` gets that value through the `IXamlExtensions2` interface of the `XamlExtensions` instance. COM calls are
made, which are `QueryInterface(IID_IXamlExtensions2)` and `IXamlExtensions2::IsExtensionAvailable()` itself. We
intercept the former call through our custom vtable for our dummy `XamlExtensions` instance to return a dummy
`IXamlExtensions2` with our own vtable too. Then, we intercept the latter call through our custom `IXamlExtensions2`
vtable to have the last argument set to false, and now we have the good old taskbar.
***/
static ULONG STDMETHODCALLTYPE nimplAddRefRelease(IUnknown* This)
{ {
return 1; return 1;
} }
HRESULT STDMETHODCALLTYPE nimpl()
static HRESULT STDMETHODCALLTYPE nimplReturnHResultNotImpl(IUnknown* This)
{ {
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT STDMETHODCALLTYPE nimpl1(__int64 a1, uintptr_t* a2, uintptr_t* a3)
{
__int64 v4 = a1; // rcx
if (*a2 != 0x5FADCA5C34A95314i64 || a2[1] != 0xC1661118901A7CAEui64) static HRESULT STDMETHODCALLTYPE WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics_QueryInterface(WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics* This, REFIID riid, void** ppvObject)
{
// Should only be called with IID_IAgileObject
return E_NOTIMPL; return E_NOTIMPL;
}
*a3 = v4; static HRESULT STDMETHODCALLTYPE WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics_Current(WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics* This, void** _instance_of_winrt_WindowsUdk_ApplicationModel_AppExtensions_XamlExtensions)
{
*_instance_of_winrt_WindowsUdk_ApplicationModel_AppExtensions_XamlExtensions = &instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2;
return S_OK; return S_OK;
} }
HRESULT STDMETHODCALLTYPE nimpl1_2(__int64 a1, uintptr_t* a2, uintptr_t* a3)
{
__int64 v4 = a1 - sizeof(__int64); // rcx
if (*a2 != 0x5FADCA5C34A95314i64 || a2[1] != 0xC1661118901A7CAEui64) static HRESULT STDMETHODCALLTYPE WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2_GetForCategory(WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2* This, HSTRING a2, void** _instance_of_winrt_WindowsUdk_ApplicationModel_AppExtensions_XamlExtensions)
return E_NOTIMPL; {
*_instance_of_winrt_WindowsUdk_ApplicationModel_AppExtensions_XamlExtensions = &instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2;
*a3 = v4;
return S_OK; return S_OK;
} }
HRESULT STDMETHODCALLTYPE nimpl1_3(__int64 a1, uintptr_t* a2, uintptr_t* a3)
{
__int64 v4 = a1 - 2 * sizeof(__int64); // rcx
if (*a2 != 0x5FADCA5C34A95314i64 || a2[1] != 0xC1661118901A7CAEui64) static HRESULT STDMETHODCALLTYPE WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2_QueryInterface(WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2* This, REFIID riid, void** ppvObject)
return E_NOTIMPL; {
if (IsEqualIID(riid, &IID_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2))
*a3 = v4; {
*ppvObject = &instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2;
return S_OK; return S_OK;
} }
__int64 STDMETHODCALLTYPE nimpl4(__int64 a1, __int64 a2, __int64 a3, BYTE* a4) return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2_IsExtensionAvailable(WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2* This, HSTRING a2, HSTRING a3, BYTE* a4)
{ {
*a4 = 0; *a4 = 0;
return 0i64; return S_OK;
} }
const IActivationFactoryVtbl _IActivationFactoryVtbl = {
.QueryInterface = nimpl1, static const WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStaticsVtbl instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStaticsVtbl = {
.AddRef = nimpl3, .QueryInterface = WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics_QueryInterface,
.Release = nimpl3, .AddRef = nimplAddRefRelease,
.GetIids = nimpl, .Release = nimplAddRefRelease,
.GetRuntimeClassName = nimpl, .GetIids = nimplReturnHResultNotImpl,
.GetTrustLevel = nimpl, .GetRuntimeClassName = nimplReturnHResultNotImpl,
.ActivateInstance = nimpl2 .GetTrustLevel = nimplReturnHResultNotImpl,
}; .Current = WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics_Current
const IActivationFactoryVtbl _IActivationFactoryVtbl2 = {
.QueryInterface = nimpl1_2,
.AddRef = nimpl3,
.Release = nimpl3,
.GetIids = nimpl,
.GetRuntimeClassName = nimpl,
.GetTrustLevel = nimpl,
.ActivateInstance = nimpl
}; };
const IActivationFactoryVtbl _IActivationFactoryVtbl3 = { const WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics = { &instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStaticsVtbl };
.QueryInterface = nimpl1_3,
.AddRef = nimpl3, static const WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2Vtbl instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2Vtbl = {
.Release = nimpl3, .QueryInterface = WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics_QueryInterface,
.GetIids = nimpl, .AddRef = nimplAddRefRelease,
.GetRuntimeClassName = nimpl, .Release = nimplAddRefRelease,
.GetTrustLevel = nimpl, .GetIids = nimplReturnHResultNotImpl,
.ActivateInstance = nimpl4 .GetRuntimeClassName = nimplReturnHResultNotImpl,
.GetTrustLevel = nimplReturnHResultNotImpl,
.GetForCategory = WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2_GetForCategory
}; };
const IActivationFactoryAA XamlExtensionsFactory = { const WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2 instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2 = { &instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2Vtbl };
.lpVtbl = &_IActivationFactoryVtbl,
.lpVtbl2 = &_IActivationFactoryVtbl2, static const WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2Vtbl instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2Vtbl = {
.lpVtbl3 = &_IActivationFactoryVtbl3 .QueryInterface = WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2_QueryInterface,
.AddRef = nimplAddRefRelease,
.Release = nimplAddRefRelease,
.GetIids = nimplReturnHResultNotImpl,
.GetRuntimeClassName = nimplReturnHResultNotImpl,
.GetTrustLevel = nimplReturnHResultNotImpl,
.IsExtensionAvailable = WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2_IsExtensionAvailable
}; };
const WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2 instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2 = { &instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2Vtbl };
#pragma endregion #pragma endregion
void printf_guid(GUID guid) void printf_guid(GUID guid)

169
ExplorerPatcher/utility.h

@ -73,22 +73,159 @@ HRESULT ShellExecuteFromExplorer(
void ToggleTaskbarAutohide(); void ToggleTaskbarAutohide();
#pragma region "Weird stuff" #pragma region "Weird stuff"
INT64 STDMETHODCALLTYPE nimpl4_1(INT64 a1, DWORD* a2); typedef interface WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics;
INT64 STDMETHODCALLTYPE nimpl4_0(INT64 a1, DWORD* a2);
__int64 STDMETHODCALLTYPE nimpl2(__int64 a1, uintptr_t* a2); DEFINE_GUID(IID_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics,
ULONG STDMETHODCALLTYPE nimpl3(); 0x18c02f2e,
HRESULT STDMETHODCALLTYPE nimpl(); 0x2754, 0x5a20, 0x8b, 0xd5,
HRESULT STDMETHODCALLTYPE nimpl1(__int64 a1, uintptr_t* a2, uintptr_t* a3); 0x0b, 0x34, 0xce, 0x79, 0xda, 0x2b
HRESULT STDMETHODCALLTYPE nimpl1_2(__int64 a1, uintptr_t* a2, uintptr_t* a3); );
HRESULT STDMETHODCALLTYPE nimpl1_3(__int64 a1, uintptr_t* a2, uintptr_t* a3);
__int64 STDMETHODCALLTYPE nimpl4(__int64 a1, __int64 a2, __int64 a3, BYTE* a4); typedef struct WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStaticsVtbl // : IInspectableVtbl
typedef struct _IActivationFactoryAA {
{ BEGIN_INTERFACE
CONST_VTBL struct IActivationFactoryVtbl* lpVtbl;
struct IActivationFactoryVtbl* lpVtbl2; HRESULT(STDMETHODCALLTYPE* QueryInterface)(
struct IActivationFactoryVtbl* lpVtbl3; __RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics* This,
} IActivationFactoryAA; /* [in] */ __RPC__in REFIID riid,
extern const IActivationFactoryAA XamlExtensionsFactory; /* [annotation][iid_is][out] */
_COM_Outptr_ void** ppvObject);
ULONG(STDMETHODCALLTYPE* AddRef)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics* This);
ULONG(STDMETHODCALLTYPE* Release)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics* This);
HRESULT(STDMETHODCALLTYPE* GetIids)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics* This,
/* [out] */ __RPC__out ULONG* iidCount,
/* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*iidCount) IID** iids);
HRESULT(STDMETHODCALLTYPE* GetRuntimeClassName)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics* This,
/* [out] */ __RPC__deref_out_opt HSTRING* className);
HRESULT(STDMETHODCALLTYPE* GetTrustLevel)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics* This,
/* [out] */ __RPC__out TrustLevel* trustLevel);
HRESULT(STDMETHODCALLTYPE* Current)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics* This,
/* [out] */ __RPC__out void** _instance_of_winrt_WindowsUdk_ApplicationModel_AppExtensions_XamlExtensions);
END_INTERFACE
} WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStaticsVtbl;
interface WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics // : IInspectable
{
const struct WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStaticsVtbl* lpVtbl;
};
typedef interface WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2 WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2;
DEFINE_GUID(IID_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2,
0x0fe87da5,
0xa7a6, 0x5de3, 0x83, 0x5f,
0xd9, 0x8c, 0x87, 0x56, 0x01, 0x44
);
typedef struct WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2Vtbl // : IInspectableVtbl
{
BEGIN_INTERFACE
HRESULT(STDMETHODCALLTYPE* QueryInterface)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2* This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
_COM_Outptr_ void** ppvObject);
ULONG(STDMETHODCALLTYPE* AddRef)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2* This);
ULONG(STDMETHODCALLTYPE* Release)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2* This);
HRESULT(STDMETHODCALLTYPE* GetIids)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2* This,
/* [out] */ __RPC__out ULONG* iidCount,
/* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*iidCount) IID** iids);
HRESULT(STDMETHODCALLTYPE* GetRuntimeClassName)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2* This,
/* [out] */ __RPC__deref_out_opt HSTRING* className);
HRESULT(STDMETHODCALLTYPE* GetTrustLevel)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2* This,
/* [out] */ __RPC__out TrustLevel* trustLevel);
HRESULT(STDMETHODCALLTYPE* GetForCategory)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2* This,
__RPC__in HSTRING a2,
/* [out] */ __RPC__out void** _instance_of_winrt_WindowsUdk_ApplicationModel_AppExtensions_XamlExtensions);
END_INTERFACE
} WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2Vtbl;
interface WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2 // : IInspectable
{
const struct WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2Vtbl* lpVtbl;
};
typedef interface WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2 WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2;
DEFINE_GUID(IID_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2,
0x34a95314,
0xca5c, 0x5fad, 0xae, 0x7c,
0x1a, 0x90, 0x18, 0x11, 0x66, 0xc1
);
typedef struct WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2Vtbl // : IInspectableVtbl
{
BEGIN_INTERFACE
HRESULT(STDMETHODCALLTYPE* QueryInterface)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2* This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
_COM_Outptr_ void** ppvObject);
ULONG(STDMETHODCALLTYPE* AddRef)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2* This);
ULONG(STDMETHODCALLTYPE* Release)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2* This);
HRESULT(STDMETHODCALLTYPE* GetIids)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2* This,
/* [out] */ __RPC__out ULONG* iidCount,
/* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*iidCount) IID** iids);
HRESULT(STDMETHODCALLTYPE* GetRuntimeClassName)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2* This,
/* [out] */ __RPC__deref_out_opt HSTRING* className);
HRESULT(STDMETHODCALLTYPE* GetTrustLevel)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2* This,
/* [out] */ __RPC__out TrustLevel* trustLevel);
HRESULT(STDMETHODCALLTYPE* IsExtensionAvailable)(
__RPC__in WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2* This,
__RPC__in HSTRING a2,
__RPC__in HSTRING a3,
/* [out] */ __RPC__out BYTE* a4);
END_INTERFACE
} WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2Vtbl;
interface WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2 // : IInspectable
{
const struct WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2Vtbl* lpVtbl;
};
extern const WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics;
extern const WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2 instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensionsStatics2;
extern const WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2 instanceof_WindowsUdk_ApplicationModel_AppExtensions_IXamlExtensions2;
#pragma endregion #pragma endregion
inline int FileExistsW(wchar_t* file) inline int FileExistsW(wchar_t* file)

Loading…
Cancel
Save