UUP dump API 1.14.0
- Added support of pregenerated update packs - Added support of fetching updates that need custom SKU ID
This commit is contained in:
		
							
								
								
									
										13
									
								
								fetchupd.php
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								fetchupd.php
									
									
									
									
									
								
							| @@ -19,7 +19,7 @@ require_once dirname(__FILE__).'/shared/main.php'; | ||||
| require_once dirname(__FILE__).'/shared/requests.php'; | ||||
| require_once dirname(__FILE__).'/listid.php'; | ||||
|  | ||||
| function uupFetchUpd($arch = 'amd64', $ring = 'WIF', $flight = 'Active', $build = '16251', $minor = '0') { | ||||
| function uupFetchUpd($arch = 'amd64', $ring = 'WIF', $flight = 'Active', $build = '16251', $minor = '0', $sku = '48') { | ||||
|     uupApiPrintBrand(); | ||||
|  | ||||
|     $arch = strtolower($arch); | ||||
| @@ -30,6 +30,7 @@ function uupFetchUpd($arch = 'amd64', $ring = 'WIF', $flight = 'Active', $build | ||||
|     $build = explode('.', $build); | ||||
|     if(isset($build[1])) $minor = intval($build[1]); | ||||
|     $build = intval($build[0]); | ||||
|     $sku = intval($sku); | ||||
|  | ||||
|     if(!($arch == 'amd64' || $arch == 'x86' || $arch == 'arm64')) { | ||||
|         return array('error' => 'UNKNOWN_ARCH'); | ||||
| @@ -60,7 +61,7 @@ function uupFetchUpd($arch = 'amd64', $ring = 'WIF', $flight = 'Active', $build | ||||
|     $build = '10.0.'.$build.'.'.$minor; | ||||
|  | ||||
|     consoleLogger('Fetching information from the server...'); | ||||
|     $postData = composeFetchUpdRequest(uupDevice(), uupEncryptedData(), $arch, $flight, $ring, $build); | ||||
|     $postData = composeFetchUpdRequest(uupDevice(), uupEncryptedData(), $arch, $flight, $ring, $build, $sku); | ||||
|     $out = sendWuPostRequest('https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx', $postData); | ||||
|  | ||||
|     $out = html_entity_decode($out); | ||||
| @@ -84,7 +85,7 @@ function uupFetchUpd($arch = 'amd64', $ring = 'WIF', $flight = 'Active', $build | ||||
|         $num++; | ||||
|         consoleLogger("Checking build information for update {$num} of {$updatesNum}..."); | ||||
|  | ||||
|         $info = parseFetchUpdate($val, $out, $arch, $ring, $flight, $build); | ||||
|         $info = parseFetchUpdate($val, $out, $arch, $ring, $flight, $build, $sku); | ||||
|         if(isset($info['error'])) { | ||||
|             $errorCount++; | ||||
|             continue; | ||||
| @@ -108,7 +109,7 @@ function uupFetchUpd($arch = 'amd64', $ring = 'WIF', $flight = 'Active', $build | ||||
|     ); | ||||
| } | ||||
|  | ||||
| function parseFetchUpdate($updateInfo, $out, $arch, $ring, $flight, $build) { | ||||
| function parseFetchUpdate($updateInfo, $out, $arch, $ring, $flight, $build, $sku = '48') { | ||||
|     $updateNumId = preg_replace('/<UpdateInfo><ID>|<\/ID>.*/i', '', $updateInfo); | ||||
|  | ||||
|     $updates = preg_replace('/<Update>/', "\n<Update>", $out); | ||||
| @@ -218,6 +219,7 @@ function parseFetchUpdate($updateInfo, $out, $arch, $ring, $flight, $build) { | ||||
|         $temp['arch'] = $arch; | ||||
|         $temp['build'] = $foundBuild; | ||||
|         $temp['checkBuild'] = $build; | ||||
|         $temp['sku'] = $sku; | ||||
|  | ||||
|         if($isCumulativeUpdate) { | ||||
|             $temp['containsCU'] = 1; | ||||
| @@ -248,6 +250,9 @@ function parseFetchUpdate($updateInfo, $out, $arch, $ring, $flight, $build) { | ||||
|             $testName = $val['build'].' '.$val['title'].' '.$val['arch']; | ||||
|             if($buildName == $testName && $val['uuid'] != $updateString) { | ||||
|                 unlink(realpath('fileinfo/'.$val['uuid'].'.json')); | ||||
|                 if(file_exists('packs/'.$val['uuid'].'.json.gz')) { | ||||
|                     unlink(realpath('packs/'.$val['uuid'].'.json.gz')); | ||||
|                 } | ||||
|                 consoleLogger('Removed superseded update: '.$val['uuid']); | ||||
|             } | ||||
|         } | ||||
|   | ||||
							
								
								
									
										70
									
								
								get.php
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								get.php
									
									
									
									
									
								
							| @@ -29,6 +29,7 @@ function uupGetFiles($updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', $usePac | ||||
|             'flight' => 'Active', | ||||
|             'arch' => 'amd64', | ||||
|             'checkBuild' => '10.0.16251.0', | ||||
|             'sku' => '48', | ||||
|             'files' => array(), | ||||
|         ); | ||||
|     } else { | ||||
| @@ -42,6 +43,10 @@ function uupGetFiles($updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', $usePac | ||||
|         $build = 9841; | ||||
|     } | ||||
|  | ||||
|     if(!isset($info['sku'])) { | ||||
|         $info['sku'] = 48; | ||||
|     } | ||||
|  | ||||
|     $packs = uupGetPacks($build); | ||||
|     $packsForLangs = $packs['packsForLangs']; | ||||
|     $editionPacks = $packs['editionPacks']; | ||||
| @@ -53,6 +58,25 @@ function uupGetFiles($updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', $usePac | ||||
|     $noLangPack = 0; | ||||
|     $noNeutral = 0; | ||||
|  | ||||
|     $useGeneratedPacks = 0; | ||||
|  | ||||
|     if(file_exists('packs/'.$updateId.'.json.gz') && $usePack) { | ||||
|         $genPack = @gzdecode(@file_get_contents('packs/'.$updateId.'.json.gz')); | ||||
|  | ||||
|         if(!empty($genPack)) { | ||||
|             $genPack = json_decode($genPack, 1); | ||||
|  | ||||
|             if(!isset($genPack[$usePack])) { | ||||
|                 return array('error' => 'UNSUPPORTED_LANG'); | ||||
|             } | ||||
|  | ||||
|             $packsForLangs = array(); | ||||
|             $packsForLangs[$usePack] = array(0); | ||||
|  | ||||
|             $useGeneratedPacks = 1; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if($usePack) { | ||||
|         $usePack = strtolower($usePack); | ||||
|         if(!isset($packsForLangs[$usePack])) { | ||||
| @@ -63,7 +87,22 @@ function uupGetFiles($updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', $usePac | ||||
|     $desiredEdition = strtoupper($desiredEdition); | ||||
|  | ||||
|     switch($desiredEdition) { | ||||
|         case '0': break; | ||||
|         case '0': | ||||
|             if($useGeneratedPacks) { | ||||
|                 $desiredEdition = 'GENERATEDPACKS'; | ||||
|  | ||||
|                 $filesList = array(); | ||||
|                 foreach($genPack[$usePack] as $val) { | ||||
|                     foreach($val as $package) { | ||||
|                         $filesList[] = $package; | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 array_unique($filesList); | ||||
|                 sort($filesList); | ||||
|             } | ||||
|             break; | ||||
|  | ||||
|         case 'WUBFILE': break; | ||||
|  | ||||
|         case 'UPDATEONLY': | ||||
| @@ -73,9 +112,20 @@ function uupGetFiles($updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', $usePac | ||||
|             break; | ||||
|  | ||||
|         default: | ||||
|             if($useGeneratedPacks) { | ||||
|                 if(!isset($genPack[$usePack][$desiredEdition])) { | ||||
|                     return array('error' => 'UNSUPPORTED_COMBINATION'); | ||||
|                 } | ||||
|  | ||||
|                 $filesList = $genPack[$usePack][$desiredEdition]; | ||||
|                 $desiredEdition = 'GENERATEDPACKS'; | ||||
|                 break; | ||||
|             } | ||||
|  | ||||
|             if(!$usePack) { | ||||
|                 return array('error' => 'UNSPECIFIED_LANG'); | ||||
|             } | ||||
|  | ||||
|             if(!isset($editionPacks[$desiredEdition])) { | ||||
|                 return array('error' => 'UNSUPPORTED_EDITION'); | ||||
|             } | ||||
| @@ -253,6 +303,10 @@ function uupGetFiles($updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', $usePac | ||||
|             $filesKeys = preg_grep('/WindowsUpdateBox.exe/i', $filesKeys); | ||||
|             break; | ||||
|  | ||||
|         case 'GENERATEDPACKS': | ||||
|             $skipPackBuild = 1; | ||||
|             break; | ||||
|  | ||||
|         default: | ||||
|             $skipPackBuild = 0; | ||||
|             break; | ||||
| @@ -314,6 +368,20 @@ function uupGetFiles($updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', $usePac | ||||
|         unset($filesTemp, $temp, $val, $num); | ||||
|     } | ||||
|  | ||||
|     if($desiredEdition == 'GENERATEDPACKS') { | ||||
|         $newFiles = array(); | ||||
|         foreach($filesList as $val) { | ||||
|             $name = preg_replace('/~31bf3856ad364e35/', '', $val); | ||||
|             $name = preg_replace('/~~\.|~\./', '.', $name); | ||||
|             $name = preg_replace('/~/', '-', $name); | ||||
|  | ||||
|             $newFiles[$name] = $files[$name]; | ||||
|         } | ||||
|  | ||||
|         $files = $newFiles; | ||||
|         $filesKeys = array_keys($files); | ||||
|     } | ||||
|  | ||||
|     if(empty($filesKeys)) { | ||||
|         return array('error' => 'NO_FILES'); | ||||
|     } | ||||
|   | ||||
| @@ -36,6 +36,24 @@ function uupListEditions($lang = 'en-us', $updateId = 0) { | ||||
|     $fancyEditionNames = $packs['fancyEditionNames']; | ||||
|     $packs = $packs['packs']; | ||||
|  | ||||
|     if(file_exists('packs/'.$updateId.'.json.gz')) { | ||||
|         $genPack = @gzdecode(@file_get_contents('packs/'.$updateId.'.json.gz')); | ||||
|  | ||||
|         if(!empty($genPack)) { | ||||
|             $genPack = json_decode($genPack, 1); | ||||
|  | ||||
|             if(!isset($genPack[$lang])) { | ||||
|                 return array('error' => 'UNSUPPORTED_LANG'); | ||||
|             } | ||||
|  | ||||
|             $packsForLangs = array(); | ||||
|             $packsForLangs[$lang] = array(0); | ||||
|  | ||||
|             $packs = array(); | ||||
|             $packs[0] = $genPack[$lang]; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if($lang) { | ||||
|         $lang = strtolower($lang); | ||||
|         if(!isset($packsForLangs[$lang])) { | ||||
| @@ -55,9 +73,8 @@ function uupListEditions($lang = 'en-us', $updateId = 0) { | ||||
|                 $fancyName = $edition; | ||||
|             } | ||||
|  | ||||
|             $temp = array($edition => $fancyName); | ||||
|             $editionList = array_merge($editionList, array($edition)); | ||||
|             $editionListFancy = array_merge($editionListFancy, $temp); | ||||
|             $editionList[] = $edition; | ||||
|             $editionListFancy[$edition] = $fancyName; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -35,18 +35,26 @@ function uupListLangs($updateId = 0) { | ||||
|     $packsForLangs = $packs['packsForLangs']; | ||||
|     $fancyLangNames = $packs['fancyLangNames']; | ||||
|  | ||||
|     if(file_exists('packs/'.$updateId.'.json.gz')) { | ||||
|         $genPack = @gzdecode(@file_get_contents('packs/'.$updateId.'.json.gz')); | ||||
|  | ||||
|         if(!empty($genPack)) { | ||||
|             $genPack = json_decode($genPack, 1); | ||||
|             $packsForLangs = $genPack; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     $langList = array(); | ||||
|     $langListFancy = array(); | ||||
|     foreach($packsForLangs as $key => $val) { | ||||
|         if(isset($packsForLangs[$key])) { | ||||
|         if(isset($fancyLangNames[$key])) { | ||||
|             $fancyName = $fancyLangNames[$key]; | ||||
|         } else { | ||||
|             $fancyName = $key; | ||||
|         } | ||||
|  | ||||
|         $temp = array($key => $fancyName); | ||||
|         $langList = array_merge($langList, array($key)); | ||||
|         $langListFancy = array_merge($langListFancy, $temp); | ||||
|         $langList[] = $key; | ||||
|         $langListFancy[$key] = $fancyName; | ||||
|     } | ||||
|  | ||||
|     return array( | ||||
|   | ||||
| @@ -16,7 +16,7 @@ limitations under the License. | ||||
| */ | ||||
|  | ||||
| function uupApiVersion() { | ||||
|     return '1.13.3'; | ||||
|     return '1.14.0'; | ||||
| } | ||||
|  | ||||
| function uupApiPrintBrand() { | ||||
|   | ||||
| @@ -57,6 +57,23 @@ function uupGetPacks($build = 15063) { | ||||
|         'zh-tw' => 'Chinese (Traditional)', | ||||
|     ); | ||||
|  | ||||
|     $fancyEditionNames = array( | ||||
|         'CLOUD' => 'Windows 10 S', | ||||
|         'CLOUDN' => 'Windows 10 S N', | ||||
|         'CLOUDE' => 'Windows 10 CloudE', | ||||
|         'CORE' => 'Windows 10 Home', | ||||
|         'CORECOUNTRYSPECIFIC' => 'Windows 10 Home China', | ||||
|         'COREN' => 'Windows 10 Home N', | ||||
|         'CORESINGLELANGUAGE' => 'Windows 10 Home Single Language', | ||||
|         'EDUCATION' => 'Windows 10 Education', | ||||
|         'EDUCATIONN' => 'Windows 10 Education N', | ||||
|         'ENTERPRISE' => 'Windows 10 Enterprise', | ||||
|         'ENTERPRISEN' => 'Windows 10 Enterprise N', | ||||
|         'PPIPRO' => 'Windows 10 Team', | ||||
|         'PROFESSIONAL' => 'Windows 10 Pro', | ||||
|         'PROFESSIONALN' => 'Windows 10 Pro N', | ||||
|     ); | ||||
|  | ||||
|     $allEditions = array( | ||||
|         'ANALOGONECORE', | ||||
|         'ANDROMEDA', | ||||
|   | ||||
| @@ -176,14 +176,6 @@ $editionPacks = array( | ||||
|     'PROFESSIONALN' => 1, | ||||
| ); | ||||
|  | ||||
| $fancyEditionNames = array( | ||||
|     'CORE' => 'Windows 10 Home', | ||||
|     'CORECOUNTRYSPECIFIC' => 'Windows 10 Home China', | ||||
|     'COREN' => 'Windows 10 Home N', | ||||
|     'PROFESSIONAL' => 'Windows 10 Pro', | ||||
|     'PROFESSIONALN' => 'Windows 10 Pro N', | ||||
| ); | ||||
|  | ||||
| $skipNeutral = array(); | ||||
| $skipLangPack = array(); | ||||
| ?> | ||||
|   | ||||
| @@ -177,14 +177,6 @@ $editionPacks = array( | ||||
|     'PROFESSIONALN' => 1, | ||||
| ); | ||||
|  | ||||
| $fancyEditionNames = array( | ||||
|     'CORE' => 'Windows 10 Home', | ||||
|     'CORECOUNTRYSPECIFIC' => 'Windows 10 Home China', | ||||
|     'COREN' => 'Windows 10 Home N', | ||||
|     'PROFESSIONAL' => 'Windows 10 Pro', | ||||
|     'PROFESSIONALN' => 'Windows 10 Pro N', | ||||
| ); | ||||
|  | ||||
| $skipNeutral = array(); | ||||
| $skipLangPack = array(); | ||||
| ?> | ||||
|   | ||||
| @@ -181,14 +181,6 @@ $editionPacks = array( | ||||
|     'PROFESSIONALN' => 1, | ||||
| ); | ||||
|  | ||||
| $fancyEditionNames = array( | ||||
|     'CORE' => 'Windows 10 Home', | ||||
|     'CORECOUNTRYSPECIFIC' => 'Windows 10 Home China', | ||||
|     'COREN' => 'Windows 10 Home N', | ||||
|     'PROFESSIONAL' => 'Windows 10 Pro', | ||||
|     'PROFESSIONALN' => 'Windows 10 Pro N', | ||||
| ); | ||||
|  | ||||
| $skipNeutral = array(); | ||||
| $skipLangPack = array(); | ||||
| ?> | ||||
|   | ||||
| @@ -184,14 +184,6 @@ $editionPacks = array( | ||||
|     'PROFESSIONALN' => 1, | ||||
| ); | ||||
|  | ||||
| $fancyEditionNames = array( | ||||
|     'CORE' => 'Windows 10 Home', | ||||
|     'CORECOUNTRYSPECIFIC' => 'Windows 10 Home China', | ||||
|     'COREN' => 'Windows 10 Home N', | ||||
|     'PROFESSIONAL' => 'Windows 10 Pro', | ||||
|     'PROFESSIONALN' => 'Windows 10 Pro N', | ||||
| ); | ||||
|  | ||||
| $skipNeutral = array(); | ||||
| $skipLangPack = array(); | ||||
| ?> | ||||
|   | ||||
| @@ -186,14 +186,7 @@ $editionPacks = array( | ||||
|     'PROFESSIONALN' => 1, | ||||
| ); | ||||
|  | ||||
| $fancyEditionNames = array( | ||||
|     'CLOUDE' => 'Windows 10 Lean', | ||||
|     'CORE' => 'Windows 10 Home', | ||||
|     'CORECOUNTRYSPECIFIC' => 'Windows 10 Home China', | ||||
|     'COREN' => 'Windows 10 Home N', | ||||
|     'PROFESSIONAL' => 'Windows 10 Pro', | ||||
|     'PROFESSIONALN' => 'Windows 10 Pro N', | ||||
| ); | ||||
| $fancyEditionNames['CLOUDE'] = 'Windows 10 Lean'; | ||||
|  | ||||
| $skipNeutral = array( | ||||
|     'CLOUDE' => 1, | ||||
|   | ||||
| @@ -179,6 +179,8 @@ $packsForLangs = array( | ||||
|     'zh-tw' => array(0, 6), | ||||
| ); | ||||
|  | ||||
| $packsForLangs = array(); | ||||
|  | ||||
| $editionPacks = array( | ||||
|     'CLOUDE' => 0, | ||||
|     'CORE' => 0, | ||||
| @@ -188,14 +190,7 @@ $editionPacks = array( | ||||
|     'PROFESSIONALN' => 1, | ||||
| ); | ||||
|  | ||||
| $fancyEditionNames = array( | ||||
|     'CLOUDE' => 'Windows 10 Lean', | ||||
|     'CORE' => 'Windows 10 Home', | ||||
|     'CORECOUNTRYSPECIFIC' => 'Windows 10 Home China', | ||||
|     'COREN' => 'Windows 10 Home N', | ||||
|     'PROFESSIONAL' => 'Windows 10 Pro', | ||||
|     'PROFESSIONALN' => 'Windows 10 Pro N', | ||||
| ); | ||||
| $fancyEditionNames['CLOUDE'] = 'Windows 10 Lean'; | ||||
|  | ||||
| $skipNeutral = array( | ||||
|     'CLOUDE' => 1, | ||||
|   | ||||
| @@ -253,21 +253,6 @@ $editionPacks = array( | ||||
|     'PROFESSIONALN' => 1, | ||||
| ); | ||||
|  | ||||
| $fancyEditionNames = array( | ||||
|     'CLOUD' => 'Windows 10 S', | ||||
|     'CLOUDN' => 'Windows 10 S N', | ||||
|     'CORE' => 'Windows 10 Home', | ||||
|     'CORECOUNTRYSPECIFIC' => 'Windows 10 Home China', | ||||
|     'COREN' => 'Windows 10 Home N', | ||||
|     'CORESINGLELANGUAGE' => 'Windows 10 Home Single Language', | ||||
|     'EDUCATION' => 'Windows 10 Education', | ||||
|     'EDUCATIONN' => 'Windows 10 Education N', | ||||
|     'ENTERPRISE' => 'Windows 10 Enterprise', | ||||
|     'ENTERPRISEN' => 'Windows 10 Enterprise N', | ||||
|     'PROFESSIONAL' => 'Windows 10 Pro', | ||||
|     'PROFESSIONALN' => 'Windows 10 Pro N', | ||||
| ); | ||||
|  | ||||
| $skipNeutral = array(); | ||||
| $skipLangPack = array(); | ||||
| ?> | ||||
|   | ||||
| @@ -16,7 +16,7 @@ limitations under the License. | ||||
| */ | ||||
|  | ||||
| // Composes DeviceAttributes parameter needed to fetch data | ||||
| function composeDeviceAttributes($flight, $ring, $build, $arch) { | ||||
| function composeDeviceAttributes($flight, $ring, $build, $arch, $sku) { | ||||
|     $branch = branchFromBuild($build); | ||||
|  | ||||
|     if($ring == 'RETAIL') { | ||||
| @@ -46,7 +46,7 @@ function composeDeviceAttributes($flight, $ring, $build, $arch) { | ||||
|         'OEMModel=Microsoft', | ||||
|         'OEMName_Uncleaned=Microsoft', | ||||
|         'OSArchitecture='.$arch, | ||||
|         'OSSkuId=48', | ||||
|         'OSSkuId='.$sku, | ||||
|         'OSUILocale=en-US', | ||||
|         'OSVersion='.$build, | ||||
|         'PonchAllow=1', | ||||
| @@ -100,14 +100,15 @@ function composeFileGetRequest($updateId, $device, $info, $rev = 1) { | ||||
|         $info['flight'], | ||||
|         $info['ring'], | ||||
|         $info['checkBuild'], | ||||
|         $info['arch'] | ||||
|         $info['arch'], | ||||
|         $info['sku'] | ||||
|     ); | ||||
|  | ||||
|     return '<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header><a:Action s:mustUnderstand="1">http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetExtendedUpdateInfo2</a:Action><a:MessageID>urn:uuid:'.$uuid.'</a:MessageID><a:To s:mustUnderstand="1">https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx/secured</a:To><o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><Timestamp xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><Created>'.$created.'</Created><Expires>'.$expires.'</Expires></Timestamp><wuws:WindowsUpdateTicketsToken wsu:id="ClientMSA" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wuws="http://schemas.microsoft.com/msus/2014/10/WindowsUpdateAuthorization"><TicketType Name="MSA" Version="1.0" Policy="MBI_SSL"><Device>'.$device.'</Device></TicketType></wuws:WindowsUpdateTicketsToken></o:Security></s:Header><s:Body><GetExtendedUpdateInfo2 xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService"><updateIDs><UpdateIdentity><UpdateID>'.$updateId.'</UpdateID><RevisionNumber>'.$rev.'</RevisionNumber></UpdateIdentity></updateIDs><infoTypes><XmlUpdateFragmentType>FileUrl</XmlUpdateFragmentType><XmlUpdateFragmentType>FileDecryption</XmlUpdateFragmentType></infoTypes><deviceAttributes>'.$deviceAttributes.'</deviceAttributes></GetExtendedUpdateInfo2></s:Body></s:Envelope>'; | ||||
| } | ||||
|  | ||||
| // Composes POST data for fetching the latest update information from Windows Update | ||||
| function composeFetchUpdRequest($device, $encData, $arch, $flight, $ring, $build) { | ||||
| function composeFetchUpdRequest($device, $encData, $arch, $flight, $ring, $build, $sku = 48) { | ||||
|     $uuid = randStr(8).'-'.randStr(4).'-'.randStr(4).'-'.randStr(4).'-'.randStr(12); | ||||
|  | ||||
|     $createdTime = time(); | ||||
| @@ -138,7 +139,8 @@ function composeFetchUpdRequest($device, $encData, $arch, $flight, $ring, $build | ||||
|         $flight, | ||||
|         $ring, | ||||
|         $build, | ||||
|         $arch | ||||
|         $arch, | ||||
|         $sku | ||||
|     ); | ||||
|  | ||||
|     return '<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header><a:Action s:mustUnderstand="1">http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/SyncUpdates</a:Action><a:MessageID>urn:uuid:'.$uuid.'</a:MessageID><a:To s:mustUnderstand="1">https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx</a:To><o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><Timestamp xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><Created>'.$created.'</Created><Expires>'.$expires.'</Expires></Timestamp><wuws:WindowsUpdateTicketsToken wsu:id="ClientMSA" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wuws="http://schemas.microsoft.com/msus/2014/10/WindowsUpdateAuthorization"><TicketType Name="MSA" Version="1.0" Policy="MBI_SSL"><Device>'.$device.'</Device></TicketType></wuws:WindowsUpdateTicketsToken></o:Security></s:Header><s:Body><SyncUpdates xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService"><cookie><Expiration>2045-04-07T12:38:34Z</Expiration><EncryptedData>'.$encData.'</EncryptedData></cookie><parameters><ExpressQuery>false</ExpressQuery><InstalledNonLeafUpdateIDs></InstalledNonLeafUpdateIDs><OtherCachedUpdateIDs></OtherCachedUpdateIDs><SkipSoftwareSync>false</SkipSoftwareSync><NeedTwoGroupOutOfScopeUpdates>true</NeedTwoGroupOutOfScopeUpdates><AlsoPerformRegularSync>true</AlsoPerformRegularSync><ComputerSpec/><ExtendedUpdateInfoParameters><XmlUpdateFragmentTypes><XmlUpdateFragmentType>Extended</XmlUpdateFragmentType><XmlUpdateFragmentType>LocalizedProperties</XmlUpdateFragmentType><XmlUpdateFragmentType>Eula</XmlUpdateFragmentType></XmlUpdateFragmentTypes><Locales><string>en-US</string></Locales></ExtendedUpdateInfoParameters><ClientPreferredLanguages></ClientPreferredLanguages><ProductsParameters><SyncCurrentVersionOnly>false</SyncCurrentVersionOnly><DeviceAttributes>'.$deviceAttributes.'</DeviceAttributes><CallerAttributes>'.$callerAttrib.'</CallerAttributes><Products>'.$products.'</Products></ProductsParameters></parameters></SyncUpdates></s:Body></s:Envelope>'; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user