Files
ZuneShell.dll/ZuneDBApi/Microsoft/Zune/Configuration/TunerInfoHandler.cs
T

357 lines
11 KiB
C#

using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace Microsoft.Zune.Configuration
{
internal class TunerInfoHandler : ITunerInfoHandler, IDisposable
{
private EventHandler _003Cbacking_store_003EOnChanged;
private IList<TunerInfo> m_PCsList;
private IList<TunerInfo> m_devicesList;
private IList<TunerInfo> m_appStoreDevicesList;
private DateTime m_nextPCDeregistrationDate;
private DateTime m_nextSubscriptionDeviceDeregistrationDate;
private DateTime m_nextAppStoreDeviceDeregistrationDate;
[SpecialName]
public virtual event EventHandler OnChanged
{
[MethodImpl(MethodImplOptions.Synchronized)]
add
{
_003Cbacking_store_003EOnChanged = (EventHandler)Delegate.Combine(_003Cbacking_store_003EOnChanged, value);
}
[MethodImpl(MethodImplOptions.Synchronized)]
remove
{
_003Cbacking_store_003EOnChanged = (EventHandler)Delegate.Remove(_003Cbacking_store_003EOnChanged, value);
}
}
public TunerInfoHandler()
{
m_PCsList = new List<TunerInfo>();
m_devicesList = new List<TunerInfo>();
m_appStoreDevicesList = new List<TunerInfo>();
}
private void _007ETunerInfoHandler()
{
}
[return: MarshalAs(UnmanagedType.U1)]
public unsafe virtual bool CanQueryTunerList()
{
//IL_0003: Expected I, but got I8
//IL_0024: Expected I, but got I8
//IL_0034: Expected I, but got I8
IService* ptr = null;
int num = 0;
if (_003CModule_003E.GetSingleton((_GUID)_003CModule_003E._GUID_bb2d1edd_1bd5_4be1_8d38_36d4f0849911, (void**)(&ptr)) >= 0)
{
IService* intPtr = ptr;
num = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int>)(*(ulong*)(*(long*)intPtr + 200)))((nint)intPtr);
}
if (ptr != null)
{
IService* intPtr2 = ptr;
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint>)(*(ulong*)(*(long*)intPtr2 + 16)))((nint)intPtr2);
}
return (byte)((num != 0) ? 1u : 0u) != 0;
}
public virtual IList<TunerInfo> GetPCsList()
{
return m_PCsList;
}
public virtual IList<TunerInfo> GetDevicesList()
{
return m_devicesList;
}
public virtual IList<TunerInfo> GetAppStoreDevicesList()
{
return m_appStoreDevicesList;
}
public virtual DateTime GetNextPCDeregistrationDate()
{
return m_nextPCDeregistrationDate;
}
public virtual DateTime GetNextSubscriptionDeviceDeregistrationDate()
{
return m_nextSubscriptionDeviceDeregistrationDate;
}
public virtual DateTime GetNextAppStoreDeviceDeregistrationDate()
{
return m_nextAppStoreDeviceDeregistrationDate;
}
public unsafe virtual void RefreshTunerList()
{
//IL_0003: Expected I, but got I8
//IL_0029: Expected I, but got I8
//IL_0055: Expected I, but got I8
//IL_0066: Expected I, but got I8
//IL_0077: Expected I, but got I8
//IL_007b: Expected I, but got I8
IService* ptr = null;
int singleton = _003CModule_003E.GetSingleton((_GUID)_003CModule_003E._GUID_bb2d1edd_1bd5_4be1_8d38_36d4f0849911, (void**)(&ptr));
RefreshCallback* ptr2 = (RefreshCallback*)_003CModule_003E.@new(24uL);
RefreshCallback* ptr3;
try
{
ptr3 = ((ptr2 == null) ? null : _003CModule_003E.Microsoft_002EZune_002EConfiguration_002ERefreshCallback_002E_007Bctor_007D(ptr2, this));
}
catch
{
//try-fault
_003CModule_003E.delete(ptr2);
throw;
}
singleton = (((long)(nint)ptr3 == 0) ? (-2147024882) : singleton);
if (singleton >= 0)
{
IService* intPtr = ptr;
singleton = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, IRefreshTunerListCallback*, int>)(*(ulong*)(*(long*)ptr + 552)))((nint)intPtr, (IRefreshTunerListCallback*)ptr3);
}
if (ptr3 != null)
{
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint>)(*(ulong*)(*(long*)ptr3 + 16)))((nint)ptr3);
}
if (ptr != null)
{
IService* intPtr2 = ptr;
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint>)(*(ulong*)(*(long*)intPtr2 + 16)))((nint)intPtr2);
ptr = null;
}
if (singleton < 0 && _003CModule_003E.WPP_GLOBAL_Control != System.Runtime.CompilerServices.Unsafe.AsPointer(ref _003CModule_003E.WPP_GLOBAL_Control) && ((uint)(*(int*)((ulong)(nint)_003CModule_003E.WPP_GLOBAL_Control + 156uL)) & (true ? 1u : 0u)) != 0 && (uint)(*(byte*)((ulong)(nint)_003CModule_003E.WPP_GLOBAL_Control + 153uL)) >= 5u)
{
_003CModule_003E.WPP_SF_D(*(ulong*)((ulong)(nint)_003CModule_003E.WPP_GLOBAL_Control + 144uL), 10, (_GUID*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref _003CModule_003E._003FA0x2af74624_002EWPP_RegisteredDevicesApi_cpp_Traceguids), (uint)singleton);
}
}
public unsafe virtual void DeregisterTuner(TunerInfo info)
{
//IL_0003: Expected I, but got I8
//IL_002c: Expected I, but got I8
//IL_0076: Expected I, but got I8
//IL_0090: Expected I, but got I8
//IL_0094: Expected I, but got I8
IService* ptr = null;
int singleton = _003CModule_003E.GetSingleton((_GUID)_003CModule_003E._GUID_bb2d1edd_1bd5_4be1_8d38_36d4f0849911, (void**)(&ptr));
DeregisterCallback* ptr2 = (DeregisterCallback*)_003CModule_003E.@new(24uL);
DeregisterCallback* ptr3;
try
{
ptr3 = ((ptr2 == null) ? null : _003CModule_003E.Microsoft_002EZune_002EConfiguration_002EDeregisterCallback_002E_007Bctor_007D(ptr2, this));
}
catch
{
//try-fault
_003CModule_003E.delete(ptr2);
throw;
}
singleton = (((long)(nint)ptr3 == 0) ? (-2147024882) : singleton);
if (singleton >= 0)
{
fixed (ushort* ptr4 = &System.Runtime.CompilerServices.Unsafe.As<char, ushort>(ref _003CModule_003E.PtrToStringChars(info.m_tunerId)))
{
try
{
long num = *(long*)ptr + 560;
IService* intPtr = ptr;
_003F val = ptr4;
TunerType tunerType = info.TunerType;
TunerRegisterType tunerRegisterType = info.TunerRegisterType;
singleton = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, ushort*, ETunerType, ETunerRegisterType, IDeregisterTunerCallback*, int>)(*(ulong*)num))((nint)intPtr, (ushort*)(nint)val, (ETunerType)tunerType, (ETunerRegisterType)tunerRegisterType, (IDeregisterTunerCallback*)ptr3);
}
catch
{
//try-fault
ptr4 = null;
throw;
}
}
}
if (ptr != null)
{
IService* intPtr2 = ptr;
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint>)(*(ulong*)(*(long*)intPtr2 + 16)))((nint)intPtr2);
ptr = null;
}
if (singleton < 0 && _003CModule_003E.WPP_GLOBAL_Control != System.Runtime.CompilerServices.Unsafe.AsPointer(ref _003CModule_003E.WPP_GLOBAL_Control) && ((uint)(*(int*)((ulong)(nint)_003CModule_003E.WPP_GLOBAL_Control + 156uL)) & (true ? 1u : 0u)) != 0 && (uint)(*(byte*)((ulong)(nint)_003CModule_003E.WPP_GLOBAL_Control + 153uL)) >= 5u)
{
_003CModule_003E.WPP_SF_D(*(ulong*)((ulong)(nint)_003CModule_003E.WPP_GLOBAL_Control + 144uL), 11, (_GUID*)System.Runtime.CompilerServices.Unsafe.AsPointer(ref _003CModule_003E._003FA0x2af74624_002EWPP_RegisteredDevicesApi_cpp_Traceguids), (uint)singleton);
}
}
[SpecialName]
protected virtual void raise_OnChanged(object value0, EventArgs value1)
{
_003Cbacking_store_003EOnChanged?.Invoke(value0, value1);
}
internal unsafe void UpdateTunerInfoLists(int cTunerInfo, global::TunerInfo* rgTunerInfo, ushort* pwszNextPCDeregistrationDate, ushort* pwszNextSubscriptionDeviceDeregistrationDate, ushort* pwszNextAppStoreDeviceDeregistrationDate)
{
//IL_0034: Expected I, but got I8
//IL_0042: Expected I, but got I8
//IL_0049: Expected I, but got I8
//IL_0055: Expected I, but got I8
//IL_0062: Expected I, but got I8
//IL_006f: Expected I, but got I8
//IL_00cf: Expected I, but got I8
m_PCsList.Clear();
m_devicesList.Clear();
m_appStoreDevicesList.Clear();
long num = cTunerInfo;
if (0 < num)
{
global::TunerInfo* ptr = (global::TunerInfo*)((ulong)(nint)rgTunerInfo + 16uL);
ulong num2 = (ulong)num;
do
{
string name = new string((char*)(*(ulong*)((ulong)(nint)ptr - 8uL)));
string tunerId = new string((char*)(*(ulong*)ptr));
string tunerVersion = new string((char*)(*(ulong*)((ulong)(nint)ptr + 8uL)));
string dateCreated = new string((char*)(*(ulong*)((ulong)(nint)ptr + 16uL)));
string dateLastUsed = new string((char*)(*(ulong*)((ulong)(nint)ptr + 24uL)));
TunerType tunerType = *(TunerType*)((ulong)(nint)ptr - 16uL);
TunerRegisterType tunerRegisterType = *(TunerRegisterType*)((ulong)(nint)ptr - 12uL);
TunerInfo item = new TunerInfo(name, tunerId, tunerVersion, tunerType, tunerRegisterType, dateCreated, dateLastUsed);
switch (tunerType)
{
case TunerType.PC:
m_PCsList.Add(item);
break;
case TunerType.ZuneDevice:
case TunerType.MobileDevice:
switch (tunerRegisterType)
{
case TunerRegisterType.Subscription:
m_devicesList.Add(item);
break;
case TunerRegisterType.AppStore:
m_appStoreDevicesList.Add(item);
break;
}
break;
}
ptr = (global::TunerInfo*)((ulong)(nint)ptr + 48uL);
num2--;
}
while (num2 != 0);
}
if (pwszNextPCDeregistrationDate == null || !DateTime.TryParse(new string((char*)pwszNextPCDeregistrationDate), out m_nextPCDeregistrationDate))
{
m_nextPCDeregistrationDate = DateTime.MinValue;
}
if (pwszNextSubscriptionDeviceDeregistrationDate == null || !DateTime.TryParse(new string((char*)pwszNextSubscriptionDeviceDeregistrationDate), out m_nextSubscriptionDeviceDeregistrationDate))
{
m_nextSubscriptionDeviceDeregistrationDate = DateTime.MinValue;
}
if (pwszNextAppStoreDeviceDeregistrationDate == null || !DateTime.TryParse(new string((char*)pwszNextAppStoreDeviceDeregistrationDate), out m_nextAppStoreDeviceDeregistrationDate))
{
m_nextAppStoreDeviceDeregistrationDate = DateTime.MinValue;
}
raise_OnChanged(this, null);
}
internal unsafe void FinishRemoveTunerInfo(ushort* pwszTunerId, TunerType tunerType, TunerRegisterType tunerRegisterType)
{
IList<TunerInfo> list = null;
switch (tunerType)
{
case TunerType.PC:
list = m_PCsList;
break;
case TunerType.ZuneDevice:
case TunerType.MobileDevice:
switch (tunerRegisterType)
{
case TunerRegisterType.Subscription:
list = m_devicesList;
break;
case TunerRegisterType.AppStore:
list = m_appStoreDevicesList;
break;
}
break;
}
int num = 0;
if (0 >= list.Count)
{
return;
}
do
{
fixed (ushort* ptr = &System.Runtime.CompilerServices.Unsafe.As<char, ushort>(ref _003CModule_003E.PtrToStringChars(list[num].m_tunerId)))
{
try
{
if (2 == _003CModule_003E.CompareStringW(1033u, 1u, pwszTunerId, -1, ptr, -1))
{
goto IL_0076;
}
}
catch
{
//try-fault
ptr = null;
throw;
}
goto end_IL_004a;
IL_0076:
try
{
list.RemoveAt(num);
raise_OnChanged(this, null);
}
catch
{
//try-fault
ptr = null;
throw;
}
return;
end_IL_004a:;
}
num++;
}
while (num < list.Count);
}
internal void ReportError(int hrError)
{
EventArgsHR eventArgsHR = new EventArgsHR();
eventArgsHR.HResult = hrError;
raise_OnChanged(this, eventArgsHR);
}
protected virtual void Dispose([MarshalAs(UnmanagedType.U1)] bool P_0)
{
if (!P_0)
{
Finalize();
}
}
public sealed override void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}