From 6dea807f89d63a4137ea9815e049bcf3a8613373 Mon Sep 17 00:00:00 2001 From: Yoshi Askharoun Date: Sat, 20 Nov 2021 15:46:09 -0600 Subject: [PATCH] Implemented most non-Zune functions in Module --- .../Zune/Playlist/PlaylistManager.cs | 2 +- .../Zune/Service/AccountManagement.cs | 30 ++++---- .../Microsoft/Zune/Service/EContentType.cs | 15 ++-- .../Microsoft/Zune/Service/EGetOffersFlags.cs | 6 +- .../Zune/Service/EPurchaseOffersFlags.cs | 2 +- .../SubscriptionDataProviderItem.cs | 4 +- ZuneDBApi/Microsoft/Zune/Util/PhotoManager.cs | 18 ++--- .../Microsoft/Zune/Util/TaskbarPlayer.cs | 2 +- ZuneDBApi/Microsoft/Zune/Util/TelemetryAPI.cs | 4 +- ZuneDBApi/MicrosoftZuneLibrary/HMESettings.cs | 12 +-- ZuneDBApi/Module.cs | 74 ++++++++++++++++++- ZuneDBApi/ZuneDBApi.csproj | 1 + ZuneDBApi/tagVARIANT.cs | 12 --- 13 files changed, 120 insertions(+), 62 deletions(-) delete mode 100644 ZuneDBApi/tagVARIANT.cs diff --git a/ZuneDBApi/Microsoft/Zune/Playlist/PlaylistManager.cs b/ZuneDBApi/Microsoft/Zune/Playlist/PlaylistManager.cs index 380b674..01b142b 100644 --- a/ZuneDBApi/Microsoft/Zune/Playlist/PlaylistManager.cs +++ b/ZuneDBApi/Microsoft/Zune/Playlist/PlaylistManager.cs @@ -131,7 +131,7 @@ namespace Microsoft.Zune.Playlist long num = *(long*)m_pPlaylistManager + 24; IPlaylistManager* pPlaylistManager = m_pPlaylistManager; int num2; - hr = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)num))((nint)pPlaylistManager, ptr2, ptr3, ptr, &num2, ePlaylistType, ePlaylistCreateConflictAction, flag6 ? 1 : 0, null); + hr = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)num))((nint)pPlaylistManager, ptr2, ptr3, ptr, &num2, ePlaylistType, ePlaylistCreateConflictAction, flag6 ? 1 : 0, null); playlistId = num2; } catch diff --git a/ZuneDBApi/Microsoft/Zune/Service/AccountManagement.cs b/ZuneDBApi/Microsoft/Zune/Service/AccountManagement.cs index f02b911..584c49e 100644 --- a/ZuneDBApi/Microsoft/Zune/Service/AccountManagement.cs +++ b/ZuneDBApi/Microsoft/Zune/Service/AccountManagement.cs @@ -37,7 +37,7 @@ namespace Microsoft.Zune.Service //IL_0112: Expected I, but got I8 //IL_0112: Expected I, but got I8 //IL_0153: Expected I, but got I8 - int num = CreateComObject(); + int hresult = CreateComObject(); CComPtrNtv_003CINewsletterSettings_003E cComPtrNtv_003CINewsletterSettings_003E; Module.CComPtrNtv_003CINewsletterSettings_003E_002E_007Bctor_007D(&cComPtrNtv_003CINewsletterSettings_003E); HRESULT result; @@ -47,47 +47,47 @@ namespace Microsoft.Zune.Service Module.CComPtrNtv_003CIPrivacySettings_003E_002E_007Bctor_007D(&cComPtrNtv_003CIPrivacySettings_003E); try { - if (num >= 0 && accountSettings != null) + if (hresult >= 0 && accountSettings != null) { - num = CreateAccountSettings(accountSettings, Module.CComPtrNtv_003CINewsletterSettings_003E_002E_0026(&cComPtrNtv_003CINewsletterSettings_003E), Module.CComPtrNtv_003CIPrivacySettings_003E_002E_0026(&cComPtrNtv_003CIPrivacySettings_003E)); + hresult = CreateAccountSettings(accountSettings, Module.CComPtrNtv_003CINewsletterSettings_003E_002E_0026(&cComPtrNtv_003CINewsletterSettings_003E), Module.CComPtrNtv_003CIPrivacySettings_003E_002E_0026(&cComPtrNtv_003CIPrivacySettings_003E)); } CComPtrNtv_003CIPassportIdentity_003E cComPtrNtv_003CIPassportIdentity_003E; Module.CComPtrNtv_003CIPassportIdentity_003E_002E_007Bctor_007D(&cComPtrNtv_003CIPassportIdentity_003E); try { - if (num >= 0 && passportIdentity != null) + if (hresult >= 0 && passportIdentity != null) { - num = passportIdentity.GetComPointer((IPassportIdentity**)(&cComPtrNtv_003CIPassportIdentity_003E)); + hresult = passportIdentity.GetComPointer((IPassportIdentity**)(&cComPtrNtv_003CIPassportIdentity_003E)); } CComPtrNtv_003CIPassportIdentity_003E cComPtrNtv_003CIPassportIdentity_003E2; Module.CComPtrNtv_003CIPassportIdentity_003E_002E_007Bctor_007D(&cComPtrNtv_003CIPassportIdentity_003E2); try { - if (num >= 0 && parentPassportIdentity != null) + if (hresult >= 0 && parentPassportIdentity != null) { - num = parentPassportIdentity.GetComPointer((IPassportIdentity**)(&cComPtrNtv_003CIPassportIdentity_003E2)); + hresult = parentPassportIdentity.GetComPointer((IPassportIdentity**)(&cComPtrNtv_003CIPassportIdentity_003E2)); } CComPtrNtv_003CICreditCard_003E cComPtrNtv_003CICreditCard_003E; *(long*)(&cComPtrNtv_003CICreditCard_003E) = 0L; try { - if (num >= 0 && parentCreditCard != null) + if (hresult >= 0 && parentCreditCard != null) { - num = CreateCreditCard(parentCreditCard, (ICreditCard**)(&cComPtrNtv_003CICreditCard_003E)); + hresult = CreateCreditCard(parentCreditCard, (ICreditCard**)(&cComPtrNtv_003CICreditCard_003E)); } CComPtrNtv_003CIAddress_003E cComPtrNtv_003CIAddress_003E; *(long*)(&cComPtrNtv_003CIAddress_003E) = 0L; try { - if (num >= 0 && address != null) + if (hresult >= 0 && address != null) { - num = CreateAddress(address, (IAddress**)(&cComPtrNtv_003CIAddress_003E)); + hresult = CreateAddress(address, (IAddress**)(&cComPtrNtv_003CIAddress_003E)); } CComPtrNtv_003CIServiceError_003E cComPtrNtv_003CIServiceError_003E; *(long*)(&cComPtrNtv_003CIServiceError_003E) = 0L; try { - if (num >= 0) + if (hresult >= 0) { _SYSTEMTIME sYSTEMTIME = Module.DateTimeToSystemTime(birthday); fixed (char* firstNamePtr = firstName.ToCharArray()) @@ -128,7 +128,7 @@ namespace Microsoft.Zune.Service long num6 = *(long*)(&cComPtrNtv_003CIPrivacySettings_003E); long num7 = *(long*)(&cComPtrNtv_003CIPassportIdentity_003E2); long num8 = *(long*)(&cComPtrNtv_003CICreditCard_003E); - num = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)num2))((nint)p, (IPassportIdentity*)num3, (ushort*)(nint)val, (ushort*)(nint)val2, &sYSTEMTIME, (ushort*)(nint)val3, (ushort*)(nint)val4, (ushort*)(nint)val5, (IAddress*)num4, (INewsletterSettings*)num5, (IPrivacySettings*)num6, (IPassportIdentity*)num7, (ICreditCard*)num8, (IServiceError**)(&cComPtrNtv_003CIServiceError_003E)); + hresult = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)num2))((nint)p, (IPassportIdentity*)num3, (ushort*)(nint)val, (ushort*)(nint)val2, &sYSTEMTIME, (ushort*)(nint)val3, (ushort*)(nint)val4, (ushort*)(nint)val5, (IAddress*)num4, (INewsletterSettings*)num5, (IPrivacySettings*)num6, (IPassportIdentity*)num7, (ICreditCard*)num8, (IServiceError**)(&cComPtrNtv_003CIServiceError_003E)); } catch { @@ -174,7 +174,7 @@ namespace Microsoft.Zune.Service { serviceError = new ServiceError((IServiceError*)(*(ulong*)(&cComPtrNtv_003CIServiceError_003E))); } - result = new HRESULT(num); + result = new HRESULT(hresult); } catch { @@ -1657,7 +1657,7 @@ namespace Microsoft.Zune.Service } } - public sealed override void Dispose() + public void Dispose() { Dispose(true); GC.SuppressFinalize(this); diff --git a/ZuneDBApi/Microsoft/Zune/Service/EContentType.cs b/ZuneDBApi/Microsoft/Zune/Service/EContentType.cs index 94d2e2b..64b3047 100644 --- a/ZuneDBApi/Microsoft/Zune/Service/EContentType.cs +++ b/ZuneDBApi/Microsoft/Zune/Service/EContentType.cs @@ -2,14 +2,15 @@ namespace Microsoft.Zune.Service { public enum EContentType { - Playlist = 8, - App = 7, - PodcastSeries = 6, - PodcastEpisode = 5, - Video = 3, - MusicAlbum = 1, + Unknown = -1, MusicTrack = 0, + MusicAlbum = 1, + + Video = 3, Artist = 4, - Unknown = -1 + PodcastEpisode = 5, + PodcastSeries = 6, + App = 7, + Playlist = 8, } } diff --git a/ZuneDBApi/Microsoft/Zune/Service/EGetOffersFlags.cs b/ZuneDBApi/Microsoft/Zune/Service/EGetOffersFlags.cs index fae7b53..2b0ac4f 100644 --- a/ZuneDBApi/Microsoft/Zune/Service/EGetOffersFlags.cs +++ b/ZuneDBApi/Microsoft/Zune/Service/EGetOffersFlags.cs @@ -5,8 +5,8 @@ namespace Microsoft.Zune.Service [Flags] public enum EGetOffersFlags { - SeasonPurchase = 0x2, - None = 0x0, - SubscriptionFreeTracks = 0x1 + None = 0, + SubscriptionFreeTracks = 1, + SeasonPurchase = 2 } } diff --git a/ZuneDBApi/Microsoft/Zune/Service/EPurchaseOffersFlags.cs b/ZuneDBApi/Microsoft/Zune/Service/EPurchaseOffersFlags.cs index a706649..c847062 100644 --- a/ZuneDBApi/Microsoft/Zune/Service/EPurchaseOffersFlags.cs +++ b/ZuneDBApi/Microsoft/Zune/Service/EPurchaseOffersFlags.cs @@ -5,10 +5,10 @@ namespace Microsoft.Zune.Service [Flags] public enum EPurchaseOffersFlags { - PurchaseHD = 0x1, PurchaseTrials = 0x8, StreamVideos = 0x4, RentVideos = 0x2, + PurchaseHD = 0x1, None = 0x0 } } diff --git a/ZuneDBApi/Microsoft/Zune/Subscription/SubscriptionDataProviderItem.cs b/ZuneDBApi/Microsoft/Zune/Subscription/SubscriptionDataProviderItem.cs index 9a87d8d..1956501 100644 --- a/ZuneDBApi/Microsoft/Zune/Subscription/SubscriptionDataProviderItem.cs +++ b/ZuneDBApi/Microsoft/Zune/Subscription/SubscriptionDataProviderItem.cs @@ -188,9 +188,9 @@ namespace Microsoft.Zune.Subscription //IL_0046: Expected I, but got I8 if (m_nEpisodeId > 0 && propertyName == "DownloadErrorCode") { - tagVARIANT tagVARIANT; + VARIANT tagVARIANT; *(short*)(&tagVARIANT) = 3; - Unsafe.As(ref Unsafe.AddByteOffset(ref tagVARIANT, 8)) = (int)value; + Unsafe.As(ref Unsafe.AddByteOffset(ref tagVARIANT, 8)) = (int)value; DBPropertySubmitStruct dBPropertySubmitStruct; *(int*)(&dBPropertySubmitStruct) = 144; Unsafe.As(ref Unsafe.AddByteOffset(ref dBPropertySubmitStruct, 8)) = (nint)(&tagVARIANT); diff --git a/ZuneDBApi/Microsoft/Zune/Util/PhotoManager.cs b/ZuneDBApi/Microsoft/Zune/Util/PhotoManager.cs index cf9d5ef..eb7e8f6 100644 --- a/ZuneDBApi/Microsoft/Zune/Util/PhotoManager.cs +++ b/ZuneDBApi/Microsoft/Zune/Util/PhotoManager.cs @@ -92,7 +92,7 @@ namespace Microsoft.Zune.Util __s_GUID gUID_a2889317_d0c7_41d8_abc7_1eb4cb8d46d = Module._GUID_a2889317_d0c7_41d8_abc7_1eb4cb8d46d6; num = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)(*(long*)ptr + 24)))((nint)intPtr, (_GUID)gUID_a2889317_d0c7_41d8_abc7_1eb4cb8d46d, (void**)(&ptr2)); } - tagVARIANT tagVARIANT; + VARIANT tagVARIANT; *(short*)(&tagVARIANT) = 0; // IL initblk instruction Unsafe.InitBlockUnaligned(ref Unsafe.AddByteOffset(ref tagVARIANT, 2), 0, 22); @@ -105,7 +105,7 @@ namespace Microsoft.Zune.Util { long num2 = *(long*)ptr2 + 88; IFolderProvider* intPtr2 = ptr2; - num = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)num2))((nint)intPtr2, ptr3, EMediaTypes.eMediaTypeImage, &tagVARIANT); + num = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)num2))((nint)intPtr2, ptr3, EMediaTypes.eMediaTypeImage, &tagVARIANT); } catch { @@ -116,7 +116,7 @@ namespace Microsoft.Zune.Util } if (num >= 0) { - nFolderId = Unsafe.As(ref Unsafe.AddByteOffset(ref tagVARIANT, 8)); + nFolderId = Unsafe.As(ref Unsafe.AddByteOffset(ref tagVARIANT, 8)); } } } @@ -162,17 +162,17 @@ namespace Microsoft.Zune.Util __s_GUID gUID_16a9f8be_e76c_4391_ad74_8df74b7a3c = Module._GUID_16a9f8be_e76c_4391_ad74_8df74b7a3c21; num = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)(*(long*)ptr + 24)))((nint)intPtr, (_GUID)gUID_16a9f8be_e76c_4391_ad74_8df74b7a3c, (void**)(&ptr2)); } - tagVARIANT tagVARIANT; + VARIANT tagVARIANT; *(short*)(&tagVARIANT) = 0; // IL initblk instruction Unsafe.InitBlockUnaligned(ref Unsafe.AddByteOffset(ref tagVARIANT, 2), 0, 22); if (num >= 0) { IFileProvider* intPtr2 = ptr2; - num = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)(*(long*)ptr2 + 528)))((nint)intPtr2, nMediaId, EMediaTypes.eMediaTypeImage, &tagVARIANT); + num = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)(*(long*)ptr2 + 528)))((nint)intPtr2, nMediaId, EMediaTypes.eMediaTypeImage, &tagVARIANT); if (num >= 0) { - nFolderId = Unsafe.As(ref Unsafe.AddByteOffset(ref tagVARIANT, 8)); + nFolderId = Unsafe.As(ref Unsafe.AddByteOffset(ref tagVARIANT, 8)); } } } @@ -222,7 +222,7 @@ namespace Microsoft.Zune.Util __s_GUID gUID_a2889317_d0c7_41d8_abc7_1eb4cb8d46d = Module._GUID_a2889317_d0c7_41d8_abc7_1eb4cb8d46d6; num = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)(*(long*)ptr + 24)))((nint)intPtr, (_GUID)gUID_a2889317_d0c7_41d8_abc7_1eb4cb8d46d, (void**)(&ptr2)); } - tagVARIANT tagVARIANT; + VARIANT tagVARIANT; *(short*)(&tagVARIANT) = 0; // IL initblk instruction Unsafe.InitBlockUnaligned(ref Unsafe.AddByteOffset(ref tagVARIANT, 2), 0, 22); @@ -235,7 +235,7 @@ namespace Microsoft.Zune.Util { long num2 = *(long*)ptr2 + 224; IFolderProvider* intPtr2 = ptr2; - num = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)num2))((nint)intPtr2, ptr3, nParentFolderId, &tagVARIANT); + num = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)num2))((nint)intPtr2, ptr3, nParentFolderId, &tagVARIANT); } catch { @@ -246,7 +246,7 @@ namespace Microsoft.Zune.Util } if (num >= 0) { - nCreatedFolderId = Unsafe.As(ref Unsafe.AddByteOffset(ref tagVARIANT, 8)); + nCreatedFolderId = Unsafe.As(ref Unsafe.AddByteOffset(ref tagVARIANT, 8)); } } } diff --git a/ZuneDBApi/Microsoft/Zune/Util/TaskbarPlayer.cs b/ZuneDBApi/Microsoft/Zune/Util/TaskbarPlayer.cs index c0cec14..2ee4b85 100644 --- a/ZuneDBApi/Microsoft/Zune/Util/TaskbarPlayer.cs +++ b/ZuneDBApi/Microsoft/Zune/Util/TaskbarPlayer.cs @@ -118,7 +118,7 @@ namespace Microsoft.Zune.Util bool result = false; if (Unsafe.As(ref Module.Microsoft_002EZune_002EUtil_002E_003FA0x0277dc26_002Es_spTrayDeskBand) == 0) { - Module.CoCreateInstance((_GUID*)Unsafe.AsPointer(ref Module.CLSID_TrayDeskBand), null, 4u, (_GUID*)Unsafe.AsPointer(ref Module.IID_ITrayDeskBand), (void**)Unsafe.AsPointer(ref Module.Microsoft_002EZune_002EUtil_002E_003FA0x0277dc26_002Es_spTrayDeskBand)); + Module.CoCreateInstance((GUID*)Unsafe.AsPointer(ref Module.CLSID_TrayDeskBand), null, 4u, (_GUID*)Unsafe.AsPointer(ref Module.IID_ITrayDeskBand), (void**)Unsafe.AsPointer(ref Module.Microsoft_002EZune_002EUtil_002E_003FA0x0277dc26_002Es_spTrayDeskBand)); } if (Unsafe.As(ref Module.Microsoft_002EZune_002EUtil_002E_003FA0x0277dc26_002Es_spTrayDeskBand) != 0L) { diff --git a/ZuneDBApi/Microsoft/Zune/Util/TelemetryAPI.cs b/ZuneDBApi/Microsoft/Zune/Util/TelemetryAPI.cs index 201a6a6..dadbf17 100644 --- a/ZuneDBApi/Microsoft/Zune/Util/TelemetryAPI.cs +++ b/ZuneDBApi/Microsoft/Zune/Util/TelemetryAPI.cs @@ -23,10 +23,10 @@ namespace Microsoft.Zune.Util int num2 = 0; if (((DictionaryEntry)item).Key.GetType() == typeof(string)) { - tagVARIANT tagVARIANT; + VARIANT tagVARIANT; IntPtr pDstNativeVariant = (IntPtr)(&tagVARIANT); Marshal.GetNativeVariantForObject(((DictionaryEntry)item).Key, pDstNativeVariant); - tagVARIANT tagVARIANT2; + VARIANT tagVARIANT2; if (((DictionaryEntry)item).Value.GetType() == typeof(Guid)) { string obj = ((DictionaryEntry)item).Value.ToString(); diff --git a/ZuneDBApi/MicrosoftZuneLibrary/HMESettings.cs b/ZuneDBApi/MicrosoftZuneLibrary/HMESettings.cs index 71e90e9..6f000e7 100644 --- a/ZuneDBApi/MicrosoftZuneLibrary/HMESettings.cs +++ b/ZuneDBApi/MicrosoftZuneLibrary/HMESettings.cs @@ -490,8 +490,8 @@ namespace MicrosoftZuneLibrary INSSProperties* ptr2 = null; INSSProperty* ptr3 = null; ushort* ptr4 = null; - tagVARIANT tagVARIANT; - fixed (tagVARIANT* ptr5 = &Unsafe.AsRef(&tagVARIANT)) + VARIANT tagVARIANT; + fixed (VARIANT* ptr5 = &Unsafe.AsRef(&tagVARIANT)) { Module.VariantInit(ptr5); fixed (INSSDevice** ptr6 = &Unsafe.AsRef(&ptr)) @@ -564,7 +564,7 @@ namespace MicrosoftZuneLibrary { long num6 = *(long*)ptr3 + 64; INSSProperty* intPtr4 = ptr3; - num2 = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)num6))((nint)intPtr4, ptr5); + num2 = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)num6))((nint)intPtr4, ptr5); } if (num2 >= 0) { @@ -572,7 +572,7 @@ namespace MicrosoftZuneLibrary { if (*(ushort*)(&tagVARIANT) == 8) { - strName = new string((char*)Unsafe.As(ref Unsafe.AddByteOffset(ref tagVARIANT, 8))); + strName = new string((char*)Unsafe.As(ref Unsafe.AddByteOffset(ref tagVARIANT, 8))); } Module.VariantClear(ptr5); if (0L != (nint)ptr3) @@ -608,13 +608,13 @@ namespace MicrosoftZuneLibrary { long num8 = *(long*)ptr3 + 64; INSSProperty* intPtr7 = ptr3; - num2 = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)num8))((nint)intPtr7, ptr5); + num2 = ((delegate* unmanaged[Cdecl, Cdecl])(*(ulong*)num8))((nint)intPtr7, ptr5); } if (num2 >= 0 && ptr3 != null) { if (*(ushort*)(&tagVARIANT) == 8) { - strSerialNumber = new string((char*)Unsafe.As(ref Unsafe.AddByteOffset(ref tagVARIANT, 8))); + strSerialNumber = new string((char*)Unsafe.As(ref Unsafe.AddByteOffset(ref tagVARIANT, 8))); } Module.VariantClear(ptr5); if (0L != (nint)ptr3) diff --git a/ZuneDBApi/Module.cs b/ZuneDBApi/Module.cs index 19c18c8..1d21f19 100644 --- a/ZuneDBApi/Module.cs +++ b/ZuneDBApi/Module.cs @@ -3,13 +3,16 @@ global using Vanara.PInvoke; global using static Vanara.PInvoke.User32; global using static Vanara.PInvoke.Kernel32; global using static Vanara.PInvoke.Ole32; +global using static Vanara.PInvoke.OleAut32; global using static Vanara.PInvoke.Gdi32; global using static Vanara.PInvoke.Shell32; +global using static Vanara.PInvoke.AdvApi32; global using ZuneDBApi; global using GC = System.GC; global using HRESULT = ZuneUI.HRESULT; using System; +using System.Runtime.InteropServices; namespace ZuneDBApi { @@ -39,9 +42,9 @@ namespace ZuneDBApi return Kernel32.CloseHandle(new IntPtr(h)) ? 1 : 0; } - public static int CoCreateInstance(Guid rclsid, IUnknown* pUnkOuter, uint dwClsContext, Guid riid, void** ppv) + public static int CoCreateInstance(Guid rclsid, object pUnkOuter, uint dwClsContext, Guid riid, out object ppv) { - return Ole32.CoCreateInstance(rclsid, pUnkOuter, (CLSCTX)dwClsContext, riid, out ppv); + return Ole32.CoCreateInstance(rclsid, pUnkOuter, (CLSCTX)dwClsContext, riid, out ppv).Code; } public static int CompareStringW(uint localeId, uint dwCmpFlags, ushort* lpString1, int cchCount1, ushort* lpString2, int cchCount2) @@ -164,7 +167,8 @@ namespace ZuneDBApi public static uint FormatMessageW(uint dwFlags, void* lpSource, uint dwMessageId, uint dwLanguageId, ushort* lpBuffer, uint nSize, sbyte** Arguments) { - return Kernel32.FormatMessage((FormatMessageFlags)dwFlags, ToHInstance(lpSource), dwMessageId, dwLanguageId, lpBuffer, nSize, new IntPtr(Arguments)); + System.Text.StringBuilder builder = new(new string((char*)lpBuffer)); + return (uint)Kernel32.FormatMessage((FormatMessageFlags)dwFlags, ToHInstance(lpSource), dwMessageId, dwLanguageId, builder, nSize, new IntPtr(Arguments)); } public static int GetClassInfoW(HINSTANCE* hInstance, ushort* lpClassName, ref WNDCLASS lpWndClass) @@ -429,5 +433,69 @@ namespace ZuneDBApi { return (ulong)User32.SetTimer(*hWnd, new((long)nIDEvent), uElapse, lpTimerFunc).ToInt64(); } + + [DllImport("ZuneNativeLib")] + public unsafe static extern int SetUIThreadCBWorker(IUIThreadCallbackWorker* pUIThreadCallbackWorker); + + [DllImport("ZuneNativeLib", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)] + public static extern void SQMAddNumbersToStream(string sqmDataId, uint countTotal, uint dw1); + + [DllImport("ZuneNativeLib", CharSet = CharSet.Unicode)] + public static extern void SQMAddWrapper(string sqmDataId, int nData); + + public static ushort* SysAllocString(ushort* psz) + { + return (ushort*)OleAut32.SysAllocString(new string((char*)psz)).DangerousGetHandle().ToPointer(); + } + + public static void SysFreeString(ushort* psz) + { + OleAut32.SysFreeString(new IntPtr(psz)); + } + + public static uint SysStringLen(ushort* psz) + { + return OleAut32.SysStringLen(new SafeBSTR(new(psz))); + } + + internal unsafe static DateTime SystemTimeToDateTime(SYSTEMTIME stValue) + { + FILETIME ftValue = default; + + Module.SystemTimeToFileTime(&stValue, &ftValue); + return Module.FileTimeToDateTime(ftValue); + } + + public static int SystemTimeToFileTime(SYSTEMTIME* lpSystemTime, FILETIME* lpFileTime) + { + return Kernel32.SystemTimeToFileTime(in *lpSystemTime, out *lpFileTime) ? 1 : 0; + } + + public static uint TraceEvent(ulong sessionHandle, PEVENT_TRACE_HEADER EventTrace) + { + return (uint)AdvApi32.TraceEvent(new TRACEHANDLE(sessionHandle), EventTrace).ToHRESULT().Code; + } + + public static uint TraceMessage(ulong sessionHandle, uint MessageFlags, Guid MessageGuid, ushort MessageNumber, void* arglist) + { + return (uint)AdvApi32.TraceMessageVa(new TRACEHANDLE(sessionHandle), (TRACE_MESSAGE)MessageFlags, in MessageGuid, MessageNumber, new IntPtr(arglist)).ToHRESULT().Code; + } + + public static int VariantClear(VARIANT* pvarg) + { + return OleAut32.VariantClear(new IntPtr(pvarg)).Code; + } + + public static void VariantInit(VARIANT* pvarg) + { + OleAut32.VariantInit(ref *pvarg); + } + + public static uint WaitForSingleObject(void* hHandle, uint dwMilliseconds) + { + return (uint)WaitForSingleObject(new IntPtr(hHandle), dwMilliseconds); + } + [DllImport(Lib.Kernel32, SetLastError = true, ExactSpelling = true)] + private static extern WAIT_STATUS WaitForSingleObject([In] IntPtr hHandle, uint dwMilliseconds); } } diff --git a/ZuneDBApi/ZuneDBApi.csproj b/ZuneDBApi/ZuneDBApi.csproj index 253baed..5d7a649 100644 --- a/ZuneDBApi/ZuneDBApi.csproj +++ b/ZuneDBApi/ZuneDBApi.csproj @@ -19,5 +19,6 @@ + \ No newline at end of file diff --git a/ZuneDBApi/tagVARIANT.cs b/ZuneDBApi/tagVARIANT.cs deleted file mode 100644 index 7af2a23..0000000 --- a/ZuneDBApi/tagVARIANT.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Microsoft.VisualC; - -[StructLayout(LayoutKind.Sequential, Size = 24)] -[DebugInfoInPDB] -[NativeCppClass] -[MiscellaneousBits(65)] -internal struct tagVARIANT -{ - private long _003Calignment_0020member_003E; -}