http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetExtendedUpdateInfo2
urn:uuid:$uuid
https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx/secured
$created
$expires
$device
$updateId
$rev
FileUrl
FileDecryption
EsrpDecryptionInformation
PiecesHashUrl
BlockMapUrl
$deviceAttributes
XML;
}
// Composes POST data for fetching the latest update information from Windows Update
function composeFetchUpdRequest($device, $encData, $arch, $flight, $ring, $build, $sku = 48) {
$uuid = genUUID();
$createdTime = time();
$expiresTime = $createdTime + 120;
$cookieExpiresTime = $createdTime + 604800;
$created = gmdate(DATE_W3C, $createdTime);
$expires = gmdate(DATE_W3C, $expiresTime);
$cookieExpires = gmdate(DATE_W3C, $cookieExpiresTime);
$branch = branchFromBuild($build);
if($sku == 7 || $sku == 8) {
$mainProduct = 'Server.OS';
} else {
$mainProduct = 'Client.OS.rs2';
}
if($arch == 'all') {
$arch = array(
'amd64',
'x86',
'arm64',
'arm',
);
}
if(!is_array($arch)) {
$arch = array($arch);
}
$products = array();
foreach($arch as $currArch) {
$products[] = "PN=$mainProduct.$currArch&Branch=$branch&PrimaryOSProduct=1&Repairable=1&V=$build&ReofferUpdate=1";
$products[] = "PN=Windows.Appraiser.$currArch&Repairable=1&V=$build";
$products[] = "PN=Windows.AppraiserData.$currArch&Repairable=1&V=$build";
$products[] = "PN=Windows.EmergencyUpdate.$currArch&Repairable=1&V=$build";
$products[] = "PN=Windows.OOBE.$currArch&IsWindowsOOBE=1&Repairable=1&V=$build";
$products[] = "PN=Windows.UpdateStackPackage.$currArch&Name=Update Stack Package&Repairable=1&V=$build";
$products[] = "PN=Hammer.$currArch&Source=UpdateOrchestrator&V=0.0.0.0";
$products[] = "PN=MSRT.$currArch&Source=UpdateOrchestrator&V=0.0.0.0";
$products[] = "PN=SedimentPack.$currArch&Source=UpdateOrchestrator&V=0.0.0.0";
}
$callerAttrib = array(
'Id=UpdateOrchestrator',
'SheddingAware=1',
'Interactive=1',
'IsSeeker=1',
);
$products = htmlentities(implode(';', $products));
$callerAttrib = htmlentities('E:'.implode('&', $callerAttrib));
$deviceAttributes = composeDeviceAttributes(
$flight,
$ring,
$build,
$arch,
$sku
);
return <<
http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/SyncUpdates
urn:uuid:$uuid
https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx
$created
$expires
$device
$cookieExpires
$encData
false
1
10
105939029
105995585
106017178
107825194
10809856
11
117765322
129905029
130040030
130040031
130040032
130040033
133399034
138372035
138372036
139536037
139536038
139536039
139536040
142045136
158941041
158941042
158941043
158941044
159776047
160733048
160733049
160733050
160733051
160733055
160733056
161870057
161870058
161870059
17
19
2
23110993
23110994
23110995
23110996
23110999
23111000
23111001
23111002
23111003
23111004
2359974
2359977
24513870
28880263
3
30077688
30486944
5143990
5169043
5169044
5169047
59830006
59830007
59830008
60484010
62450018
62450019
62450020
69801474
8788830
8806526
9125350
9154769
98959022
98959023
98959024
98959025
98959026
false
true
true
Extended
LocalizedProperties
en-US
false
$deviceAttributes
$callerAttrib
$products
XML;
}
// Composes POST data for Get Cookie request
function composeGetCookieRequest($device) {
$uuid = genUUID();
$createdTime = time();
$expiresTime = $createdTime + 120;
$created = gmdate(DATE_W3C, $createdTime);
$expires = gmdate(DATE_W3C, $expiresTime);
return <<
http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetCookie
urn:uuid:$uuid
https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx
$created
$expires
$device
$created
$created
$created
2.0
XML;
}