mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
834 lines
23 KiB
C#
834 lines
23 KiB
C#
using System;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using MicrosoftZuneInterop;
|
|
using ZuneUI;
|
|
|
|
namespace MicrosoftZuneLibrary
|
|
{
|
|
public class ZuneLibraryCDDevice : IDisposable
|
|
{
|
|
private unsafe IWMPCDDevice* m_pDevice;
|
|
|
|
private unsafe IBurnPublisher* m_pBurnPublisher;
|
|
|
|
private int m_hrBurnPublisherCreate;
|
|
|
|
private int m_fIsBurner;
|
|
|
|
private bool _disposed;
|
|
|
|
private uint m_dwBurnAdviseCookie;
|
|
|
|
private OnSessionProgressHandler m_SessionProgressHandler;
|
|
|
|
private OnItemProgressHandler m_ItemProgressHandler;
|
|
|
|
private OnItemErrorHandler m_ItemErrorHandler;
|
|
|
|
private OnBurnStateChangeHandler m_BurnStateChangeHandler;
|
|
|
|
private OnSetDriveLockedForBurningHandler m_SetDriveLockedForBurningHandler;
|
|
|
|
private OnQueryCancelHandler m_QueryCancelHandler;
|
|
|
|
private unsafe IBurnPublisher* BurnPublisher
|
|
{
|
|
get
|
|
{
|
|
//IL_001a: Expected I, but got I8
|
|
//IL_0039: Expected I, but got I8
|
|
if (m_pBurnPublisher == null && m_pDevice != null)
|
|
{
|
|
fixed (int* ptr = &m_fIsBurner)
|
|
{
|
|
try
|
|
{
|
|
IBurnPublisher* pBurnPublisher = null;
|
|
long num = *(long*)m_pDevice + 192;
|
|
IWMPCDDevice* pDevice = m_pDevice;
|
|
if ((m_hrBurnPublisherCreate = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int*, IBurnPublisher**, int>)(*(ulong*)num))((nint)pDevice, ptr, &pBurnPublisher)) >= 0)
|
|
{
|
|
m_pBurnPublisher = pBurnPublisher;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
//try-fault
|
|
ptr = null;
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
return m_pBurnPublisher;
|
|
}
|
|
}
|
|
|
|
public unsafe static bool IsImapiv2Installed
|
|
{
|
|
[return: MarshalAs(UnmanagedType.U1)]
|
|
get
|
|
{
|
|
//IL_001e: Expected I, but got I8
|
|
//IL_0037: Expected I, but got I8
|
|
bool flag = true;
|
|
if (!Module.IsLonghornOrBetter())
|
|
{
|
|
IUnknown* ptr;
|
|
flag = (byte)((Module.CoCreateInstance((_GUID*)Unsafe.AsPointer(ref Module.CLSID_MsftDiscMaster2), null, 23u, (_GUID*)Unsafe.AsPointer(ref Module._GUID_27354130_7f64_5b0f_8f00_5d77afbe261e), (void**)(&ptr)) >= 0) ? 1u : 0u) != 0;
|
|
if (flag)
|
|
{
|
|
IUnknown* intPtr = ptr;
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint>)(*(ulong*)(*(long*)intPtr + 16)))((nint)intPtr);
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
}
|
|
|
|
public unsafe EBurnState CurrentBurnState
|
|
{
|
|
get
|
|
{
|
|
//IL_001b: Expected I, but got I8
|
|
EBurnState eBurnState = EBurnState.ebsUnknown;
|
|
IBurnPublisher* pBurnPublisher = m_pBurnPublisher;
|
|
if (pBurnPublisher != null)
|
|
{
|
|
__MIDL___MIDL_itf_wmpcd_0000_0014_0001 _MIDL___MIDL_itf_wmpcd_0000_0014_;
|
|
eBurnState = ((((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, __MIDL___MIDL_itf_wmpcd_0000_0014_0001*, int>)(*(ulong*)(*(long*)pBurnPublisher + 120)))((nint)pBurnPublisher, &_MIDL___MIDL_itf_wmpcd_0000_0014_) >= 0) ? ((EBurnState)_MIDL___MIDL_itf_wmpcd_0000_0014_) : eBurnState);
|
|
}
|
|
return eBurnState;
|
|
}
|
|
}
|
|
|
|
public unsafe bool IsBurner
|
|
{
|
|
[return: MarshalAs(UnmanagedType.U1)]
|
|
get
|
|
{
|
|
//IL_0026: Expected I, but got I8
|
|
bool flag = false;
|
|
IWMPCDDevice* pDevice = m_pDevice;
|
|
if (pDevice != null)
|
|
{
|
|
if (m_pBurnPublisher == null)
|
|
{
|
|
int num;
|
|
if (((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int*, int>)(*(ulong*)(*(long*)pDevice + 200)))((nint)pDevice, &num) >= 0 && num != 0)
|
|
{
|
|
flag = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
flag = m_fIsBurner != 0 || flag;
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
}
|
|
|
|
public unsafe long SpaceAvailable
|
|
{
|
|
get
|
|
{
|
|
//IL_001c: Expected I, but got I8
|
|
long num = 0L;
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
if (burnPublisher != null)
|
|
{
|
|
ulong num2;
|
|
num = ((((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, ulong*, int>)(*(ulong*)(*(long*)burnPublisher + 24)))((nint)burnPublisher, &num2) >= 0) ? ((long)num2) : num);
|
|
}
|
|
return num;
|
|
}
|
|
}
|
|
|
|
public unsafe uint TimeAvailable
|
|
{
|
|
get
|
|
{
|
|
//IL_001b: Expected I, but got I8
|
|
uint result = 0u;
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
if (burnPublisher != null)
|
|
{
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint*, int>)(*(ulong*)(*(long*)burnPublisher + 40)))((nint)burnPublisher, &result);
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
public unsafe bool IsDoorOpen
|
|
{
|
|
[return: MarshalAs(UnmanagedType.U1)]
|
|
get
|
|
{
|
|
//IL_001b: Expected I, but got I8
|
|
bool result = false;
|
|
IWMPCDDevice* pDevice = m_pDevice;
|
|
int num;
|
|
if (pDevice != null && ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int*, int>)(*(ulong*)(*(long*)pDevice + 88)))((nint)pDevice, &num) >= 0)
|
|
{
|
|
bool flag = ((num != 0) ? true : false);
|
|
result = flag;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
public unsafe bool IsDVD
|
|
{
|
|
[return: MarshalAs(UnmanagedType.U1)]
|
|
get
|
|
{
|
|
//IL_001b: Expected I, but got I8
|
|
bool result = false;
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
uint num;
|
|
if (burnPublisher != null && ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint*, int>)(*(ulong*)(*(long*)burnPublisher + 72)))((nint)burnPublisher, &num) >= 0)
|
|
{
|
|
bool flag = (byte)((num >> 5) & (true ? 1u : 0u)) != 0;
|
|
result = flag;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
public unsafe bool IsCDRW
|
|
{
|
|
[return: MarshalAs(UnmanagedType.U1)]
|
|
get
|
|
{
|
|
//IL_001b: Expected I, but got I8
|
|
bool result = false;
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
uint num;
|
|
if (burnPublisher != null && ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint*, int>)(*(ulong*)(*(long*)burnPublisher + 72)))((nint)burnPublisher, &num) >= 0)
|
|
{
|
|
bool flag = (byte)((num >> 4) & (true ? 1u : 0u)) != 0;
|
|
result = flag;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
public unsafe bool IsWriteable
|
|
{
|
|
[return: MarshalAs(UnmanagedType.U1)]
|
|
get
|
|
{
|
|
//IL_001b: Expected I, but got I8
|
|
bool result = false;
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
uint num;
|
|
if (burnPublisher != null && ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint*, int>)(*(ulong*)(*(long*)burnPublisher + 72)))((nint)burnPublisher, &num) >= 0)
|
|
{
|
|
bool flag = (byte)((num >> 3) & (true ? 1u : 0u)) != 0;
|
|
result = flag;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
public unsafe bool IsBlank
|
|
{
|
|
[return: MarshalAs(UnmanagedType.U1)]
|
|
get
|
|
{
|
|
//IL_001b: Expected I, but got I8
|
|
bool result = false;
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
uint num;
|
|
if (burnPublisher != null && ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint*, int>)(*(ulong*)(*(long*)burnPublisher + 72)))((nint)burnPublisher, &num) >= 0)
|
|
{
|
|
bool flag = (byte)((num >> 2) & (true ? 1u : 0u)) != 0;
|
|
result = flag;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
public unsafe bool IsDriveReady
|
|
{
|
|
[return: MarshalAs(UnmanagedType.U1)]
|
|
get
|
|
{
|
|
//IL_001e: Expected I, but got I8
|
|
bool result = false;
|
|
IWMPCDDevice* pDevice = m_pDevice;
|
|
int num;
|
|
if (pDevice != null && ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int*, int>)(*(ulong*)(*(long*)pDevice + 184)))((nint)pDevice, &num) >= 0)
|
|
{
|
|
bool flag = ((num != 0) ? true : false);
|
|
result = flag;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
public unsafe bool IsMediaLoaded
|
|
{
|
|
[return: MarshalAs(UnmanagedType.U1)]
|
|
get
|
|
{
|
|
//IL_001b: Expected I, but got I8
|
|
bool result = false;
|
|
IWMPCDDevice* pDevice = m_pDevice;
|
|
int num;
|
|
if (pDevice != null && ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int*, int>)(*(ulong*)(*(long*)pDevice + 80)))((nint)pDevice, &num) >= 0)
|
|
{
|
|
bool flag = ((num != 0) ? true : false);
|
|
result = flag;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
public unsafe char DrivePath
|
|
{
|
|
[return: MarshalAs(UnmanagedType.U2)]
|
|
get
|
|
{
|
|
//IL_0017: Expected I, but got I8
|
|
IWMPCDDevice* pDevice = m_pDevice;
|
|
if (pDevice != null)
|
|
{
|
|
return (char)((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, ushort>)(*(ulong*)(*(long*)pDevice + 32)))((nint)pDevice);
|
|
}
|
|
return '\0';
|
|
}
|
|
}
|
|
|
|
public unsafe string TOC
|
|
{
|
|
get
|
|
{
|
|
//IL_0028: Expected I, but got I8
|
|
//IL_002e: Expected I, but got I8
|
|
//IL_003d: Expected I, but got I8
|
|
//IL_005a: Expected I, but got I8
|
|
string result = null;
|
|
if (m_pDevice != null && IsMediaLoaded)
|
|
{
|
|
IWMPCDDevice* pDevice = m_pDevice;
|
|
IWMPCDMediaInfo* ptr;
|
|
if (((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, IWMPCDMediaInfo**, int>)(*(ulong*)(*(long*)pDevice + 112)))((nint)pDevice, &ptr) >= 0)
|
|
{
|
|
ushort* ptr2 = null;
|
|
IWMPCDMediaInfo* intPtr = ptr;
|
|
if (((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, ushort**, int>)(*(ulong*)(*(long*)ptr + 32)))((nint)intPtr, &ptr2) >= 0)
|
|
{
|
|
result = new string((char*)ptr2);
|
|
Module.SysFreeString(ptr2);
|
|
}
|
|
IWMPCDMediaInfo* intPtr2 = ptr;
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint>)(*(ulong*)(*(long*)intPtr2 + 16)))((nint)intPtr2);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
[SpecialName]
|
|
public unsafe virtual event OnQueryCancelHandler QueryCancelHandler
|
|
{
|
|
add
|
|
{
|
|
m_QueryCancelHandler = (OnQueryCancelHandler)Delegate.Combine(m_QueryCancelHandler, value);
|
|
}
|
|
remove
|
|
{
|
|
m_QueryCancelHandler = (OnQueryCancelHandler)Delegate.Remove(m_QueryCancelHandler, value);
|
|
}
|
|
}
|
|
|
|
[SpecialName]
|
|
public virtual event OnSetDriveLockedForBurningHandler SetDriveLockedForBurningHandler
|
|
{
|
|
add
|
|
{
|
|
m_SetDriveLockedForBurningHandler = (OnSetDriveLockedForBurningHandler)Delegate.Combine(m_SetDriveLockedForBurningHandler, value);
|
|
}
|
|
remove
|
|
{
|
|
m_SetDriveLockedForBurningHandler = (OnSetDriveLockedForBurningHandler)Delegate.Remove(m_SetDriveLockedForBurningHandler, value);
|
|
}
|
|
}
|
|
|
|
[SpecialName]
|
|
public virtual event OnBurnStateChangeHandler BurnStateChangeHandler
|
|
{
|
|
add
|
|
{
|
|
m_BurnStateChangeHandler = (OnBurnStateChangeHandler)Delegate.Combine(m_BurnStateChangeHandler, value);
|
|
}
|
|
remove
|
|
{
|
|
m_BurnStateChangeHandler = (OnBurnStateChangeHandler)Delegate.Remove(m_BurnStateChangeHandler, value);
|
|
}
|
|
}
|
|
|
|
[SpecialName]
|
|
public virtual event OnItemErrorHandler ItemErrorHandler
|
|
{
|
|
add
|
|
{
|
|
m_ItemErrorHandler = (OnItemErrorHandler)Delegate.Combine(m_ItemErrorHandler, value);
|
|
}
|
|
remove
|
|
{
|
|
m_ItemErrorHandler = (OnItemErrorHandler)Delegate.Remove(m_ItemErrorHandler, value);
|
|
}
|
|
}
|
|
|
|
[SpecialName]
|
|
public virtual event OnItemProgressHandler ItemProgressHandler
|
|
{
|
|
add
|
|
{
|
|
m_ItemProgressHandler = (OnItemProgressHandler)Delegate.Combine(m_ItemProgressHandler, value);
|
|
}
|
|
remove
|
|
{
|
|
m_ItemProgressHandler = (OnItemProgressHandler)Delegate.Remove(m_ItemProgressHandler, value);
|
|
}
|
|
}
|
|
|
|
[SpecialName]
|
|
public virtual event OnSessionProgressHandler SessionProgressHandler
|
|
{
|
|
add
|
|
{
|
|
m_SessionProgressHandler = (OnSessionProgressHandler)Delegate.Combine(m_SessionProgressHandler, value);
|
|
}
|
|
remove
|
|
{
|
|
m_SessionProgressHandler = (OnSessionProgressHandler)Delegate.Remove(m_SessionProgressHandler, value);
|
|
}
|
|
}
|
|
|
|
public unsafe ZuneLibraryCDDevice(IWMPCDDevice* pDevice)
|
|
{
|
|
//IL_000f: Expected I, but got I8
|
|
m_pDevice = pDevice;
|
|
m_pBurnPublisher = null;
|
|
m_fIsBurner = 0;
|
|
base._002Ector();
|
|
}
|
|
|
|
private void _007EZuneLibraryCDDevice()
|
|
{
|
|
_0021ZuneLibraryCDDevice();
|
|
}
|
|
|
|
private unsafe void _0021ZuneLibraryCDDevice()
|
|
{
|
|
//IL_001f: Expected I, but got I8
|
|
//IL_0028: Expected I, but got I8
|
|
//IL_003f: Expected I, but got I8
|
|
//IL_0048: Expected I, but got I8
|
|
if (!_disposed)
|
|
{
|
|
IWMPCDDevice* pDevice = m_pDevice;
|
|
if (pDevice != null)
|
|
{
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint>)(*(ulong*)(*(long*)pDevice + 16)))((nint)pDevice);
|
|
m_pDevice = null;
|
|
}
|
|
IBurnPublisher* pBurnPublisher = m_pBurnPublisher;
|
|
if (pBurnPublisher != null)
|
|
{
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint>)(*(ulong*)(*(long*)pBurnPublisher + 16)))((nint)pBurnPublisher);
|
|
m_pBurnPublisher = null;
|
|
}
|
|
_disposed = true;
|
|
}
|
|
}
|
|
|
|
public unsafe int GetTrackUrl(uint dwTrackNum, StringBuilder strBuilder)
|
|
{
|
|
//IL_0033: Expected I, but got I8
|
|
//IL_003b: Expected I, but got I8
|
|
//IL_004b: Expected I, but got I8
|
|
//IL_0070: Expected I, but got I8
|
|
int num = -2147418113;
|
|
strBuilder.Length = 0;
|
|
if (m_pDevice != null && IsMediaLoaded)
|
|
{
|
|
IWMPCDDevice* pDevice = m_pDevice;
|
|
IWMPCDMediaInfo* ptr;
|
|
num = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, IWMPCDMediaInfo**, int>)(*(ulong*)(*(long*)pDevice + 112)))((nint)pDevice, &ptr);
|
|
if (num >= 0)
|
|
{
|
|
ushort* ptr2 = null;
|
|
IWMPCDMediaInfo* intPtr = ptr;
|
|
num = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint, ushort**, int>)(*(ulong*)(*(long*)ptr + 56)))((nint)intPtr, dwTrackNum, &ptr2);
|
|
if (num >= 0)
|
|
{
|
|
strBuilder.Append(new string((char*)ptr2));
|
|
Module.SysFreeString(ptr2);
|
|
}
|
|
IWMPCDMediaInfo* intPtr2 = ptr;
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint>)(*(ulong*)(*(long*)intPtr2 + 16)))((nint)intPtr2);
|
|
}
|
|
}
|
|
return num;
|
|
}
|
|
|
|
public unsafe HRESULT SetBurnPlaylist(int iPlaylistId)
|
|
{
|
|
//IL_0037: Expected I, but got I8
|
|
//IL_0048: Expected I, but got I8
|
|
//IL_0059: Expected I, but got I8
|
|
//IL_006e: Expected I, but got I8
|
|
//IL_0072: Expected I, but got I8
|
|
//IL_0075: Expected I, but got I8
|
|
//IL_0081: Expected I, but got I8
|
|
//IL_00a7: Expected I, but got I8
|
|
//IL_00cb: Expected I4, but got I8
|
|
//IL_00d3: Expected I4, but got I8
|
|
//IL_00e9: Expected I, but got I8
|
|
//IL_0106: Expected I, but got I8
|
|
//IL_0172: Expected I, but got I8
|
|
//IL_0185: Expected I, but got I8
|
|
//IL_0189: Expected I, but got I8
|
|
//IL_019b: Expected I, but got I8
|
|
//IL_019f: Expected I, but got I8
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
if (burnPublisher == null)
|
|
{
|
|
return m_hrBurnPublisherCreate;
|
|
}
|
|
QueryPropertyBag queryPropertyBag = new QueryPropertyBag();
|
|
IQueryPropertyBag* iQueryPropertyBag = queryPropertyBag.GetIQueryPropertyBag();
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, EQueryPropertyBagProp, int, int>)(*(ulong*)(*(long*)iQueryPropertyBag + 56)))((nint)iQueryPropertyBag, (EQueryPropertyBagProp)15, 0);
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, EQueryPropertyBagProp, int, int>)(*(ulong*)(*(long*)iQueryPropertyBag + 56)))((nint)iQueryPropertyBag, (EQueryPropertyBagProp)10, iPlaylistId);
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, EQueryPropertyBagProp, int, int>)(*(ulong*)(*(long*)iQueryPropertyBag + 56)))((nint)iQueryPropertyBag, (EQueryPropertyBagProp)22, 1);
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, EQueryPropertyBagProp, int, int>)(*(ulong*)(*(long*)iQueryPropertyBag + 56)))((nint)iQueryPropertyBag, (EQueryPropertyBagProp)21, 437);
|
|
IPlaylist* ptr = null;
|
|
IDatabaseQueryResults* ptr2 = null;
|
|
int num = Module.ZuneLibraryExports_002EQueryDatabase(EQueryType.eQueryTypePlaylistContentByPlaylistId, iQueryPropertyBag, &ptr2, null);
|
|
if (num >= 0)
|
|
{
|
|
num = Module.ZuneLibraryExports_002ECreateEmptyPlaylist(&ptr);
|
|
}
|
|
uint num2 = 0u;
|
|
if (num >= 0)
|
|
{
|
|
IDatabaseQueryResults* intPtr = ptr2;
|
|
num = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint*, int>)(*(ulong*)(*(long*)ptr2 + 88)))((nint)intPtr, &num2);
|
|
if (num >= 0)
|
|
{
|
|
if (num2 != 0)
|
|
{
|
|
uint num3 = 0u;
|
|
while (num3 < num2)
|
|
{
|
|
CComPropVariant cComPropVariant;
|
|
// IL initblk instruction
|
|
Unsafe.InitBlock(ref cComPropVariant, 0, 24);
|
|
try
|
|
{
|
|
CComPropVariant cComPropVariant2;
|
|
// IL initblk instruction
|
|
Unsafe.InitBlock(ref cComPropVariant2, 0, 24);
|
|
try
|
|
{
|
|
IDatabaseQueryResults* intPtr2 = ptr2;
|
|
num = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint, uint, PROPVARIANT, int>)(*(ulong*)(*(long*)ptr2 + 48)))((nint)intPtr2, num3, 233u, (PROPVARIANT)(&cComPropVariant));
|
|
if (num >= 0)
|
|
{
|
|
IDatabaseQueryResults* intPtr3 = ptr2;
|
|
num = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint, uint, PROPVARIANT, int>)(*(ulong*)(*(long*)ptr2 + 48)))((nint)intPtr3, num3, 234u, (PROPVARIANT)(&cComPropVariant2));
|
|
if (num >= 0)
|
|
{
|
|
num = Module.ZuneLibraryExports_002EAddItemToPlaylist(Unsafe.As<CComPropVariant, int>(ref Unsafe.AddByteOffset(ref cComPropVariant, 8)), Unsafe.As<CComPropVariant, int>(ref Unsafe.AddByteOffset(ref cComPropVariant2, 8)), ptr);
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
//try-fault
|
|
Module.___CxxCallUnwindDtor((delegate*<void*, void>)(delegate*<CComPropVariant*, void>)(&Module.CComPropVariant_002E_007Bdtor_007D), &cComPropVariant2);
|
|
throw;
|
|
}
|
|
Module.CComPropVariant_002EClear(&cComPropVariant2);
|
|
}
|
|
catch
|
|
{
|
|
//try-fault
|
|
Module.___CxxCallUnwindDtor((delegate*<void*, void>)(delegate*<CComPropVariant*, void>)(&Module.CComPropVariant_002E_007Bdtor_007D), &cComPropVariant);
|
|
throw;
|
|
}
|
|
Module.CComPropVariant_002EClear(&cComPropVariant);
|
|
num3++;
|
|
if (num < 0)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (num >= 0)
|
|
{
|
|
if (ptr == null)
|
|
{
|
|
goto IL_0189;
|
|
}
|
|
IPlaylist* intPtr4 = ptr;
|
|
num = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, IPlaylist*, int>)(*(ulong*)(*(long*)burnPublisher + 88)))((nint)burnPublisher, intPtr4);
|
|
}
|
|
}
|
|
}
|
|
if (0L != (nint)ptr)
|
|
{
|
|
IPlaylist* intPtr5 = ptr;
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint>)(*(ulong*)(*(long*)intPtr5 + 16)))((nint)intPtr5);
|
|
ptr = null;
|
|
}
|
|
goto IL_0189;
|
|
IL_0189:
|
|
if (0L != (nint)ptr2)
|
|
{
|
|
IDatabaseQueryResults* intPtr6 = ptr2;
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint>)(*(ulong*)(*(long*)intPtr6 + 16)))((nint)intPtr6);
|
|
ptr2 = null;
|
|
}
|
|
((IDisposable)queryPropertyBag)?.Dispose();
|
|
return num;
|
|
}
|
|
|
|
public unsafe HRESULT StartBurn()
|
|
{
|
|
//IL_0032: Expected I, but got I8
|
|
//IL_0047: Expected I, but got I8
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
if (burnPublisher == null)
|
|
{
|
|
return m_hrBurnPublisherCreate;
|
|
}
|
|
int num = AdviseForBurnPublisherEvents();
|
|
if (num >= 0)
|
|
{
|
|
num = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int, int>)(*(ulong*)(*(long*)burnPublisher + 144)))((nint)burnPublisher, 1);
|
|
if (num >= 0)
|
|
{
|
|
num = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int>)(*(ulong*)(*(long*)burnPublisher + 208)))((nint)burnPublisher);
|
|
if (num >= 0)
|
|
{
|
|
goto IL_0052;
|
|
}
|
|
}
|
|
}
|
|
UnadviseForBurnPublisherEvents();
|
|
goto IL_0052;
|
|
IL_0052:
|
|
return num;
|
|
}
|
|
|
|
public unsafe int StopBurn()
|
|
{
|
|
//IL_0021: Expected I, but got I8
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
if (burnPublisher == null)
|
|
{
|
|
return m_hrBurnPublisherCreate;
|
|
}
|
|
return ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int>)(*(ulong*)(*(long*)burnPublisher + 216)))((nint)burnPublisher);
|
|
}
|
|
|
|
public unsafe HRESULT EraseDisc()
|
|
{
|
|
//IL_0031: Expected I, but got I8
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
if (burnPublisher == null)
|
|
{
|
|
return m_hrBurnPublisherCreate;
|
|
}
|
|
int num = AdviseForBurnPublisherEvents();
|
|
if (num >= 0)
|
|
{
|
|
num = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int>)(*(ulong*)(*(long*)burnPublisher + 136)))((nint)burnPublisher);
|
|
if (num >= 0)
|
|
{
|
|
goto IL_003c;
|
|
}
|
|
}
|
|
UnadviseForBurnPublisherEvents();
|
|
goto IL_003c;
|
|
IL_003c:
|
|
return new HRESULT(num);
|
|
}
|
|
|
|
public unsafe int SetActive([MarshalAs(UnmanagedType.U1)] bool fActive)
|
|
{
|
|
//IL_002b: Expected I, but got I8
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
if (burnPublisher == null)
|
|
{
|
|
return m_hrBurnPublisherCreate;
|
|
}
|
|
int num = (fActive ? 1 : 0);
|
|
return ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int, int>)(*(ulong*)(*(long*)burnPublisher + 144)))((nint)burnPublisher, num);
|
|
}
|
|
|
|
public unsafe int Eject()
|
|
{
|
|
//IL_0020: Expected I, but got I8
|
|
int result = -2147418113;
|
|
IWMPCDDevice* pDevice = m_pDevice;
|
|
if (pDevice != null)
|
|
{
|
|
result = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int>)(*(ulong*)(*(long*)pDevice + 168)))((nint)pDevice);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public unsafe HRESULT SetVolumeLabelW(string strVolumeLabel)
|
|
{
|
|
//IL_0053: Expected I, but got I8
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
if (burnPublisher == null)
|
|
{
|
|
return m_hrBurnPublisherCreate;
|
|
}
|
|
if (string.IsNullOrEmpty(strVolumeLabel))
|
|
{
|
|
return -2147024809;
|
|
}
|
|
fixed (char* strVolumeLabelPtr = strVolumeLabel.ToCharArray())
|
|
{
|
|
ushort* ptr = (ushort*)strVolumeLabelPtr;
|
|
ushort* ptr2 = Module.SysAllocString(ptr);
|
|
if (ptr2 == null)
|
|
{
|
|
return -2147024882;
|
|
}
|
|
HRESULT result = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, ushort*, int>)(*(ulong*)(*(long*)burnPublisher + 64)))((nint)burnPublisher, ptr2);
|
|
Module.SysFreeString(ptr2);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
public unsafe int Close()
|
|
{
|
|
//IL_0020: Expected I, but got I8
|
|
int result = -2147418113;
|
|
IWMPCDDevice* pDevice = m_pDevice;
|
|
if (pDevice != null)
|
|
{
|
|
result = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, int>)(*(ulong*)(*(long*)pDevice + 176)))((nint)pDevice);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
internal void ItemProgress(int lMediaIndex, EBurnProgressStatus status, int nPercent)
|
|
{
|
|
m_ItemProgressHandler?.Invoke(lMediaIndex, status, nPercent);
|
|
}
|
|
|
|
internal void ItemError(int lMediaIndex, int hrError)
|
|
{
|
|
m_ItemErrorHandler?.Invoke(lMediaIndex, hrError);
|
|
}
|
|
|
|
internal void SessionProgress(int lSessonSecondsRemaining, int lTotalSessionSeconds)
|
|
{
|
|
m_SessionProgressHandler?.Invoke(lSessonSecondsRemaining, lTotalSessionSeconds);
|
|
}
|
|
|
|
internal void BurnStateChange(EBurnState burnState)
|
|
{
|
|
m_BurnStateChangeHandler?.Invoke(burnState);
|
|
if (burnState == EBurnState.ebsStopped)
|
|
{
|
|
UnadviseForBurnPublisherEvents();
|
|
SetActive(fActive: false);
|
|
}
|
|
}
|
|
|
|
internal void SetDriveLockedForBurning([MarshalAs(UnmanagedType.U1)] bool fLocked)
|
|
{
|
|
m_SetDriveLockedForBurningHandler?.Invoke(fLocked);
|
|
}
|
|
|
|
internal unsafe void QueryCancel(bool* pfCancel)
|
|
{
|
|
m_QueryCancelHandler?.Invoke(pfCancel);
|
|
}
|
|
|
|
private unsafe int AdviseForBurnPublisherEvents()
|
|
{
|
|
//IL_0019: Expected I, but got I8
|
|
//IL_0046: Expected I, but got I8
|
|
CBurnPublisherCallback* ptr = (CBurnPublisherCallback*)Module.@new(24uL);
|
|
CBurnPublisherCallback* ptr2;
|
|
try
|
|
{
|
|
ptr2 = ((ptr == null) ? null : Module.MicrosoftZuneLibrary_002ECBurnPublisherCallback_002E_007Bctor_007D(ptr, this));
|
|
}
|
|
catch
|
|
{
|
|
//try-fault
|
|
Module.delete(ptr);
|
|
throw;
|
|
}
|
|
int result;
|
|
if (ptr2 == null)
|
|
{
|
|
result = -2147024882;
|
|
}
|
|
else
|
|
{
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
uint dwBurnAdviseCookie;
|
|
result = ((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, IBurnPublisherCallback*, uint*, int>)(*(ulong*)(*(long*)burnPublisher + 192)))((nint)burnPublisher, (IBurnPublisherCallback*)ptr2, &dwBurnAdviseCookie);
|
|
m_dwBurnAdviseCookie = dwBurnAdviseCookie;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
private unsafe void UnadviseForBurnPublisherEvents()
|
|
{
|
|
//IL_0025: Expected I, but got I8
|
|
if (m_dwBurnAdviseCookie != 0)
|
|
{
|
|
IBurnPublisher* burnPublisher = BurnPublisher;
|
|
uint dwBurnAdviseCookie = m_dwBurnAdviseCookie;
|
|
((delegate* unmanaged[Cdecl, Cdecl]<IntPtr, uint, int>)(*(ulong*)(*(long*)burnPublisher + 200)))((nint)burnPublisher, dwBurnAdviseCookie);
|
|
m_dwBurnAdviseCookie = 0u;
|
|
}
|
|
}
|
|
|
|
protected virtual void Dispose([MarshalAs(UnmanagedType.U1)] bool P_0)
|
|
{
|
|
if (P_0)
|
|
{
|
|
_0021ZuneLibraryCDDevice();
|
|
return;
|
|
}
|
|
try
|
|
{
|
|
_0021ZuneLibraryCDDevice();
|
|
}
|
|
finally
|
|
{
|
|
base.Finalize();
|
|
}
|
|
}
|
|
|
|
public sealed override void Dispose()
|
|
{
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
~ZuneLibraryCDDevice()
|
|
{
|
|
Dispose(false);
|
|
}
|
|
}
|
|
}
|