mirror of
https://github.com/ReneLergner/WPinternals.git
synced 2026-06-14 03:16:40 +10:00
Merge pull request #16 from ReneLergner/feature/modernize
Modernize WPinternals
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: windows-latest
|
||||
strategy:
|
||||
matrix:
|
||||
architecture: [x86, x64]
|
||||
platform: [win]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Install .NET SDK
|
||||
uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: "5.0.101"
|
||||
|
||||
- name: Add MSBuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1.0.2
|
||||
|
||||
- name: Build utilities
|
||||
shell: pwsh
|
||||
run: |
|
||||
msbuild /m /t:restore,wpinternals:publish /p:Platform=${{ matrix.architecture }} /p:RuntimeIdentifier=${{ matrix.platform }}-${{ matrix.architecture }} /p:PublishDir=${{ github.workspace }}/artifacts/${{ matrix.platform }}-${{ matrix.architecture }} /p:PublishSingleFile=true /p:PublishTrimmed=true WPinternals.sln
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ${{ matrix.platform }}-${{ matrix.architecture }}
|
||||
path: ${{ github.workspace }}/artifacts/${{ matrix.platform }}-${{ matrix.architecture }}
|
||||
@@ -5,6 +5,7 @@ using System;
|
||||
namespace SevenZip.Compression.LZMA
|
||||
{
|
||||
using RangeCoder;
|
||||
using System.Threading;
|
||||
|
||||
public class Decoder : ICoder, ISetDecoderProperties // ,System.IO.Stream
|
||||
{
|
||||
@@ -228,7 +229,7 @@ namespace SevenZip.Compression.LZMA
|
||||
}
|
||||
|
||||
public void Code(System.IO.Stream inStream, System.IO.Stream outStream,
|
||||
Int64 inSize, Int64 outSize, ICodeProgress progress)
|
||||
Int64 inSize, Int64 outSize, ICodeProgress progress, CancellationToken? token = null)
|
||||
{
|
||||
Init(inStream, outStream);
|
||||
|
||||
@@ -247,100 +248,111 @@ namespace SevenZip.Compression.LZMA
|
||||
m_OutWindow.PutByte(b);
|
||||
nowPos64++;
|
||||
}
|
||||
while (nowPos64 < outSize64)
|
||||
|
||||
try
|
||||
{
|
||||
// UInt64 next = Math.Min(nowPos64 + (1 << 18), outSize64);
|
||||
// while(nowPos64 < next)
|
||||
while (nowPos64 < outSize64)
|
||||
{
|
||||
uint posState = (uint)nowPos64 & m_PosStateMask;
|
||||
if (m_IsMatchDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0)
|
||||
token?.ThrowIfCancellationRequested();
|
||||
|
||||
// UInt64 next = Math.Min(nowPos64 + (1 << 18), outSize64);
|
||||
// while(nowPos64 < next)
|
||||
{
|
||||
byte b;
|
||||
byte prevByte = m_OutWindow.GetByte(0);
|
||||
if (!state.IsCharState())
|
||||
b = m_LiteralDecoder.DecodeWithMatchByte(m_RangeDecoder,
|
||||
(uint)nowPos64, prevByte, m_OutWindow.GetByte(rep0));
|
||||
else
|
||||
b = m_LiteralDecoder.DecodeNormal(m_RangeDecoder, (uint)nowPos64, prevByte);
|
||||
m_OutWindow.PutByte(b);
|
||||
state.UpdateChar();
|
||||
nowPos64++;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint len;
|
||||
if (m_IsRepDecoders[state.Index].Decode(m_RangeDecoder) == 1)
|
||||
uint posState = (uint)nowPos64 & m_PosStateMask;
|
||||
if (m_IsMatchDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0)
|
||||
{
|
||||
if (m_IsRepG0Decoders[state.Index].Decode(m_RangeDecoder) == 0)
|
||||
{
|
||||
if (m_IsRep0LongDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0)
|
||||
{
|
||||
state.UpdateShortRep();
|
||||
m_OutWindow.PutByte(m_OutWindow.GetByte(rep0));
|
||||
nowPos64++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
byte b;
|
||||
byte prevByte = m_OutWindow.GetByte(0);
|
||||
if (!state.IsCharState())
|
||||
b = m_LiteralDecoder.DecodeWithMatchByte(m_RangeDecoder,
|
||||
(uint)nowPos64, prevByte, m_OutWindow.GetByte(rep0));
|
||||
else
|
||||
b = m_LiteralDecoder.DecodeNormal(m_RangeDecoder, (uint)nowPos64, prevByte);
|
||||
m_OutWindow.PutByte(b);
|
||||
state.UpdateChar();
|
||||
nowPos64++;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint len;
|
||||
if (m_IsRepDecoders[state.Index].Decode(m_RangeDecoder) == 1)
|
||||
{
|
||||
UInt32 distance;
|
||||
if (m_IsRepG1Decoders[state.Index].Decode(m_RangeDecoder) == 0)
|
||||
if (m_IsRepG0Decoders[state.Index].Decode(m_RangeDecoder) == 0)
|
||||
{
|
||||
distance = rep1;
|
||||
if (m_IsRep0LongDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0)
|
||||
{
|
||||
state.UpdateShortRep();
|
||||
m_OutWindow.PutByte(m_OutWindow.GetByte(rep0));
|
||||
nowPos64++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_IsRepG2Decoders[state.Index].Decode(m_RangeDecoder) == 0)
|
||||
distance = rep2;
|
||||
UInt32 distance;
|
||||
if (m_IsRepG1Decoders[state.Index].Decode(m_RangeDecoder) == 0)
|
||||
{
|
||||
distance = rep1;
|
||||
}
|
||||
else
|
||||
{
|
||||
distance = rep3;
|
||||
rep3 = rep2;
|
||||
if (m_IsRepG2Decoders[state.Index].Decode(m_RangeDecoder) == 0)
|
||||
distance = rep2;
|
||||
else
|
||||
{
|
||||
distance = rep3;
|
||||
rep3 = rep2;
|
||||
}
|
||||
rep2 = rep1;
|
||||
}
|
||||
rep2 = rep1;
|
||||
}
|
||||
rep1 = rep0;
|
||||
rep0 = distance;
|
||||
}
|
||||
len = m_RepLenDecoder.Decode(m_RangeDecoder, posState) + Base.kMatchMinLen;
|
||||
state.UpdateRep();
|
||||
}
|
||||
else
|
||||
{
|
||||
rep3 = rep2;
|
||||
rep2 = rep1;
|
||||
rep1 = rep0;
|
||||
len = Base.kMatchMinLen + m_LenDecoder.Decode(m_RangeDecoder, posState);
|
||||
state.UpdateMatch();
|
||||
uint posSlot = m_PosSlotDecoder[Base.GetLenToPosState(len)].Decode(m_RangeDecoder);
|
||||
if (posSlot >= Base.kStartPosModelIndex)
|
||||
{
|
||||
int numDirectBits = (int)((posSlot >> 1) - 1);
|
||||
rep0 = ((2 | (posSlot & 1)) << numDirectBits);
|
||||
if (posSlot < Base.kEndPosModelIndex)
|
||||
rep0 += BitTreeDecoder.ReverseDecode(m_PosDecoders,
|
||||
rep0 - posSlot - 1, m_RangeDecoder, numDirectBits);
|
||||
else
|
||||
{
|
||||
rep0 += (m_RangeDecoder.DecodeDirectBits(
|
||||
numDirectBits - Base.kNumAlignBits) << Base.kNumAlignBits);
|
||||
rep0 += m_PosAlignDecoder.ReverseDecode(m_RangeDecoder);
|
||||
rep1 = rep0;
|
||||
rep0 = distance;
|
||||
}
|
||||
len = m_RepLenDecoder.Decode(m_RangeDecoder, posState) + Base.kMatchMinLen;
|
||||
state.UpdateRep();
|
||||
}
|
||||
else
|
||||
rep0 = posSlot;
|
||||
{
|
||||
rep3 = rep2;
|
||||
rep2 = rep1;
|
||||
rep1 = rep0;
|
||||
len = Base.kMatchMinLen + m_LenDecoder.Decode(m_RangeDecoder, posState);
|
||||
state.UpdateMatch();
|
||||
uint posSlot = m_PosSlotDecoder[Base.GetLenToPosState(len)].Decode(m_RangeDecoder);
|
||||
if (posSlot >= Base.kStartPosModelIndex)
|
||||
{
|
||||
int numDirectBits = (int)((posSlot >> 1) - 1);
|
||||
rep0 = ((2 | (posSlot & 1)) << numDirectBits);
|
||||
if (posSlot < Base.kEndPosModelIndex)
|
||||
rep0 += BitTreeDecoder.ReverseDecode(m_PosDecoders,
|
||||
rep0 - posSlot - 1, m_RangeDecoder, numDirectBits);
|
||||
else
|
||||
{
|
||||
rep0 += (m_RangeDecoder.DecodeDirectBits(
|
||||
numDirectBits - Base.kNumAlignBits) << Base.kNumAlignBits);
|
||||
rep0 += m_PosAlignDecoder.ReverseDecode(m_RangeDecoder);
|
||||
}
|
||||
}
|
||||
else
|
||||
rep0 = posSlot;
|
||||
}
|
||||
if (rep0 >= m_OutWindow.TrainSize + nowPos64 || rep0 >= m_DictionarySizeCheck)
|
||||
{
|
||||
if (rep0 == 0xFFFFFFFF)
|
||||
break;
|
||||
throw new DataErrorException();
|
||||
}
|
||||
m_OutWindow.CopyBlock(rep0, len);
|
||||
nowPos64 += len;
|
||||
}
|
||||
if (rep0 >= m_OutWindow.TrainSize + nowPos64 || rep0 >= m_DictionarySizeCheck)
|
||||
{
|
||||
if (rep0 == 0xFFFFFFFF)
|
||||
break;
|
||||
throw new DataErrorException();
|
||||
}
|
||||
m_OutWindow.CopyBlock(rep0, len);
|
||||
nowPos64 += len;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
m_OutWindow.Flush();
|
||||
m_OutWindow.ReleaseStream();
|
||||
m_RangeDecoder.ReleaseStream();
|
||||
|
||||
@@ -5,6 +5,7 @@ using System;
|
||||
namespace SevenZip.Compression.LZMA
|
||||
{
|
||||
using RangeCoder;
|
||||
using System.Threading;
|
||||
|
||||
public class Encoder : ICoder, ISetCoderProperties, IWriteCoderProperties
|
||||
{
|
||||
@@ -1271,7 +1272,7 @@ namespace SevenZip.Compression.LZMA
|
||||
|
||||
|
||||
public void Code(System.IO.Stream inStream, System.IO.Stream outStream,
|
||||
Int64 inSize, Int64 outSize, ICodeProgress progress)
|
||||
Int64 inSize, Int64 outSize, ICodeProgress progress, CancellationToken? token = null)
|
||||
{
|
||||
_needReleaseMFStream = false;
|
||||
try
|
||||
@@ -1279,6 +1280,7 @@ namespace SevenZip.Compression.LZMA
|
||||
SetStreams(inStream, outStream, inSize, outSize);
|
||||
while (true)
|
||||
{
|
||||
token?.ThrowIfCancellationRequested();
|
||||
Int64 processedInSize;
|
||||
Int64 processedOutSize;
|
||||
bool finished;
|
||||
|
||||
+2
-1
@@ -1,6 +1,7 @@
|
||||
// ICoder.h
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
@@ -58,7 +59,7 @@ namespace SevenZip
|
||||
/// if input stream is not valid
|
||||
/// </exception>
|
||||
void Code(System.IO.Stream inStream, System.IO.Stream outStream,
|
||||
Int64 inSize, Int64 outSize, ICodeProgress progress);
|
||||
Int64 inSize, Int64 outSize, ICodeProgress progress, CancellationToken? token = null);
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -34,6 +34,7 @@ namespace DiscUtils.Fat
|
||||
|
||||
internal FatFileSystemOptions()
|
||||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
FileNameEncoding = Encoding.GetEncoding(437);
|
||||
}
|
||||
|
||||
@@ -45,6 +46,7 @@ namespace DiscUtils.Fat
|
||||
}
|
||||
else
|
||||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
FileNameEncoding = Encoding.GetEncoding(437);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,7 +166,8 @@ namespace WPinternals
|
||||
FlowDirection.LeftToRight,
|
||||
new Typeface(PathTextBlock.FontFamily, PathTextBlock.FontStyle, PathTextBlock.FontWeight, PathTextBlock.FontStretch),
|
||||
FontSize,
|
||||
Foreground
|
||||
Foreground,
|
||||
VisualTreeHelper.GetDpi(this).PixelsPerDip
|
||||
);
|
||||
#endif
|
||||
|
||||
@@ -198,7 +199,8 @@ namespace WPinternals
|
||||
FlowDirection.LeftToRight,
|
||||
new Typeface(CaptionTextBlock.FontFamily, CaptionTextBlock.FontStyle, CaptionTextBlock.FontWeight, CaptionTextBlock.FontStretch),
|
||||
FontSize,
|
||||
Foreground
|
||||
Foreground,
|
||||
VisualTreeHelper.GetDpi(this).PixelsPerDip
|
||||
);
|
||||
#endif
|
||||
double CaptionWidth = formatted.Width;
|
||||
@@ -238,7 +240,8 @@ namespace WPinternals
|
||||
FlowDirection.LeftToRight,
|
||||
new Typeface(PathTextBlock.FontFamily, PathTextBlock.FontStyle, PathTextBlock.FontWeight, PathTextBlock.FontStretch),
|
||||
FontSize,
|
||||
Foreground
|
||||
Foreground,
|
||||
VisualTreeHelper.GetDpi(this).PixelsPerDip
|
||||
);
|
||||
#endif
|
||||
if (NewWidth < 0)
|
||||
@@ -321,7 +324,8 @@ namespace WPinternals
|
||||
FlowDirection.LeftToRight,
|
||||
new Typeface(PathTextBlock.FontFamily, PathTextBlock.FontStyle, PathTextBlock.FontWeight, PathTextBlock.FontStretch),
|
||||
FontSize,
|
||||
Foreground
|
||||
Foreground,
|
||||
VisualTreeHelper.GetDpi(this).PixelsPerDip
|
||||
);
|
||||
#endif
|
||||
|
||||
|
||||
+6
-6
@@ -375,18 +375,18 @@ namespace WPinternals
|
||||
HasChanged = true;
|
||||
}
|
||||
|
||||
if ((NewPartition.PartitionGuid == null) || (NewPartition.PartitionGuid != CurrentPartition.PartitionGuid))
|
||||
if ((NewPartition.PartitionGuid != Guid.Empty) || (NewPartition.PartitionGuid != CurrentPartition.PartitionGuid))
|
||||
HasChanged = true;
|
||||
if (NewPartition.PartitionGuid != null)
|
||||
if (NewPartition.PartitionGuid != Guid.Empty)
|
||||
CurrentPartition.PartitionGuid = NewPartition.PartitionGuid;
|
||||
if (CurrentPartition.PartitionGuid == null)
|
||||
if (CurrentPartition.PartitionGuid != Guid.Empty)
|
||||
CurrentPartition.PartitionGuid = Guid.NewGuid();
|
||||
|
||||
if ((NewPartition.PartitionTypeGuid == null) || (NewPartition.PartitionTypeGuid != CurrentPartition.PartitionTypeGuid))
|
||||
if ((NewPartition.PartitionTypeGuid != Guid.Empty) || (NewPartition.PartitionTypeGuid != CurrentPartition.PartitionTypeGuid))
|
||||
HasChanged = true;
|
||||
if (NewPartition.PartitionTypeGuid != null)
|
||||
if (NewPartition.PartitionTypeGuid != Guid.Empty)
|
||||
CurrentPartition.PartitionTypeGuid = NewPartition.PartitionTypeGuid;
|
||||
if (CurrentPartition.PartitionTypeGuid == null)
|
||||
if (CurrentPartition.PartitionTypeGuid != Guid.Empty)
|
||||
CurrentPartition.PartitionTypeGuid = Guid.NewGuid();
|
||||
|
||||
for (int i = this.Partitions.Count - 1; i >= 0; i--)
|
||||
|
||||
+11
-3
@@ -92,6 +92,8 @@ namespace WPinternals
|
||||
private Stream stream;
|
||||
private bool LeaveOpen;
|
||||
private Thread WorkThread;
|
||||
private CancellationTokenSource source;
|
||||
private CancellationToken token;
|
||||
|
||||
public LZMACompressionStream(Stream stream, CompressionMode mode, bool LeaveOpen, int DictionarySize, int PosStateBits,
|
||||
int LitContextBits, int LitPosBits, int Algorithm, int NumFastBytes, string MatchFinder, bool EndMarker)
|
||||
@@ -99,6 +101,8 @@ namespace WPinternals
|
||||
this.stream = stream;
|
||||
this.LeaveOpen = LeaveOpen;
|
||||
BufferStream = new PumpStream();
|
||||
source = new CancellationTokenSource();
|
||||
token = source.Token;
|
||||
|
||||
if (mode == CompressionMode.Compress)
|
||||
{
|
||||
@@ -130,14 +134,14 @@ namespace WPinternals
|
||||
|
||||
private void Encode()
|
||||
{
|
||||
Encoder.Code(BufferStream, stream, -1, -1, null);
|
||||
Encoder.Code(BufferStream, stream, -1, -1, null, token);
|
||||
if (LeaveOpen == false)
|
||||
stream.Close();
|
||||
}
|
||||
|
||||
private void Decode()
|
||||
{
|
||||
Decoder.Code(stream, BufferStream, -1, -1, null);
|
||||
Decoder.Code(stream, BufferStream, -1, -1, null, token);
|
||||
BufferStream.Close();
|
||||
if (LeaveOpen == false)
|
||||
stream.Close();
|
||||
@@ -148,7 +152,11 @@ namespace WPinternals
|
||||
if (Encoder != null)
|
||||
BufferStream.Close();
|
||||
else if (WorkThread.IsAlive)
|
||||
WorkThread.Abort();
|
||||
{
|
||||
if (source != null)
|
||||
source.Cancel();
|
||||
WorkThread.Join();
|
||||
}
|
||||
}
|
||||
|
||||
public override int Read(byte[] buffer, int offset, int count)
|
||||
|
||||
+1
-12
@@ -118,14 +118,12 @@ namespace WPinternals
|
||||
[DllImport(
|
||||
KERNEL32,
|
||||
SetLastError = true)]
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
internal static extern bool CloseHandle(IntPtr handle);
|
||||
|
||||
[DllImport(
|
||||
ADVAPI32,
|
||||
CharSet = CharSet.Unicode,
|
||||
SetLastError = true)]
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
internal static extern bool AdjustTokenPrivileges(
|
||||
[In] SafeTokenHandle TokenHandle,
|
||||
[In] bool DisableAllPrivileges,
|
||||
@@ -138,7 +136,6 @@ namespace WPinternals
|
||||
ADVAPI32,
|
||||
CharSet = CharSet.Auto,
|
||||
SetLastError = true)]
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
internal static extern
|
||||
bool RevertToSelf();
|
||||
|
||||
@@ -147,7 +144,6 @@ namespace WPinternals
|
||||
EntryPoint = "LookupPrivilegeValueW",
|
||||
CharSet = CharSet.Auto,
|
||||
SetLastError = true)]
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
internal static extern
|
||||
bool LookupPrivilegeValue(
|
||||
[In] string lpSystemName,
|
||||
@@ -158,7 +154,6 @@ namespace WPinternals
|
||||
KERNEL32,
|
||||
CharSet = CharSet.Auto,
|
||||
SetLastError = true)]
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
internal static extern
|
||||
IntPtr GetCurrentProcess();
|
||||
|
||||
@@ -166,7 +161,6 @@ namespace WPinternals
|
||||
KERNEL32,
|
||||
CharSet = CharSet.Auto,
|
||||
SetLastError = true)]
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
internal static extern
|
||||
IntPtr GetCurrentThread();
|
||||
|
||||
@@ -174,7 +168,6 @@ namespace WPinternals
|
||||
ADVAPI32,
|
||||
CharSet = CharSet.Unicode,
|
||||
SetLastError = true)]
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
internal static extern
|
||||
bool OpenProcessToken(
|
||||
[In] IntPtr ProcessToken,
|
||||
@@ -185,7 +178,6 @@ namespace WPinternals
|
||||
(ADVAPI32,
|
||||
CharSet = CharSet.Unicode,
|
||||
SetLastError = true)]
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
internal static extern
|
||||
bool OpenThreadToken(
|
||||
[In] IntPtr ThreadToken,
|
||||
@@ -197,7 +189,6 @@ namespace WPinternals
|
||||
(ADVAPI32,
|
||||
CharSet = CharSet.Unicode,
|
||||
SetLastError = true)]
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
internal static extern
|
||||
bool DuplicateTokenEx(
|
||||
[In] SafeTokenHandle ExistingToken,
|
||||
@@ -211,7 +202,6 @@ namespace WPinternals
|
||||
(ADVAPI32,
|
||||
CharSet = CharSet.Unicode,
|
||||
SetLastError = true)]
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
internal static extern
|
||||
bool SetThreadToken(
|
||||
[In] IntPtr Thread,
|
||||
@@ -301,8 +291,7 @@ namespace WPinternals
|
||||
}
|
||||
|
||||
[DllImport(NativeMethods.KERNEL32, SetLastError = true),
|
||||
SuppressUnmanagedCodeSecurity,
|
||||
ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
|
||||
SuppressUnmanagedCodeSecurity]
|
||||
private static extern bool CloseHandle(IntPtr handle);
|
||||
|
||||
override protected bool ReleaseHandle()
|
||||
|
||||
@@ -20,8 +20,6 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Specialized;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.ConstrainedExecution;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
|
||||
@@ -93,7 +91,6 @@ namespace WPinternals
|
||||
// of privilege names to luids
|
||||
//
|
||||
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
private static Luid LuidFromPrivilege(string privilege)
|
||||
{
|
||||
Luid luid;
|
||||
@@ -104,8 +101,6 @@ namespace WPinternals
|
||||
// Look up the privilege LUID inside the cache
|
||||
//
|
||||
|
||||
RuntimeHelpers.PrepareConstrainedRegions();
|
||||
|
||||
try
|
||||
{
|
||||
privilegeLock.AcquireReaderLock(Timeout.Infinite);
|
||||
@@ -206,8 +201,6 @@ namespace WPinternals
|
||||
}
|
||||
}
|
||||
|
||||
RuntimeHelpers.PrepareConstrainedRegions();
|
||||
|
||||
try
|
||||
{
|
||||
// Open the thread token; if there is no thread token,
|
||||
@@ -382,19 +375,16 @@ namespace WPinternals
|
||||
#endregion
|
||||
|
||||
#region Public methods and properties
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
public void Enable()
|
||||
{
|
||||
this.ToggleState(true);
|
||||
}
|
||||
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
public void Disable()
|
||||
{
|
||||
this.ToggleState(false);
|
||||
}
|
||||
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
public void Revert()
|
||||
{
|
||||
int error = 0;
|
||||
@@ -413,8 +403,6 @@ namespace WPinternals
|
||||
|
||||
// This code must be eagerly prepared and non-interruptible.
|
||||
|
||||
RuntimeHelpers.PrepareConstrainedRegions();
|
||||
|
||||
try
|
||||
{
|
||||
// The payload is entirely in the finally block
|
||||
@@ -492,8 +480,6 @@ namespace WPinternals
|
||||
|
||||
Privilege p = new Privilege(privilege);
|
||||
|
||||
RuntimeHelpers.PrepareConstrainedRegions();
|
||||
|
||||
try
|
||||
{
|
||||
if (enabled)
|
||||
@@ -520,7 +506,6 @@ namespace WPinternals
|
||||
#endregion
|
||||
|
||||
#region Private implementation
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
|
||||
private void ToggleState(bool enable)
|
||||
{
|
||||
int error = 0;
|
||||
@@ -542,8 +527,6 @@ namespace WPinternals
|
||||
// Need to make this block of code non-interruptible so that it would preserve
|
||||
// consistency of thread oken state even in the face of catastrophic exceptions
|
||||
|
||||
RuntimeHelpers.PrepareConstrainedRegions();
|
||||
|
||||
try
|
||||
{
|
||||
// The payload is entirely in the finally block
|
||||
@@ -635,11 +618,8 @@ namespace WPinternals
|
||||
}
|
||||
}
|
||||
|
||||
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
|
||||
private void Reset()
|
||||
{
|
||||
RuntimeHelpers.PrepareConstrainedRegions();
|
||||
|
||||
try
|
||||
{
|
||||
// Payload is in the finally block
|
||||
|
||||
+19
-948
File diff suppressed because it is too large
Load Diff
+265
-89
@@ -3,232 +3,408 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29123.89
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPinternals", "WPinternals.csproj", "{AED6DEB8-F54C-4B41-9655-793E7096AE6E}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WPinternals", "WPinternals.csproj", "{AED6DEB8-F54C-4B41-9655-793E7096AE6E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Debug-AddEmergency|Any CPU = Debug-AddEmergency|Any CPU
|
||||
Debug-AddEmergency|x64 = Debug-AddEmergency|x64
|
||||
Debug-AddEmergency|x86 = Debug-AddEmergency|x86
|
||||
Debug-BackupGPT|Any CPU = Debug-BackupGPT|Any CPU
|
||||
Debug-BackupGPT|x64 = Debug-BackupGPT|x64
|
||||
Debug-BackupGPT|x86 = Debug-BackupGPT|x86
|
||||
Debug-ClearNV|Any CPU = Debug-ClearNV|Any CPU
|
||||
Debug-ClearNV|x64 = Debug-ClearNV|x64
|
||||
Debug-ClearNV|x86 = Debug-ClearNV|x86
|
||||
Debug-CustomFlash-930|Any CPU = Debug-CustomFlash-930|Any CPU
|
||||
Debug-CustomFlash-930|x64 = Debug-CustomFlash-930|x64
|
||||
Debug-CustomFlash-930|x86 = Debug-CustomFlash-930|x86
|
||||
Debug-CustomFlash-950 (no restart)|Any CPU = Debug-CustomFlash-950 (no restart)|Any CPU
|
||||
Debug-CustomFlash-950 (no restart)|x64 = Debug-CustomFlash-950 (no restart)|x64
|
||||
Debug-CustomFlash-950 (no restart)|x86 = Debug-CustomFlash-950 (no restart)|x86
|
||||
Debug-CustomFlash-950|Any CPU = Debug-CustomFlash-950|Any CPU
|
||||
Debug-CustomFlash-950|x64 = Debug-CustomFlash-950|x64
|
||||
Debug-CustomFlash-950|x86 = Debug-CustomFlash-950|x86
|
||||
Debug-DLall|Any CPU = Debug-DLall|Any CPU
|
||||
Debug-DLall|x64 = Debug-DLall|x64
|
||||
Debug-DLall|x86 = Debug-DLall|x86
|
||||
Debug-DLEmergency|Any CPU = Debug-DLEmergency|Any CPU
|
||||
Debug-DLEmergency|x64 = Debug-DLEmergency|x64
|
||||
Debug-DLEmergency|x86 = Debug-DLEmergency|x86
|
||||
Debug-DLFFU|Any CPU = Debug-DLFFU|Any CPU
|
||||
Debug-DLFFU|x64 = Debug-DLFFU|x64
|
||||
Debug-DLFFU|x86 = Debug-DLFFU|x86
|
||||
Debug-DumpFFU|Any CPU = Debug-DumpFFU|Any CPU
|
||||
Debug-DumpFFU|x64 = Debug-DumpFFU|x64
|
||||
Debug-DumpFFU|x86 = Debug-DumpFFU|x86
|
||||
Debug-DumpUEFI|Any CPU = Debug-DumpUEFI|Any CPU
|
||||
Debug-DumpUEFI|x64 = Debug-DumpUEFI|x64
|
||||
Debug-DumpUEFI|x86 = Debug-DumpUEFI|x86
|
||||
Debug-EnableRootAccess|Any CPU = Debug-EnableRootAccess|Any CPU
|
||||
Debug-EnableRootAccess|x64 = Debug-EnableRootAccess|x64
|
||||
Debug-EnableRootAccess|x86 = Debug-EnableRootAccess|x86
|
||||
Debug-EnableRootAccessOnImage|Any CPU = Debug-EnableRootAccessOnImage|Any CPU
|
||||
Debug-EnableRootAccessOnImage|x64 = Debug-EnableRootAccessOnImage|x64
|
||||
Debug-EnableRootAccessOnImage|x86 = Debug-EnableRootAccessOnImage|x86
|
||||
Debug-EnableTestSigning (no restart)|Any CPU = Debug-EnableTestSigning (no restart)|Any CPU
|
||||
Debug-EnableTestSigning (no restart)|x64 = Debug-EnableTestSigning (no restart)|x64
|
||||
Debug-EnableTestSigning (no restart)|x86 = Debug-EnableTestSigning (no restart)|x86
|
||||
Debug-EnableTestSigning|Any CPU = Debug-EnableTestSigning|Any CPU
|
||||
Debug-EnableTestSigning|x64 = Debug-EnableTestSigning|x64
|
||||
Debug-EnableTestSigning|x86 = Debug-EnableTestSigning|x86
|
||||
Debug-FindFlashingProfile|Any CPU = Debug-FindFlashingProfile|Any CPU
|
||||
Debug-FindFlashingProfile|x64 = Debug-FindFlashingProfile|x64
|
||||
Debug-FindFlashingProfile|x86 = Debug-FindFlashingProfile|x86
|
||||
Debug-FindFlashingProfileNoRestart|Any CPU = Debug-FindFlashingProfileNoRestart|Any CPU
|
||||
Debug-FindFlashingProfileNoRestart|x64 = Debug-FindFlashingProfileNoRestart|x64
|
||||
Debug-FindFlashingProfileNoRestart|x86 = Debug-FindFlashingProfileNoRestart|x86
|
||||
Debug-FixBoot|Any CPU = Debug-FixBoot|Any CPU
|
||||
Debug-FixBoot|x64 = Debug-FixBoot|x64
|
||||
Debug-FixBoot|x86 = Debug-FixBoot|x86
|
||||
Debug-FlashCustomRom-640|Any CPU = Debug-FlashCustomRom-640|Any CPU
|
||||
Debug-FlashCustomRom-640|x64 = Debug-FlashCustomRom-640|x64
|
||||
Debug-FlashCustomRom-640|x86 = Debug-FlashCustomRom-640|x86
|
||||
Debug-FlashFFU-RM1073|Any CPU = Debug-FlashFFU-RM1073|Any CPU
|
||||
Debug-FlashFFU-RM1073|x64 = Debug-FlashFFU-RM1073|x64
|
||||
Debug-FlashFFU-RM1073|x86 = Debug-FlashFFU-RM1073|x86
|
||||
Debug-FlashFFU-RM1085|Any CPU = Debug-FlashFFU-RM1085|Any CPU
|
||||
Debug-FlashFFU-RM1085|x64 = Debug-FlashFFU-RM1085|x64
|
||||
Debug-FlashFFU-RM1085|x86 = Debug-FlashFFU-RM1085|x86
|
||||
Debug-FlashRaw|Any CPU = Debug-FlashRaw|Any CPU
|
||||
Debug-FlashRaw|x64 = Debug-FlashRaw|x64
|
||||
Debug-FlashRaw|x86 = Debug-FlashRaw|x86
|
||||
Debug-Help|Any CPU = Debug-Help|Any CPU
|
||||
Debug-Help|x64 = Debug-Help|x64
|
||||
Debug-Help|x86 = Debug-Help|x86
|
||||
Debug-MergeGptXmlXml|Any CPU = Debug-MergeGptXmlXml|Any CPU
|
||||
Debug-MergeGptXmlXml|x64 = Debug-MergeGptXmlXml|x64
|
||||
Debug-MergeGptXmlXml|x86 = Debug-MergeGptXmlXml|x86
|
||||
Debug-MergeGptXmlZip|Any CPU = Debug-MergeGptXmlZip|Any CPU
|
||||
Debug-MergeGptXmlZip|x64 = Debug-MergeGptXmlZip|x64
|
||||
Debug-MergeGptXmlZip|x86 = Debug-MergeGptXmlZip|x86
|
||||
Debug-MSM|Any CPU = Debug-MSM|Any CPU
|
||||
Debug-MSM|x64 = Debug-MSM|x64
|
||||
Debug-MSM|x86 = Debug-MSM|x86
|
||||
Debug-ReadGPT|Any CPU = Debug-ReadGPT|Any CPU
|
||||
Debug-ReadGPT|x64 = Debug-ReadGPT|x64
|
||||
Debug-ReadGPT|x86 = Debug-ReadGPT|x86
|
||||
Debug-RelockPhone|Any CPU = Debug-RelockPhone|Any CPU
|
||||
Debug-RelockPhone|x64 = Debug-RelockPhone|x64
|
||||
Debug-RelockPhone|x86 = Debug-RelockPhone|x86
|
||||
Debug-RestoreGPT|Any CPU = Debug-RestoreGPT|Any CPU
|
||||
Debug-RestoreGPT|x64 = Debug-RestoreGPT|x64
|
||||
Debug-RestoreGPT|x86 = Debug-RestoreGPT|x86
|
||||
Debug-ShowFFU|Any CPU = Debug-ShowFFU|Any CPU
|
||||
Debug-ShowFFU|x64 = Debug-ShowFFU|x64
|
||||
Debug-ShowFFU|x86 = Debug-ShowFFU|x86
|
||||
Debug-ShowPhoneInfo|Any CPU = Debug-ShowPhoneInfo|Any CPU
|
||||
Debug-ShowPhoneInfo|x64 = Debug-ShowPhoneInfo|x64
|
||||
Debug-ShowPhoneInfo|x86 = Debug-ShowPhoneInfo|x86
|
||||
Debug-Test|Any CPU = Debug-Test|Any CPU
|
||||
Debug-Test|x64 = Debug-Test|x64
|
||||
Debug-Test|x86 = Debug-Test|x86
|
||||
Debug-TestProgrammer-550|Any CPU = Debug-TestProgrammer-550|Any CPU
|
||||
Debug-TestProgrammer-550|x64 = Debug-TestProgrammer-550|x64
|
||||
Debug-TestProgrammer-550|x86 = Debug-TestProgrammer-550|x86
|
||||
Debug-TestProgrammer-630|Any CPU = Debug-TestProgrammer-630|Any CPU
|
||||
Debug-TestProgrammer-630|x64 = Debug-TestProgrammer-630|x64
|
||||
Debug-TestProgrammer-630|x86 = Debug-TestProgrammer-630|x86
|
||||
Debug-TestProgrammer-640|Any CPU = Debug-TestProgrammer-640|Any CPU
|
||||
Debug-TestProgrammer-640|x64 = Debug-TestProgrammer-640|x64
|
||||
Debug-TestProgrammer-640|x86 = Debug-TestProgrammer-640|x86
|
||||
Debug-TestProgrammer-650|Any CPU = Debug-TestProgrammer-650|Any CPU
|
||||
Debug-TestProgrammer-650|x64 = Debug-TestProgrammer-650|x64
|
||||
Debug-TestProgrammer-650|x86 = Debug-TestProgrammer-650|x86
|
||||
Debug-TestProgrammer-930|Any CPU = Debug-TestProgrammer-930|Any CPU
|
||||
Debug-TestProgrammer-930|x64 = Debug-TestProgrammer-930|x64
|
||||
Debug-TestProgrammer-930|x86 = Debug-TestProgrammer-930|x86
|
||||
Debug-TestProgrammer-950|Any CPU = Debug-TestProgrammer-950|Any CPU
|
||||
Debug-TestProgrammer-950|x64 = Debug-TestProgrammer-950|x64
|
||||
Debug-TestProgrammer-950|x86 = Debug-TestProgrammer-950|x86
|
||||
Debug-UnlockBootloader|Any CPU = Debug-UnlockBootloader|Any CPU
|
||||
Debug-UnlockBootloader|x64 = Debug-UnlockBootloader|x64
|
||||
Debug-UnlockBootloader|x86 = Debug-UnlockBootloader|x86
|
||||
Preview|Any CPU = Preview|Any CPU
|
||||
Preview|x64 = Preview|x64
|
||||
Preview|x86 = Preview|x86
|
||||
Preview-Test|Any CPU = Preview-Test|Any CPU
|
||||
Preview-Test|x64 = Preview-Test|x64
|
||||
Preview-Test|x86 = Preview-Test|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
Release-Test|Any CPU = Release-Test|Any CPU
|
||||
Release-Test|x64 = Release-Test|x64
|
||||
Release-Test|x86 = Release-Test|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-AddEmergency|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-AddEmergency|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-AddEmergency|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-AddEmergency|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-AddEmergency|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-AddEmergency|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-BackupGPT|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-BackupGPT|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-BackupGPT|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-BackupGPT|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-BackupGPT|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-BackupGPT|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ClearNV|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ClearNV|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ClearNV|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ClearNV|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ClearNV|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ClearNV|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-930|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-930|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-930|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-930|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-930|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-930|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950 (no restart)|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950 (no restart)|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950 (no restart)|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950 (no restart)|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950 (no restart)|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950 (no restart)|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLall|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLall|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLall|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLall|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLall|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLall|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLEmergency|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLEmergency|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLEmergency|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLEmergency|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLEmergency|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLEmergency|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLFFU|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLFFU|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLFFU|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLFFU|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLFFU|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLFFU|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpFFU|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpFFU|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpFFU|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpFFU|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpFFU|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpFFU|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpUEFI|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpUEFI|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpUEFI|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpUEFI|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpUEFI|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpUEFI|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccess|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccess|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccess|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccess|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccess|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccess|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccessOnImage|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccessOnImage|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccessOnImage|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccessOnImage|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccessOnImage|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccessOnImage|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning (no restart)|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning (no restart)|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning (no restart)|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning (no restart)|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning (no restart)|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning (no restart)|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfile|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfile|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfile|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfile|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfile|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfile|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfileNoRestart|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfileNoRestart|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfileNoRestart|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfileNoRestart|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfileNoRestart|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfileNoRestart|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FixBoot|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FixBoot|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FixBoot|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FixBoot|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FixBoot|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FixBoot|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashCustomRom-640|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashCustomRom-640|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashCustomRom-640|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashCustomRom-640|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashCustomRom-640|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashCustomRom-640|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1073|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1073|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1073|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1073|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1073|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1073|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1085|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1085|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1085|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1085|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1085|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1085|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashRaw|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashRaw|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashRaw|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashRaw|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashRaw|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashRaw|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Help|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Help|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Help|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Help|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Help|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Help|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlXml|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlXml|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlXml|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlXml|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlXml|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlXml|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlZip|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlZip|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlZip|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlZip|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlZip|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlZip|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MSM|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MSM|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MSM|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MSM|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MSM|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MSM|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ReadGPT|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ReadGPT|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ReadGPT|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ReadGPT|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ReadGPT|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ReadGPT|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RelockPhone|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RelockPhone|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RelockPhone|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RelockPhone|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RelockPhone|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RelockPhone|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RestoreGPT|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RestoreGPT|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RestoreGPT|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RestoreGPT|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RestoreGPT|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RestoreGPT|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowFFU|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowFFU|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowFFU|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowFFU|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowFFU|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowFFU|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowPhoneInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowPhoneInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowPhoneInfo|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowPhoneInfo|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowPhoneInfo|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowPhoneInfo|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Test|Any CPU.ActiveCfg = Debug-Test|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Test|Any CPU.Build.0 = Debug-Test|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Test|x64.ActiveCfg = Debug-Test|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Test|x64.Build.0 = Debug-Test|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Test|x86.ActiveCfg = Debug-Test|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Test|x86.Build.0 = Debug-Test|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-550|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-550|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-550|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-550|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-550|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-550|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-630|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-630|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-630|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-630|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-630|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-630|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-640|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-640|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-640|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-640|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-640|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-640|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-650|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-650|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-650|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-650|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-650|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-650|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-930|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-930|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-930|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-930|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-930|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-930|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-950|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-950|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-950|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-950|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-950|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-950|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-UnlockBootloader|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-UnlockBootloader|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-UnlockBootloader|x64.ActiveCfg = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-UnlockBootloader|x64.Build.0 = Debug|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-UnlockBootloader|x86.ActiveCfg = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-UnlockBootloader|x86.Build.0 = Debug|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview|Any CPU.Build.0 = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview|x64.ActiveCfg = Release|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview|x64.Build.0 = Release|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview|x86.ActiveCfg = Release|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview|x86.Build.0 = Release|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview-Test|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview-Test|Any CPU.Build.0 = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview-Test|x64.ActiveCfg = Release|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview-Test|x64.Build.0 = Release|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview-Test|x86.ActiveCfg = Release|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview-Test|x86.Build.0 = Release|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release|x64.ActiveCfg = Release|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release|x64.Build.0 = Release|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release|x86.ActiveCfg = Release|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release|x86.Build.0 = Release|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release-Test|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release-Test|Any CPU.Build.0 = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-AddEmergency|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-AddEmergency|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-BackupGPT|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-BackupGPT|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ClearNV|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ClearNV|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-930|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-930|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-950 (no restart)|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-950 (no restart)|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-950|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-950|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLall|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLall|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLEmergency|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLEmergency|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLFFU|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLFFU|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DumpFFU|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DumpFFU|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DumpUEFI|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DumpUEFI|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableRootAccess|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableRootAccess|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableRootAccessOnImage|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableRootAccessOnImage|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableTestSigning (no restart)|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableTestSigning (no restart)|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableTestSigning|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableTestSigning|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FindFlashingProfile|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FindFlashingProfile|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FindFlashingProfileNoRestart|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FindFlashingProfileNoRestart|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FixBoot|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FixBoot|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashCustomRom-640|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashCustomRom-640|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashFFU-RM1073|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashFFU-RM1073|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashFFU-RM1085|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashFFU-RM1085|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashRaw|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashRaw|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-Help|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-Help|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MergeGptXmlXml|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MergeGptXmlXml|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MergeGptXmlZip|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MergeGptXmlZip|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MSM|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MSM|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ReadGPT|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ReadGPT|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-RelockPhone|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-RelockPhone|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-RestoreGPT|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-RestoreGPT|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ShowFFU|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ShowFFU|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ShowPhoneInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ShowPhoneInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-Test|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-Test|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-550|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-550|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-630|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-630|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-640|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-640|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-650|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-650|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-930|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-930|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-950|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-950|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-UnlockBootloader|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-UnlockBootloader|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Preview|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Preview|Any CPU.Build.0 = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Preview-Test|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Preview-Test|Any CPU.Build.0 = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Release-Test|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Release-Test|Any CPU.Build.0 = Release|Any CPU
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release-Test|x64.ActiveCfg = Release|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release-Test|x64.Build.0 = Release|x64
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release-Test|x86.ActiveCfg = Release|x86
|
||||
{AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release-Test|x86.Build.0 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -97,23 +97,48 @@ namespace MadWizard.WinUSBNet.API
|
||||
return deviceDesc;
|
||||
}
|
||||
|
||||
public string GetStringDescriptor(byte index)
|
||||
private int ReadStringDescriptor(byte index, ushort languageID, byte[] buffer)
|
||||
{
|
||||
byte[] buffer = new byte[256];
|
||||
uint transfered;
|
||||
bool success = WinUsb_GetDescriptor(_winUsbHandle, USB_STRING_DESCRIPTOR_TYPE,
|
||||
index, 0, buffer, (uint)buffer.Length, out transfered);
|
||||
index, languageID, buffer, (uint)buffer.Length, out transfered);
|
||||
if (!success)
|
||||
throw APIException.Win32("Failed to get USB string descriptor (" + index + "): 0x" + Marshal.GetLastWin32Error().ToString("X8"));
|
||||
throw APIException.Win32("Failed to get USB string descriptor (" + index + ").");
|
||||
|
||||
int length = buffer[0] - 2;
|
||||
if (length <= 0)
|
||||
if (transfered == 0)
|
||||
throw new APIException("No data returned when reading USB descriptor.");
|
||||
|
||||
int length = buffer[0];
|
||||
if (length != transfered)
|
||||
throw new APIException("Unexpected length when reading USB descriptor.");
|
||||
return length;
|
||||
}
|
||||
|
||||
public ushort[] GetSupportedLanguageIDs()
|
||||
{
|
||||
byte[] buffer = new byte[256];
|
||||
int length = ReadStringDescriptor(0, 0, buffer);
|
||||
length -= 2; // Skip length byte and descriptor type
|
||||
if (length < 0 || (length % 2) != 0)
|
||||
throw new APIException("Unexpected length when reading supported languages.");
|
||||
|
||||
ushort[] langIDs = new ushort[length / 2];
|
||||
Buffer.BlockCopy(buffer, 2, langIDs, 0, length);
|
||||
return langIDs;
|
||||
}
|
||||
|
||||
public string GetStringDescriptor(byte index, ushort languageID)
|
||||
{
|
||||
byte[] buffer = new byte[256];
|
||||
int length = ReadStringDescriptor(index, languageID, buffer);
|
||||
length -= 2; // Skip length byte and descriptor type
|
||||
if (length < 0)
|
||||
return null;
|
||||
char[] chars = System.Text.Encoding.Unicode.GetChars(buffer, 2, length);
|
||||
return new string(chars);
|
||||
}
|
||||
|
||||
public void ControlTransfer(byte requestType, byte request, ushort value, ushort index, ushort length, byte[] data)
|
||||
public int ControlTransfer(byte requestType, byte request, ushort value, ushort index, ushort length, byte[] data)
|
||||
{
|
||||
uint bytesReturned = 0;
|
||||
WINUSB_SETUP_PACKET setupPacket;
|
||||
@@ -127,6 +152,7 @@ namespace MadWizard.WinUSBNet.API
|
||||
bool success = WinUsb_ControlTransfer(_winUsbHandle, setupPacket, data, length, ref bytesReturned, IntPtr.Zero);
|
||||
if (!success) // todo check bytes returned?
|
||||
throw APIException.Win32("Control transfer on WinUSB device failed.");
|
||||
return (int)bytesReturned;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* WinUSBNet library
|
||||
/* WinUSBNet library
|
||||
* (C) 2010 Thomas Bleeker (www.madwizard.org)
|
||||
*
|
||||
* Licensed under the MIT license, see license.txt or:
|
||||
@@ -47,20 +47,13 @@ namespace MadWizard.WinUSBNet
|
||||
|
||||
/*
|
||||
// Listen for the control's window creation and then hook into it.
|
||||
internal void OnHandleCreated(object sender, EventArgs e)
|
||||
private void OnHandleCreated(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Window is now created, assign handle to NativeWindow.
|
||||
IntPtr handle = ((Control)sender).Handle;
|
||||
AssignHandle(handle);
|
||||
|
||||
if (_notifyHandle != IntPtr.Zero)
|
||||
{
|
||||
API.DeviceManagement.StopDeviceDeviceNotifications(_notifyHandle);
|
||||
_notifyHandle = IntPtr.Zero;
|
||||
}
|
||||
API.DeviceManagement.RegisterForDeviceNotifications(handle, _guid, ref _notifyHandle);
|
||||
RegisterNotify(handle);
|
||||
}
|
||||
catch (API.APIException ex)
|
||||
{
|
||||
@@ -68,17 +61,12 @@ namespace MadWizard.WinUSBNet
|
||||
}
|
||||
}
|
||||
|
||||
internal void OnHandleDestroyed(object sender, EventArgs e)
|
||||
private void OnHandleDestroyed(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Window was destroyed, release hook.
|
||||
ReleaseHandle();
|
||||
if (_notifyHandle != null)
|
||||
{
|
||||
API.DeviceManagement.StopDeviceDeviceNotifications(_notifyHandle);
|
||||
_notifyHandle = IntPtr.Zero;
|
||||
}
|
||||
StopNotify();
|
||||
}
|
||||
catch (API.APIException ex)
|
||||
{
|
||||
@@ -86,6 +74,28 @@ namespace MadWizard.WinUSBNet
|
||||
}
|
||||
}
|
||||
|
||||
private void RegisterNotify(IntPtr handle)
|
||||
{
|
||||
AssignHandle(handle);
|
||||
|
||||
if (_notifyHandle != IntPtr.Zero)
|
||||
{
|
||||
API.DeviceManagement.StopDeviceDeviceNotifications(_notifyHandle);
|
||||
_notifyHandle = IntPtr.Zero;
|
||||
}
|
||||
API.DeviceManagement.RegisterForDeviceNotifications(handle, _guid, ref _notifyHandle);
|
||||
}
|
||||
|
||||
private void StopNotify()
|
||||
{
|
||||
//ReleaseHandle();
|
||||
if (_notifyHandle != IntPtr.Zero)
|
||||
{
|
||||
API.DeviceManagement.StopDeviceDeviceNotifications(_notifyHandle);
|
||||
_notifyHandle = IntPtr.Zero;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
// Listen for operating system messages
|
||||
@@ -95,6 +105,17 @@ namespace MadWizard.WinUSBNet
|
||||
case API.DeviceManagement.WM_DEVICECHANGE:
|
||||
_notifier.HandleDeviceChange(m);
|
||||
break;
|
||||
case WM_NCDESTROY:
|
||||
// Note: when a control is used, OnHandleDestroyed will be called and the
|
||||
// handle is already released from NativeWindow. In that case, this
|
||||
// WM_NCDESTROY message will not be caught here. This is no problem since
|
||||
// StopNotify is already called. Even if it does, calling it twice does not cause
|
||||
// problems.
|
||||
// When a window handle is used instead of a Control the OnHandle events will not
|
||||
// fire and this handler is necessary to release the handle and stop notifications
|
||||
// when the window is destroyed.
|
||||
StopNotify();
|
||||
break;
|
||||
}
|
||||
base.WndProc(ref m);
|
||||
}
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
/* WinUSBNet library
|
||||
/* WinUSBNet library
|
||||
* (C) 2010 Thomas Bleeker (www.madwizard.org)
|
||||
*
|
||||
* Licensed under the MIT license, see license.txt or:
|
||||
@@ -55,10 +55,10 @@ namespace MadWizard.WinUSBNet
|
||||
/// <summary>Video base class (0x0E)</summary>
|
||||
Video = 0x0E,
|
||||
|
||||
/// <summary>Personal healthcare base class (0x0F)</summary>
|
||||
/// <summary>Personal health care base class (0x0F)</summary>
|
||||
PersonalHealthcare = 0x0F,
|
||||
|
||||
/// <summary>Diagnosticdevice base class (0xDC)</summary>
|
||||
/// <summary>Diagnostic device base class (0xDC)</summary>
|
||||
DiagnosticDevice = 0xDC,
|
||||
|
||||
/// <summary>Wireless controller base class (0xE0)</summary>
|
||||
|
||||
+51
-33
@@ -1,4 +1,4 @@
|
||||
/* WinUSBNet library
|
||||
/* WinUSBNet library
|
||||
* (C) 2010 Thomas Bleeker (www.madwizard.org)
|
||||
*
|
||||
* Licensed under the MIT license, see license.txt or:
|
||||
@@ -96,7 +96,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <summary>
|
||||
/// Disposes the object
|
||||
/// </summary>
|
||||
/// <param name="disposing">Indicates wether Dispose was called manually (true) or by
|
||||
/// <param name="disposing">Indicates whether Dispose was called manually (true) or by
|
||||
/// the garbage collector (false) via the destructor.</param>
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
@@ -166,7 +166,7 @@ namespace MadWizard.WinUSBNet
|
||||
API.WINUSB_PIPE_INFORMATION[] pipesInfo;
|
||||
_wuDevice.GetInterfaceInfo(i, out descriptor, out pipesInfo);
|
||||
USBPipe[] interfacePipes = new USBPipe[pipesInfo.Length];
|
||||
for (int k = 0; k < pipesInfo.Length; k++)
|
||||
for(int k=0;k<pipesInfo.Length;k++)
|
||||
{
|
||||
USBPipe pipe = new USBPipe(this, pipesInfo[k]);
|
||||
interfacePipes[k] = pipe;
|
||||
@@ -187,13 +187,13 @@ namespace MadWizard.WinUSBNet
|
||||
private void CheckControlParams(int value, int index, byte[] buffer, int length)
|
||||
{
|
||||
if (value < ushort.MinValue || value > ushort.MaxValue)
|
||||
throw new ArgumentOutOfRangeException("Value parameter out of range.");
|
||||
throw new ArgumentOutOfRangeException(nameof(value), "Value parameter out of range.");
|
||||
if (index < ushort.MinValue || index > ushort.MaxValue)
|
||||
throw new ArgumentOutOfRangeException("Index parameter out of range.");
|
||||
throw new ArgumentOutOfRangeException(nameof(index), "Index parameter out of range.");
|
||||
if (length > buffer.Length)
|
||||
throw new ArgumentOutOfRangeException("Length parameter is larger than the size of the buffer.");
|
||||
throw new ArgumentOutOfRangeException(nameof(length), "Length parameter is larger than the size of the buffer.");
|
||||
if (length > ushort.MaxValue)
|
||||
throw new ArgumentOutOfRangeException("Length too large");
|
||||
throw new ArgumentOutOfRangeException(nameof(length), "Length too large");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -213,7 +213,7 @@ namespace MadWizard.WinUSBNet
|
||||
set
|
||||
{
|
||||
if (value < 0)
|
||||
throw new ArgumentOutOfRangeException("Control pipe timeout cannot be negative.");
|
||||
throw new ArgumentOutOfRangeException(nameof(value), "Control pipe timeout cannot be negative.");
|
||||
//_wuDevice.SetPipePolicy(0, 0x00, API.POLICY_TYPE.PIPE_TRANSFER_TIMEOUT, (uint)value);
|
||||
if (InputPipe != null)
|
||||
_wuDevice.SetPipePolicy(0, InputPipe.Address, API.POLICY_TYPE.PIPE_TRANSFER_TIMEOUT, (uint)value);
|
||||
@@ -237,7 +237,8 @@ namespace MadWizard.WinUSBNet
|
||||
/// written to this buffer. For an OUT direction transfer the contents of the buffer are written sent through the pipe.</param>
|
||||
/// <param name="length">Length of the data to transfer. Must be equal to or less than the length of <paramref name="buffer"/>.
|
||||
/// The setup packet's length member will be set to this length.</param>
|
||||
public void ControlTransfer(byte requestType, byte request, int value, int index, byte[] buffer, int length)
|
||||
/// <returns>The number of bytes received from the device.</returns>
|
||||
public int ControlTransfer(byte requestType, byte request, int value, int index, byte[] buffer, int length)
|
||||
{
|
||||
// Parameters are int and not ushort because ushort is not CLS compliant.
|
||||
CheckNotDisposed();
|
||||
@@ -245,7 +246,7 @@ namespace MadWizard.WinUSBNet
|
||||
|
||||
try
|
||||
{
|
||||
_wuDevice.ControlTransfer(requestType, request, (ushort)value, (ushort)index, (ushort)length, buffer);
|
||||
return _wuDevice.ControlTransfer(requestType, request, (ushort)value, (ushort)index, (ushort)length, buffer);
|
||||
}
|
||||
catch (API.APIException e)
|
||||
{
|
||||
@@ -269,7 +270,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="length">Length of the data to transfer. Must be equal to or less than the length of <paramref name="buffer"/>. The setup packet's length member will be set to this length.</param>
|
||||
/// <param name="userCallback">An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required.</param>
|
||||
/// <param name="stateObject">A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required.</param>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object repesenting the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object representing the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <remarks>This method always completes immediately even if the operation is still pending. The <see cref="IAsyncResult"/> object returned represents the operation
|
||||
/// and must be passed to <see cref="EndControlTransfer"/> to retrieve the result of the operation. For every call to this method a matching call to
|
||||
/// <see cref="EndControlTransfer"/> must be made. When <paramref name="userCallback"/> specifies a callback function, this function will be called when the operation is completed. The optional
|
||||
@@ -318,7 +319,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// be set to the length of this buffer. Note: This buffer is not allowed to change for the duration of the asynchronous operation. </param>
|
||||
/// <param name="userCallback">An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required.</param>
|
||||
/// <param name="stateObject">A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required.</param>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object repesenting the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object representing the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <remarks>This method always completes immediately even if the operation is still pending. The <see cref="IAsyncResult"/> object returned represents the operation
|
||||
/// and must be passed to <see cref="EndControlTransfer"/> to retrieve the result of the operation. For every call to this method a matching call to
|
||||
/// <see cref="EndControlTransfer"/> must be made. When <paramref name="userCallback"/> specifies a callback function, this function will be called when the operation is completed. The optional
|
||||
@@ -334,13 +335,13 @@ namespace MadWizard.WinUSBNet
|
||||
/// <summary>
|
||||
/// Waits for a pending asynchronous control transfer to complete.
|
||||
/// </summary>
|
||||
/// <param name="asyncResult">The <see cref="IAsyncResult"/> object representing the asynchonous operation,
|
||||
/// <param name="asyncResult">The <see cref="IAsyncResult"/> object representing the asynchronous operation,
|
||||
/// as returned by one of the ControlIn, ControlOut or ControlTransfer methods.</param>
|
||||
/// <returns>The number of bytes transfered during the operation.</returns>
|
||||
/// <remarks>Every asynchronous control transfer must have a matching call to <see cref="EndControlTransfer"/> to dispose
|
||||
/// of any resources used and to retrieve the result of the operation. When the operation was successful the method returns the number
|
||||
/// of bytes that were transfered. If an error occurred during the operation this method will throw the exceptions that would
|
||||
/// otherwise have ocurred during the operation. If the operation is not yet finished EndControlTransfer will wait for the
|
||||
/// otherwise have occurred during the operation. If the operation is not yet finished EndControlTransfer will wait for the
|
||||
/// operation to finish before returning.</remarks>
|
||||
public int EndControlTransfer(IAsyncResult asyncResult)
|
||||
{
|
||||
@@ -382,9 +383,10 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="buffer">The data to transfer in the data stage of the control. When the transfer is in the IN direction the data received will be
|
||||
/// written to this buffer. For an OUT direction transfer the contents of the buffer are written sent through the pipe. The length of this
|
||||
/// buffer is used as the number of bytes in the control transfer. The setup packet's length member will be set to this length as well.</param>
|
||||
public void ControlTransfer(byte requestType, byte request, int value, int index, byte[] buffer)
|
||||
/// <returns>The number of bytes received from the device.</returns>
|
||||
public int ControlTransfer(byte requestType, byte request, int value, int index, byte[] buffer)
|
||||
{
|
||||
ControlTransfer(requestType, request, value, index, buffer, buffer.Length);
|
||||
return ControlTransfer(requestType, request, value, index, buffer, buffer.Length);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -426,11 +428,20 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="length">Length of the data to transfer. A buffer will be created with this length and the length member of the setup packet
|
||||
/// will be set to this length.</param>
|
||||
/// <returns>A buffer containing the data transfered.</returns>
|
||||
/// <remarks>This routine initially allocates a buffer to hold the <paramref name="length"/> bytes of data expected from the device.
|
||||
/// If the device responds with less data than expected, this routine will allocate a smaller buffer to copy and return only the bytes actually received.
|
||||
/// </remarks>
|
||||
public byte[] ControlIn(byte requestType, byte request, int value, int index, int length)
|
||||
{
|
||||
CheckIn(requestType);
|
||||
byte[] buffer = new byte[length];
|
||||
ControlTransfer(requestType, request, value, index, buffer, buffer.Length);
|
||||
int actuallyReceived = ControlTransfer(requestType, request, value, index, buffer, buffer.Length);
|
||||
if (actuallyReceived < length)
|
||||
{
|
||||
byte[] outBuffer = new byte[actuallyReceived];
|
||||
Array.Copy(buffer, 0, outBuffer, 0, actuallyReceived);
|
||||
return outBuffer;
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@@ -446,10 +457,11 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="buffer">The buffer that will receive the data transfered.</param>
|
||||
/// <param name="length">Length of the data to transfer. The length member of the setup packet will be set to this length. The buffer specified
|
||||
/// by the <paramref name="buffer"/> parameter should have at least this length.</param>
|
||||
public void ControlIn(byte requestType, byte request, int value, int index, byte[] buffer, int length)
|
||||
/// <returns>The number of bytes received from the device.</returns>
|
||||
public int ControlIn(byte requestType, byte request, int value, int index, byte[] buffer, int length)
|
||||
{
|
||||
CheckIn(requestType);
|
||||
ControlTransfer(requestType, request, value, index, buffer, length);
|
||||
return ControlTransfer(requestType, request, value, index, buffer, length);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -462,10 +474,11 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="value">The value member in the setup packet. Its meaning depends on the request. Value should be between zero and 65535 (0xFFFF).</param>
|
||||
/// <param name="index">The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF).</param>
|
||||
/// <param name="buffer">The buffer that will receive the data transfered. The length of this buffer will be the number of bytes transfered.</param>
|
||||
public void ControlIn(byte requestType, byte request, int value, int index, byte[] buffer)
|
||||
/// <returns>The number of bytes received from the device.</returns>
|
||||
public int ControlIn(byte requestType, byte request, int value, int index, byte[] buffer)
|
||||
{
|
||||
CheckIn(requestType);
|
||||
ControlTransfer(requestType, request, value, index, buffer);
|
||||
return ControlTransfer(requestType, request, value, index, buffer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -545,7 +558,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="index">The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF).</param>
|
||||
/// <param name="userCallback">An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required.</param>
|
||||
/// <param name="stateObject">A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required.</param>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object repesenting the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object representing the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <remarks>This method always completes immediately even if the operation is still pending. The <see cref="IAsyncResult"/> object returned represents the operation
|
||||
/// and must be passed to <see cref="EndControlTransfer"/> to retrieve the result of the operation. For every call to this method a matching call to
|
||||
/// <see cref="EndControlTransfer"/> must be made. When <paramref name="userCallback"/> specifies a callback function, this function will be called when the operation is completed. The optional
|
||||
@@ -571,7 +584,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="length">Length of the data to transfer. Must be equal to or less than the length of <paramref name="buffer"/>. The setup packet's length member will be set to this length.</param>
|
||||
/// <param name="userCallback">An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required.</param>
|
||||
/// <param name="stateObject">A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required.</param>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object repesenting the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object representing the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <remarks>This method always completes immediately even if the operation is still pending. The <see cref="IAsyncResult"/> object returned represents the operation
|
||||
/// and must be passed to <see cref="EndControlTransfer"/> to retrieve the result of the operation. For every call to this method a matching call to
|
||||
/// <see cref="EndControlTransfer"/> must be made. When <paramref name="userCallback"/> specifies a callback function, this function will be called when the operation is completed. The optional
|
||||
@@ -594,7 +607,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="buffer">The buffer that will receive the data transfered. The setup packet's length member will be set to the length of this buffer.</param>
|
||||
/// <param name="userCallback">An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required.</param>
|
||||
/// <param name="stateObject">A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required.</param>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object repesenting the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object representing the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <remarks>This method always completes immediately even if the operation is still pending. The <see cref="IAsyncResult"/> object returned represents the operation
|
||||
/// and must be passed to <see cref="EndControlTransfer"/> to retrieve the result of the operation. For every call to this method a matching call to
|
||||
/// <see cref="EndControlTransfer"/> must be made. When <paramref name="userCallback"/> specifies a callback function, this function will be called when the operation is completed. The optional
|
||||
@@ -617,7 +630,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="index">The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF).</param>
|
||||
/// <param name="userCallback">An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required.</param>
|
||||
/// <param name="stateObject">A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required.</param>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object repesenting the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object representing the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <remarks>This method always completes immediately even if the operation is still pending. The <see cref="IAsyncResult"/> object returned represents the operation
|
||||
/// and must be passed to <see cref="EndControlTransfer"/> to retrieve the result of the operation. For every call to this method a matching call to
|
||||
/// <see cref="EndControlTransfer"/> must be made. When <paramref name="userCallback"/> specifies a callback function, this function will be called when the operation is completed. The optional
|
||||
@@ -641,7 +654,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="length">Length of the data to transfer. Must be equal to or less than the length of <paramref name="buffer"/>. The setup packet's length member will be set to this length.</param>
|
||||
/// <param name="userCallback">An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required.</param>
|
||||
/// <param name="stateObject">A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required.</param>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object repesenting the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object representing the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <remarks>This method always completes immediately even if the operation is still pending. The <see cref="IAsyncResult"/> object returned represents the operation
|
||||
/// and must be passed to <see cref="EndControlTransfer"/> to retrieve the result of the operation. For every call to this method a matching call to
|
||||
/// <see cref="EndControlTransfer"/> must be made. When <paramref name="userCallback"/> specifies a callback function, this function will be called when the operation is completed. The optional
|
||||
@@ -664,7 +677,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="buffer">The buffer that contains the data to be transfered. The setup packet's length member will be set to the length of this buffer.</param>
|
||||
/// <param name="userCallback">An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required.</param>
|
||||
/// <param name="stateObject">A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required.</param>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object repesenting the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object representing the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <remarks>This method always completes immediately even if the operation is still pending. The <see cref="IAsyncResult"/> object returned represents the operation
|
||||
/// and must be passed to <see cref="EndControlTransfer"/> to retrieve the result of the operation. For every call to this method a matching call to
|
||||
/// <see cref="EndControlTransfer"/> must be made. When <paramref name="userCallback"/> specifies a callback function, this function will be called when the operation is completed. The optional
|
||||
@@ -687,7 +700,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="index">The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF).</param>
|
||||
/// <param name="userCallback">An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required.</param>
|
||||
/// <param name="stateObject">A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required.</param>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object repesenting the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object representing the asynchronous control transfer, which could still be pending.</returns>
|
||||
/// <remarks>This method always completes immediately even if the operation is still pending. The <see cref="IAsyncResult"/> object returned represents the operation
|
||||
/// and must be passed to <see cref="EndControlTransfer"/> to retrieve the result of the operation. For every call to this method a matching call to
|
||||
/// <see cref="EndControlTransfer"/> must be made. When <paramref name="userCallback"/> specifies a callback function, this function will be called when the operation is completed. The optional
|
||||
@@ -781,8 +794,13 @@ namespace MadWizard.WinUSBNet
|
||||
{
|
||||
wuDevice.OpenDevice(devicePath);
|
||||
API.USB_DEVICE_DESCRIPTOR deviceDesc = wuDevice.GetDeviceDescriptor();
|
||||
// string q = wuDevice.GetStringDescriptor(0);
|
||||
// TODO: use language id properly
|
||||
|
||||
// Get first supported language ID
|
||||
ushort[] langIDs = wuDevice.GetSupportedLanguageIDs();
|
||||
ushort langID = 0;
|
||||
if (langIDs.Length > 0)
|
||||
langID = langIDs[0];
|
||||
|
||||
string manufacturer = null, product = null, serialNumber = null;
|
||||
byte idx = 0;
|
||||
|
||||
@@ -790,7 +808,7 @@ namespace MadWizard.WinUSBNet
|
||||
{
|
||||
idx = deviceDesc.iManufacturer;
|
||||
if (idx > 0)
|
||||
manufacturer = wuDevice.GetStringDescriptor(idx);
|
||||
manufacturer = wuDevice.GetStringDescriptor(idx, langID);
|
||||
}
|
||||
catch { }
|
||||
|
||||
@@ -798,7 +816,7 @@ namespace MadWizard.WinUSBNet
|
||||
{
|
||||
idx = deviceDesc.iProduct;
|
||||
if (idx > 0)
|
||||
product = wuDevice.GetStringDescriptor(idx);
|
||||
product = wuDevice.GetStringDescriptor(idx, langID);
|
||||
}
|
||||
catch { }
|
||||
|
||||
@@ -806,7 +824,7 @@ namespace MadWizard.WinUSBNet
|
||||
{
|
||||
idx = deviceDesc.iSerialNumber;
|
||||
if (idx > 0)
|
||||
serialNumber = wuDevice.GetStringDescriptor(idx);
|
||||
serialNumber = wuDevice.GetStringDescriptor(idx, langID);
|
||||
}
|
||||
catch { }
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* WinUSBNet library
|
||||
/* WinUSBNet library
|
||||
* (C) 2010 Thomas Bleeker (www.madwizard.org)
|
||||
*
|
||||
* Licensed under the MIT license, see license.txt or:
|
||||
@@ -67,7 +67,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <summary>
|
||||
/// Device class code as defined in the interface descriptor
|
||||
/// This property can be used if the class type is not defined
|
||||
/// int the USBBaseClass enumeraiton
|
||||
/// int the USBBaseClass enumeration
|
||||
/// </summary>
|
||||
public byte ClassValue
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* WinUSBNet library
|
||||
/* WinUSBNet library
|
||||
* (C) 2010 Thomas Bleeker (www.madwizard.org)
|
||||
*
|
||||
* Licensed under the MIT license, see license.txt or:
|
||||
@@ -73,7 +73,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <summary>
|
||||
/// Interface class code as defined in the interface descriptor
|
||||
/// This property can be used if the class type is not defined
|
||||
/// int the USBBaseClass enumeraiton
|
||||
/// int the USBBaseClass enumeration
|
||||
/// </summary>
|
||||
public byte ClassValue
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* WinUSBNet library
|
||||
/* WinUSBNet library
|
||||
* (C) 2010 Thomas Bleeker (www.madwizard.org)
|
||||
*
|
||||
* Licensed under the MIT license, see license.txt or:
|
||||
@@ -146,7 +146,7 @@ namespace MadWizard.WinUSBNet
|
||||
_Arrival(this, new USBEvent(USBEventType.DeviceArrival, _guid, devicePath));
|
||||
}
|
||||
/// <summary>
|
||||
/// Trigggers the removal event
|
||||
/// Triggers the removal event
|
||||
/// </summary>
|
||||
/// <param name="devicePath">Device pathname of the device that has been connected</param>
|
||||
protected void OnRemoval(string devicePath)
|
||||
|
||||
+16
-17
@@ -1,4 +1,4 @@
|
||||
/* WinUSBNet library
|
||||
/* WinUSBNet library
|
||||
* (C) 2010 Thomas Bleeker (www.madwizard.org)
|
||||
*
|
||||
* Licensed under the MIT license, see license.txt or:
|
||||
@@ -139,29 +139,29 @@ namespace MadWizard.WinUSBNet
|
||||
private void CheckReadParams(byte[] buffer, int offset, int length)
|
||||
{
|
||||
if (!IsIn)
|
||||
// throw new NotSupportedException("Cannot read from a pipe with OUT direction.");
|
||||
LogAndThrowException(new NotSupportedException("Cannot read from a pipe with OUT direction."));
|
||||
// throw new ArgumentOutOfRangeException("Offset of data to read is outside the buffer boundaries.");
|
||||
LogAndThrowException(new ArgumentOutOfRangeException("Offset of data to read is outside the buffer boundaries."));
|
||||
|
||||
int bufferLength = buffer.Length;
|
||||
if (offset < 0 || offset >= bufferLength)
|
||||
// throw new ArgumentOutOfRangeException("Offset of data to read is outside the buffer boundaries.");
|
||||
// throw new ArgumentOutOfRangeException(nameof(offset), "Offset of data to read is outside the buffer boundaries.");
|
||||
LogAndThrowException(new ArgumentOutOfRangeException("Offset of data to read is outside the buffer boundaries."));
|
||||
if (length < 0 || (offset + length) > bufferLength)
|
||||
// throw new ArgumentOutOfRangeException("Length of data to read is outside the buffer boundaries.");
|
||||
// throw new ArgumentOutOfRangeException(nameof(length), "Length of data to read is outside the buffer boundaries.");
|
||||
LogAndThrowException(new ArgumentOutOfRangeException("Length of data to read is outside the buffer boundaries."));
|
||||
}
|
||||
private void CheckWriteParams(byte[] buffer, int offset, int length)
|
||||
{
|
||||
if (!IsOut)
|
||||
// throw new NotSupportedException("Cannot write to a pipe with IN direction.");
|
||||
//throw new NotSupportedException("Cannot write to a pipe with IN direction.");
|
||||
LogAndThrowException(new NotSupportedException("Cannot write to a pipe with IN direction."));
|
||||
|
||||
int bufferLength = buffer.Length;
|
||||
if (offset < 0 || offset >= bufferLength)
|
||||
// throw new ArgumentOutOfRangeException("Offset of data to write is outside the buffer boundaries.");
|
||||
// throw new ArgumentOutOfRangeException(nameof(offset), "Offset of data to write is outside the buffer boundaries.");
|
||||
LogAndThrowException(new ArgumentOutOfRangeException("Offset of data to write is outside the buffer boundaries."));
|
||||
if (length < 0 || (offset + length) > bufferLength)
|
||||
// throw new ArgumentOutOfRangeException("Length of data to write is outside the buffer boundaries.");
|
||||
// throw new ArgumentOutOfRangeException(nameof(length), "Length of data to write is outside the buffer boundaries.");
|
||||
LogAndThrowException(new ArgumentOutOfRangeException("Length of data to write is outside the buffer boundaries."));
|
||||
}
|
||||
|
||||
@@ -171,7 +171,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="length">Length of the data to transfer.</param>
|
||||
/// <param name="userCallback">An optional asynchronous callback, to be called when the operation is complete. Can be null if no callback is required.</param>
|
||||
/// <param name="stateObject">A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required.</param>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object repesenting the asynchronous operation, which could still be pending.</returns>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object representing the asynchronous operation, which could still be pending.</returns>
|
||||
/// <remarks>This method always completes immediately even if the operation is still pending. The <see cref="IAsyncResult"/> object returned represents the operation
|
||||
/// and must be passed to <see cref="EndRead"/> to retrieve the result of the operation. For every call to this method a matching call to
|
||||
/// <see cref="EndRead"/> must be made. When <paramref name="userCallback"/> specifies a callback function, this function will be called when the operation is completed. The optional
|
||||
@@ -189,9 +189,8 @@ namespace MadWizard.WinUSBNet
|
||||
}
|
||||
catch (API.APIException e)
|
||||
{
|
||||
if (result != null)
|
||||
result.Dispose();
|
||||
// throw new USBException("Failed to read from pipe.", e);
|
||||
result.Dispose();
|
||||
//throw new USBException("Failed to read from pipe.", e);
|
||||
LogAndThrowException(new USBException("Failed to read from pipe.", e));
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -208,13 +207,13 @@ namespace MadWizard.WinUSBNet
|
||||
/// <summary>
|
||||
/// Waits for a pending asynchronous read operation to complete.
|
||||
/// </summary>
|
||||
/// <param name="asyncResult">The <see cref="IAsyncResult"/> object representing the asynchonous operation,
|
||||
/// <param name="asyncResult">The <see cref="IAsyncResult"/> object representing the asynchronous operation,
|
||||
/// as returned by <see cref="BeginRead"/>.</param>
|
||||
/// <returns>The number of bytes transfered during the operation.</returns>
|
||||
/// <remarks>Every call to <see cref="BeginRead"/> must have a matching call to <see cref="EndRead"/> to dispose
|
||||
/// of any resources used and to retrieve the result of the operation. When the operation was successful the method returns the number
|
||||
/// of bytes that were transfered. If an error occurred during the operation this method will throw the exceptions that would
|
||||
/// otherwise have ocurred during the operation. If the operation is not yet finished EndWrite will wait for the
|
||||
/// otherwise have occurred during the operation. If the operation is not yet finished EndWrite will wait for the
|
||||
/// operation to finish before returning.</remarks>
|
||||
public int EndRead(IAsyncResult asyncResult)
|
||||
{
|
||||
@@ -285,7 +284,7 @@ namespace MadWizard.WinUSBNet
|
||||
/// <param name="length">Length of the data to transfer.</param>
|
||||
/// <param name="userCallback">An optional asynchronous callback, to be called when the operation is complete. Can be null if no callback is required.</param>
|
||||
/// <param name="stateObject">A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required.</param>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object repesenting the asynchronous operation, which could still be pending.</returns>
|
||||
/// <returns>An <see cref="IAsyncResult"/> object representing the asynchronous operation, which could still be pending.</returns>
|
||||
/// <remarks>This method always completes immediately even if the operation is still pending. The <see cref="IAsyncResult"/> object returned represents the operation
|
||||
/// and must be passed to <see cref="EndWrite"/> to retrieve the result of the operation. For every call to this method a matching call to
|
||||
/// <see cref="EndWrite"/> must be made. When <paramref name="userCallback"/> specifies a callback function, this function will be called when the operation is completed. The optional
|
||||
@@ -327,13 +326,13 @@ namespace MadWizard.WinUSBNet
|
||||
/// <summary>
|
||||
/// Waits for a pending asynchronous write operation to complete.
|
||||
/// </summary>
|
||||
/// <param name="asyncResult">The <see cref="IAsyncResult"/> object representing the asynchonous operation,
|
||||
/// <param name="asyncResult">The <see cref="IAsyncResult"/> object representing the asynchronous operation,
|
||||
/// as returned by <see cref="BeginWrite"/>.</param>
|
||||
/// <returns>The number of bytes transfered during the operation.</returns>
|
||||
/// <remarks>Every call to <see cref="BeginWrite"/> must have a matching call to <see cref="EndWrite"/> to dispose
|
||||
/// of any resources used and to retrieve the result of the operation. When the operation was successful the method returns the number
|
||||
/// of bytes that were transfered. If an error occurred during the operation this method will throw the exceptions that would
|
||||
/// otherwise have ocurred during the operation. If the operation is not yet finished EndWrite will wait for the
|
||||
/// otherwise have occurred during the operation. If the operation is not yet finished EndWrite will wait for the
|
||||
/// operation to finish before returning.</remarks>
|
||||
public void EndWrite(IAsyncResult asyncResult)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Workaround for intermittent issue
|
||||
https://developercommunity.visualstudio.com/content/problem/983843/dotnet-build-task-does-not-use-nugetorg-for-one-pr.html
|
||||
-->
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<clear />
|
||||
<add key="nuget" value="https://api.nuget.org/v3/index.json" />
|
||||
</packageSources>
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user