public static void HalSendSMCMessage(XboxConsole Console, byte[] Request, ref byte[] Response) { if (Request.Length != 16) { throw new Exception("XDKUtilities.HalSendSMCMessage: Invalid request specified. It must be 16 bytes in length."); } if (!Enum.IsDefined(typeof(SMCRequestTypes), Request[0])) { throw new Exception("XDKUtilities.HalSendSMCMessage: Invalid request specified. The first byte needs to be a valid request value."); } var request = new XDRPCArrayArgumentInfo <byte[]>(Request); var response = Response == null ? (XDRPCArgumentInfo) new XDRPCNullArgumentInfo() : new XDRPCArrayArgumentInfo <byte[]>(Response, ArgumentType.ByRef); Console.ExecuteRPC <uint>(XDRPCMode.Title, "xboxkrnl.exe", 41, request, response); if (!(response is XDRPCNullArgumentInfo)) { Response = ((XDRPCArrayArgumentInfo <byte[]>)response).Value; } }
public static byte[] ExGetXConfigSetting(XboxConsole Console, XCONFIG_CATEGORY_TYPES Category, short Entry, short SettingSize) { var dwCategory = new XDRPCArgumentInfo <short>((short)Category); var dwEntry = new XDRPCArgumentInfo <short>(Entry); var pBuffer = new XDRPCArrayArgumentInfo <byte[]>(new byte[SettingSize], ArgumentType.ByRef); var cbBuffer = new XDRPCArgumentInfo <short>(SettingSize); var szSetting = new XDRPCArgumentInfo <short>(0, ArgumentType.Out); var returnVal = Console.ExecuteRPC <uint>(XDRPCMode.Title, "xboxkrnl.exe", 16, dwCategory, dwEntry, pBuffer, cbBuffer, szSetting); if (returnVal != 0x00000000) { throw new COMException("Exception from HRESULT: " + string.Format("0x{0:X}", returnVal), (int)returnVal); } if (szSetting.Value != SettingSize) { throw new XDRPCInvalidResponseException("XDKUtilities.ExGetXConfigSetting: The returned buffer size does not match the expected buffer size."); } return(pBuffer.Value); }
public static string XamGetCachedTitleName(XboxConsole Console, uint TitleID) { if (TitleID == 0) { return(string.Empty); } var dwTitleId = new XDRPCArgumentInfo <uint>(TitleID); var pwsz = new XDRPCArrayArgumentInfo <byte[]>(new byte[56], ArgumentType.Out, 56); var pcch = new XDRPCArgumentInfo <int>(56, ArgumentType.ByRef); var returnVal = Console.ExecuteRPC <uint>(XDRPCMode.Title, "xam.xex", 694, dwTitleId, pwsz, pcch); if (returnVal == 0x3E5) { return(string.Empty); } if (returnVal != 0x00000000) { throw new COMException("Exception from HRESULT: " + string.Format("0x{0:X}", returnVal), (int)returnVal); } return(Encoding.BigEndianUnicode.GetString(pwsz.Value).Replace("\0", string.Empty)); }
public static string XamGetCachedTitleName(XboxConsole Console, uint TitleID) { if (TitleID == 0) return string.Empty; var dwTitleId = new XDRPCArgumentInfo<uint>(TitleID); var pwsz = new XDRPCArrayArgumentInfo<byte[]>(new byte[56], ArgumentType.Out, 56); var pcch = new XDRPCArgumentInfo<int>(56, ArgumentType.ByRef); var returnVal = Console.ExecuteRPC<uint>(XDRPCMode.Title, "xam.xex", 694, dwTitleId, pwsz, pcch); if (returnVal == 0x3E5) return string.Empty; if (returnVal != 0x00000000) throw new COMException("Exception from HRESULT: " + string.Format("0x{0:X}", returnVal), (int)returnVal); return Encoding.BigEndianUnicode.GetString(pwsz.Value).Replace("\0", string.Empty); }
public static void HalSendSMCMessage(XboxConsole Console, byte[] Request, ref byte[] Response) { if (Request.Length != 16) throw new Exception("XDKUtilities.HalSendSMCMessage: Invalid request specified. It must be 16 bytes in length."); if (!Enum.IsDefined(typeof(SMCRequestTypes), Request[0])) throw new Exception("XDKUtilities.HalSendSMCMessage: Invalid request specified. The first byte needs to be a valid request value."); var request = new XDRPCArrayArgumentInfo<byte[]>(Request); var response = Response == null ? (XDRPCArgumentInfo)new XDRPCNullArgumentInfo() : new XDRPCArrayArgumentInfo<byte[]>(Response, ArgumentType.ByRef); Console.ExecuteRPC<uint>(XDRPCMode.Title, "xboxkrnl.exe", 41, request, response); if (!(response is XDRPCNullArgumentInfo)) Response = ((XDRPCArrayArgumentInfo<byte[]>)response).Value; }
public static uint Call(this XDevkit.IXboxConsole xbCon, uint address, params object[] arg) { if (((XDevkit.IXboxConsole) xbCon).SupportsRPC()) { bool flag = false; if (xbCon != null) { XDRPCExecutionOptions options = new XDRPCExecutionOptions(XDRPCMode.Title, address); XDRPCArgumentInfo[] args = new XDRPCArgumentInfo[arg.Length]; XDRPCArgumentInfo<float>[] infoArray2 = new XDRPCArgumentInfo<float>[arg.Length]; for (int i = 0; i < arg.Length; i++) { object obj2 = arg[i]; if (obj2 is string) { args[i] = new XDRPCStringArgumentInfo((string) obj2); } else if (obj2 is int) { args[i] = new XDRPCArgumentInfo<int>((int) obj2); } else if (obj2 is uint) { args[i] = new XDRPCArgumentInfo<uint>((uint) obj2); } else if (obj2 is float) { infoArray2[i] = new XDRPCArgumentInfo<float>((float) obj2); flag = true; } else if (obj2 is long) { args[i] = new XDRPCArgumentInfo<long>((long) obj2); } else if (obj2 is byte[]) { args[i] = new XDRPCArrayArgumentInfo<byte[]>((byte[]) obj2); } else if (obj2 is short) { args[i] = new XDRPCArgumentInfo<short>((short) obj2); } else if (obj2 is byte) { args[i] = new XDRPCArgumentInfo<byte>((byte) obj2); } else if (obj2 is char[]) { args[i] = new XDRPCArrayArgumentInfo<char[]>((char[]) obj2); } else if (obj2 is char) { args[i] = new XDRPCArgumentInfo<char>((char) obj2); } else { Console.WriteLine("Invalid Arg"); return 0; } } try { if (flag) { return (uint) ((XDevkit.IXboxConsole) xbCon).ExecuteRPC<float>(options, infoArray2); } return ((XDevkit.IXboxConsole) xbCon).ExecuteRPC<uint>(options, args); } catch (Exception) { return 0; } } return 0; } long[] argument = new long[9]; if (firstRan == 0) { byte[] buffer = new byte[4]; xbCon.DebugTarget.GetMemory(0x91c088ae, 4, buffer, out meh); xbCon.DebugTarget.InvalidateMemoryCache(true, 0x91c088ae, 4); Array.Reverse(buffer); bufferAddress = BitConverter.ToUInt32(buffer, 0); firstRan = 1; stringPointer = bufferAddress + 0x5dc; floatPointer = bufferAddress + 0xa8c; bytePointer = bufferAddress + 0xc80; xbCon.DebugTarget.SetMemory(bufferAddress, 100, nulled, out meh); xbCon.DebugTarget.SetMemory(stringPointer, 100, nulled, out meh); } if (bufferAddress == 0) { byte[] buffer2 = new byte[4]; xbCon.DebugTarget.GetMemory(0x91c088ae, 4, buffer2, out meh); xbCon.DebugTarget.InvalidateMemoryCache(true, 0x91c088ae, 4); Array.Reverse(buffer2); bufferAddress = BitConverter.ToUInt32(buffer2, 0); } stringPointer = bufferAddress + 0x5dc; floatPointer = bufferAddress + 0xa8c; bytePointer = bufferAddress + 0xc80; int num4 = 0; int index = 0; foreach (object obj3 in arg) { if (obj3 is byte) { byte[] buffer3 = (byte[]) obj3; argument[index] = BitConverter.ToUInt32(buffer3, 0); } else if (obj3 is byte[]) { byte[] buffer4 = (byte[]) obj3; xbCon.DebugTarget.SetMemory(bytePointer, (uint) buffer4.Length, buffer4, out meh); argument[index] = bytePointer; bytePointer += (uint) (buffer4.Length + 2); } else if (obj3 is float) { byte[] buffer5 = BitConverter.GetBytes(float.Parse(Convert.ToString(obj3))); xbCon.DebugTarget.SetMemory(floatPointer, (uint) buffer5.Length, buffer5, out meh); argument[index] = floatPointer; floatPointer += (uint) (buffer5.Length + 2); } else if (obj3 is float[]) { byte[] dst = new byte[12]; int num6 = 0; for (num6 = 0; num6 <= 2; num6++) { byte[] buffer7 = new byte[4]; Buffer.BlockCopy((Array) obj3, num6 * 4, buffer7, 0, 4); Array.Reverse(buffer7); Buffer.BlockCopy(buffer7, 0, dst, 4 * num6, 4); } xbCon.DebugTarget.SetMemory(floatPointer, (uint) dst.Length, dst, out meh); argument[index] = floatPointer; floatPointer += 2; } else if (obj3 is string) { byte[] buffer8 = Encoding.ASCII.GetBytes(Convert.ToString(obj3)); xbCon.DebugTarget.SetMemory(stringPointer, (uint) buffer8.Length, buffer8, out meh); argument[index] = stringPointer; string str = Convert.ToString(obj3); stringPointer += (uint) (str.Length + 1); } else { argument[index] = Convert.ToInt64(obj3); } num4++; index++; } byte[] data = getData(argument); xbCon.DebugTarget.SetMemory(bufferAddress + 8, (uint) data.Length, data, out meh); byte[] bytes = BitConverter.GetBytes(num4); Array.Reverse(bytes); xbCon.DebugTarget.SetMemory(bufferAddress + 4, 4, bytes, out meh); Thread.Sleep(0); byte[] array = BitConverter.GetBytes(address); Array.Reverse(array); xbCon.DebugTarget.SetMemory(bufferAddress, 4, array, out meh); Thread.Sleep(50); byte[] buffer12 = new byte[4]; xbCon.DebugTarget.GetMemory(bufferAddress + 0xffc, 4, buffer12, out meh); xbCon.DebugTarget.InvalidateMemoryCache(true, bufferAddress + 0xffc, 4); Array.Reverse(buffer12); return BitConverter.ToUInt32(buffer12, 0); }
public static uint Call(this XDevkit.IXboxConsole xbCon, uint address, params object[] arg) { if (((XDevkit.IXboxConsole)xbCon).SupportsRPC()) { bool flag = false; if (xbCon != null) { XDRPCExecutionOptions options = new XDRPCExecutionOptions(XDRPCMode.Title, address); XDRPCArgumentInfo[] args = new XDRPCArgumentInfo[arg.Length]; XDRPCArgumentInfo <float>[] infoArray2 = new XDRPCArgumentInfo <float> [arg.Length]; for (int i = 0; i < arg.Length; i++) { object obj2 = arg[i]; if (obj2 is string) { args[i] = new XDRPCStringArgumentInfo((string)obj2); } else if (obj2 is int) { args[i] = new XDRPCArgumentInfo <int>((int)obj2); } else if (obj2 is uint) { args[i] = new XDRPCArgumentInfo <uint>((uint)obj2); } else if (obj2 is float) { infoArray2[i] = new XDRPCArgumentInfo <float>((float)obj2); flag = true; } else if (obj2 is long) { args[i] = new XDRPCArgumentInfo <long>((long)obj2); } else if (obj2 is byte[]) { args[i] = new XDRPCArrayArgumentInfo <byte[]>((byte[])obj2); } else if (obj2 is short) { args[i] = new XDRPCArgumentInfo <short>((short)obj2); } else if (obj2 is byte) { args[i] = new XDRPCArgumentInfo <byte>((byte)obj2); } else if (obj2 is char[]) { args[i] = new XDRPCArrayArgumentInfo <char[]>((char[])obj2); } else if (obj2 is char) { args[i] = new XDRPCArgumentInfo <char>((char)obj2); } else { Console.WriteLine("Invalid Arg"); return(0); } } try { if (flag) { return((uint)((XDevkit.IXboxConsole)xbCon).ExecuteRPC <float>(options, infoArray2)); } return(((XDevkit.IXboxConsole)xbCon).ExecuteRPC <uint>(options, args)); } catch (Exception) { return(0); } } return(0); } long[] argument = new long[9]; if (firstRan == 0) { byte[] buffer = new byte[4]; xbCon.DebugTarget.GetMemory(0x91c088ae, 4, buffer, out meh); xbCon.DebugTarget.InvalidateMemoryCache(true, 0x91c088ae, 4); Array.Reverse(buffer); bufferAddress = BitConverter.ToUInt32(buffer, 0); firstRan = 1; stringPointer = bufferAddress + 0x5dc; floatPointer = bufferAddress + 0xa8c; bytePointer = bufferAddress + 0xc80; xbCon.DebugTarget.SetMemory(bufferAddress, 100, nulled, out meh); xbCon.DebugTarget.SetMemory(stringPointer, 100, nulled, out meh); } if (bufferAddress == 0) { byte[] buffer2 = new byte[4]; xbCon.DebugTarget.GetMemory(0x91c088ae, 4, buffer2, out meh); xbCon.DebugTarget.InvalidateMemoryCache(true, 0x91c088ae, 4); Array.Reverse(buffer2); bufferAddress = BitConverter.ToUInt32(buffer2, 0); } stringPointer = bufferAddress + 0x5dc; floatPointer = bufferAddress + 0xa8c; bytePointer = bufferAddress + 0xc80; int num4 = 0; int index = 0; foreach (object obj3 in arg) { if (obj3 is byte) { byte[] buffer3 = (byte[])obj3; argument[index] = BitConverter.ToUInt32(buffer3, 0); } else if (obj3 is byte[]) { byte[] buffer4 = (byte[])obj3; xbCon.DebugTarget.SetMemory(bytePointer, (uint)buffer4.Length, buffer4, out meh); argument[index] = bytePointer; bytePointer += (uint)(buffer4.Length + 2); } else if (obj3 is float) { byte[] buffer5 = BitConverter.GetBytes(float.Parse(Convert.ToString(obj3))); xbCon.DebugTarget.SetMemory(floatPointer, (uint)buffer5.Length, buffer5, out meh); argument[index] = floatPointer; floatPointer += (uint)(buffer5.Length + 2); } else if (obj3 is float[]) { byte[] dst = new byte[12]; int num6 = 0; for (num6 = 0; num6 <= 2; num6++) { byte[] buffer7 = new byte[4]; Buffer.BlockCopy((Array)obj3, num6 * 4, buffer7, 0, 4); Array.Reverse(buffer7); Buffer.BlockCopy(buffer7, 0, dst, 4 * num6, 4); } xbCon.DebugTarget.SetMemory(floatPointer, (uint)dst.Length, dst, out meh); argument[index] = floatPointer; floatPointer += 2; } else if (obj3 is string) { byte[] buffer8 = Encoding.ASCII.GetBytes(Convert.ToString(obj3)); xbCon.DebugTarget.SetMemory(stringPointer, (uint)buffer8.Length, buffer8, out meh); argument[index] = stringPointer; string str = Convert.ToString(obj3); stringPointer += (uint)(str.Length + 1); } else { argument[index] = Convert.ToInt64(obj3); } num4++; index++; } byte[] data = getData(argument); xbCon.DebugTarget.SetMemory(bufferAddress + 8, (uint)data.Length, data, out meh); byte[] bytes = BitConverter.GetBytes(num4); Array.Reverse(bytes); xbCon.DebugTarget.SetMemory(bufferAddress + 4, 4, bytes, out meh); Thread.Sleep(0); byte[] array = BitConverter.GetBytes(address); Array.Reverse(array); xbCon.DebugTarget.SetMemory(bufferAddress, 4, array, out meh); Thread.Sleep(50); byte[] buffer12 = new byte[4]; xbCon.DebugTarget.GetMemory(bufferAddress + 0xffc, 4, buffer12, out meh); xbCon.DebugTarget.InvalidateMemoryCache(true, bufferAddress + 0xffc, 4); Array.Reverse(buffer12); return(BitConverter.ToUInt32(buffer12, 0)); }