XBox 360 Media Center Extender UPnP Device Description

I figure I would post what I have found as far as the UPnP device structure of the XBox 360 MCE. The 360 actually has 2 root devices that it exposes. One is just the regular 360 dashboard and the other is the MCE. Here is the xml that describes the MCE device as well as the mstrustagreement service. So far I have been able to create a UPnP device in code that represents most of this. It has the root device (which was the code that I posted earlier), the NULL service for that, a sub device and the mstrustagreement service. Still need to do the remoted one. Obviously I don't know what any of the code inside those services actually do. That will be the hard part.

Next steps will be to dissect the network traffic back and forth and see what is actually happening during the key exchange. I have done some of that and will post my findings soon.

XBox 360 MCE Root Device Description (located at http://xbox360address:3391/XD/DeviceDescription.xml)

<?xml version='1.0'?>
<root xmlns:pnpx="http://schemas.microsoft.com/windows/pnpx/2005/11" xmlns:a="urn:schemas-upnp-org:service-1-0" xmlns="urn:schemas-upnp-org:device-1-0">
	<specVersion>
		<major>1</major>
		<minor>0</minor>
	</specVersion>
	<device>
		<pnpx:X_deviceCategory>MediaDevices</pnpx:X_deviceCategory>
		<deviceType>urn:schemas-microsoft-com:device:MediaCenterExtenderMFD:1</deviceType>
		<friendlyName>Xbox 360 Media Center Extender</friendlyName>
		<manufacturer>Microsoft Corporation</manufacturer>
		<manufacturerURL>http://www.xbox.com/</manufacturerURL>
		<modelDescription>Xbox 360 Media Center Extender</modelDescription>
		<modelName>Xbox 360</modelName>
		<modelNumber></modelNumber>
		<modelURL>http://go.microsoft.com/fwlink/?LinkID=53081</modelURL>
		<serialNumber></serialNumber>
		<UDN>uuid:10000000-0000-0000-0200-00125AB07AEF</UDN>
		<UPC></UPC>
		<serviceList>
			<service>
				<serviceType>urn:schemas-microsoft-com:service:NULL:1</serviceType>
				<serviceId>urn:microsoft-com:serviceId:NULL</serviceId>
				<SCPDURL>/XD/NULL.xml</SCPDURL>
				<controlURL>/UD/?0</controlURL>
				<eventSubURL/>
			</service>
		</serviceList>
		<deviceList>
			<device>
				<pnpx:X_compatibleId>MICROSOFT_MCX_0001</pnpx:X_compatibleId>
				<pnpx:X_deviceCategory>MediaDevices</pnpx:X_deviceCategory>
				<deviceType>urn:schemas-microsoft-com:device:MediaCenterExtender:1</deviceType>
				<friendlyName>Xbox 360 Media Center Extender</friendlyName>
				<manufacturer>Microsoft Corporation</manufacturer>
				<manufacturerURL>http://www.microsoft.com/</manufacturerURL>
				<modelDescription>Xbox 360 Media Center Extender</modelDescription>
				<modelName>Xbox 360</modelName>
				<modelNumber></modelNumber>
				<modelURL>http://go.microsoft.com/fwlink/?LinkID=53081</modelURL>
				<serialNumber></serialNumber>
				<UDN>uuid:20000000-0000-0000-0200-00125AB07AEF</UDN>
				<UPC></UPC>
				<serviceList>
					<service>
						<serviceType>urn:schemas-microsoft-com:service:mstrustagreement:1</serviceType>
						<serviceId>urn:microsoft-com:serviceId:MSTA</serviceId>
						<SCPDURL>/XD/mstrustagreement.xml</SCPDURL>
						<controlURL>/UD/?1</controlURL>
						<eventSubURL/>
					</service>
					<service>
						<serviceType>urn:schemas-microsoft-com:service:msremotedexperience:1</serviceType>
						<serviceId>urn:schemas-microsoft-com:serviceId:MSRX</serviceId>
						<SCPDURL>/XD/msremotedexperience.xml</SCPDURL>
						<controlURL>/UD/?2</controlURL>
						<eventSubURL/>
					</service>
				</serviceList>
			</device>
		</deviceList>
	</device>
</root>

XBOX 360 MCE mstrustagreement service

<?xml version='1.0'?>
<scpd xmlns="urn:schemas-upnp-org:service-1-0">
 <specVersion>
      <major>1</major>
      <minor>0</minor>
    </specVersion>
 <actionList>
      <action>
        <name>Exchange</name>
        <argumentList>
          <argument>
            <name>HostID</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_EndpointID</relatedStateVariable>
         </argument>
          <argument>
            <name>HostCertificate</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_Certificate</relatedStateVariable>
         </argument>
          <argument>
            <name>IterationsRequired</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_Rounds</relatedStateVariable>
         </argument>
          <argument>
            <name>HostConfirmAuthenticator</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_Authenticator</relatedStateVariable>
         </argument>
          <argument>
            <name>DeviceID</name>
            <direction>out</direction>
            <relatedStateVariable>A_ARG_TYPE_EndpointID</relatedStateVariable>
         </argument>
          <argument>
            <name>DeviceCertificate</name>
            <direction>out</direction>
            <relatedStateVariable>A_ARG_TYPE_Certificate</relatedStateVariable>
         </argument>
          <argument>
            <name>DeviceConfirmAuthenticator</name>
            <direction>out</direction>
            <relatedStateVariable>A_ARG_TYPE_Authenticator</relatedStateVariable>
         </argument>
        </argumentList>
      </action>
      <action>
        <name>Commit</name>
        <argumentList>
          <argument>
            <name>HostID</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_EndpointID</relatedStateVariable>
         </argument>
          <argument>
            <name>Iteration</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_Iteration</relatedStateVariable>
         </argument>
          <argument>
            <name>HostValidateAuthenticator</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_Authenticator</relatedStateVariable>
         </argument>
          <argument>
            <name>DeviceValidateAuthenticator</name>
            <direction>out</direction>
            <relatedStateVariable>A_ARG_TYPE_Authenticator</relatedStateVariable>
         </argument>
        </argumentList>
      </action>
      <action>
        <name>Validate</name>
        <argumentList>
          <argument>
            <name>HostID</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_EndpointID</relatedStateVariable>
         </argument>
          <argument>
            <name>Iteration</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_Iteration</relatedStateVariable>
         </argument>
          <argument>
            <name>HostValidateNonce</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_Nonce</relatedStateVariable>
         </argument>
          <argument>
            <name>DeviceValidateNonce</name>
            <direction>out</direction>
            <relatedStateVariable>A_ARG_TYPE_Nonce</relatedStateVariable>
         </argument>
        </argumentList>
      </action>
      <action>
        <name>Confirm</name>
        <argumentList>
          <argument>
            <name>HostID</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_EndpointID</relatedStateVariable>
         </argument>
          <argument>
            <name>IterationsRequired</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_Rounds</relatedStateVariable>
         </argument>
          <argument>
            <name>HostConfirmNonce</name>
            <direction>in</direction>
            <relatedStateVariable>A_ARG_TYPE_Nonce</relatedStateVariable>
         </argument>
          <argument>
            <name>DeviceConfirmNonce</name>
            <direction>out</direction>
            <relatedStateVariable>A_ARG_TYPE_Nonce</relatedStateVariable>
         </argument>
        </argumentList>
      </action>
    </actionList>
 <serviceStateTable>
      <stateVariable sendEvents='no'>
        <name>TrustState</name>
        <dataType>ui1</dataType>
        <allowedValueRange>
          <minimum>0</minimum>
          <maximum>4</maximum>
        </allowedValueRange>
      </stateVariable>
      <stateVariable sendEvents='no'>
        <name>A_ARG_TYPE_Rounds</name>
        <dataType>ui1</dataType>
        <allowedValueRange>
          <minimum>2</minimum>
          <maximum>20</maximum>
        </allowedValueRange>
      </stateVariable>
      <stateVariable sendEvents='no'>
        <name>A_ARG_TYPE_Iteration</name>
        <dataType>ui1</dataType>
        <allowedValueRange>
          <minimum>1</minimum>
          <maximum>20</maximum>
        </allowedValueRange>
      </stateVariable>
      <stateVariable sendEvents='no'>
        <name>A_ARG_TYPE_EndpointID</name>
        <dataType>string</dataType>
      </stateVariable>
      <stateVariable sendEvents='no'>
        <name>A_ARG_TYPE_Authenticator</name>
        <dataType>string</dataType>
      </stateVariable>
      <stateVariable sendEvents='no'>
        <name>A_ARG_TYPE_Nonce</name>
        <dataType>string</dataType>
      </stateVariable>
      <stateVariable sendEvents='no'>
        <name>A_ARG_TYPE_Certificate</name>
        <dataType>string</dataType>
      </stateVariable>
    </serviceStateTable>
</scpd>