From 87f88eeb2bbc40d23b60673f3029cfa9d15f6bff Mon Sep 17 00:00:00 2001 From: longpanda Date: Fri, 29 Oct 2021 09:28:20 +0800 Subject: [PATCH] [Ventoy2Disk.exe] improve Windows edition reporting --- INSTALL/Ventoy2Disk.exe | Bin 349696 -> 350208 bytes Ventoy2Disk/Ventoy2Disk/DiskService_vds.c | 6 +- Ventoy2Disk/Ventoy2Disk/Utility.c | 150 +++++++++++++--------- 3 files changed, 90 insertions(+), 66 deletions(-) diff --git a/INSTALL/Ventoy2Disk.exe b/INSTALL/Ventoy2Disk.exe index 895af0342d36ae6f222b7b41cf5de12c60dcb5c7..e8bd61c7034d59a5be462b92583ea69937ca93c2 100644 GIT binary patch delta 26152 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 NjJ@pCVDAh3{{e)5R|)_C delta 25133 zcmeIbd0dsn7eD^Y0|+V#D##)#ASf#8-S>r6aqTJyTJBrdeFJmtqCi53nWH{dR=Aa= znT2}M)NnviS7+8UXU@!=Ip@qggJtgu z%-#{W%ZEhzXS_0&Yy4GlJZVmRIj$eiad93}>34H!H&2c%$d}@Mi=~GCCxUV zg;sclv|DE(Xysp2G~WfxrcYh2!hsFSuSbb9ET1=t@#XiaXt&m5_>L;NqV*8|T{*34 zt>GuiX>gmdJTIq<+H~M=$mlz5th_@-ueCWBEM5RF+Yd^-D9c6_{y6feE33ioLyrY$ zNjPl?2oG4)OX^cBWxbuuJCzk~Poc8FwtVMaG$pV{$b^d^apM3Z;ahlg^r)8#2i7aU z7OQ%etPCtA{I5M|O3-?KMJ&A$)Zc%{r3CKwQo?brtn4YoUPaBp3H;C9>C)i-{+^dn zcLNj2>Ug`3UPIlW?le3kuzN1r)hxET0(D~&I9H$wq0K&m6~6qBLK7Vm5-`k{RhiTO zj(-iD*2Mgya5pP#^N+$cY)o59rD?%%*szpeza(zzMk_+*k@+++v|HQtU{}23l*X+r z8!gS9eFV)3HMcp2s=P=04j}SNIypE!!(KrzgvPh3Wla*LCO$PSQ|$pXy4^^UNpspo z5)=KPU3XGJ&$sK;Yax8f%K=I3;E`OCF6TF_vTj)Dw(Bulkn|kQV(4$|MdVW*UcqiC0liVB#H}2 z9|=*SY!ep89Z0~bf<^nZz{O3w5@&$pO%h;UQ5DHDd+#5dDQJ{c6v zlUXGfYzsU|B^@|4jQ6-lrw;w9!_HqZ?R7cFJPWecgs$w60sL|q$<_<8cnZQ1(rnY>D z!lI<8s3~za@zpD|-PAPxNhO^{Ub~Fi~pU*Y~9AwN4te2)&ntyS|`PFmM!cMA~CigAMW7Z?xF1rRM z-2_{lr?cjC>yd;K@!)8Vvrj;(C~p=UEgObSbX{hA2Gj(&OKo;LEuS-ydNfaI4^84jl+mPOHEnYAkXV)RXu`H^=*D) zlw10$&(PPi#$mR8&I%5G`HZ`RMoaRHK^bj7FN{~7p~iWstyX4n9Hcqv-~?FZ4125> zeScmoDWw(jxSJZsnb^7oXGZsTJzZ0?1^!aII7TrF- zy?p%-VC;?I=z9+%ib3Cg9kVNXUO-VL)+_J3tjNOl%(|t!F4*j)^zr;b{?}M5f3(7I zQpL2dX~u#y-=^oJeBl}Kx7pOWpriIW<_riZsF)3Ei2-?KnNfv%#-JaMqqe0d{Lzs# zP3dCEpQsyW(-sTEBbWbKkcGBO^H`%*o{-+W5lE$qBP!?%3x|iL%>v;!{NWyfbDQfG zU-8Hc$cF2chjveTY+*P4)l;-?VMNoUssyfJN&UVQ8oKBR?{kh`U(};D+Y(d4U0Dys zNpP|<#FeLM`^9gQVYGDdFtUcWS~9Ss$PCisH1K%<6vTT-VMI`<99I)=-$Iux2`3ln zdrLyvJY@C7?)v?#yM5s$r1Vf`H(l$#Q8OgOVMw*>nns@EW?QBj|VaCan~ z-lGh7umMHMyOrl{Maf(CWdhMAZhe7a`V=Iuf*8tOS-V|XTkNYCjhcb1#y4H;bwnc8 zXm#D>u7Bw!N7v=bI}MGL)Ri4e$cz492m{z$JT8&#%G?-8p?w#1Q8Ct$9O2xM~!i7{F-z=RNYv{T-bZ zo)vQ!(vR~NkXRb^nu@=;fWG*ezRNI%daS?1#+OX43X`{Ba7}Gu1Gq*fuB>A5{+D$B zYaRG+zNA-Q3vD+4pnEv>RrKj=!SLCFmUry1^O%HP(1ZuszHB!=91+-eGlZ61iXe zMtPl-;#Qtf_TuJ=95a-m2ZT=v38D-0$6}b*@~8h_aD%^a<1Q{xcdeHuyHOdllgG#4 zl}W&JRy!CDZveeo&|Uw-VN^0P0%!7~*0Q*Bu_aYXGtxWDYs9c(_fcCf4}#-DR>P-U($!;(#2z6NOOf#i@5I#`pfGX zx&y4TB`OCO4XqU~ostwSOly046{~sJTk1tw<`%hM;pH>_?HpZN*p|OkO5Z9R)}wnn zN%oXw`ArJ)@_)zV&kb)iTxQ4rz~B(8$@MqWDp;k z|HgFqBahw~%O6jr!&e!3Y_@f);z%0(cGV)Xf~LMXvrUBvKGw!Dru=V1Tsh4Dr8mtu za<^F>8TeB`qo*|oqDUgC5e%IvHud9@||?=+76-qI06}1;*qF70@*9C-1o6zl6+QgTn zq4+?bHG`YBb6te|=a1Q#nbV0eqr8nxEdNv*Z@E;8@xi;D#ncj`WcOVy^iaI-J`UTt zB*syO_=8^~hmHBO?tI}{*SrANJb%$Kh>jM5x_lrN2NW&m;B?rzILu(WIQwVTn{UxN zmWNIrJD9#J^o3&kN$3{!g>*Q^&|wBxM}M?*@7MExlD^WHs@F%5D4MZe)>c=8`=%)=*d_vsZ@3&P{I(oETtSSDS{ zc)IpTl(9(s6yn+w1(IU?F52mx1-QO=_nnUX2cObI@63e6_uQa@+cbUyF2Q!vcQ&Z` z)jLbhZwMjS!nN=sM-|LGLsE^R4>*iYy$P(9QCi(K*y*-YpkIoHb;YtWt$gvSK49i* z$Op_^o%x{AT!nULqw&A}E_M|dwSAcAKkObxbF3RH_pM37z1!vw$NsAY8ohz_(hT-0 zFWqf=%-cFo+lTv&!v3B`Yj?obVL8Ooau$0Q<*@>reHSxz7rRPJwd(a1YF3(iDsy0d z(H6*~7z(YDS5}nAGPcYxdp6@}s~f$s)D@V9nXhRL@AB-nt}twmx7piEhV4-dBOCC{ zp#3CenL&H?qj0|YyR`VDNdDuuOOAb{AdY!&floL}&yEax9^!16Zf{`y_3I+djC2hu zoeTQ@9ob$5tQ!5_nr7IKv8I0iY})c4O}86EX+(zI1G|DEal68?%mw#yxcIWoy8ux_dEb`&}a^WgNaFcN3aQ_{YOXs^ijA^*% z<&8!=U2O3iZMCZ(u69Q3GUA?Q{jMa;!}q&PFg&53r9vCc_{<#K3c3S6wfCUBM-H(j zt|-qF^I*e0z|qgTLrLBHY&bq2^!+@#QAz#x5Pp4A8iIF@i)8h&51?Bit-t#&5>D{#wUR}c(%jC&TD#P;g^8T&+h6?ry(C5Xzp1?7rZR!1 z>{*IQJ-sJ|Kfjg+?2QP@#K@TNxIc5a_HbaDou~%v?SY%8g?pDln4j!T#|ou6mp?yU zM{I-B?Pavq84rRzOS^aeuc>4=EO$c~dFi-Y#C(=()KS_MUmiXxP2}qy(7UA_F|?NZ z^kf80*{3Agbn!k}Z0$p|+#W13R-RW0nSlo5?Eb%^c#XTbaRb?tXyv}{|HYP$2JDY% zF3r{e540RZ`|R)0UQ+b`dwyyQq*>lTx9@)m!}k6nl7ILs?fykZV9X6tv}sQzF(d~6wdP=~>t)M+Hc2Zg+jmwt78E2DnQK^Q4U= zT?o9EFCj6%B`+9!un#LQiOScg@sI)@>5M~TTP#M?qosB!TtTlL>O6jfl-@0c$E2`Q z3TvgXK??mJvsPhJD3ihzDI6h%v!pOz3T+I3uzd?MQ^M^rxLpu~^GYUu8BDO!afd@& zMFBzlvX#VWO?P|6W7?~tD>*PT_8|iMh_lE3PU8=U_)FvMjFS=*ithGU8h@f2QPF89+Vzb69ZE&Tf?){66U`Zt z|Lq>|bPKae_2wv0%<6B?M&;mrv2@RgPR*qztN@43nD(1~z812^66{J2h@`@CZr_0pxm~%;GJt(yb>Wy4_qNkx;r^S!Lp7cP3T*8VQIN z#!*=AmaJD7(Ylk?4nKd-&~d-d?(K2leEx=CwulZq)p)~S1#Q)M!(Ru?#vA^~Y}Q)3 z;b*1nhJVYcWIkshtvMy*Pb{YGPY>f&i|H$;Q$j~xlX@!8D}&cj3ci(P<$1@D4x?92 zN2?B?#8#eHfr2t5%k$15bxcZKMCzoJszj3i}!i7w;)A|3OUBBlcJ z>$*@_hx>-4NjYW}<}G}VpIutaolO`rTTHj`@(sV!AHRz1!Y1?I+UWmm;}!s4I=rI$ z|Fy*dsL1ChXbz0tFYb|BBi_cqU46c-_vd4-lf1yW?xq! z>>=scbiFQyz0_$XqwULX?Dnq!0&_!(d@X~;>{pOu*B!X%2w>Iz%cOx9^}#1G)+0Ww z;&DKO_@AO@6r{%!I;dNzcq#qhqPa~H#$prOU<+Vb*bQxIDt&ZODU-fH#M!Gbg<|iS z?Cx*|zIH(5N0qWN)&cV??P+K~SR9%|hhI`T8XJYDCUPg>H~lb!weT-x`J<(&z&u)! z^EktAIkp}gtZ&##Jx=pm{s`95Z|~9p)p49FDzD;Z9Op(Z&1OwXS4iP{DcmN7yQT1$ z6rPj9Di%6QA4(bDr>t4H6vjxQN($qo&?bc=q;Q%PE|$W4Dcm51+oW)Z6z-P7GATSK zh1aC8S_&UZA?IQ}I{c+5iiJxb7h-s?EY8f#Is9hM<92?_Tf0YD?H=V8M5VD3zDWvG zq;P~3PLskFQn*D5w@KkHDJ+x1b5d9-g;i4c&>=-W9GmSh7A}3foiXu3W}l^prOTIz0x+b<wdb@voW6UCq%G;|+MFkykHKbV-hW)_rRj)8Y9ap=Mb@aol@^-WML~cZ; zYEah0qP%L!u(Zdm9q!U%2z_w1`%qRdX2YgQY9e!dQSWAErUU1+!Ie*0)B#U|M^Pl7lq+`-M%1 z)k*>=tEC>-N09I7nCpX*ZD?Gh%sZ9oeJG73W2Ovu1%{8qL9^`82o&tIBk)VUU*mUZ zK2oLG2=Y$(CDlpY+9zQ9<2?T0dT&08r^X+&j#v!VwdVkM*e65MFBuogDkN^V#iSit z!Dy^Pa61XCA1Y?qEi9{M*@k+T$g)Am7Ur?H3g+-Z95=U{)H}FtcBq!s z6V#i>C!>ReI^_2?An;4PfBOzvxMyk?rsj|j_$c*d%#@=-qLJeoyrg-7noZ_y#`K|J zo+_&%UW@})P5()Sc>_Rt64Z1%KWCXO-EKqq6o<43VyB5rDuQd2h0^6n;b}495j>N; z^Q9wzwU4P^cAuVZAM;$JyL4yOOO7olu?-OmCol>Df4(f3hP-r%p$<#Hdhd2)O_Z?w zVa(jOjJ+GN3SC9Fze|g&Eo2n^p?VM*O?&)tQNdE3C*0{( z9wifQrH~ibGkRauKuiYuVn%b!)mTw3vq$0KoReH;$Y8s~z{fxUt?nazbFOm*S@pPM zsbCFPOXZ#$Szm=&4-3x}4z0^M>?-hPJvI@)YuWgMDM#va4ZSDM4V_RaJ!;A+Wo%4C zrXZ&b$w?b$l`Os;OC0sTVqNM$5SmsBIZu}MltN!A^q0b5DGZasC@GAULYWlmq|hXV zaZ;Efg(IYJf)t93{x9fn1zCbQc2;OV$*|7-NO%4`*gFN3#Q8tcCU+yP!;p5Vc8Regp6Td> zjrqMHxx9TuV^ym^tGYa^8q-+yh`xN+G-v{HMS0JiHpICYoVpA=xQn6uZSX_cQrYLT zrk8)KY*!ZH6@_i;#<0O;WTVEO??vz5jcL0EX>k;uok?dQf92PBzbcNRz3!=TeKGM~ zBp;BD*Eo@M`@J^ab=TqE?z>5k-_v^UVC@#&q#kw2jyjg^b<^eY+uIw{5Y`0Qa4Fja zN|ohWBgc*-16amO%J|srEK`3&YWBot&t=)$EbHw3G^fgHvu|J}-!_&U7D23(l^l0B zAvwq5Z1#&y5@R^A#EryD&1xCa#>NtU)kTr}G~oUs+)J#wf5mZtmACv4 z+iX$KJ+bpmb*m5?PW}v|wu)i+K8JB9dm8Cz>6AwChr?K?PA86eJRl8i4PW?erJAc3X97L@T+xMwwMB7RAVbAp#GT1#2 zetXMoetTg;E0`!exGv3ChWjemt%#);XLso4hl>MSEQR$+w{Jn01-S?7F(R?wb*lPx z0Pane{u<$ZlJRosd-~C@G2V47{lWLN^4E$UDa#>5nxc{s*qiCDxefNq}jdd2D zZQ-)~?I|cZ(Zni#a*clTXb72H67}17LK0|xeZPP^>C(p2cgPA(wI5?m*I%W#>Iagy zsOquNyPB2wT&43KPj4Fm0f6=>=);ssh`pXw#_DZ=w61Y;HS7>cF?~q~4Mhg8P2PjqfEo=cz`M#<)3q@%d$Ac6rrVpLi|+ zJ={Y40-!zM4ZssXx2E*^(^Xy94aCy9AC=&H_%uf7j|+^DXHjqI?Ih@=W~7U+QNb1C zozLn^FVGXN2&44LHMs$%*oBWSb|1Wjv6Uw`K+obv+&#%TOB%SWrjj5re(;Eby*?Fh zu8kyJE#YWj=d#&jt+DWhpgP%us`@GT#EKU+1Ei87PYo1VhS=Pl6+36JNsh}9ox8$LLfVtVLIoi)c)-uD zYS<~YC~q;OOmbmu;wr(HClTT70m7eO7+mTV>|Q!B0M4h>nHVPwXzxTI%U_T88R@wKx;y$8`N z-1Hhr)Uq1=S!qqnz1SNr_G|2O)w6EKdy)cDEd1eT50lNL1^^ z3DUkTtSgY7cLGItyBT?rzve4EYDP@m|7=pUya67D4Glq~4gsDYGhQU3Q<~X*S_mVX z6Mbu`0p|ndB=yQV+SZ&L4j%)4u&vVVVJ)yAUidC4*;*g>t)rJ-DDWk*K`K@`?j$O+ z>I#?CP6G#Pb$(=m zc>@U9NiowE_*f5*2x4#F!U~(9@UNm{tjPOsMH^ZOT7NR3|74TY?`F0n_V6z{5cUvh zg}@4Z?QGa^-VYv?beJSSwI~vI9FgQ!+>N_6d~@}0iL&)agj@ckXH<;4ZBZVx9roQ& zP41OQ7KJcuyhq%5#Sl5=sv|(Boe@dWx?vtPJOJ$Kr0!8$pA|x+n~+Z!Yq5S{?c9E;(9M$jX~YOtUg|DKXWGKc zHu3gc;dn5K`k$ON1e0<9vto7#6ke*ZCxoaOFSQ}yrGwBblq8O9wwC>wfnRO~V;cxGOrm?P zmI;n_BwXm$ju`(Z+wzWykjut#Xtfpmy_u?YyErq9j4D((h_6P$zkT7F0 z%RJpJ;o-^sgatZ^c7DJgOhl?5&?G^Y@LB#+|q%>xyO^UTd3(k zBHKvgdC^U6G#kp(Z-wxVq#GX>Eez;LX8TE_|G1=az{7?69Y|=~R(7eKJA~I6A6LlHFhFf$aJBq6Ddew$5lMESmJ~0jHD=kmPH)E9{wQ?W^cX`hq0S?#Nm(! zj@@#&9TOaIf@Z@n=joZ*~|Du?jBP zkLPTF$$(tI2Eai8Hz1z-VSv+;K$`KsJ6dBxnY$>4z9FO~k&EdzTRi^ijoq|j8`;mH z{&ovyXMCUwZ+oy*8cRK9#v_xZ?jeP{s4%ok1ZZDy$I(dl0_Y`hzM4$V@uaEnLJA2B z_!f@D@R3LHWM^q@6x79(An~-*kwTgfa@6@+U$T&gq>%w+K5uI)EE+(pWWMml0HP(I zIv)%mzjzMy8HKY))oWLbK7%{Z%&nm z$4Q)3!bY+qOHnYZN4x>qRj~+$0Tz!G3`0m4-e;6Beh7(TalsH07R`uZcrKvS0;&Pm z02cujfMb9IBZbpLNJ;=hEp##J;ec2`+$f=QDw$x~GMd%=b_JcLAqjfV*n8||uRCLJ z8(IK^A+IV$`WnD|jdmVMBNGWftF6#Ao$MoD3OCb94)GRV&VY?r)mC^fgTzByRArEE zL~u4AM&i6kq%dG4+0XB4EBK7U;#?Pojv{)}MtEZs4F7uP8e$&Y07Q0zZS-7z- z(^uT)%$r6!^L)o|gimH*SrK2JLEcB~d}StiMEI;K=gisUYo50SIW3ta+k>AKB$T~E zw(zThoRj901W$ffkn`ikWIy36gM>-1lH>f^ub202o!hu{8Ob!T_a)~CaLQHCfTR8KU-if#(^%9#;V~3tG3!od;37zvW z6LMi>9%j0Uke`RS>?)kiBe887;EiFIU_|(v=CH8|+{mNOYcG(d{7~JR|C{);+W#s3 z1E?flDXboHR)OrQ5eV`DJE&Xyb!*(>k603aMhtS+3sD##0N@Mo1T>)8LqIKci$6mx zbTR5SzzD#sHE!|0xb{!+&qeZI#J>_Pz!pPZB_i#Mgler@{4cI`i$7vX{23C+A5Vt$!?-3QY#17}n8{sN@&-)}EUy>_?oJ}N>&kuHfxQPt%glc>A0qGh& z=z9>!sdr_{GQsl4#IB>b{^kGHv8}=gPl`8BWnmR z2JbB)?-AZ7#96$Xe9m`?Yn#Y@$%2~Zg-u{$c-J}nVUh8-Irm48!ZpUB6jqHA1qj4#BQx1T5pSuE`P0`s90o_v9gUnBH8Koa=;5Mkv3 zBI6g73uOmLAAVbiv*|%%<(oV@70-!RoP)k3o=tGRPCZWM5VFmA;sj|%_;;>3&zF-c zO*7>Ui$Kf8x0=H=wBj zUjwcJy4;NChExk*{)f1_e!3Cgn6gcYoHUI+GsO2$fb`SM$P95c(v7pYT#(%)VLf=i zToGFqcQOQ z_sI%g3~^@sLL45vEYw-~tE6{AogdbdWY4CeH~g6_AMr)u*9J0zuk#jCpO9sUo!>rz zjV3P(H(aEc)U3_nr?#-Hg0CVyX0dFGeaszT zS$lx+Q3BtI&kqpJB=F(o}kTFFFPBB)=IwiUWk{iTsgfZy=x5 z`AUyn0fIh>@Aa$~&%gKL^;a+XNxXrdA0Qk{;*E?tN#;#FdbcK{9K9||<|8`Fq~3-d zK8miQw>5UT!yT))1PEUw^NV>Ky6ny0Cxt@yKD;h$369*ub8h{1dllT@M@Ky~+dfM6 z_ssO4;wg?39DVpmVs&on!>5xVv0lP_^6034W-B0tXEvV_E}j?s`tm;$lk-VmK8cX= z&V>GaD#2N7-2lETdE_h`z{e41aZgWw;%Ey8jR$mQjv9W~I(cws00#gffc=Ja@ZiP( z<^f&>tO67Rb^(q7&H=6g?f@D9EjxN}F#rQ#5MUA@8?YMi0bn=a1fa5`hl9I|gm1V9 z7Y?uhh5@DlUInZK6a#hwjsPkFcLAOe9$Wyxgw8aG2LWaQRsuc->;+T+DgkwX2Ees0 zpaIwhSP7U9nAF9A#zchgdT`Z% z%YX{Ne!$0ow*jvKG69nSF9HStOn_KGC}0@cv)=~H$VtFX0Q-#sBX0vf2FwAx4*18< z!98@ub9ryXbCDm$bMePBaE*~^QJiR1o6NSu~6_ZbzS zaVayWKWi(b7 zGsk95o;l;6dGsoDzR&k#Y&z%O=ieeu{|CISO?w$U9k%L2Qj<~>-aOi>d05E6FDBp7 zAKG2kf)|!F@knjHY7^nk?I2v8H~(ftpitMuBiQ3=M!Znd#G}2(>9LK8U&b{i=1p!) z%$e>^@ITEEKKAzLz&qv$r@cKwz3VgKzGgLIz3XViO3o3w`2eddSLlb>@ALe44u@yy z??n#f#|tm`c!c=X7W`HCM}fPLuX^3x(rdkNm9-4t^q0Kf*%&YMLQ8(Z*-=elKAPht>N!@|K#U~r|x=2tJTxS8PGhDM(&YE5`^!3uq<6Y z6NLU4wqx*s1a3MYvr(zAX4jEU8OL+Bc7G`pUnrueF+At_9NsP{rpmEAXL=5=9%cT( zi+!$4#S|0D8p8gfHw0zp#_|DN?sEhWpm5kYCPn|xaQ;8T`Tx7&^yAVe&KaCFan6Et zXP=fH`_<)iXd`Ktm{!KyG-xGG8&ql#6@R4SED zWon{|QzfZVgpF3O2nVP3RQsrX)&A-Lb+9^2-A_GKJyKn&{ziRG{Zt*VS*USpu4;bL z1ZiWmFKS=b&ekr_F4MlRjnc*I%5_(D|IvBq!}TlmZ|OJdKh}S$-={yMKdJv(e_nq> ze_P+64>4#BLkuGglMJ&ASq6t8*Raw+4euH@8TJ{D7`|~BE*q*1KO25AG#I>%t&A$; z0As3gj`0=aQe(bxopF=VX}n;pHr_TiGx?chCY4ENGMVB`Nv0Ij0F%v>W-2#bGF>i5-K)!Wsdsh#SB>Z9sY>a*%g>hIM5QU9d=S^Yp=uWnFt8c&Un##iI73D5*< z!ZhKUC{2teRwL7>G&+q*lcKRZG&!2Jn!}n3&9|834qBU5rZegibt$^(x_P=~y5+iJ z-D%wqx_dgJ_tA&xJL$E0i#}C9T0ceqsy;{mwtl;Qm;QkMwEnFATfL~itAD6}tnX$> zGQ4J3VR+B*mEoEp#;7$W8;2N28)q1^jjN4YjC+kIjV(-_OtB`%OjBR;RP$={=jQX~ z2WHL^X;EYHPFXyyChG+2TKDF$&9I{kczOhtW?phvL9$Pr8qlvYZHOSh*8f#Tsjn)KfiuFb77;C0A+q%-a z(fWzC#JbP=rS%RIBK+GI>oEguWMQ&M*k$$b?5iXcUdLZ;9;6iJHyiVVdl z#S}%BVv!MkYFk8)Iv2dT7zcqVVnp=7~AZ}AE^DTvz^_H!c&n;hKeXdw;VRblb z3u~Y?)EaJ$#^NZfeXMEL5fI7AR)=*p#B!H)ul1z$iuE2_nsCBZV`;o(ezHJWds!D* zKUoHrCrh>n3$s^tL-s`0Ox{W!ChsEG$TQ?~X@)au;YZSYntIsKJDH@=gTVg3XDx;y1mn+{^zOO7(o>g8^-htL_ zqG|~(+fAj0Y8|8+t(vY{q{>mfrFvhrMRg1dRHyn)#j9JW+o(gJV`r)tsteQ~smmSe z%jzoieYFcK6{zX1kwY!?*9_H6(qw9uXkJ}cGkvfhigY` zCu!Gcw`dP&zt&#TKF~hadg!`BZw%KtbQ^SAbUU$>$8@K3mvyze2f7e_SG`7W(+}5g z)I0SD^%eSy`k(a=^iTATFhiuFn?YtUKxOoWrXG$pcNo?fwi-S$oHU#X!t!L{jBit}VysWvbjVwggStgUIWmeg6**Mv1X&ZioO?XT8Nam6? zk++l|m3t@#t3FdDsW)lTwGq0j`eV?16~=SMi_kXLj8#TQwNb>ELS`Mp5v3V?&Hm;9 zb1>9QxH-xk1AcW@vz4S9!h54G#?Mur)849+-U1ZOrW&hcOtNZmoHPx!AnLybT(2mwC6j)XZBPJ{Dh#za_x3 z(2{23Q^eo1Q#AP+s(DNEqqbK2j{cZ_qTyr1b$A+) z#*wCbrew3rtgtw4Sz@8}7g@izK4KhY6Ap)T&RZr2OIBHL*(lj`u#_uXDSJ_4$RR>jPm0Xpg8mC&K%2QF*dew)jOIRSSdb&DW?XOAFOx5hw ztcR9O)-BQH>26_D2I^({6n&aQKOQFXw7#7o+R(=^&aenp`)$J(aC!(zw+7tmjaFlS z<3eLDtmND9hql2ZI&3UAUWWAEGSrL;OwwiXDN=*Aq zhfOC;6{d?=h968nnQBeHn0`08OkR>D4TfwuqRrjSO0&*vG50q2HxD)sH;;m8oo1d5 zfpM5~&9B2Z5X|qIx0*kO(3F}F!q9$YK8O8#-F(x0+kD^r2&UH4($wN-39^L2f9PiE z1*LAbBv?``Hp@`UOW59a%M8mr%OcBCO98g}8p{UDM#vfrvct09a>P<@`5Gd3)ly{< zEk9d+vHSt;-^AL|8eomI%B&V^vUP~{CF^U}Vi@ED))UrB>rd9ZY`Inujy(b6WG$f$ zB4jJ1I@dL}h=a4GT6*xm5Y#pYF5cFaKG=d}GNq z{#dm~bx!rI>YA!bRju+;_fn5l+tt(5v(%X|u8Xmzx#}}8u9fhStJHn8uWHw84{76d zdvt33T>WA=Wxj?h1|PVyFB@kW2bzYNrea~@;kKk(MqBz@*J3A~uyVzO+vNcB;jmSM ze=dL z>XquX>J4y153BE~dCg!=7p+=5K%1d`O1))I|kcDId!+80Aw~7;w6aNZWO|JRV-3 zN|~W7f$j5zhulQnSzW6pnx2sL7d3M=g_@n3BbpyIcQy5zj#>o_);(>#me;k_X?1IK z-|2qUdFf;Ief6Uq`ghuZ49XNJX;IQ?p;;Et;j#wt;bfqH?V<=UAulxmSI31q;bX6g2_Eyypbq1z)uKECc z`>)hSO`N7L%<_vc$a^&3XnxViwY_14Cu*l^7i)KFcWd`)kHZvS(EgyUhCg)|D!HHT z1xz-DIo_!ISof*!0L*YFIPWPi!F76_;X~sA;|T|>(RtV+lPTWxjk(GkWa(si*)rGS zz&3fy;-_Gj&NxhJ(K-dnO>FvH`FP+4(IbC zoEoC=QOt)gS*B>I`9m{Pm!*3LjFjn4=*Ak}F})9`>_gLbljBpU38$$D?$>0eWncg*Rgp&El^ofa@OU%{g9&qA5 zU`tX*xO}u%%90`0li`3B$==6l;i&8q?Bioub9pzpNj^wEMm|UGqn_@-Vd=MGu?`ed7wEB=dBmm zY&-C8+vXy+%jRODw#s(Nj>!DwG4kecB*&@pRl8MZR1a12)edz8y!cU?m71FxPx$RK zv~Oq+YbWYP=*Q_N!C9ZJ&(bf_JM?+_0vyKI=-2Dt({GZFU7zds>dW;O!x*@1{^m{Q zoo16I35t2NrN+Wr9eQTX!+B}V&&#gLmMH>Y+1L@|i1HidNL41(jz+ysw@nvj3O7ZW zV&L8V{TL4JWxVviBj_$)hSRh|8K+9Y5p|xvv#G7+A{2UqrM-2i^>Zs1hig!v-_=Kh zMx1Gm>E=+=uO@F8pCt1Ftg2u>0JGv@>2FDe+2{zVA7*{oIuA|Z<=b#yipD)4R4Zg} z$u`P9l68?6$gj%3#Ddf*n!q`a)2Oj6InH^~=H=^|en4HOw!;b7ra7q*H9ok(NYbWg z?b>|pHtk96MQt6FW3W!A8>X9}%f>;wOjiZ97_N`gkI;|NXX`iM>{_O;(sKr1LyRHC UV8`u6zQNgTsMlql-Fl7rKO))`82|tP diff --git a/Ventoy2Disk/Ventoy2Disk/DiskService_vds.c b/Ventoy2Disk/Ventoy2Disk/DiskService_vds.c index 49479b6d..763ab035 100644 --- a/Ventoy2Disk/Ventoy2Disk/DiskService_vds.c +++ b/Ventoy2Disk/Ventoy2Disk/DiskService_vds.c @@ -608,7 +608,7 @@ STATIC IVdsService * VDS_InitService(void) if (hr != S_OK) { VDS_SET_ERROR(hr); - Log("Could not create VDS Loader Instance: %u", LASTERR); + Log("Could not create VDS Loader Instance: 0x%x", LASTERR); return NULL; } @@ -618,7 +618,7 @@ STATIC IVdsService * VDS_InitService(void) if (hr != S_OK) { VDS_SET_ERROR(hr); - Log("Could not load VDS Service: %u", LASTERR); + Log("Could not load VDS Service: 0x%x", LASTERR); return NULL; } @@ -627,7 +627,7 @@ STATIC IVdsService * VDS_InitService(void) if (hr != S_OK) { VDS_SET_ERROR(hr); - Log("VDS Service is not ready: %u", LASTERR); + Log("VDS Service is not ready: 0x%x", LASTERR); return NULL; } diff --git a/Ventoy2Disk/Ventoy2Disk/Utility.c b/Ventoy2Disk/Ventoy2Disk/Utility.c index c9c32bd1..1fbe9f44 100644 --- a/Ventoy2Disk/Ventoy2Disk/Utility.c +++ b/Ventoy2Disk/Ventoy2Disk/Utility.c @@ -267,69 +267,93 @@ static const char* GetEdition(DWORD ProductType) // From: https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getproductinfo // These values can be found in the winnt.h header. switch (ProductType) { - case 0x00000000: return ""; // Undefined - case 0x00000001: return "Ultimate"; - case 0x00000002: return "Home Basic"; - case 0x00000003: return "Home Premium"; - case 0x00000004: return "Enterprise"; - case 0x00000005: return "Home Basic N"; - case 0x00000006: return "Business"; - case 0x00000007: return "Standard Server"; - case 0x00000008: return "Datacenter Server"; - case 0x00000009: return "Smallbusiness Server"; - case 0x0000000A: return "Enterprise Server"; - case 0x0000000B: return "Starter"; - case 0x00000010: return "Business N"; - case 0x00000011: return "Web Server"; - case 0x00000012: return "Cluster Server"; - case 0x00000013: return "Home Server"; - case 0x0000001A: return "Home Premium N"; - case 0x0000001B: return "Enterprise N"; - case 0x0000001C: return "Ultimate N"; - case 0x00000022: return "Home Premium Server"; - case 0x0000002F: return "Starter N"; - case 0x00000030: return "Pro"; - case 0x00000031: return "Pro N"; - case 0x00000042: return "Starter E"; - case 0x00000043: return "Home Basic E"; - case 0x00000044: return "Premium E"; - case 0x00000045: return "Pro E"; - case 0x00000046: return "Enterprise E"; - case 0x00000047: return "Ultimate E"; - case 0x00000048: return "Enterprise Eval"; - case 0x00000054: return "Enterprise N Eval"; - case 0x00000057: return "Thin PC"; - case 0x0000006F: return "Core Connected"; - case 0x00000070: return "Pro Student"; - case 0x00000071: return "Core Connected N"; - case 0x00000072: return "Pro Student N"; - case 0x00000073: return "Core Connected Single Language"; - case 0x00000074: return "Core Connected China"; - case 0x00000079: return "Edu"; - case 0x0000007A: return "Edu N"; - case 0x0000007D: return "Enterprise S"; - case 0x0000007E: return "Enterprise S N"; - case 0x0000007F: return "Pro S"; - case 0x00000080: return "Pro S N"; - case 0x00000081: return "Enterprise S Eval"; - case 0x00000082: return "Enterprise S N Eval"; - case 0x0000008A: return "Pro Single Language"; - case 0x0000008B: return "Pro China"; - case 0x0000008C: return "Enterprise Subscription"; - case 0x0000008D: return "Enterprise Subscription N"; - case 0x00000095: return "Utility VM"; - case 0x000000A1: return "Pro Workstation"; - case 0x000000A2: return "Pro Workstation N"; - case 0x000000A4: return "Pro for Education"; - case 0x000000A5: return "Pro for Education N"; - case 0x000000AB: return "Enterprise G"; // I swear Microsoft are just making up editions... - case 0x000000AC: return "Enterprise G N"; - case 0x000000B6: return "Core OS"; - case 0x000000B7: return "Cloud E"; - case 0x000000B8: return "Cloud E N"; - case 0x000000BD: return "Lite"; - case 0xABCDABCD: return "(Unlicensed)"; - default: return "(Unknown Edition)"; + case 0x00000000: return ""; // Undefined + case 0x00000001: return "Ultimate"; + case 0x00000002: return "Home Basic"; + case 0x00000003: return "Home Premium"; + case 0x00000004: return "Enterprise"; + case 0x00000005: return "Home Basic N"; + case 0x00000006: return "Business"; + case 0x00000007: return "Server Standard"; + case 0x00000008: return "Server Datacenter"; + case 0x00000009: return "Smallbusiness Server"; + case 0x0000000A: return "Server Enterprise"; + case 0x0000000B: return "Starter"; + case 0x0000000C: return "Server Datacenter (Core)"; + case 0x0000000D: return "Server Standard (Core)"; + case 0x0000000E: return "Server Enterprise (Core)"; + case 0x00000010: return "Business N"; + case 0x00000011: return "Web Server"; + case 0x00000012: return "HPC Edition"; + case 0x00000013: return "Storage Server (Essentials)"; + case 0x0000001A: return "Home Premium N"; + case 0x0000001B: return "Enterprise N"; + case 0x0000001C: return "Ultimate N"; + case 0x00000022: return "Home Server"; + case 0x00000024: return "Server Standard without Hyper-V"; + case 0x00000025: return "Server Datacenter without Hyper-V"; + case 0x00000026: return "Server Enterprise without Hyper-V"; + case 0x00000027: return "Server Datacenter without Hyper-V (Core)"; + case 0x00000028: return "Server Standard without Hyper-V (Core)"; + case 0x00000029: return "Server Enterprise without Hyper-V (Core)"; + case 0x0000002A: return "Hyper-V Server"; + case 0x0000002F: return "Starter N"; + case 0x00000030: return "Pro"; + case 0x00000031: return "Pro N"; + case 0x00000034: return "Server Solutions Premium"; + case 0x00000035: return "Server Solutions Premium (Core)"; + case 0x00000040: return "Server Hyper Core V"; + case 0x00000042: return "Starter E"; + case 0x00000043: return "Home Basic E"; + case 0x00000044: return "Premium E"; + case 0x00000045: return "Pro E"; + case 0x00000046: return "Enterprise E"; + case 0x00000047: return "Ultimate E"; + case 0x00000048: return "Enterprise (Eval)"; + case 0x0000004F: return "Server Standard (Eval)"; + case 0x00000050: return "Server Datacenter (Eval)"; + case 0x00000054: return "Enterprise N (Eval)"; + case 0x00000057: return "Thin PC"; + case 0x00000058: case 0x00000059: case 0x0000005A: case 0x0000005B: case 0x0000005C: return "Embedded"; + case 0x00000062: return "Home N"; + case 0x00000063: return "Home China"; + case 0x00000064: return "Home Single Language"; + case 0x00000065: return "Home"; + case 0x00000067: return "Pro with Media Center"; + case 0x00000069: case 0x0000006A: case 0x0000006B: case 0x0000006C: return "Embedded"; + case 0x0000006F: return "Home Connected"; + case 0x00000070: return "Pro Student"; + case 0x00000071: return "Home Connected N"; + case 0x00000072: return "Pro Student N"; + case 0x00000073: return "Home Connected Single Language"; + case 0x00000074: return "Home Connected China"; + case 0x00000079: return "Education"; + case 0x0000007A: return "Education N"; + case 0x0000007D: return "Enterprise LTSB"; + case 0x0000007E: return "Enterprise LTSB N"; + case 0x0000007F: return "Pro S"; + case 0x00000080: return "Pro S N"; + case 0x00000081: return "Enterprise LTSB (Eval)"; + case 0x00000082: return "Enterprise LTSB N (Eval)"; + case 0x0000008A: return "Pro Single Language"; + case 0x0000008B: return "Pro China"; + case 0x0000008C: return "Enterprise Subscription"; + case 0x0000008D: return "Enterprise Subscription N"; + case 0x00000091: return "Server Datacenter SA (Core)"; + case 0x00000092: return "Server Standard SA (Core)"; + case 0x00000095: return "Utility VM"; + case 0x000000A1: return "Pro for Workstations"; + case 0x000000A2: return "Pro for Workstations N"; + case 0x000000A4: return "Pro for Education"; + case 0x000000A5: return "Pro for Education N"; + case 0x000000AB: return "Enterprise G"; // I swear Microsoft are just making up editions... + case 0x000000AC: return "Enterprise G N"; + case 0x000000B6: return "Home OS"; + case 0x000000B7: return "Cloud E"; + case 0x000000B8: return "Cloud E N"; + case 0x000000BD: return "Lite"; + case 0xABCDABCD: return "(Unlicensed)"; + default: return "(Unknown Edition)"; } }