From 6f20e6c2c843efb21b7c7d91bbd4d7ab4370cf2e Mon Sep 17 00:00:00 2001 From: Lauri W Ahonen Date: Fri, 23 Oct 2015 15:03:39 -0700 Subject: [PATCH 01/29] A single jar I can include and make JNA work in Intellij Idea as a module --- CHANGES.md | 1 + dist/native-dispatch-libs.jar | Bin 0 -> 980291 bytes 2 files changed, 1 insertion(+) create mode 100644 dist/native-dispatch-libs.jar diff --git a/CHANGES.md b/CHANGES.md index b29988d4af..48bda7236a 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,7 @@ Features * [#512](https://github.com/java-native-access/jna/pull/512): Make loading debug flags mutable [@lwahonen](https://github.com/lwahonen). * [#514](https://github.com/java-native-access/jna/pull/514): Added `host_processor_info` to `com.sun.jna.platform.mac.SystemB` - [@dbwiddis](https://github.com/dbwiddis). * [#519](https://github.com/java-native-access/jna/pull/519): Added JNA functional overview - [@twall](https://github.com/twall). +* [#523](https://github.com/java-native-access/jna/pull/): Add a convenience jar that contains all native dispatch libraries. If you want to hacking on JNA with an IDE, just include native-dispatch-libs.jar to your classpath and create a module from the JNA src directory. - [@lwahonen](https://github.com/lwahonen). Bug Fixes --------- diff --git a/dist/native-dispatch-libs.jar b/dist/native-dispatch-libs.jar new file mode 100644 index 0000000000000000000000000000000000000000..3fcb21fcc3901a49b6c428962919d2a5c27fe59c GIT binary patch literal 980291 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�V>a!qxOAC;Oa|T=aW7(yf;Xl` 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%0AB7WTwfVs%hsKT%` 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�yY3In;O{;siwUTOTWl=*kZE7X2}lC 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%0A59n4{MjBM|FWuaCo8%((Uftg4WTQesNrdw2>g~h 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%0D%n$*K7IfC#tp@G@Qa6dt}#7k&*7uh4~m ziG`0?b>TMgLl=H6`=ON&5Y8rEjcWfD;n(r-gSv3Wr=s7*!@ojCe+Cm#K1mRsnI!zW zB;hwC3IBSM@NXmucP9y7mLz;llJI2hB1yulr>K0z*9#aP1J@)f1oVV>`V&qm{ZrSd zbetgQ;)cKdNy_=xc>0Vk9)|VzCQ1Ka@$~6#7L@ ziSdv!FG+ZzL`O+3r>shnzBWntW(j@~h-VjnoFsiuJiU>_kL$51$K&By zQvMTCdwF`)Lre#ydc}B(^-6S4t>EFn|E3S5@b-9kswHuMOr4q-p440k9#KB@_tZNi zx^wx1{V}y!;wz5-G(7LVRVqio1MN%wS(19+kkSwEz=aV0kyP(Myxugc#8;f34PZ;9 z71YOOa0+=o3&Lke=>=Z_A7;#x@FvP}L->jt z62g;FotQ2ek{mM&`G)2EL*jO2bSDXaNrI<`2O^xOr2b-O!4|+n#-F70JURB42@@r{ z3;71}V8YE39)unU;p22@*e;-SPHL*qJ1KrZfE<|EVNGb?O_cO8qeu_(aN^IC)O##39wz>KlJGxB zcozK*+BeA}wO8;J^rJ~%m+)V~3jw(?sX$6!A*J_9eAUIn!JV{eifR|92+)9ECvB0+ zxASn&OD84i7n7b%5-yDkCb1p>^qM4%j~N2b(2pklTH*%|Cyu9+&P(YMB zU48=LP64#`n_ML6tD?Vve4kt<;Z2OEfVav1#O<2=9f=>r_yY20^3zf|1M&7w{?{pq z%aPifA>=leGa%86w|C+Z2>&E8JXT3hFp7QzlB)YfpK#&90ccp&X!{OYCQ$i9vg6_co zQzU)Z$nj|eIXvb1DRDV0&AU#SleoQ879|N^DZ$C%L3udk;Uww5C-Iv!zcl3^Bskr? zUC`bsd!=@X#L(}iNb=TV=jnltQzScAouBT7@b@IV2|WSuc8#Q0n1uclgYavm^nyW0|KKS^r za-J-Ab^P{!di`d7y|>ZrUVMFZSX58cKMj&n(j_e=-K>a|NQr2H!LMcEzQ!k#ImrvKfdo@zxSW_KKHrt+&MF!IWy0_=g!ReoX)%e?RPgKElmUV zH-s5yZAxai+kTjr)2#2yDqN?+uVv&PDz5=~JDqv;mRBeK!~qYDke+q#{x z4db{rv=GyltqHu#j&ScYb2H;i$khCgdXkEpoqfLS>N_V&yXk`QPMnTsa`IBJvh(v_ z=N8dX(FuHZC$gu}`GX~;->k1RZRmKm`(2L(s?WdARkh^*nOI%3P_q%%G9i#5@=m%< zOJly>h}HE7I}rwbA?IkcvvB&|v34zf4*ADlU<>_~eyu%WJ_UKW^r$%yu4ctF+?T zu)Xh5e2w3E7WR^(Hg8La;Jilj`Cvl4#6#~DM=f@+!G{=`8XJEEn*8tYZ=1MyLtI&W z)7Nqvt|fLaW`F!C#qRP6VX$l*EDZN=x(o5~J4re7!7si)SP3m{`b5Z=YBM4!drk`R^ z`{%g#+2oQ6dG`FngTPhRXvJAgIWe)%Ch=UK1qNR~YN;5CZhAykQD*;|Fo?zJA=UbO zxj|_Yd^yUE`G1ICvv7zMQg|?3Z&ZEn?8840G|e2C9-ptF<_Pk3iO~Kc*CrA8$AR3k zR@3{YEi#YZ-WCVwP`pXk_1c>FLijpXd(!D6T(P5E2~%aLYHUo~`R=e|b+y2KEVF-G zh{XiiVZ8a?bl5Rc@FSq}N%D(^VTlH*Z(LC{G*i&3gTK@UN<+Wf&ljJ08P+ZSJRseX_D zp^;A(--0rQ!eTkO@&2CC{3#B?|GUX-;hMggPiP;83^uX9NZE+kDx>ch4Rn;A41ECl z7vJIe6?}IoDf(-p*UzVSmoH|@W6rsZdVO>D$8l*TjsCTv`WtsUdGeJfo#};BF)D}s z^dAP`DPAGWlJMIa1;E$R+!5@;+a2py8^BDWsgQ(F8o zSdtxBl1yoTJ!otLaBVb@MsW z*md;wGxlrlH%RE>HaLLqj2>9HwX+y#TkZi1+|~QPK5+;zzTFpF8oU zmltFF=SC~>#7&oSxQZ@L>)dcYhcLUkJ$pVw>?F0rzA~>k7uHj?O>9BsD3G|c%}bS3 zy@CG-G)_SN9j7zqPr;?$@{J;qf!TnIbDB)Li%rYQ>C{$E`pIf)RH{&$)XCjb z@lUAs9aH7tubmGZLQW&iJ8ZMfJjHnpjT238lonqDK4?XZbw&^mO5Z!y`H^xo2K}b! zd;7Ybwl_D2uB~10pYXRZx2|I}M2T{elj(A2pV6TxY8y*zphHZO6h##B{SOX~qY@sD zfetIXWB? z5)zzwGok+_C-i^Hxw+VV@NjW(@$r1;YyV!<2YA>K9P;LGgIp&+bUl|+Tr8zAgSMhgPzeTrBl%J6roAi%>kt3;e$_jsG+Vnacm= zT*z2A$kK7-+GT!&0o^V?K90Ys^t*yd22W&2O5(PF(LL~|@QOP2;Od5}#S@T{4+AWv zXoeb-tf%o~mzK*ZG~p*7wqW?_cZXhV{!pTX2j3Ltb|2s;4*B9Wh^)wzg6 zLhqw9TG6N_5A2e|ck9+I&BuTow7uX{2?T%1^e@L zUK(>FTTtd_pfRy_FcuW+1O23s{F*?LKSCRA% zMqwYj7pxV1lf>b~=mU3P(qO*wxBlRM$vl_}k5#IWg$_#%xlm)HzTVPYDXN7f((EVH z{X@7ld%Qq*H9V~1c#3>{6)bd5Guo=VcE;U2vfi4hyxJXl;sDWEE3>_pX@0VRe%)NQ zR`w1$N|1H^XVtvfq^rR^z?5p9xtTqz9JflNS?Ms7q3RM(bkUjCGJXBS=Yx06p``bu z;Oy_@utdomRhsK4e;VvHqh);WrB5>^ygO|@2(QYf>ypQEX>G9^cJ$d*)-w1XV#ZS$ z-;~8Ncztnj4f5qcUUi~+;RHzVFSI#y@EA-rAMM#u@M|D>;RLtY`qRNfOP_0W`Edik z^Vl$(#KtUm#jT_57;A+oXW+OwpO$@9cOJ)z30fSNKOWtm!K&;|0q3v>#j+R9*+!pcUb;!<(x z5g0q}9C;)fc-S{qZq33ma?C8f=YfDgQxJ!OaVJ*c(ZX@Hx|2YlPp zPL5`~nOD56lW}qc`#@okmA{wA_u_2E7(IQxJ>#~}i>WFOs~dQNdIHBTw(6+gN)!9h z=x@#Kh~}P0N)SA5;iTQl{}^2hc(%wM0Pk#36tzKm{Eg7;wElCvs9B`qw-S8qp4PB6 zmu|v{RXU4u=7Dnn1KN=-aeK+D)QlH*G4f#8<=|M)KsNaLJ9w=9!*LdqPuvMQ%b9<7 z{p-~)K!6d%M(J;0P+V1aTessROWPMXp3w%V5?j zMWAn2EA?&{GJ5u%ofeXc0F$W0cK&%N`gVcdO3fPC&5KP}bndg_MOdeZ!}}+Q^*Q!9 zf?MDh4d4J@o0V~~7+`bY^ZqH8Cv$+?yr|p0yTSz38r8>m92z5L%UfUtk{_#v>t0_< zdNrLi?CX$CM)+9o=9nj^wrL6~0~KCRJY(p4->g}P8o_7Ej3NQmKPQ|hkU(i9wv8y{ zz}7Edvv5DCP05H2q8<)WSHm)L|2+lFhS>ytR|si|ST1Bf^ph}B<6Jtp!YkMh*jvsyHl}T z!&^2MIus5FHo%F&)!@<$Q@s(ih`VraWN0`p~{PTk4%R-#!QFp~&MkcSiU(GI}mEA}lD7RNOM#kf3l?&?VKw~etq zZQTOQM3z0i29rT4#Y!_&*<?-*x)=fB@C_+C4Y|eO>J+@jwYmcsb9J{0Q zddrnK{MIJ^YrJj9*cgyO68U0>{}Z+dY7L`uJgvIkMZn2BzuexuM7cTLunipUqLo2A z7zEWZ@Os9XKcVftKoNq}PTBzfJhV|I_GTFWA~m^Md91p^d9Nc4P#*Q)?LYK4xyQ1t6ccKT4SsG&dqv|KLCU0H!=OVOBOY! zAB&uqh%ZuahXsm=@r@Y8ierT#BHV(H=dn7;;wtfy%1`gScd#H*a6m#KzbB83@`-rM z5kfF0V;vknI2=ef(ZjSbd?Dz+tW^&M$s%OID*e@P)Vm|Kr%HU(&A`FQh~1i z(_2Q4a5IMd$n2VndckRgOgyy0+V)+h<-|r}I0gGDa&GLx&A6{zL^u*wE>Rj=jOiRA#vyD z-rrOZ=hA6~#RpO#k9ViK!Vs9O9pYA0j3Im4nZcEn!*N^rPwHdyn`Zv%lg3H-Iyr{E zy7+C_p2LC)*TK6NmhuvkpnZCj(%9j97)ScV(S7@4qg4>iQW1s4Kq1hCEq)_5D3v+m#u4lr=pP^*m5cXqWKB}k8d%*1&xo+zhh5++hRY?;0;n32i84? zC?v7>98MgpmI|YfuHGW6Q>^aBIF*zMW8!tY;U-QDh~X0JE#F$X$^H%P0;}!|+r#gF zd%4N=VDVp&?|COq2&7A4WbnGr?*Q2vVH*D*z>ZEst$`llDF-uwT(?-J9{ zgM1%y4~Ot??JK`VFBS&(sdua=ZOfXS`^ysP{Vo&B4}_j*_17*YHWb*wHqwR4TutVe zjVw%U>VnS3>yoR@&FY%H_s*G7dT3qs#5x+LH=@;`hwSiGn=`ct+2BA&D=S?#+^yha zt94Gl%Px?#*;Uv6B8s^-&q>`%SGlyQ+WNAqBEsT{>Fkfz#o#cCQXIJrF$)t5T!M0w zgx18kzYRhM$v@K)jmyhiO<_K+%1W#FtfpesX4)omN>A^D_`D#$>-ZOz2d`PqkNWQLz?KcURcBBPJWU7wVz z*8FJOm!{l;sOJ{{36-y1$=?lVla(WTyTESLhcG z?ttXDs!~2ZWl<$b4rNxcHN&lNzlvT97ph%@5FOz%1$P`ZHJ;PtC^xNCrRsGa+-KHQ zH$IY>Bn{{rF{ZzNriwAC{Jme8Dxa%|T*%-e&cT5>+zryWl; z@k_nts;er>s+(z8pMTL-c|V&iv7QJmA$BS9yeVsC z?#hFtX_s1=fn0l|3d@u5KUnpW>b{VF^ybZ2b&7&3tex(UQ}GvRe%=Zeqn@;6nz_5* ze>`-<2${>hFt$u<%D`%?cJ zR38O0_8%oKVl2dY&AEB(B#J*uzu=^kb{(&E)b^w$W~^wY(O@vw<_pSvT4n3#WYeI) z70xklf?yV>W?{mYv?~5iBt1SZEo4&Zq4nkGs> z{M$PD*R<&~H*4d>rv{n54`WIiNe)7XX4n;4A)Qq{aZdCZAPmd;+zx~W`Ie&Phg+sQL@JBw1tDvZ}b|lml#7iXfN2}qE)&0coTK9dFruq5n!~EJ@ zDvDsuj^)Hsq_!@;>x}xdwP${D%m$|J#snt(U40sWdZ?-950lD@vhVLKt?Jr|7)?d{ zpB6|xHLG#jj(Vy2#kM~U#msMx<|my@OO*Iil}m~87^M?)gj$^?7_V7OiV)5&CVIzv z68^>}UQSm3F`es1Khab!ttjgeH5woJfciD-CB;)>76>pSI=W0WE{Ud3k=PBN7YkQO zT0Z)21)s8?q7k{d95qjn5jX)&w(uNpRrNblI?9Ip6BDCm+g$4un31 zx>&ItZR5XploqV7Ha9eSi^U1>;gVBbpO$VIEhjS_sq(BG+cA&K-;Zz^btV0@&>`en zV_-68y6{P)#bv$StWKyZU1|F^gpo_vS~X?h_&4_3DTIW#C;0K&PsY}Omn>*m*o= zeFbduD02xLUkQLduUzTE3CY~tKI{mm$S|Y#RLOBN>bj}3dLZVE$bPBf##U^Kd-4w7 zS%uINdU|hHTF`mo_X6j;P7JzY$stDEXe-j@@9WnBmsj?rR8Q7udZ}F25`3b3*>{q3 z;_rjF88%zvUW+%Y;$CxXY?juXIuXe}S#u}Pst#+CY}Up-vGvr(rFzPc2oa0fGT|H_Z~QFK_@kf>!QUXm7VCsuqd)SoU|GA5Oi#G4**aQcI{Z} z1+o%e{?We!q(2QIk`-8UB7z!rjWR8lgefvA+5A`heL)U4zvxayiDZS=R>(aJyMh^) z%fg76+AVQU>^;-**zG*q@brjgoFnn7oIQ(QL&=YgyL=dzi^Eu$maFT@!tdqyh=7J& zyhK2w#h=|v^qyql{sLtSt!u&n4rd{a& zU@kFb6bRlWbYGG-Cv+cGuv+Qn9b|4_6qWX};bHU%1ANjHmIc>LNlufb`~r%JmW58K z=V$#3OM5|hoz1f&VqK=+_Ffr9%90^Bm~S89hBl>4+$T&A!*bv)Cl^ry8BQ$-o4Iw_ zU|eg})N8o7o!ViyGqdZNc%3$3OZOMJ6wN$c)ii5PxLG1yB6xQSxE}Ot;RFFKIN8Eo z?sy@8a84$}n#er8AZkClH6Owxa=;)wOUr8xnzfBk++XZpok?svaGFRw!*Lj{*|teM zy;frl!wv`oI&l~-ooLpK@hoZ9AP?{JS9uX;L4Y*)FaKncQ*YeRQkj{HiGo4akBZlKzMg;c*|m4kz}X$qR+#cNKPs6+I7QhM7x#yEMs8S#d=NX!CJ6xVsR9$RoUEp03#cu-X$gn}tOOX9?qlB;z!Z-q%O11qWgl zwnPw6g>$cnWE_8z(@4T*qcHdb&uX02|DcAn<6M)SvJeK;;Q(pZ?zQ*<7sl6hukRzg zcI&YF^zwL0ocF~96ys!bcC`@%e8M?-v_?x95RU`Vyhn=U!G-a6Wz(#2;f6-z@TVFg zsR;jAhb2F_*DAy$3{G;IPS9)^hJ6(VCp&$P>p`=|LU`Y7V9u^_yygFzZJEET^1m94 z5+dnvJ!seBNj%$dY&g5v@IuP&Y2yFu1Eyj6v}-E3p&kDNmEayKwi5?Pz4q%r$h>&% zR$&%|0g*UjH1|rqZ--30JHtG5vf9Y=Zoh-zY(1bii)4FKLBdzwftI?0;+YFk{Hd>5 zr1AZU-ZCAsA|x$>tS_wvZ;j;Iadtn;NSNSdtj+8NCI1WnPHg~T54Yo?YzOw)OLWj8 zzZ&RDlyhEJlMwQj{sfVDPItFRe5zt`;{kGpAiAG8 z43vTsF-2?hrEAI6TJfeX0K(AXjgEpG{wVk(M+`lbjTEDzj-rTi&YtF=zi=W9H8_Kn z{jTn!63mKyi55hg-eV~;&5i%@SXs3YE0{GN<(&RGTl)-F@?*6yAUnUlY1*1JC{h9= z0JBI$8LcG?ZKiH4dtmsco9n`nVk97wOZ@b3L<1yZkmXBTRwdCa&-N45GSGj75#P^^k)ot`_0RKI?=-7Md~YwW806PJ^Bcfj=?T6?g_L z$J`A(P@f=dnRFXTbi@JHvG1Eub5w^UMI@}VIpR+p;c79A)J^1E2I>c_?Aam(ExmvT zWRM^QIu)-)dGE^6)HdA-*V_my)#j+5Ckibv=#d|#px<_}{;oQc0Ij2s*=gvn?-gP` zaTR`n+NECtRTntnbVKrl5_+FvjB0{X77p$L@-_7-i88Sv5Bu zRPfPLT6>e$!}?8Ssd`gZc%A*g``ONn&Xl}eK~(NcGHE9`v~4zHKd3&hH2NHNvae_X|1 z9dvQ98L;@9rz3xo$u7@<+`DTyZDR7ucXdxp6_F26B)cfd$xFe>b;19Rm!*B7y`owW zZ8gA4P^V6bN+AJCszCkHrE>^%=ztQQ;<&3x(xb}ASNJQLsS>P5P4z6xG3=&^Zv-Nm zhCPqYz*fCE2Pf^Ub|JtrD%eIk1eS3WqO6Ls@I4r>IlC%+F4>)8mvHa}fiR8H)dF+? za$?{=*qx*HR`bJsaXJC&ck(V$_rAO5uH>3WE8ahk*c`61JSH2jr)FkhH)AkjJ)r|Y z8quJ-o~u8pi*#-M&YyZ_&dL%X5D(Op9lO8e{}VCUd(OH29==`$e9s;uOhpFyehrn; z1ut1KDyi*lqaIB!QZ}3WHD_QYr|$eMx9+YBe_=z@LTRC3$Rr=*7aw^totPOXZS?x` zWBAaA`Ng#_OHMnlnqwQuY<@0%eS4i>#mbUw=SI>&;io)@$PUq73a1WL7^!yM7vB4@ z;m0k~$n?j3Jp-9Xw#4wSYVv0i4SYz0q49o7+w54(lBvMhBVWEabZt7p&mu6rM;|8l zwbsqSS={}^z#`>aYgWcOSz5+5e>I&L|M7QPWLN?Ct% zuH$N?d%xx(5b~<2lH4nO_=@+~$HzVHUy43$e2({k(fhL7 z?09whBn;k|bP_L_sZsz`6&@EWH#MnqXIl*AJ1R|tSIzUro*lG%)L7YlzPgd$rQLm| zw^sIKnBazcOUv_)VU~k@YXa6?uqJrHrOAi}+DzU|xKS0k9smUN0t>Qo8i)056Z$3M z-?ni52v$zGU55XL^9&gEA@E@i5l!FMsnywdH!N_$3cZln_3YxRQ?V5tem{GZ+ELNJ zdtSGie#`?D2Jt+2k+@a-S7z=PG*PW&i7_8@*LB60e%@0-^G7m)tZ53)+k~EqQl1sB z_#Z6(5l6?R+%Zhw*;}rm$+P@psM~?LtFLY!T|a2m`Uhs-^XA=Gla2{_h;kQZeExP$uLtmMeArkE8_T5<^bB>6u zo-X=KO9wJx)TSI-wCQjpw$+WuA0bTxZMRJhO-zI#U0xVXLuI$@)p5G(Tf%Drhr(8 zE1QhIlD+fbb$Fzk?HF0C)V>lExVhJVXV$y4Etf>qYPTusn3K)f6wBteNwCCv7&}{D zYfbG>lPmtz8G%}R_-BDOThl8BXOxIB9@xm^h;R!q6+GV!Jg^l{I!hg$=oerjFke+79m&vo9-2d&vP<0V4;({Cc*-<=-44I}E$6E+O^6+S z#;TwoMu*G7W6W%PdR02xuVE73b26u762DUuBo+TR z-@rLdJU;Nb@(1l2b}K~F*5z)V{>H%+Q+9@pa@x)JAZ1klFfyoqZ*%s*(BowN$>sa3 zJod!I?0(6YCWj!WD>)5_RQTO)jBwSBnsIgY6tL~>-KToevBJIVk6|Yr} zX3T=-+aSZi`nV657oV~sGjlwF8l?sHm(TK$+{xT)&eESjZvyg;D6a}8XuY)XSbq;9 ze&b6Nf4_X8z=9nzo}*fN>`qlyO>xdh0(8xpxXSu=_29~RM&>iaJ}5@W9Q0>C5Oj9t zq+g$9!xyg|Q1|PyKP%~g{y_*Gczp8Xp7tzQ4ORgtFfK-YRp8maA^FCenMWzPc}r$x zzq!dK7G7c>6FAkmVOSXP0}1hTav#wq81hWPFK_9uj|m0!(}l-b(qhtrb_g zHZwk85=c2n+Q|g)nD*UAK_pfk&}2zsr=yOd@Ii~M6sgHGy7YTrX7DTSq7H?ynzWh| z%}ohZZw7*~Je3b=al^1q2$$@f1`99BGNn0$6gtidw}7KJ_lNM01g@30I{yl@>=&N6 zeIW)YiaZChe8tojdvfO<@b-05?9hYW2}M^LwdSLKA_n(qS+2fLQF&Uc_l8nBwcQha z>P9hPb)uobTdh|>Siy(q==2F(C7wYN;sSi|(GSrqkK^9q>B1~N^&sD~J@ML$Lxvg2 zGZ%Sf>sg&+ryJPtG*1=%nQKKy&RIy(_`rTyh&fQ*uDTIpH<)h`WBemjfgOZY{?Hbe za(1wFBMFX24cd-M1=#GtTmk1IweP3zB39A&g&Sq23F zWfe3`D1Y1j=`e_N<}HpdyoWX_hKZJ$D52c{euWt-g3*MFawLkjPx9R>$AF0#{Bs4oIGe$_!#(KX zQ-(F=0tzq1X~8TBk(206+mM*WCLz_Jj|`21??afrPgCugtTpkDog6=p{spGFW9_1f zj8*T|ca1-30?U33;n)-bj-KB@P0g$>_7&?zM{v-8e^Q(?x8ouERW_xX^+k%F%*~Ua z8tSfy27D_+_EOk5jCLRYtS*pbUc$LZ9(d13(WTMLq`Q0nZkPSUVL9;L+H?|0I~iju z6-ub!*{1KD!Koe_k3HG#xusnW(7Q$8+A=|m?^cu)NP@lea zx!U_a_thxg9gkmvjae{Ovg|u&&2l&&G56UVizKOj5;#Yl)T(y zqN`$m&ck`ES!O65RT8B|X#(qCWpQ^m5?i$WTtq!8i+*unxcFu+e=DZ)SJ9u3s9o6w zB(H1nQkV1A9b5I)E-WgJ;Z&x94WLL`)V~ z>kui4$9eAx8)>kX4IOVeH4d?ZED!}!$=%QcIscD+cZuKrrM{WqmPBp8)7 zuRY_Tmj^^N|vEhMicA2`_;(e3=K$JPO@sar3W_ zv`M@kVAL+3k#DfD<_>EO;63n<&g{1t4tDmmoYR5@8(2p7_+4LN^Q@g_YH-mLKYaEN zsvdRlzsb6JTF*VE&W2LU)kCM;&o1_xKsxI=(DTF)JM5=j8M=){9EJstM#qphG4|ne zHI+2Or!Rdwo;^$Jxw{|J39RpBAN&{ly7%4AZFmWW6PT?EQwa|NCAql+_T%Eyw_0KOz}83)zGLy*QD3;&bp_k2P?fXyJ696iOsl)g=t*<< zXm(Y@p7QIX^QCWJS*{8_mVuc-(ip+d?j#xAcUG4n39sAPowjZt?r}-_#-lKT<12Gj!=8)IJ&i$OA zXKA#HV_ST59(o*hn^_CIc_zD=s@JFdMC3H_;wew#-tJ+Y`Vvv@rBAGm)TPW~)3?s+HI zr#tVjfQwAyWU)d{K>V=mlPwn2&P}%p6%qU){m#$X=BvNpgOA4bNf7q4L;8WF=b1eF z=~r~8ie^E)>OqABdwxS#VtaA_u&)Ae&z}kgq|luHF=DsM801+KCqU8gu6|)S4T_GF z4(7dWHW|JdEuNQYAKAQVW&(M;34i^EoO0Q8`K^yw{+Xo&&G$8AduN`3FL3L>XJ8{$ zbj|*4A~x^nVd$xJy_L4uIQ+QhvprQaY20=TLso=}=RmGqXA&XeFZrd!1Oh<+ZKvE- z7&@Oj^QiGeOFkR(@fk=3-5>UrYVzh{iL$WKX=onO>$a<@Jl&qDthM((CijeJllB^V zTq2#dXDOSoU-t!>Y5f_deW#oM5eB->#hVcy75TmO_fi z$R3gU1fE2BJ*U3&uv+H0)IGM~N^D?G@z>eW@dkW>ujKr?CJI;;owv$bt1&GR9dt65 zZ^CusIu^t0Xs4MFNlP{Mw4e+Oup?R2an98}tMCXlT>AEa;&z9jITGuc)s9^yQL>mm zwS4~km8W0vdTPoALvlr>hx)oPAFZs|Qs+5*ui!JKLRn2xOv47L}3rMLR;eX#R7 zzOr8=J)rbp#FBeje7V3%YvQ=a8gh!&YBCAx2F1LBRLm{DWc z#$;Sd9YNn=byezY?KB-IVp*MwF~%teD?8qgvSXQCJtsP+$CrK{u_TT7bR-rVDXl(Z z?=3*6{r%S%sUkicBLA&f-pfaYn5^yon=Lu}OZCM z{9&C#xFQ+Oo-q#3WZ$^R28fL7heq9W-(<56#dE2KUJW5gCaxaAs??VXhd7`r;%g~H zr?O-hucI!i>(GZuZ;pCTM~(V`PRJ{|v!qdn_rcw(*u<9Bj%yIo(Fa zxc?!L`gs4-Ny9|8El<1%Tg(RK7rU~u;D7o!@_SWtN!yn-81%i}iQAvMFJ*Df2x5QK z>c10|QC&D1Y#_Gx&B|Z6T9zQKT*>RJG*&){sbH-y$;ES7; zX7%Lh`dRPQdYi*GHlML_$HGM=*ZAOO*U{zZg;LQV^=*r2M(#)4;}F+&_zjj)?7fOE ze4vsu88Nqb+c#*y0(-&iJj6Ev-_N&ye~!e?*A+x8^Ua&O-94>^2k+PHrtK5*dcY5V z9`C-rQcaf2T8ufUh=Nd0tm!;*-9GD)=+prGm9w|^d0wBn^aM(A&$Dk1vltKL>_9ZH zge(2X9xAT13AFA-Vp7i36VaWYs`C)^C1k7?J3(uR0AETdZEb=Y7x9h2EZ01l?}Xv% zmsWYQ%W31XBQ2IH3%0$eieMQh{#_3Kg_$tK%O4S(1)oqurOsXY3d&6Y=m1l~$!#nL zI6Sn14XF?&mITqf(i|1$5IcBX;UY>k7#DqncE4->w+Ycz*1dau1$l%v>A)IaEFm%T z!O-HytiXVj3BxDzlHl_LBw8TO#~`vaV}=J6f6ZZtRfTldCJp(=jktO{Un@jo_2%E8 z=7=-Ns(vm>5nb?}a)VL5PeP?M*o)!rk|KaK9;BfJXb_p8)VTUUyjhd^;^6HP??(Ow ze{xT@(;Xiy8;=xR`{drUylz+DCtE*@uMkTfY`p?TEp4LVXEw#n?AE?dx$b>9%~Sym#Ygo6am1GKUwJ9sbmsCMD*88acA97N1O`zO z%R^Z?wo{>7OPp8V{G?|aGBbdB4r7Xv4@>76J8A@5lONa_G-WeF?+5kiwv=FBWdfMD z;%A7>vMOR=JfmIynG#BUFu0VT1jM$l zn+G3K2rL2rO;L`EOUS5NVZOTpS%gMOZd8*wLN z#Txg^e#sux8Ql&j8G%NeEDv49PAiasN7Hw+K2)}Be>&!8S_}0nQ|k{s?}X-EiZ}Xs zQT{xbezx<-%j#Sq=pUqH;&5xvDD>Wv)VG;B`I~&DxZTnf{+05^-vd~O;eLNTadLUk ztE$*#jsqovxT8F^09x$PzoFb+3S!|>?p+-@f%c(O0rWSn;#U-US0Vq9*X01W!^a#! z$7pZi-82+S;*h*eqyMb8K1s1chfg!YuKQJ}Po8lNcKf2Z1`396zvG{0 z*(ovD*E&Y99OUi$23Cls$nJy>czYWGRXsa{pQd7G3%AyLLeO!wLfSJgB+H#ylc8eg zR@8t9moF&`zrL>i>;W3D2d;XmrZ3_qQ&)+GB!7puZ!TOB$a+#2bdUBO-+n3QWrK8o zS{3XDUcM0XfI6WW%_3DME5E$3)vXb8a7GQ*nA^{36o<&*UzDe5 z15XdxqoM=n6E>{-=It?Ue9eZ$U)B~ZfJEa(9qgky?v4U8gF7x>7$eO_dY0iv4YB$* z($BY+<1eTn9aTCQ29#TuWVmJB#B$_qEx=8xXsQEx*K@Y(aD>S>n-%@&9jjDr@i^W! zes7%f(R(!|OSuPGSS|CHQ$-4YD&try%ADbvA*>U?wX9J%-G7eTP1gI4> z(_ekGxr$4 zY(Fg}cfgi^1dhAMouVXWtzaqKv4oFik3s@%1geI8@G^R?=w(Ks>p2YPdk=T|$b{2Z z2$Minc+t?pSJmc=hwE=aOAE^Zlv}G4I|J@0wQkihV$=oxLA;%H$XIpP^`s3aMw&3) zJdi2mDP1+B1p2M>?62AEretvv*(Sqd;8vUHfawW=vW)b;c4I};=bWrPNyxn00$e_= zp^|)0(B1ugzLEwTCCY&f2izj!m2d|$yQ>+^>1`0v^>QT-@m?&^D*td(l;fWj@=-kQr%&jJALW<( zrAI*=zKN2la3L|9ACdMqhcQKn9cMb^y5*N`yqj&3JI}bs1w+-ccC;6Q-<&(byJd8% z;QmH!VJmv-UTKyMie~MEE3pbJK(XwucohEj_eN`)?b3a+; zV@-+3&vKYEhD#LVG+IP>ty z3Dvhx<`2lP#gW^l9iCtfhK}FcU*|dq-`C~D?Fj(-=I3oQbqNjr>SgW%}w% z_DsCrREjnJEa;7inb_mFK^ewmk)sMbu&Z-0)BNnRLphI^wB77(sZ7|lbR0x9{bzC1wqp)`OhjU$<>w?yw&nOl7%X;L&0E)kK@!= z3At#{B9>ym1aAbWDmL-=UB?EYg+kY(e^hIJ)2C2#t6o4bewDseN->75KGgfFT2^Sj z`jiok0_2I8k&Z0ZIlou@my!o;$Smx9|B`xj_;g%w!-BC>TK$eS0;od`2#DBFeBF0~ zb0;HQ?tpMvO|F6G4c`Ld$A4KrXnHAGcO{yIhgMP|raNefHPsjRz%sSJZ2A-$>l}L) zbPVEDA)WUwiH_^pwu1z?e{xMft?*M8TIMk5yFgho`UqT$QbgImezY#{v`V%F z-*j|k&O8sW_dV&Kqr0+RW3F?$smR~8maE}dL`Ne}s^#eR>V*Dh5y-|uS-{69S-e+= z4+l10FQlveL#A&+_K-_L>u2gE{1x0jUGaT&!0UjK2j&9Nb_7dC)AWg{7xpY63YM2$xTAJ{qe+T+ zTuqCAs-9)tt5^f4{nATC{}>op<**+q>c*it!S3WNps?L(BQ&9#JRDrg#m0SiXDN|f zZltnw?FU_={%3xp^h^nS!Z}*51nr)iC=6w{an03Z5E$?=cUf^uFd>o1qNtV?d#BKK z^(e_qN7Mqqn|<5Rjp#Rdr%abMp3-L6Q+H71yjLqU!P2S|FsB|6yb;JzeePzw32Gnk zIb3}kZ0MDg(~di5hu`JFU^SgR;Rcu}Wl1;1ZQ2Ca?PR7-9NWH*acYz=;n@Sz?c z`&h@#I*pv=ri%#eJ~(;Nxy~@r`>H>36~hX~a06yI zZbw5bHI$Oa1hRdC1soo8eC45`OdU?aB=B_Vqi3PBx3jtc+FOo#ePzr&yAAM@<6KEC zYy%~7b|CWGS%mV|ECd1`Ntw$PIdh&EMr4Cq1Fk@q)PA?eARbt!Pm^T|2pBBa z0xDLb0j^HPhbUh8WfX&&WO*B_FL(Rvp#MbnubAq2VJekWHYp(MQ{E=%T=u|Hbgh`cEt914mqwzSGRt1?RqA#koe~Q6WBtur?KyGlC>~I#^rNOhoXy@$O@%^jR zKk_h@NLi~C5NzqkvI-PH2h2XAy3e#Gs~DsK)N;$N>MdP}%)T9W|E>S>_Uuqj^5085 z#ndiqWCvTu(yqgSAx<&Fwf)Y_$?4>!u!99tXdOQ*EE+EO=L9eD3N!M0EorS&CHQkl zWB0+N=5x7oI;g?+jdI$S<cj z6o;>tza85+rg?&+MiJp4x;X)UiJULr3cy0gpW+Z1BIbnVcgujrxKq?nz{#E4rwkY< z?e7aP=Z)9l1`vTiCeg$|MM|A+nMNS3Q9#S_^MVO?Yg;*?v&9z7;q{epZD7jZ=C=4H z&gv0`Yx%(;_`k1nIV|g*AQKW!1OSSAx)K3GAy0_ksEy1<%~vhdHPj{o12g zN%Jh2wk3Gp&e9ggv+m}pP0#czYDq`<*LJ=YscSlTD(XMaZ=-{bZ|h7A1 z)1A@=*ev-&_zr}89qB%V`?Ww075!PpFAR6Vdf<-W^|VNS*s-={f%^W#1^!l;J9e}a zxB}2Sg4Ud!Z)NwPeEqdMK%Zu4mjFNVlNSaqRBi%1mRceI9X!x8f=x6MR5onF9stR` z-$PlaEA0r_hv~5KRHR9@IRTS-mX)fXi#wP(*s$;nFm|1#3b1MY=EC0$+-~&p{05j{ z+8}vn6zrVZSwRQXhT=XU=}pDj8xGI=e}|$dO1>4${yRl2w8{MiX!`c&folww0k10h z-Rz%7FP51f6tL~+0gC-ze*)lO1jMYfboGtby3ID|6m>o2YIb_=tG<5K`j3tiSZ(C# zde96p`JYBGVS?A8Uj2V7fS6CWizvMEwL^i3{$Kb`(j%tkz}B zn^+dm7qJfG<$9=BH%nFzFwzfk2pK;y*BCj~0 z?0bWbX*6}{PnD+x5Qzw)(7ooI``Ly}H6sn_$3sQ5v8TU@zjH@t!n|I6Gt;KVe{wQS zLf7*{l#QoSKEI{Dg?zY3@aj3Gk96#&QvtMa`t@4S--7c%KyOhT*wF7eZwFZ-MLST8swD&G=3vI|D9rt-huF#y!Vw= z2*HYtOKi^+<@B+c;Wv!uA%qL(C2-L`E)#V1qUk?lXvT*;XduG)cNKyuq%mj-5`1=5j8uq~j8o8Qb#yaFBaZSx%C2)Lkv}sK~ zxD^L^Fpj4F*FiJ%i7_+*0W!llb_z=347`mcaDW0WXj}BHsVn;W0Day5?-JX$e2VD| z917d>KFa&G*X-QBj&;y8@ty>UaQ@9h2oAY76&j`i*in~UpeYYkq`4Mt-*#olrwFEJ zSU;&BfmP~~^F11Hl(9qaG0e%c6J!&>3Qp*;Ce9kC&-GV#YwsH)h`ehaDC9jw*>;Lc z`ls5?Z-l`&uo{g0vSo(H(P(MukYAPODR3~n?=)h$7Q1z%0XhsmKkyYJhMonVpOZi( z>V8egp4#cRpHKr_MKW7x9UgXzw@E2~S^5<2-*WL1>+iA`goXq_{#)kRhQ$TyB2(nA za_=s4hWqzox)|r`6u6FEWG0)pPh{FQ5jpmRurvR2_!BG5bVavHN~mfCqR@V1`I%>^ zZa^>8Drkqwe8m;G@WXx5t?aT>A0tfvA1iFN$6e-dwIEM*BH^eEVGWzbulzUVQPQqD zMn(AQW4G6O!uk4pYh3>sq;W$sAF?FYImWcWqvqw~;7Ki-nG`^N%1$1(U7F-fkP} z`v+trghD-R+EiEW;rwI~!Li8h+*7#i3UFm}h?5YW8mZ2DB11oft$H|4vIie%ejWVu zA}^6#KNKLGOg8;bR)V_P%5PMkf7@(?;gT~gVek003Y?~am(IY?7_yfg_g)N~0!ttV z+OJ8y={C+=<);a&+Vn7<{_naAn}s20CZ-5`|(VLr>wK6Ts7yyvlunX%+L zs=v=1%wXve0#;1_K^1ROnIJ+bOK(_u6BPw&CAUT1UvxT3Q9`7J0`B_G*iU5WeoH${ zNgjkvq$9{LF!uD*-hG2Mau6v=us}rSxr5g?KPM7J-+GI!#GxU_y^xE>(q|zX^7X~1 z83T?7n|-2{Z0oPN1f@WZ0wpkD*TuEPlsfd%IxAbjtHHAG0QMnM0W_wR0Svm}4t#do zY`kaFl@9cSd3~TM_VY4N2OBht+L6iG%$&6$Bq8;g!$g`2hkUmezc~3@G%+4OdUclX z{4GtZtk14Ng=IwCVtQB7F;#9T(|i}sU|;%A$DmNLy<$f8Oj$pJ6(fC{{oi?@;6~|q zEQc7roFDR{IAw8K!^LLYPq1F~4F_jNAqpk;6#DbZpjyp?*m`Re)s@N6S ztP9|H^i&4C(3W0Sa}h(@?d0(0%{YR?IA(`d2t%9^vl9Y~ z%9VV+BdU5ZS}b|yOB??pe~%PH#G=q#XwAKq216yU^<%%f84=4^+cJ%t`XJ>NZ8R_2 zhrZ!_c?l0Lqye8@POr#=px7s8v?@8C5*rA28t51!7DB(MV6!ugCQd_p6%v9vo!|K$ zlj1lnk30W6ZePWDp;pSyAf$_aPNJiEvb?{GT1(DtNVew4%)h zVn;RS;7}nQoQ78W|9q-TZo;|jV9%Y3N# z&R4e(&oQ=w&V5%a(jYQ!@EQMaMK}DW9xZ(P3e{n^H^!2FKG3|*=3gDo;TNs{>w{eP?xk0y zxYBHn`>J9*?B}_y2dJv|nDfzyMMSv7AEq3gHE*i2Js05J36;(tYB>c#)v7w}nD!vZ zhn{-Z_pfj0)@JPQXg`mBngjV$*1U(F$+q=R|z(q*TD$e zzs^uL&W!Y35943(54<3DO~I+7=NFQ~)W{4Nz}SFALXuHFLEnGaX)}X^vf(3 z+HV31#Ny9KunIpc%3jKH9L5!!?Dva$j)x>v@D$`9{#VXet#JcqV6SFGXEu)ixOOR# z`80NY>F{Ba(5G+yx0`h|6&*FT>m$Qmjq|Uo7umXTj@1^~Sul{QslC*|lLjv3gY*iW z#Qx@QWZD6Mcq7*J>xd6m&FT4^VDb}aw$Ji9Ge~ag{r5AMT!oN^MVI`bgp70NxBEkF zmCwLQZ~0s}h<1t^FdDlyyC$E}K{tkF$~e`}ipns!eNrq1=DVJg+Qj5ALWX5nvr=S%MD)^D$HAoL96N-qP%f;{c}KSX`abirz~C;4oO`s`1Me0U zwP&Qv5D)#`(MP|Al$NRl88(vNyD?j9!2dE>aXGcBgo{Q|IbplPON){jwjM_cTD~1j zdOsLLv8!X8pH0<=Z22k*$^K47IpL^z>wS?y>`-8^hIqN**1F1=yEo@M75_vh@JYWY zdzT|8onW!-tM(k}=hVJ>sT<_7F^}99^#_bnBb3LEADpFlwm+P(vd#~Oc@j5oVzV%DGO}>6U`h3j2L}#HxA~nN2TO(YM z0aNuvjgc4D%&|KjAblCYgP%M$&JD2eqv`_tM(-(qt$zah%W#$(;)~bW_f@+oMzs3) zN}1>DY0<7{LyLa`lQ*-ldeT>Vwx9Q}$H~9s^*%R-Xm=s<&HWxUTYh$c2n);`^thR6 zD8eEUb}hHI7XNFT{@DE7;SD#8v9O-1Ydo^RJ?U^1lyH?Ejw;V|7AzSkA8h6c3&d=rwr0AFO9T&;3C)D!xt&6?&JyW54Ok(GRjQ>rs$@ z0m~>$=jgjM8a~&W6D)$RqJuW(gze62RpB6mP#EXyl2}J&9r)MO%qCJ>AoS_$9Fd8p zr$vrri;8y~?NmH;FK=JS@{mbo9W}oKmSw!p8*X%X{uP5*wf#XoXx~l=dY9F84Gzu_vU%0 z;pNkf=39wOJN92FJl9A$kRcy8LxkBhH?hG@R*7J4WNXFGn zvU^r%eqjH{Ur4Xm(-SbL(=tmwOlZ&Azswh)sN}G1w){Q!@BKpql8N!557iZ8nzrsi zsMs1QO$U?D$rCKWUQi`_y6N1EOes#=44a>G|8Ao!?aXb7%eFQJipo&C_=&ne^;$1O z2564EJ_eI1r<@*k0F5!^HK|3(spOJN-4QMT+lrK((`tZ`l0Df^Hp4FIv1+li-ZMT0 zy$43%*GJw#u-vpY5{L96JwkbW8U zx2%VGN~brQlY;@Of#0Rt^Tvwb8^3wu(I?3K`ge)FW=tqT$&m#%d-tAw!4>b61Q_}{ zTWI=jbduAgkE>3`{9@Sg;NDQ1r$8mY!H(y-?@M1K!Lu@13_+ZJEOP!!K~cVd^)xOB z!K=`$YoB(qQOLF#L$VL?U-gT?@!+Wj$Pg%SsFMpBswxjD|W%UkB|uG zwBHM$xy#D;vhB?(ER1#j{7X5qG$*-#k0?%tcHGti8QPn>JA;>{dqHI7Vb}>-KhE!1 z*g_}WCaMPO)&kC0#;!q9mc6@h#9o}CST7yQ>&4z9VHd>cQKt(uY@@d`16nR*JGtxj!n^OiCCfb<{l7bJGuvFacF$!3&2Zv0-wuY zg6Lke1$!Nn1XR%r4jK#|+QK)@H`=mOz$A_<)(;#tYoat)Q7PYrrKBibbxP#_7;@$WmIyBdi+6eYeZB#pp zb~{~`xn>!XcFPhw_o3S8Gi?SK zQ^dygZ7?Gli-@t9$E4S+0>8|F|NQg7=N+^5;<5ssFUg*w&wNz_biU#N3o{mV&Zn&& z5WerQB(&wX()tp8j&|m~)Vcap`_-`CkEU4aFl;@mqMVzJ>q@3PO9Vl`b>Ju5>4+BU zG5jWd5aBl<9w|1s>lu1ApASubrgS z<$vFCf&Dl5JrFposu%)zYVqlgVMlAz{h6(pvK3$2O3f$$-j8F<-rh>@cy-+pNoZUI0rI%)frZ{Bi?j7X+NVWD$5i z%v#@+gfc1DLfND`v3q=c3gjmFB6yh)Kg*r${YfNMFVednd+9QXO4N2s=Eafyl>S}) z^P57?NxRsaEmX46-)2o3H!s1ylE6POTkz`hZ>&GzR15q5<{%|_UaNSdk4gOIp3g%J z@@V2+&Btdqb3fi*VaylFjs=Ff5v&8}Haz4Zz53`@)K`>AT*x4llrmbXl`M&g+r%b> z)Ud!+mb=rdrC~L()}g=DK=nK zwb7PYtceIi_RBn_>n;$NM7$l6DNrDt%wkdAT`|g5D{yunu#te82wlqbyr6>A|*0RcwO#Kvis<`nlTg0iNOjDbPEfrplf*i&YWf z$0<6jLlJQac{CyqEFP^-`1})F)|?B64}ZZMa5<~JpN_P`9HvcnT>jcbh9pgPY+2+8 zS(HCryN*L_U^l(V9GT5*hgA))XQnxNBR}n-1dAoShwQ&E$i2UikCeqQS5B?5Mb~e6 zd;t0_QF?R?Pxr0Js?WA}n1;yOoaRRUP#YD8RiEda+)-Eibx1B%Qys^aT!;`Z8h0#d zKu{bXp4f+&{G_yM_qLr$E1Onn-{F8b77~$35H77lc z1pft2S%;vq=8Z?ljnwxiqsWy}(h|b;>TUhv+G;O70&86E?b99p%)nXc7AM6zrw)`R zAb4Pt)WcDW3ShFu4z;H13_6bavcI6&tGqRypSnY>TufV}5d=<+x=3M9Mm^r5k;`}MFfcZ${CHF=B$d+0 zeQ_XCwdywht^n^-JmAsr5#auCKRFTW_Gp>-n8|I%)8>&!h68(GNp6iZ|C_fuO$mho zm1ivG7Vn}ve&WS9E}ez+t4soUosd4_3k;+0Wa-(@IKTFc@Lf%2^jd%blZ)GtI4~Qw z(=inW!ze+wcKlV0o(VuGo(QuPRbhV!{x~JW{N9$(u=x)GcS+pki248_iQ7BAPD1&f zWscjEKOo;cgI%4Xs>RVvXU6O^)IiQq^qkxa7`;jQ)-sb$AjiG*X! zkR5nY|Lc$MPR{aRdjy~Po8_#rh<#ySc=+A`ay(ETb>M~Mj;=NK8jpCixnT1Rrf8af z_?6}j6Gn?mnb4;CxLuM@PA@2~LQUlL#=lK%1Xcn8e+oPg`G7LrCxQwJ9hpUK)4`5c zMHPM)+>FRhUhdn-Gz2L1zngK`aD}Y z*lk(=q;)K+Dq+q0JY;B~t+}?Au0X~~QCx1e4)^}Qk#aYDQZB*p(U$$bNm#v4Q+rLm za;GVH_Dg`ASp4@(QBKaRo?$QXg?q03JQ?jeaT4;I?tcuPvaSvtL~o0A zdx@#y`9|Ne$H#O)gA>JCS6=gr7lGYdCdI5(dOupKOb+E!P=ld<|DTeZ1y}wr+F&sD z$IV`s~6MZcO68e74Rp3Ey!M`VW7?PmywOwuE?{r)S8j|7b9zOS>13?3xC%R zF=s7h9&K=f#}kDn&dYB+)jD%2B;9vLT=n^xmkn!v`a1?&6<2gk?e9aM{+L_fG_Wo@FDL%Y zO{qhQb{5|jj_7Y-{G9JGDbds#PZd3-=r85zYe?GWSGa-yN3oTJWkOfb-Kh#2TD^L` z#2*?EYu*BoDzFnSb`OMO?}8>*}Jy(h)qRk7rhNAIE1->W?mDO zVZUi3$G~f?N**6hFm&V%spRM4J)hAU{edVV&N)+Exm-Rr1WcO+0puFzc8w2H);=fF1h8yz&YC=SUR)t~S?qRH+fpGX%nYCX zX2P|8?vxNE?CJFZ|G;YVfmx3#VMRg=hPp8THAl1WnF`qp=FWUu5uyoY-sJzXepYuo z(A>9l%cWmfQlAU|O)Ar*zrA04EY#C3LKb!Es(#Ws`Yiulm%Px#0cnf8;QeEH`Y<4e z09f8~rJ2Gv8LnM-gd&5Q+O3F8sIY$W`#Sih{^Tg>-c5HRTI&x)6mL4J%nn}RtloIg zAXqNO4jVJwqk|$vGY6J!!EGZCk+ctIBWNXr)7k=CMZLg|+t+clvO>}4JPTQwUpav7 z#Fl>Y*}GZP0i%|m$xOg?vy#*pty{o{`hTZgKkGHg>tzzu^n+Gea!Pp>OFtTq?hH-E z8T%ST8~(+BT3~MwK|+sX3XQ%@>0<=CrmO=#{x*s5wEXFTZ)1CZ6PnLPKp!Wm5k78e zLOZG%7h5(4NAMLxu3%zWWPz5NQ)m2A>p!LVg1>m>=54meRf0=qv-BBEzOk^#c;eMB zwc{K1is3bXeTn9qnd{%}KXXj8e$kdgo-3_N zP{Jlyq0lMiy0W?jrxHoYfm%6Bh@R6wPwk2QHXDijDLpN%k@a#jr+Ei1LXQUC=~^1H zoKPi6h(RA>SPYv>E2Y&@8YIrS(&`WyjuZ7t$OE9IARaksd(P8>`VF%4npy0v3x%RWKvxu%D8-LCZkRyao~BMdwX`WS_Y1 z9jHv?~fmN}{` zgguF~A{%5aEqEyfXU3yVK0JtYoIE6Sen&Kmq7!%h!cq?;%_`H_MwC|k%ZuCC9|cNO zIUY;vYmy56{TL3LbbkRMU3l7$4~TyahQQb=;dqZD_#66oO;cIV6D1@=r0~{psL8V$3t`uiXa2iV_@1Q#Oh&ta$ z#5-3$3TJ6K6TGEkYgQ#;It-eoFmmvE%vpojHE*)eb~I@KY$E{US$RJ2kj3!p+5CEi zg9F`w{EK+oG#(OHa%Y{G@ka%wzFu{b9P-1ME)ht=f6E6e>dhSdj#Brd`U%Xy*>hv=9r&DVniS=)j zuNy%YuR}L=qjTRRDV7rN?EYv2Pla8|?wc4Jik=3I$X<#(hy3mFJzzg$OK__Ub&K7< zYbdfddM|>FxfJL3vz(pT0@Dgx&&~U!xEO?Ot@}(hAZyq)_f=oCPA9)$VZ<~1{6!1! zAr#SP+QJ_TYu${q3wW@jm1q;Rv|OO$Bz$K5!QtNu?A1ZJwHl9IA6@RWy)xS~c%WE4 z;WZzeriN|m8Fh3CY|9PsrEyl-D;JL;*dH4e7XKa(UsKfNN_k*xkX;05JT1(){)2%kc=r*|kL+;e9Oz)uRPvMyO;} zX+a^~+v=^KvTOLE%)`U`<0mHMZNpU8#>uz47)y9=Yqr;$NBLXx8Ed+{%rO2gv=sH3 zne{zfN-dCNud#%Bzn*)}ZPV7269;+WA+s>Def>`4PHdXAgyYX>RrxU@!Nvn;zuei& zC_z;^f8m4F5pUnfEln7x52F&0_=|FVeBoV3tF1A->end>^&r2uXWUHXS|vGqto?i; z@MnT=`y`&X1Sf!wabMlb&UDwkYyE0fP#X5H#*4nDlCscQzbg`ev*0W?77$ zq-QtV%?urN7WW3Ym?m9yyVL<^=gg!)G!c+9W6^C|6Q1iN2k?dW;1O1v4NDVEYhC31 zft|wB2_2S1fJJKD7(0uX(SP8*$aS3o8_xny`QPa*x+&GfhKQ~qNz<+(xb z!-P(NDL3ob93aEh;qB^GeNC*zMx!Dldzi&DjoUQ0SLg67(G@A%M8fQb47o`4BTP2? z4dK%jqKDwW22CPV2NTq8l+9t0jqLp#8plwRn-CQ3Hp?#C{^?IoCH1z|&4?D2 zG)5|teJk@`4S)N&VB7!4EWZ+a>c+DITwZsARD5~|{^Ii-$IC;6zj;CR?D%;e*>zcR zbmoQxU%y{)Z9Ial&9HNYxOc%XA`Zd>Hy(V&Rz?S1xDb>we!94aEuipA-8nkds+~lg zZ7>r`qpy$XVE(}^Elmh9jNCl~&e#YLdvD$&3j=ZG1A^oyu*%Mf6nUDAOda(xY9XW2 zfqa(yu^pHQZliRSIj0L`XE|qKSi}?2Hi-|LDU*Nq?h6oU3XXRuI$!fix8)BTO6;9A zXB+#M%v`O+K@=h~h>AU`EeVcGRKY67C`lvEI@0I!GnDv5UcWZx)ojY`9g_N~UTdN{ z5I~2Q^oV~=Almoe9*~GhPXAMvnNJlI*zBWkfJ>Yc3@@1}V=$g|i|1^hGbmL|uhw*+ z@~h}ueAf$i6|%tHW9oU<`^i!5O5uX0_!UVG;qw}M4BLb1a70AN^D^MCRDDe<0=xI4 zOx|DjJkC+Fauc`eU+i*QzkU5`DxZiUs|aOoTDjLdW1ahY{%!UCDM!grodgvGOYU&)cb^egY9Mh7v_RIwZ_v>IP17}R3$%Ao*4VK-d zAKbo)R1M^7jRT(i^{PS0x?>ioeZqY|4-XlQA&WnVg>1W~6?Q6wG(lT|^o!D-RUDhq zPxHnupUbm$;RUz3HTPui^;SOZq}bp~p(0;5Aq)vDHcKjJGfXisxOge~i$MM^!r#m_ zNs@a1{40}SRm`5GgU3k32V0+Dq8s0ucmeLYqB1I4P!C-jrLm(As?MKDbFN!WiHg>w zRo|+chM(Buk^l_$-jxP;uhA43`eIy`2)FE1AT9k8{i{%W+o*L$WE}G{Q^zD`Vxs0; z@fTiiYmWFD$8pxad(K#P<(l7>BQv>!L-_&ElEq9+Vgp2hV!E}EgR;y2mh1P9zkLzU zrYSswJsklSO+Vcu@lzWrXj*0zb8ay`B9@hLZ>zO4`DC5)4Cd5~xukunN-$}U8Y*J^ z&xY>~h&yhy+}j*sZ*7%UVQB(uf_wEt3bHG?89L+)vbC_tz)|^hHXS0_ohUg%T0Gct zV9r}+_Cw=&6I*G%UXQxQ>p^o_j)@eh)dKUxxKGgjKm}7$X#Duz@c_0%$Q-m#74yx| zLgG4A=XVH(RT?9N^CwYPHZ}(cKELmmC)%vHmQn zJxXSyJ&iG|l-H%A`N|-*|10P-xu9mhtn8fhs5N5G_+HJU-GCTZeaDixv%R*#-XT^Hv*kOQan6bzPywv; z;8Y|UKNQum-6Ngt`rOf;JLiqPzziV4-40Ia2)`&0y08cko{>H%IL0Jv{QUUly|E^5 zKMdlhY@|+7df6E~cT4C0Q9P^vYUj1@th9P(J`GHS&W{Ca)=tSe`pB)Su_kWHA2H7K zd{XL)#AL+YkM_bOD8D}jdm2SChdidfN!qwSK=dn~zIy{ED-p#XNFA@7-{1xo%6TDIAzWDhrx=s)$keMUWee{ z*{DYYv{pvnH{|D~sL~sgT=y5D6!Qr-^$I#v2G<<-|J1wUKe;!4&){;*toD!hE%Vl# zxl!fZj5zIE4(AzqLu{y?nyWwC%+KQm{(bsmiEQuw{L3#R-BoXUL}&3Ie8Uw?hBuK> z{=LEVhKXcZ`KPaJ>FwSpqbxT7jI}lfqj9jA8sDG!j`knjAL5jl8l1tkW98Rxt4ON6 z8wFR{u@LiqAG(RlyEU4-fHYkMm5+!g*{8dtx7b>wD}v_!oTwj|c;8qn<#F0}#jwN! zU4n8EVny$9jk`aW&;l7Y7ADRG7)%zHZ%-dA3O<*Q~ws&}q!S4>CDPz>p2B^Jg% zVna-O19#k0Nl7WI@2<4Xls!|u!^}$K0n7tjd;qZ0E2vpLh>r-^V(XPn*L3+xhK^Q+ zYvGkRXjQK9oJ-X;hV)^vg{WhPzaoF)nREKGX-bxN#YdSz_3bg$8y@Z1)pp1ouWp(i zOYA_GZX_b`R@kJ@9{QlHf;hbV+|+%HkBpF*S{n`LWVC9PK?v^$y}&$0DR#KKKaVE| zZ8@KHEY8U~JPsVd3f-85&|eX|A{`t^}NB- z2Vh3pfyRMf9yD2?kq~DSoKm`~Oj8K%d93R3-#c<_GWEYjzh|RP?nmb9@%exG{sMjexqMzg|p?V1GQcM;=OypNfG-rk&m&RG-HWd zl2bBM(%j-Z_gR>{auQ+YK)4;Xe8dk={uRxQ^R=%6jRbmTTuy6c6sX*N>Q7l^_E>tL zo5wiwR6gN&_2`X5vlg#ot9S}rD)*if!bK))0n!Nv*h)PL3xM&%?8FimwAJaQb|Na7 z@sQ0}KDHQHpgjFj#LXx3kicQ$8bhaWz)&zz{ue7QRpppg@wXDhSe{=bdwp^*-2K$_ zo(y@sko6Lh7OG_Kg2aT+v#rt$);u4TNnTW7w+H8x z(auCTjfFr?ku-IkTz3&<7n~&+dQC&p8R-lMU81WHvrzpvO|FNjI`hm=Y@9V@)m{bPNIdTARPA7N*;=mV6k zA4(pyy@xSrz?b!*ZjSn175QtpI?)QC4uC!{Oq+m@Yc6ndrbK?q#%{*S%S3LQer)8~ zNgEo*^9_d0vYf~Zw?ewUoKEtccPKKk7}zzYWQHwwT9=ES9rHb>2nGqC%1ZBGoqfo| zp0b}IMvkea{^P&bVoYdiG<$a|{cOGXg{X~XwT2*Py7YypW5Ox8M!AIFA;NABm?qNP zdsvn-C$;0>y7JI*Y!OxJpimuC#nfndrJarh2)FX`>)IRsQ(Zap)rV|}8^+*1qa*EM z7chP)f`@tgrOVmFLV}(#WxVo2tP%_xj87mH{)-E?(@Vs2ey=m8V<h9nqGjd{H7e z`yk8yCE~ksx1*5PQJWuH@#Eg0SSH3h!eeB{gG9!eiY~I>6s;c)9z9Luo)~XUJ3;;n zv|G@6#n!HvuV3+seh-O-7u2LP}eq)=`zVb-(`UYRfWS7CW_AglE=% z`FcncnAI?BIe3zS*V`T_IDD@B^?)+@rldk{uov5T>M9nEUa6(ZG=_EQ&53R`F6B!?32(9RleM#w9e2H+h zqo`4QF}7{j<( z*=GNHVE2J(^cLu|i`2$c4EnRD2Hqm3)Au4pEx85+ggtp1zu?`}j(Q`Rw%ClS@3^Tr z%aeKH##S?u9@$w=^0jd~y66ImU0El5_)0IYyP(sWWUHdR&LK^Sr}1@?yqiW%6DC=I z9P13ru1OWh5{FvihcxDZmcufQhqNVYS2tqCh;}#Xj(+^~MXt!3@h26IaSI&`XYAh; zfn36Z+A@Ix5mOxTQJf>=Bv_t=j?drE+Qc5MM1H+hOS32}ZaN7rUW0&QzKD8K5wVs0g~?12PPte27;@BSQzzd^ni52$y= zsN~(hVSbWsLA?CbsrUUtqqNI4%i`y#3;4BWONI@Zq6G=Ivn66jB0xH6zlPXDlsj(* z)i5tlqHfogN=!fa#bTzJ=E`~#QI?XibJg%U0ghAAw~sQ=rTo&49o9=PHUmK70+hA} z@eXY54y6bGp{xq-df)S?6##`J96Y{*Fh7`JFX^uoL2>Y5xbeLwD;IM$4#3q1n*_XExJX9 z^XW-t>UxbWky(*U1IN7v<5z4>t;YSq733o-usE66IXzBAgeU*C58*EI554kChLQF2a#g+qR>*n%7sb(S1on@| zbBC!VoA=U&9j(q+Z>8*p7Cw~}c|6l2w<_2BdT*Jwj>V(gwj!ZN_thc$GSie8j(jeF z<-L|C$?n^U;$~XQK#(2VmGSCHa8-j-sY}s{I4ksE8s3m-y?z@RM43)||l9>a|(oBmAU8);*g@vq>`yLAmz z2gx*^{1fC|?rk0=4_x%v|8{!CTiVn2kGv9|cr{EEvOxAi#BnO=i!6rp5rBNYXkOPG zF%do*itlNCAz8PgIcWpFbzR0v2a-lK(*ks=QgHFl)g;0sp_g$<`Bw6kc zZLizSaNn6g7*a=Kp`Dj5@NiHfaJ!NlK^lm85$iJ+0QO&vOuqysHk0b|K>AE%o#K&0|b9vCz@q`Dt?nfyK*AK|J4&&%=Zry7WGB2 z>7ni3<9)JrH<1g@-&`vr#yq0iY)Mt`{3F-UuS|T;0M&RYHMG~cFK2Pqm~tJC^tCgF zR96X(Ce{vk&@|Qg{--*BXcqRJ4^60DvolRZsfBe3322)!Tm9cS?e~>DiWy^9vIK|CMo_(tpMc66p@bSo?YI??c^6#AtMQ`cBcO$7o>3CHJGR29q~oCZm`1vnP28T zq_{uPT(US|Mym6Po%=T>7;o-9-$_0|Nt6}+F?mjlJC&5HD@|k6o9CEJZ7Qkn!qXzF zR+q;wa)`sliJIy5t%Bwpd>=rTWxN}$-67OxU2WpnN4sH*kDDIU=fr8(Ewf!PcN-t& zWKV@kxjmdK&zdCx2&JI%T*p>&NdRU$MfigxOJm}NmuPxJV2BryUqisG+Fa<1ubus; zjdu^@7D#-`lF(Cue&IvkCP?OWqDo4?pH96htj{URW2Cj*4%nqsUyM@fZ0yLpzv)%S zPZBWXj;+o6^sOjQtSIlHS1o>y_?h=95vo_H(B?2|Kt#LTi*GUK_TT`JHb8=LUDmI+ zTJs26P;$`r;cTYaGU%f@pn6K(_~p0Kc2OrWs)E@yw4tbZ`OYyCFRsLC@UuETL=2j2ImgrZ7*wLY1ixXzT2m<{~***0=B zlNe~zlxHiIOwmD!1x0eMCP4wwK3~LKFk^~R}Vna`RZglU8c-+ZPTeSb%g1Tye{qvYP z*X^4Nv`y$wLVXVO_3`)k?{9HOEBJf}NhekT54ry0-|^T5m(oanHa9yGNq9S=1g&><5|s@pi!Krs=_%rOSgF`YIK}tRmg-p!bU+4NA}l zn4(q07KUM?dhL|fk|(x;I9_6qe4xDMcyTe|h0vWA&L490J8lxD(n|g`Pbv#JR=hQr z)lHTYtc)quh9yR<44$hWhrL>=qNc<#q|XwKJ;jJ4#c#$;-L1b1J(++BBY{q`cV1Wp z;ymTjLz`m5gnBNiWMu}#h5s^dtSbWBA0OHq_Thu@iZi?xT+fp3G!(~c47jlmjbtZ! zS;Bv{Pz7q!RJMz%KigR zo$Q-Bk#RelibDhL&wbtjeh9z3Y7ts|DivuH-jprN4iTBS!){Kn_n&vT>7>OfvcI+2 z{DS+=?L^P7etO_QST5ryF^_F@{x;a|yiZy^TEG0^6E|$im#Zd$h&IX+%r|{IHB&!U z8AKTQ#zGM%4>eDOS2>0?3G!zjMTL7`4vch7o46jxgx2OB|s9{+-%3`f9ImMF-Xrb1+vPR_)1vW+(&eRZ+r14RiHr4 zjm4oLI3w`<;h_bL;{oV(>N|I!Qv?7dV7q~sgs>phRSD_@(J8pVZ|S%j_*cB}&AVIl z&3~hq5(?SJ10%kVaFWr4tqypGSgDM?X9tzq4?9H%(nhFa32c z7~@sS>F7G4eNrh$KJX?}L5uk21tII+*dOXIR6vTK&;46$~uo*_AT{xZki^{|8N@YyFQJr_KIG~Isjtas|igzV6~C2`Kf z9qL5zMUy>%X`UQ6^>-CJq;q^7I>zYl;;aO=2uC~&5Gb58ZLg%E!`3QcLKUz1zdtf& zYsN*Q;^veJlEzrC`OJZTdMcokJN3!;>v`FGl9hJ~g$sf<6n~Kn`ro6EKVS)xW@g({84EER<cqkE8WX7G4eA-JcbEF!3phd^NP9@=L*qg zX*`_k_{A~p$%`3HY2UgoO#gY!=)cfD+n!3^{hAF6IH!P+ zM=fsr;^wY?m!CT2>d$NfBRE}U%A)pMo-;aboYy-xfX3398{+6@Lmr}zGx2?rHJxy$ z5J+#Za?L-YsvKg7B+19GUWdKD6ot}wSybe?sT1`p69P1ux;G#j`5bq zobkYvBjEe80tZawV@Sp!aOG_1x;7(mxHPDG4m?MAxZYXpEkQ3Cth&FBF^RuGuF5SM z4zduN9KFj4b$*SIp;BCvDyWOTYz);b6&n=rICimKCmH&FVoWqNEZ~Z8|6%ao(Cw?l zNw=%CYnlnxnEFlO#I4o&ev^wlE?QBb!R9?W9rr0+zY8BGSM9LP06QEm!tu;Sq==2# zlB1OzrP)AGT5pjF0t>-h$Bsv`c7lgZ4xT~vXv;;nRQkP^9ay(Z(X4FD*C!9_=m95M zb5m?yf;>B3AwL{!go6~1d&0E1_?`XmS2UCMpor3 z%8!DNH6?|T{PrbMy}olY#|X;wUcNW4<;Y9&m8htGUL`ucP8ZZ4b)Y`h%Wb)Jl+0Rx z0c4wW{G+$>T>E~z<^8u$+bs|^payr{(+@7DlTuN)H z{FL;#27~_Awv3`up*1h7Ny-8^329}!^Hm{uu?-enyU=#brB)07ILE}}$q@G^P2@=qn%~pd zqvzD1q<=PjPY`Pb=CuwT?!s?^ukW;ffnuP{iO2Fee&=xyq{>_a*G*okw((cb%r8duytt> zoaA62_lapy=v1M1EBUXe+`Rb{MmX5gMj?|bXdi>FucYAxMWuM4*Iz4zV58x!mN?&V z6z~fTBm%3;Sk_v1l+#Lrr31%y-!e3!iN_3so1UvvxUbec#n;Z=zZ9x= ztKlZ1lMK2^W?nKBA?)Lb9 z7(&l0%2F*qQKL3ifQT*0JEU6-{%VM)Ctq=c;#NWz>QE6S@oih&qs3ooON+v2G~G80ixS3N7F{$lF?@UVkRP_km?sJk@F- zz^Pxwb&xINNsqfv*Ao!5IJju&4C9?Qd(A{_cSqFHRS(L6aa1qrZbtgudoEOX2uX)u zIKlkIflKu*^5WZ|8BaLJC@5`J%9nNBGjcJGLgc%p(e? z8?FsFnKK6jZe8gHUuCcZ&o_NvHEU4RUFdf4%tCj^oqhgZeW8GxveLS=@vxk;j`jj= zNkZ@*S4SRldSAzEjK15#eGHotY&sgDkBdIMPzv!;)>)muHJQdFI*XIp&PYYJe?{JXI=xQO!L>H?L47|=J#7D-fi;lZlF2e z{w-x9$+j^JJ`nVX(Yjt?^RKIDXkYC0Zh{Zs)0)Za-Hxce0M&XKGZh?#h1xz3VmF?e z$gH z29S{Upnmuz5S}3hP<3X&s60>n1FmJ)91=QTNf&?V8T7W*wC?)^3L5h?o8sKn!|$d9$YVpd%=&{53D!$8sm- z7C~CrosdZIs?hfCSJNv4HP(MFReq8Eb1hpY@vPaDJtF(jKWbI?rA6Oh0=c!5`-s)|QyiCtU3A6(tS8rp@#cF%Tqc@tpw zwa<+;eMq9AxKH-|*GYF#Z1eP!W3XRbW_nl<%JGjh+8rrC6}qi#slS^g4|;iG{PL#0 zCRg5cw~44)r?0P&l;_{joac*2kyn+vMWm(-wB|FgkMt2;jeZ7g*3b*>?h?VJIcoH1Yd{FVrp?_1ic{m8^1m7a%_RhQw(94xH$F-X;cf!n_ zrk5;{E#{6b>8evmNg)f-uRrZH#sV!d5sGfKV1lrJq|2(0`dkAjJ-|i=Gf1pv{H7T z!q5|ENfTu}hDB)01*2WZlkoR=UjV3;q@?m9?M18ST>*u0Z|$FwQ|FrzPop}xvJ8f; z{q)Wejp2nZO<(Z0td5yKy6d_)s$Fo4WibvSn|?kdX9gQYT?tyBQiuj}ol%rOiWSFu zpneED_XZL#AccgBSnd<8UJKe#MEQNmi`doLL9yFFU8n;^lX-rVT53gkP($YlGiueJ zg8H@@5+k=3e8f3TL$=mAF!WBX7JWa^7K*YDj_BcU`ihT??IRU|<*wvWl+FgC|D}y- z?KPwo1Dj^&na0OX(zJQ`HTEccgTeei$^-eC|8bs-M!H~R^TyIHR5O$57DbCH6zve- z!XNf6m6LS-@_4^qx;AI4%|;ZUU-~duUAFkCe}#8s@WW@IU-(A2Nk)u)FKW;N&^wr4 zY;7za-e<<4NbRmtcn=kM*}kJ@X<(5K&RI zAym@N+d!*>D9eai;`z^jF59g`t4l7?blG_rHlW7F&P(u0n9Ybfs^~5)LF<5ss->uq zU^HM)G{Di2x})SF3`;3o(m02jrI@2H{&xfU?I0SBsn6qDvvn7a;S! zxbrxV-t=ql>^gr27J+@O@axR1w5a#Y{qypH1W7;=W)NP#&W10qae_n)0KAZ3W!R6m)$4-aj9*gr1;2CQ?B=4zb_N1L%#7XZDbo%p$!wA0(mE(#Y@;&AM zX#-t-C|dRX+mbM())(|Wd0j|h%tGtJ)1$Uv^M1E*M;-a!)+LI$31#O@EW!Au&W0hR zKzv3<6O-c^n5alzmgZq4RmxLfPuET($(|#Qc^2u) z-Ko|uYOIjCwe*r%oRECaJm;?&EX9-SH;T2aNcZl?M6Zy1B#XOpbV(4OWt zErT0o^`vpda{7b%KG$Rx#la$W2$V&?!Eg6^bI4{jycA>6ma%2`yAXF#aR3VlUs#yo z`rkpE#dUQd>Sb3ZE@Dz?$W2d$^CCkY^kdrCvZhuO82h_cok@>#-oWDg)~!oqI_^(% zL2<*%^c`-y9c21Sed9BFq6^YC`7#g%MH|HQm>N{JFl2?9Us*7bz&$2Ad`6W!gJ0d5 z2LuDS`4RCeaKmok+}8=fU1a^iC-hd-->>cXXGH(L{@L$2*|M24dBTs)02|4#AubpT zxjD}&3w8Fm0$Bf%`H7Ps@u3?Ntvwl|XJN-BIjwmmM_s(;Uj8x3V<+57kT%SkuEr6U zF0t!_TseK|tB3CkZGO3687&3KY{A&(n~@fs>M$Mu5#ZnUM!r>xG|^!d>kj(CA$0JY zcy^M0)MPVxK`VV356X^J^l@{*#sk~OfG$1WrrMLPr#@sMI`Lk8@8rMIof>?NpUXlDNb^+k2!M33qjmgjT1w802*FfPcuG=~h$7QEe8a?*-h? znaK?z=JvXds-bxS39CR!hqAMUFXm|h{GTTC2{sC%=u-I>IGbM)sHudj{1lRt_UoHw zwZQY%n30#(x2!NWr4vj$Gab{nY*8{@{gx59>RtJ}!%$+$g16wHCbh=9+W&rvPeJO|hIBm(g=8I~%$5Wg? zUd!z(Z4JO{v-9G$7EXHdn+-ol?;q^UN#X0BpKV+u7H6CohXN9|zt+aSxyc>oIXm8U zNd2oIZQ4+e`DuSDWlP%M{SSM=n;T8$7DP(HdXqpkYe1h7`nHjj+CnGnTx%+nv7b&c3rne@@H zLPD^_`0o^f%I1C|!>EijvyKwPYCXb;1xz!)kwKyo_s~%~kQTq=802sqpz`l-f+M(b z8bDi^f}FacqDRfusHd(QDbZT6;Xr?{Vs*rcwRe3c`K=-3*WD4>Ik&35cDAM^T&}o8 z-4MIkr&M@$nLOX#xsBvynCc|Q(;!?3P z@67{R=hm733;lM{HMtAgRFe6Zsv=)9er}HT^Mcpcjh^t^B;8eGWNVBzA)k==vZ=n`|j?GpnI)N%myS2O=CoZ`$>Gn(R&$rp+>fng0`!G>e4RWTCOGlU)a zKfsV!mdDW>(#%2Ug`q7Jmb4g$p?BYWJ7Ch-E)<(&d`JM6B`xG2!iS-=wFZAE z#2XU#$C10!7pjWeX$JciH6Q){T_;DaUNEfvh|8B7#uH8PZCQV16iuq|7A>uE6Y=T? z%`ZUz!XmMK{##!mxY-LArcQ2H5aF6Ny)*OSkT>uNU7@)2)H|scb|J>~>x~z_&P}Oy zc=@m1g9>5aL%ekpD-+}OPZbrFKBDi%@Qf1MN2u)-e!WE^6X+F?5(>W?|8y5~rdnue z1w}%(gnt;=n9OffcwOFa)P6jw@a@+H-&)y4Vm5fv%t;h@McpJuH7DL^D<}nN;RU*W zDEqZhUExw)Dg19X;7x`$4malXbMDaBWRL#{Kg|Cg>L-w-_xe09b~tB;k$hKcCMRdU zGO4@XbD0pPyp}Xb1`C0Do0#2B12~*#Cu3Dq#HFU-y=k=i4)TlYQ(}3Hn|A z2MFcsmYJFT&7Git4?EP5ccPUQwd3BRb6)`Fdw(rYT?05oIqkDjUNG|#K}OC#ID z*j8S=BF*MnT0FQB7UPooB72%J@yg_l--{9F3WH?OiY+06I3d^`$T8kkv-Gj8v;CBa zm$~HL>Kh4yNrwWIj5`6HnSZi%f@$u3iW z9G1Y6V7GvjMG##ThcG?KxZ9PR_{U!P)2hqfq}LVvy2@@-_TmGo;O;UIPt5IWcEW^4 zZLIHBANi@R4!EmUYy4Z%C_gs;gSUm=R&j?2OB>x}yrw4;RtY-cXd@0wNoN||aUUhO zUNTqeK^mTH+rBgYL#)x&2SbNvOA?#A>)E_W&~wGkx~< z&cljuV%h@ODQLdK!=fW*m%@ z`@!Ej+Yf1D`R+^_`?jAXO<{ZUFh7Y5!$UG8Z*wwE%fg+-!Py+7zb*cOKc;lb0QF*j zB0EqgCJjyXi=mRJT7R{H%WB`olcaE$;MAp!JoUZ(S&Osw70l2u(*rse8 zwj~!1!Z2FM`Z4rQe3<`%cl-4O<+Ub@WA!xwmYlaPIQ?PjrPMZAs86&Pf;i@SO7V13 z5lPsV&i`nl-8Wd=RPs>=_3AK!R3tS!nW{LtGl zP^PnFa6C(5^PK(I|6`%Pr#N1nfx^y|6EZD*HyJ`**b+VGz?f!IHt4x6al2mhtUZ=O{AVHIfjpfUZ!@?8H<8u7hI#;`XT zc!@*&zdP!!3QFa_Mfcw)LOvwLUw7r2VqV_8y+1WE+lrrP@m!M%uNs7*$ye;eZnV{Q zpW?4Y?pYulMNcY~UsIXLTs3Nbyy_{~Yh4yb6~cYi8*iP&wXdYF#*f@j;kh%OSq^Kf zWD^}+9xqYMUbakLwgR@~u(7P2O1lWVu??8gO~MP0xzfI}vU&uzefY>oNGagTx+8Zg(`%w0G#Mq@XctaFCNz;2V zCqL{>GJ|E;7&ve^gyuIirns1lG($Q@5_%*1^U)&p`v#SsJH2xV03d+r*Np&oj1^;1) zN8_a>WeeF>%qZ;}Q!yNdW4Y7h02HEBY-6%7UTqG&FSG!v7#aL>Ur8BOScJk^%*NTL zK16fTZj9~nkAS=aRQgJ{tyrX#1E$V7Wa1-KV64RSN<%5<9OBIL(Zg4%E{hZfeq>Jk znq)v8J2IGIAy;bE(#KH1NYZyVpN!6QNDh4}QnULns2N21=B*+QMV#V3aWUnqN*rwB z@!=GNH32ShagWX5)@x2^7I6jb+48G@30B}uidT@B`^bMgotVy=qdwV;$)j-}(K33N z?2SF-$kdEAEtsxLjCi*@Qac7#n%#V`ecY(iC;T=IdR8-5c($Dde6n0y>`fkPzq$wH zH>2}b+bML7E^ff?V?z^6ch=Q z(TSH-+)NZZGXk?s)C!m@XaZ3_OXYm3Um-})oOwcn@xJpD8$&z=g?pyP$| zS3;iCOV~ zW>1uB*vz=aHMAoSKBa`R@DT*G?}Gzmu1aZ~%&m8Swd1I4J#hK)&X4TQsa1oR!WDF7 z<5{j_#a|G&{4k%UL@J$IOK8{+ z=4(xGsk&1IMh)M`?o_k{IJ)l9uX%;6PW@HhxWNh32;4V{s%SKc&8Z8ac_+*c57#tmUpgO3NLz7R@C{zP`U}e|FXhPyoA(~m2cHvzaGqb>G z?AWcO>+AOEg9OdTs!eXp32T-Q?^Y8_tp&|-e_D_HL7&Z@4XAOpO(kZLxp z{{lF)Cqz|(r{VU0I=HN(P0oOFC);1kF&l2g=5WMZ)W@{YKb1pJr)TP^6i;SmER{5? zC(qj5M(^;rfab7`O&Ol6J4X7}LAq4Wmn+u=sicFxD1!d*-T6Q2soX>^s_8!!Hp&33 zYH};axXu#7@i&j>bmmviYKQVDC=>1E!t^WH#%)*!jro?-a|d6moNI@UYARYT6Vgkq zA?!#R`=W>EB=e_?Ye(;_{MCO&=wdxLVP@Z-059_QZ)K%i&2$vR-lKxmiNTP}{g*QI z!67VuS0bYSIoO*>bV7yk)ix#DeSHHNBD^ljhQ!Eyp$Z_(df1i0<;-`sO^|*`QVO5U zD6AmrwINzLf`eSR5FrL>!leDC&wNF|}yK|kVdqC23>J{3<&gKf9S@9sE2 zW4g@DqZV{#e&PexjFqpJEXKb-Jh|5X+Krx<*MTubD0(D_+H&PDSn9G%>@tY$rA1T= zS@)JasKN7l>>PLS<+Xf_K9-U-zh$Z<-i8$V#e;)X2!+$<|1RR#bb!Q_!Bam25iSMU z!MD}5c_gQ`Dj(<*PJA;Z?+)i}=3G@G;MQkV#zFrMuF`G2d@{M1>WxB$|sx%_uP zp;P#joNr00F)EFBF&c`=HG6rZh`+r>XSc+v43b07vTZy!r!8V>U$g_gB&2ZkTHZ#vEi zt9!>g?H#-{0B2D-yO=+SbkkTa(33MifH)-gM|1fC(dKRcQ8n7@gP{D}OLkMLCZ)9Q zNV&VIAK)j^)NfNPa(Dj8ucR57Cv3VkIG(;5JcvLY3bh6Ums2@1jrTkmyRH2urZabzZ~NbT|IC&SMt{#PRkYu2pRdIUCqxY>3oa84g;QHaq4017)6 z3$8#QsB=d%0o1U*!WX7B_WKaGT;3c$VTq1(4KO^BRw>-g=J7h5wBlMAz z8zymKcl>K|F+MLh7n$9EhYWFt_`XWhvA8afY8}mC_x19lzLDfrYWqpj=EO|2ReE<_oKvGX zCS5q}I((m8NwrKFLT$MFg}j6cG+@5|mv`)BZwU>>t6#)CFNNHPf226W1o~7g0mO_g z5$hge-%B<)HnBb&isJ2yO3%AsF&yH|EE5N*N6Mx1f4dasty>~lPUWZn(|iXo>Aa3% z`s1bUB(K<&0N8@w3q8gEFEuDYu(>rxaEe4Hf*S0r`OZ98p{umEHUi%4*5~Echo=X7 z8*E_MdXzWjvJ1jqqK;3tE+Ce^-WA0FB}QA-L|${JLB=LG>D! z%BM^4I|sdW08Q$C;vfh=W`S%mXTrQbpdk%K)FE;OAC#yEhN~nUzdh0VgzEnj!rUoa ze?tC20OQ~oez}U6k2h{0|NNlr* zs82wvSw^2Z#@(IHryA$C9tkVWt}W>uyr+L$Tk`g1Agh+Aw{D_;S3##yZ5sMHRXa6_ z9S18SuJeB_NPNbh2hWdKNc#9(AtYPDk&lvXW+RX!*I@2DW4HMMi`tO5Ej@}w_!xaG zpltjwXb}Yr$|NV}<)_SAYvF?M1Gw3bv>^p$eph?rLgPY|46YxjtMLhN!8Vq!nLeJf zwP%Qro;ZAR&bT)=K6A7EUF$Svx@=-$;HTonTHMVQ-SPdi(fe6B^<97J1qzUJ_=v&l zb?ST({P@49Hb*HITpd%!kM!jfpo@~1_aA@<=VGdvjlbgQWpzIoEiyiud>8b7kEg}- z1TaUN;^*AOZ_~}DZJs52NBW~OT5zs?m8Ghro4n-=MF6APksOg_GVTy@^szNW{NxBG z?<@+BCpm~*p*XcFl+`WpZ;?L7v=RjVr0|z(-S%%=QB?A0O5%}{N|muV!RdNiXzvge zK*jnBA@7WvwH`?k3Sb(sP|DUO1Qk<6I57$$s0BNpG7x#HeAmgYk@VjOizAm zBDk+v%20Qd2VJx^e=A?(&YoU!_~Pk3CFmWDQv6y?bDE`0(gurgb=4`nbv8uUKP*qo z#66h#Nx)K{ *FgSnpJpp6lEq)Pl#J3fm4wSX)2+8+N6slMSxy|8+pYY(*Y`B>{< zJ(zThB3`Tfe%;60m?VJ2#s{kcM`p4T1(11q2h6vEI>Gko*S=9b&vC8lqWgUGXHt2& zrsUr{ccz@dFkZ=a+9`5uK5*zG6`YgkAAELL$&w@u>=u#_VoE zS7UT*ObX*{kopi=uDo3(5vZ@|{0lPk*{=eph&ILJ@SKwf{vUo3b&AfRtA*le1*A6a zFNxRv4Uu>;KB@%^RRy_WAzOC7~e(WL0SxpiVg^oZceqDWD5&-Ls%rL}E=NBY6 z2A*C{y!yTd=yxwizvgHMv%cS%72D|^-!gmi4wQX$R4&!&Cw_)`b#FTEniC5()H+7k z*^A}pyklS>04GI@f}w~&%IJR=uKwcuR(8W1SHc8MP;b|@Rw zvPzlzB*T>?=Pq1{BcmC{n7NoVaN2z1nh*hQDx8~SggQao;(sF=O=kqgd!c+0aLI|R5k z@IpXSt*>lGUTW_J+dR!kt^9>Nf_f2Q;L|NwyW?){CPqRPdw*1U=Fl0{=O=vn?&xTS z_CbXFQ|AOEZ(TQwW*hcfnS28VL%kR9ZfnumKDl@DlHq0>9E5PugQKrfHtt4ZtGjYb zmqzKzSI#a2{|57edr(k6UjP6tyOBh^7eZhp0N#je>|B}P@OyI0cX#7Q+qzR3n7=q* zt8i5i%+dfDZ`rB2A0xm6TOFW5#7;@K+h)tfy+wI;uqYJ8K>+w{gN6{3xx}P*_KV&M z9YU$(BiQZ5S7k;Jn;YGEzP=P$LP3E)0^bvecK)h4bEjWp7y$ATfm7fEtx&dS?X}S8 zCy^}ZV^cjWP+I#Q_%a_e8yp!O-BjJxUb1wAle8Wf3J=PUanX#`g8KY)mDmpC+1_@i zcNVJ|g!t%NANAVOuRq~j9r+@yXS zZNxuAZ31(Kf<4%kZ)+mS-!Jr*{SZ7<+o97HurfyA>g z(4k-$j79ylYY1Wie^(Ocv+%^Uacl$Xr7&O{7=&D_b*_|-1!oWOZNn_`lV25NUAod` zX~;hrU%6gl?ouE+3Zg|lBo!C*q7`Mx6L2QB(g*>f$@&FLHNHXmUptXme^E@Cp@}+y zk(>YSp2PJ?g}*8+FL%3#jIEEywOqQ6T6rNP=+_Y3UiU&$2*UZZlCHu%7_uW95KE9w zs~Kle3z6!U9^plD6P#^ezQO6VP>Ztwu6|zYUf=T;BLIg-`yeynkp;IspCjyi!N*MW zU_ZJmmmOGhnoZWSl(=_SHw`=DV<9+FXj9L!c71RdrBh-Fwgbtz0MA_^He-DE{?nv| zsG@%tdz!HYsJHasBQ+WAzgv6-VeZO0p0oh@iNL&}77q~YFvsvYYK&dct3WBKPH4?3 zP^uT=W$uC#G*5*&Q7Q$x5-b$(c_JWi*+DW-tZg5rFSwhDX6#*g?NYeAEd5*9nb^B{ z*4_a(JXi_NHXB>Qoae93FMV==lPB-#YqrkgFupJQ`c`E{?pZi(fF{Bnexn zd14y))}J1nt#rH#Lk&VCEuWddytedfBcsxN%U#*gH0`q&YD(clCl2Nv2vI;Y;L)Z91wx&EDn zrMa$&x7}Q4z;@i?{x}v90~lAX`$OoC-UkCllU~hH zU0LgqIr+G?`6VGqXc^f3!Q=Uzm=2IUDKb zq-kdjafexwYSR34jd)%BG9+DCJ#BdYDp8m9_KYUbs26LTyT*$LGFbW56VHi~b)C?s z09SYGBSi=N{^ac!PrW{@FEyW97(1%w6_yiX#aFKBX$X>kk+kNe8V2IDA89w>FS=-o z3*}#$r8pjZ!w0^l`=UV65%*&1)LUFG*U-4X7Ax5i*)E_vLi~f2#ip|@;zL4woBEe4 zMk}JO|57Z>S(kiY`hR>r2-*LSv=lcZqjZY@zw8)7jD}xTl%;RdtCAuO=lB=V-o;|~ z@04=63zZ7KIHWYV6*S#88}!{xG0Qd*`~zn_Fc`c56iOGQ+mxg>KH;glFvLHmS-`el<$=xfMd## z!sToB0rZ7+-&^!E(A+zC_0nHuhqCSyjgeb@!1&u#UVZg^#RM;T2c?DPKT})RnXqXN zvTH~rZtBbTEFHnD-$~6&&&hXz=G%$s4>66gqNXb>nm7p)F{)f&z8pEpK|-}1&(kvo z_C^oeM>4dUosOJhY`z6S>TbWwZ6O>hmQ)Te=$Y>^H8&^L z4@>)xP9Tqd7~$?`937up1;V@jnX4zL-3U!kGWCg8aSsF?{9B7REPrz^9`?RPK5uF{ zz3pHuhJ++>%5?Xi1hIy}k3+5_1{;dNoIyq=Wx;PdCIf_3OL*_&?d4=Yf0S%acaT1ak!Ql+A_3EGs#^oYp47L4Tp}$;~A=27l z$mzsYATmMpIl)W|pVY%fRPZIsSd{HgacY{{y@ITz!FKyw!YuF6OC`4=3&npk+?09( zSGc?BNU>zxQW1`>)|u7q!GM8(B1YcZ`_#)RpCvjD-}ry!fL3h3Ym_#C%Dt2K`ez^hC|AzbeYYI?+g=3xbv2wzJ0-@|NG24X_sRpr zp@8@|n>EF~_JjGqUor2}IFAhH#VF!%g_s!ZR!ePWq9=*b$&u zOJt{3OYm6QP-Reu{W|(5w^^uTNy3GpJTL4#_4mly6FUX5Q1GpknLa>5P$i=-U{#rs z$IKSn?YPWkbyfCDEdV1*UHNkoufbZydbK80pwvHoY1f1BRX@F@ToTz@VGM z*?@I_qge};#fU1tmgR5i$3+ToJVX%|JpWe%YI$uU47Cj7HBgH{5$HY;xrABYJoBA| zPUnBG_GT!0Qaoy9f-($Ld#H@$B_z#bP22IlQG>6m7SJ!iI3pg@k=N>5z%R+yNBNeQ z!`mhj%MT&2+LBIAq;>m|wZHch!@Lj~?@+&!i~ii|jR|VNsW5nNm0}Ml{rRSEXs8K! zSKHr#RTD=x&Sh~zROFt6JIzXPZ0!-ybqjNFh8~>vZ#8izHl09fwCR6}J#tO(I$fn_ zd9TinZ+TZRMN??>JBUFYL^V@vraav`;HrNd~KG=5?4X`h!a&!9$a0tms;iNBXV2rH>b` zS`kM$tu>KH5+&=hV9{PLA#*U<=g$x?ZgX(yBjCKUaOVjBt`R z4`%Y0Hs`~JfBmukI`j`!&F||wCs&a^vJfXpbGcAHMQ|;onWScSlNqW-3D_N`174qc z4?f65?`jnUj(13-9?#2Q>z!*-_U3~VX{Xv9yQ=WJ(RNzTbQX~4X775Z^jGzR3T$JM z#6Up-#HnNRMfcIDi#bR`=_cxkw`*f@y9MPvPaslmNetTFG((ZL_V^)vNPN1VZkJLo zmP^4Nfwu=4TQXW;5zf0a%%>UGjrN}wF0(rRt9KbEHD_Hm-va=5iz`%q;iap9mFpd< zV80vT4X^LaAvR>Rzrp4;lPDT)U@ z6%@xA%&`F<2LI9&N!+A9gIW{u@e?i65Svs$OGLR-cTlI-Ve%6!yp5uhA2e2)6*a%= zbA1>+w9O7`arJ%pT@%6iSX6Kkq`%p9W_w4F?>~I%qfM7bUiq}Ydw8ZEZ42tGI&-NK z^$Xb1T0z;Oj@MCJJ{0kF77xAkerKHli(HceVz9fj%+v06sL;ApC&wAg{yp{VqHJ@(`#*#t%*OCNFJ~}l)_6Yp|P^C@o-7vSM$)kG9`Ee1xwu$Fpi!@t8 z;dB7vUZB?e0>Y3hdLxeP0MFimk&Ao)OTZgY5kcXj!lH-|{+g@Sg-24Nuh8DH7GL@v z<+Eb5NI|dNK3MBc?b`5G<+AGLZBWQl`D(=JBua`?Xn=pdaGhqxf{$v3j(}>W!`xBR z_$$55!zY_|o5cG3Qy1zP9qP~eHAkz12m{S)J|P&Yhh-g8^RnR6+wy3&ZjuBz9WeJV zRCM?3RCLNCCl>hdMwo?t{C$ehKgFVCY}6LpH5J?S1>3b@S|Ip63=GLW{VD(h+RKB7 zBf9@)ua#!01^N9`oRA`Ucwyr|y~^fIX&c7Sq9(m$pL*8Jb_o#fJ(1rE4CuCcyQfVe z4G_4P2WTGqxim0!bwF4WgKYC%k`x%rB_C)06gK{pGe(Id&lq)B&`g595uiC47p$p! z9vgdhsFkaTp%{ug@hzU>cr8E#O+ramAd8|xf}!n&nnXeYjFHC#-r!fz7Iek@-!pkZ zihN;CVcK8|R*7ro0_f58P?uu#y0e+r1G{2NMo8h7XAtkkWwDDL@W<6UWamxjX!*<; zBZ&5Wn>VhzRJ+U{A_-KWrKPIRv~~eXM+!*k<7rWI1%}?dl;o&=)(V?X%zkc6G5Kh%)Wlbw6O}FPkU{&``ov_I(rN~a5>96JFh1` zRh>sY#)DhEr{SF*7bqzjpz}otgPG#qonH)yIb9=}1ZV%DgMRuzi@w0Q!@L|7dtKj~ zT{gNbf&8|qA|>`RpKtfFc&+u};CkN3qPy!u5B6R(D4vHS-KjyhMhP8Rp$#~AwOSaw z?T?PH^I%e*Kt7Ar$SsW?FuZn zXW-xH(V$Ymx^O4<^rO$-SqORt3^}PfFN%9<#Ui{N|0O!^`Jfg2m}Qs*N_m1{>;4pY zczveIz#gAM94>)mHJS&TxfDDx%`;pd!sDHx+-gz}Ek`T`!7W+$OcS2mvj>lD2tbL} zD}cLnZ_?^ZB;ax%&V~c>dtY)?8CX7}fndSB_WDMCuIWh=kJf?xBtb|xBBDDPz07c3 ze_tlrLdXxp}=RyUxBbQhUX&J$Jz8-XYgU%PKEja=E$Ca->_Z z)^`(qzw3JVU|#NceVXi&r67Ugb;dl8LrN5{`Kf{=THUM7VxO{BS-}I#%$go1G3=e@ z_n->XnCPE??yLRcA%^8j^S@sMhglbLk__s)s;1zNdTsppo?y!?6jjTzYn|OMZQ$@# zq~~og*3PDP_-*~8uf>z9o0IyfgpeAlU;`@>; zeR-mOxx-?3a7~@0?K4ig`M!l<0rK8r5-dBvegiB9!)8a1y48nf13;{|wU5#A=K8T% zV#fmd2clGGn zzHL8Ny$iYe6&eTvfZ`VWnC=qSLo4Mp8w@U{o*iA2Wy`;ZEad(Cx+xiI<__jv;e?p} zD;(!l62W)f^3t2`vKhQy5=bq+19Z2lBQ*&mU22kB>(QClLjX}pIFh7h_5h@f31AE2 zUPz!Izjm)7d=N^nMMo00n3Z2WW#DbPLc#mj09T173U(zgfAIr{Xi$oR{kr(-Yd8xw zGLx`{V1wnL7QJ8@v+$1a!D~niFzB^9F>(Sbq2Lr37uqA880X|2E-+3_E8QN;7V#k` zydvM-ENW}CLoxw}+uY?QZs0<8WLewLj<4R%Zf>A@eSQAgI?t7Y`Q3?OS?)7wO?{JC;3gx>;1;(b?CAd$~sj zMgPxsY@#5xiCgw~4B;n=K04mkxVOjs-<55~_PVa13&?U9;rDK_xsA1ve0yD0o)?V3 zL6FosxyOCKEI)derClV$2X3Xre%|=PdeKE!jDmHh6cso zys`3;)i|C{Io40fhikwi?!|9bp|RiC8C|Zg({LY1bF+wFL9Of2zQ#WEhX957z#Qx@ znSS)~1#VPJz{X_W*uSdB@rr+2edjc>%y8tlZpD?#DzkrkxYvxeZ8UJ#)b-7az&&vG zRvktJ_y9f^#!cM2xh{!bC7wfIs*~=r^ z5?L9=p1j-|2j(BjrrWB&{^#*=5v|AF%h_%C~Z;Vf3eJoj@SXQnVJV$z9M zeSIZ4lh+eAP><@v<*+`e(npfw4 z`WBf(XJS>>OlIr-`PnoL^{SF+fQ;cE^EZ-sfAW>9vEC0F%fr(hD?gk;ORozrMN%ED zH?EP^y6%#_T1q7ruT=g=azqzLgIjkJN{D@^RRm=5%+>9f?zAqu>Pz)&^J5jqU8wl< z+RH^9r`eo;{EKN=o^z+vOi9X&gxCCb7AdK=@nw@t43%hAi|KhAwSta$lN|E*G3a2M zo0t19w4>Cw+wXT09xaAII`K$T#sQ{GXLQXcGwbho`262Twi4hMkQDf| zuXXqPH4ZMT!r?Y%l=i+8bOQ5-n?7u%6VbYt8(_nt+uF*(AmPw>Y29QU%I3}3TYj~4 zgRv#PD+>tr2cYSC*}zSpXRT;{W3up z`2y44nsK1I%|~`TTLzPhjC%_p3{L-)w+Ss31lzxXsT# zM4W>>YJpYgdj{1TS#kR}{Oi@?Ca6oCT^Mvl>aSo&5{*AzaKX% z2tRRL;c}iRIi58m0^>+Tc`ntUz(i%)M3l@4^nA3GwGhV!!;Oqw&%Yzolh)# z&_sy#OkHQ>32Yl)E=TBgQMmIj0=wnFvBn2kvfSqc0QFz?%#5^dkcQf9CK>=755T+W zd7Z0i;7K~BNVX3HTs~#Do+nsT?ptynJ{t>(eg(xb$U{XD$+uxABYVi`%UVx!YuT(* zHg6)aKa2edb64-erALZBWyy??@8S%O)pI%ZjstT!^^a+D<&rn4a*4u$iX&3Of!{V$ z4vuT%*_sVj%s%a!0L$1)1uD0?BNdb0v>*y&5MBy$hjo-K)s^y-84JJ#V+6S5bp# zt_0ZJCAl*>jq&{nf5)c0g1c7dm3wuL^VlHEzTy4fVBwZ4Vw&#z-}Va(NmtBN{;n$K z1GFY91^$iK`6FxeLvtMsNf|aT+U1sAwK^l2T2$2$MxiFrc5?z$9R_{y#^}C1M0z;|sS#I|#w0^2!L`C9D z@F7MNoLF>Gx;-h0^bq8^0#OM7>4zSIto&|Y4verf!po2ckStn9!4edOl$i;_nvd#1%@) zDr7`O>Pv7t>J?~06KFFcW;SyG^pbJN%x+ZP+@lj#>vjkXT5b`Va2q=>jp!C^bT$1M z{Cim&5;mOngKbgWvqjbPt)zKe|fZgKzImB8{esP-N=gz~-rz`$E> zNM>(O*(d_nHQm8*+2f=K`p+r~w2Lge4C9&-yD?Ia5GFwi&muXmsR^VMAs($S z$*a$}7Da%2FqM|DQBt1h;rrUvOCx6u6{6N^U>0d&F>tp!kK*ja=F-&fA0 zu^7+KZ6_4Stp^(5VV^uIKsDk2o6#DUQID{H2tvQDbby40&0s`8xda12@5A&#i_udc zG{veV0?^ePbdJ7TaM&Wc46uULrx!1#1x-3IA~bD870Bfg4$~q42YX;jm?Vb+(<6cK zsnp<*9wVs!2~LR%;6L+M+dAmlwiBHG+w*7P_+_QT z8MO1vwMG8*BsOaiZ~-LU1n2=1UKS8mM+x&Mtb)OWhh=Q{gQP{IvpIKy#bnJxLk|zT zbCxZV@hYIQpqm8cd$~m*9#Eawab=^xm)?R)(sruFmbu&XupMB(l3JsWhkYT{frF%H zi>`%t3sfu55ca?sd3Ip)*&w3G)ka^tGwuwuw*F-w5UvF)kl61mx1-K6c&@KwIykD& z0Vo=*Jr}&GbP4gKLUQA9vFH|ev`b9h$c;Me%`!k<962H9Ts1P zU7g7Ri6kp@@+3!oFSwtT%f%Yxtp) z1U>JpvIyY$2XJoAYT$QGkca3c-+Q@9(3<`O`0)%_%veBvh>q{#-sjEGvq1akQD+?w zJS#=NC5a*2%|sef&+Iw?^9HJWV%r!C8w77mGN5PW7_C4t$?eDEE-#3Ufb|57Odb4; z>@wox>}NEn@1oconQg%c^pjEqa0WOl!O)I_%ZZ!MjB3Gb=|WLHB(0P4}y8p5Qh&zXMy!s^Q}BSAahHO0RUs3S|>9fYb#pVP{ z-UWLY|ON$f^IKc3W!$<3{Mku7kp#68XW*Ki^rDNTNg@(+3ELZlfZ=E9=tP z6@v3uOC;F8MJ}3dVQy-9s&TFF%VtEB}M=z5w&OSyc`vHZz&Bz zyNxs{NzhzhVc}&smeqh+-#JcOW7G>2fA@=z4;i`??Z#KTu#_9q@yyxK+YW1%Ym0Hcc1+UZZV!v*N-kYM*;lnEdNGV?B;P{1{8478xPTwukawBF+YsCOHQ1Q9I%fg%dHLF^dg z<}XAy2!bzWQD`Z!Y$`s7jF+G^x-;IkGp+|97wju2(?|v6a;z-?_yAZuI0oXtM!*&% z9#R4^I!v3tfB=vK(s3panKc-ne(e>Al{?ecafbZ>VqpKsFFjn*_QDhcDnCsnT&a^ zWXx#HQb22sWVQl1k@K{H<32)%e~pQGq(6#qgoxV}O2Jg0(0}G0?v7KZb2qsn9uwm| zbj5Y>h|@lOc1RL-G4=A_G38tS5p{_**FqJmp;+96N5Dx?CBsx}7o{{Y%Y9RoEZ3s_ zI9X!Y@%!Ort87e3c1QB^tQ?VNb`cqpjZC*j6xI6Im{(5qCnEb*DAAn9r#2tM_)9%I zh)f+Pjy%~e)2TapT^|z$;LTqqJqc#{K!rln6XB5;^Wn};ccASw{tOeX)#iCV8||Ka zL_S$7CjzpK^O#}Ee%bHyxnwFt-g51I5~ZH$a8cRP*kiEM`Q21Ws?Rl2|NJc7QwVbjJh+@CC54mU5jx@w@DbIoit(CTl_v8wsx0iZsB~bkr)2A~XPq>J4C-<G!9No48!^EdJv*|oEi_wQ^iCYl*I4h`NU%V~4yVs; z$+C|=GhaK9J~Rk;=6fSS?D_)Joixc9P07z@eI3Xs&A#gkSMQ{$$7mXWfV>v=fPe43 z%`Q1{OCNrVZhFEW_GnF>Yt&lyhf__D-FZ+*gvRG?Jv|j0y~?Q@3D$p`j~tJt z+YWo4eBrx-xj-=;WT}W=zbV0<*X)vJ(|b)L!h7r0={uV!ka+CXAZ#~?nv%ysf>xu3 zOr-HRp8dw-w+V6FKLS|B>KGE5rT*e}`f|Hp-9c*eIkX}zAAc;Heac8NjKKb-hrv7S zSZm~@IUE902B&3cY+11}8aqZy03)97)w;qGa2b!ztmfHAP?LUVo(SzDm`P&#hYK8} z^mmBbzwlRWz>R&}mh_|Dq}*?#^-aM42U?$3Q z=+VAw(Moi8w^1=UvIbG~OtuX}d~T-@alnF!d6&^Eh?042NgcCLq$uc`KQGqi`|ZRq zJ3(;APAQbFFEYU8oo4>KV3R4dU4q5w53Io0QzAm0;rPXR_(2XIQTqXH>}fUxb%iMN zAX4Hvg5@wXHiR!)>+#nRw=5NG!uuITt#OQ368H)~vQ451`7L$uh_%m6y+tU~Fo$9b zlxa*F_3F;t59J^RWhTO@53Nx*e-8?C`S`16Z7k-i8AA8&K*U81o9pmy1Tq&2M{U(60_or zNVE7gw!f7Tb^_hnf+4MW5^qI=kk`U!2tc z(^jz{7(NBP4L48>`6F{TVB(RIg>*t<%^v5El3Km=cfRHq&@vry*5&%jF8@8$kZ<4^ zRsUP{&MUGL@5na&N`2fX7It;h=u1gAq#5b+k{D{{c57IK19uL(Q>4~%tUgyfWkC=9 zORbK7Bgj|AkZp9&O6!l5L~ClXR=*>;XMG7ud?Z43P~17kW$@>j@$SPuMe_}>#gCrL z@6VA4yF^ZWa;jX^On%H`W-nfQ2_2?BK4l5N&$sJwSv_y%995-^4#%t+@A~&-e4~ndh(%6(2rS$XxB)_*kJOo-)wH?;yb+UQx}JQnJHi zp!}7|W3APnReSV9Zhk5Sd7&m2Kwzfa0;#4Jp3HNiTGE+)kf4lqJ(Uj<$Y%v$4D{iYLyW@u-Q`C@$T5iJBdTYzoF$?R|Ru$XhW z_KfkOSolqyPRh47oP2Un6qam6ud2a!@Nyj9lgcnJ^ zNX9`9>)H?k<6$A6SvF_NJ#Sa*dKUKG+u60tbJo>OuGZP+Q=&KMqe!T7oNzEP{t~Nw za3IU5*8He7S>drs;BvFT;d6!g4tr^RcQ1SkDXTS#n|tl3KN>s9Bl!Plb8o__%~nPBpjPQ z=gu}g!|42W^WtzuddsWfAB|rbZba=`h9rXfrvu%*`OJ?S4M{2nLg+<0V zzfr#)o{VkJ$oa)mY086W3j4`i=D;DE;V@p-&ehXfW%MU$jOM$J{zkVrJHqbecVP-+ z80^Xc=IV)3A#knsdKbK+t>oB`(@Md?p-ABttR=3~@n3k?kXg#T1ldUZKGj-kuV=VV z%tqRe)%mMI!#0;?qfR>hyI*(W-ifserakHCa?l|^K1kmP{Uy+26rwc6ABediFZX@T z*~{xac5C^D$ya$Ud;8jV2@qPfv{)zCMt#~Y_J{Y~lzZ#WJ8U8=efXl}!u#H)hPBxA z6fM2TXbHG_$ENuv*O__m#!VZfIki z?j;Wjl=GJwMjiZngcK<#zq2A;;KtxgT>ybB`XSrkDP#MBm)!sS=}@J_s7VwiAJ{+N-@w zojIq6y7EA3J@ejH1J4hQH%qmqhjXC}2yzT$%%Q}T(Z2d~u@FbaETet>Y=7E@kOkDD zhcJHY>)frf2VYL2zDxh;IATd1vAV_wB|gsY=C!m@>H!byODB#V1U;ei$*_$;Q->ep z_pH%^S}(`3^|uMqdXW0?2IJdX9q5A!b;}x&SvthaFIw<5Y%=NaTNt#dtD;F4GG#Br zFl08@dxu*yD3SQV)=aWT>hez3<17Qop;zIDSH35AFBJZ?V9!FfXzGPK8bzrWzaXbg zFa(fOwzDI>{YP%m!K0X+1e~2rBMgJlKH_b-w3?r}%)(`NVyw~L*?89-$xgDp-cyNg z*|t!VWVg()J(I2mqa$|yuiVRF+om6GFC2#dQy*`;kbVW{`hm7#9FhFYa<-kYlJ>|) zzk1iwKQ8|%-|^2&OKP!}rDP+K>fZhI=n&ap+GC@GdM)oECDp~&a*-D5l1GK)9_#En z)>N5V3Abx@3eAXrS^Tmwp+W0=qq9F2)T;HRsyto$3a3J5ztwa-eSw>8ng(VSO+Ltf z?xx1>m8h2muylVAr$#3@-Go2HdGb&#Oq>wAjDE3nkRp)Mf`}}c_HViZJSEIaewVm; zep11`YSp0TDB?yCLre2{XgUq_?vlpqwkgT|kQZ%JqWjh6`+QgNX#=PE66cZ14BDx! zwQcW*WcIZj+fqgMPi63$=aH8fTD-$B*BM$E!^-C0%RODPeBD-XDcDN}UvZ&jiz7IR zro|HM)3o$*1lxpR-ZHeD4|A`gfqrgP`S;#Er#02B4aJUsRJ~Mm8UI8EFG zQ1#Z&X6`Lkd)q^%YvV0$S{&~8RaHLlqQgPZ5e^|wrkp1@gz+m6uY&cTQiHKilj=CW zzCe6u!+N{hlw|WxeIJJ(+jWjA= z-)xq8hhve~xNFgld<|M{^Jxhm+JrP%vAMm>@4$ELKFR#McD3k%h9KJo197@zWH5eFHReRhYy0a8QGN++x@Ss|{z!RRIaeTUO2X!6G>8mj zohuD^OCS{nnZG=y3+A{GSf87JA*VQTs_$*V8wOjhaz=h7E{aX3_b+4DLH!Yy5pCi! zKXM^waeRt#6KOL|9IHH4$-!e3{@oW!9CT&U-uYNA(@sb;Yc7x79#&AMd-Yr~zmp=R zIY-shPJ(a$H+ef)j$8KdCAl$rGGZAgz&YhqzHNMme-n5@!Rn86>wlDC#6|@6ZLpzV z`QxGW|9y-f;~7QYS3h=5dhA%$c0(L8y-f879@p1)Ok-X2yu##O3{6()HTI~MVv$BK zWbKbr>(p>Jk;kb8ubnwHFTra&4j7an0!L%0XAkY1RoC46IFNF*<{^kye6D&~@XBW| zgxe&f)LjsMmhiNRay zX6=`(!rUZ$uZ1G#&K>NT1Ot}We6;y-6tg10yt@}$PDnW63psU_7-x--lXjRM8Er6$ z$NKNtg`tv)4}vH99xbaG>eKMbDRm!DxqpAjO&ZZHjuEG`?UC%6Yt|@m`}uMq>k4_i z*iDD;)Zh=*#0M#)Vkv{!-k0t79e*k8*^FhkG%!jPkl9S)5^=O)7OP!%c-2e5s=kF< zAa=8u zT!AvB2Tf3SnKh@qXc}i+Eg)W*2qWH=?u}h)Vciqia>a_Kue|Qt&#{hQ!ZV;7-d53} zPJ|8ZYAg2W zYvdhV~uS=iX-g0ohy^PV( zhFRR~WUxc?%DDd5??|l?_F#f}oidw$z(;S}@+Binw|~~9!Fo+yvwi%Pg#in7I=Sud zD-oGl&3c^;pU@S)4b=?Q1@1_8#IAiN?9pGrl4V1oo2<*`meS zC9r)kfrvsqPbU6j?rWy}9Y>UDQ$C!yA4ZkIQekgmfA-_Z|0rWWAGb{9?42eIK~fQJ zd+`2RpCx#|Q6h|jXCSYVuacg=T7hdMbUDy_yMpP3!7HqU$4@_^Kp&-3Bfb7#Lf|ia{*i-#KRQLavZXI<=E>S zaq_9BYw4&!H^~E#Ah07GsA#+1Gg$!eGS@>BcUz&LBZ zD$9b8ifDMM^4B-YzKb4pRh}Y)*I81OOV2|&1^HAowEht~DS_E?oe$xkLs>h%Le5oH zFns#BBX%3>?#Zk??AS6qhq*`CNNQF^Xg4q08;J~i*=(<#Of30TonNk29k#)Kpn(3sHV|#}!xj+)-zL+#-UZ^g|Ab8)hYni{O;N;fneIJh9;ep%! z9)B>|v;NVi?D%O_&h6W%?u673H>(0U;a;;SYPxn9UJ8oNt2t;{s=* zw-*eajca8R8M`8Fj?*KOD59$R@~yqbR7Xyp*SH1`3)v6TUL=}9lbW8)p{nn*9!7_R zBXGPdHDb*3JC_fSK1Qh12ISji4XDKx`DcBDtnJ+Ft&P0hB6}S<&95)msIfsD%INy} zWtU&Hf{v%hm!V>8b+_R3O@+-@JLC(CKJ|%2D}0v}E?25Xz7cz&;0nc8D07ZXZ}x~XgN4=J<;XH5kJzak{p zfD0QerzDdiGao|_3VRo4tVCGYHA96$`N6vxyOyw-*%8$#msXYj&E}erm2#uh@X`tW zI1SHInsK6{R5h-@=>eCjAADm#Bxz_PamZy~Q*qI;dphGgHl)z=<&pM89l`?lTeh)O zF{JQiQoQRuuIvu=*xGmL8IM+8U0gXgRel(luoM4lPvgNKFXjB(Hk-~iVNK?o`!BAQoJvtg}RWBYXI>n6Y(U5zU1r4y>Xi6;1g7Z;!Q{}g>EejpYH3P4`G_hpEViq z+s94pp63UGzH10io^wy6IDO^cet(ZZpU95{3Td|lx{l|Pq>m7nN9|4-7)Ox< zqi~MY(6|2;?8zl#ALwaZB&0_jAdf?(gPTk&4e$AgFo63!JO84KobmfK`Kyz{R}o4g zLL0(DReW5KlW@W2Az|``@Z+R@_U=$aC&c@z)trIK`qxmK!P?jX9e9nIPvJuO!1xKW zYt|Gt+7Ktas*@PzDd<&C^tM9WA(tDXR`@TemhKI-l(gd=%|l$8C3aLU5=9xGr5Jvm z%0U}FjdDJGp1(A!p`CUGs5O?9_$Y6WC?{Z<%v(J*c(_O0Ty18Z z{6pbKD|vjanQEP$`rAzV8gX&{NXrdzF|qopgZ^Rkg@7tp`?TZFW`*XFo1OpLX%PQfz8wt??&UTb}8O#UG6KiPUoNbjFa1Z^$HLX29}W zLdHMTb3;2{4N2a{LYQ~57Mo$%|@wihdg zT4;||=dsOI;?SBdjAzF&p*eudvV$t53e!Eg+;}Z}fj(rwy2mVKyw2I(Y4s5`Vs+Mv zS85i!adXcq=d^_xK4Q+)MQg|4DfedW_c*rbuU2o;Z49DsmCH>|+)$|JcdE;@;LIzf z6!06^m{!h2yeS*)ZyR3#S~Lw+cmQ(Rd1YsP>vwMh!5r^ zlZ0gJZ41O@B-G|`Re{MX>Le}B@*b%*1mHeWSALgJenBJu)}ors^HYkB&w~tslEdcD z`wL=01(}(c>zVF!nUP1Trf#@D2cn0v2DsUBs5J)}D%D5te8jqM{ZB8+?=I&jyIOap z2kW`g+>M!R5MQ34qLXRYUCN^t7K|%JmNeGFfoY#ncX-XteA~wGuWBUbyRVJ_&1QQ0 z2BsBK<4;GqN5nbU87YNAm6c2G&6RB+MaguolvzDx7*nusVlD99<ihRB#6m_4gS)2}1?Zq#;Gsan`aV+Wj|z+0o6@|hF#kPt?7;82++z*i zSDfOsI!r5Pk)4?yA)F`CUce$Q_U#`NBB-Oklj+`*)m{k`A$Bi;6uxPoYH$`A7}DLA zF1?G?D204`R?BuwaI3Ge8M_FSaMVETUl4zb)(q{v4&|!^EaZs^VU#ctN`F$-iTD?? zT=^eB&zT4vowgv_EpA|ewe-Qz^q_Fk^xEM{(B>`0$;irP<+@rGc!}hGt=8tD`m{O8 zrA+7-KK^KK{##yGDA$pX;}rbmtaTbpAtx4doBW9s48+dZ?ZM?6)%SoM@%#{L;;WLER%<6c!G$>?2sRRml4lO z$iKAiV8Mqt@^>u8=_T-kc^7f~cN$oo(r^c6g%UBv?2f>QJI@@<+pA!gCBy7O^(mT#13Ltv;GYpY%GlxeIlti@W{0ATkXhX;?1V@J zK>SXg8%edqI~G^N?qf9N$#c{Y3%r=g9@19(;dm|6PrARMXh#n1*NXdLy#&NarUlTw zt^2|rZIni4`8x@GpN6>%|EFyoJUma~gpG%h9eqbBS=m?ME2s|w{(*kG*1Am#f~8sG z*tuEw?A+c8t=*h8i7lOu#i@=wY<4}hkIZ&4(~QV|lqq$C;3zPhV6ka_2Xh0fewXNs z?zre5DpxgRiWiu(bpeRdyU@una+10;z~M|xD6fJv!%}wPuC~CA6W^U(YhMxPr?QK# zllhDpSF{ADjPwzU_C%PfJ;@nOJqu9=Fpew00|p}el`9bAY{W>x!CpH7QJ!e-8CbGD z0K2jS#30|W-CUr4_?Yfb<{Nbu+2I1N{REW1QbCZbs;T>v^9H|Sy7!KBlOH!sF~c;n zZAc6hU-QkDtl+Ws5W6KfLl{QsHKL>oCQ9L|9+-#ZDf=$L%f)&iMby= z1`?boa;K=bhQR9s266`iApgTFZNFjw9#mk5e&LKBkYy+;fL$7(ao~jf{q=yJ zV7~^RCO{N{YYB3)+;5iQmBnPQ5vcl(fHUcycKPwpk6Alfig7GC=~U~8FdThGKs4EW)rMoPJ97?Z_hg4m&g0SiQ-=H1S7cPht_OWgfCVW>tN1g2+EN|z z81&ib5N)x#(XGx7S-2ZYi12tdb~-&@`f8;y8t!8six806hE#Tc53&lwL)iUr3a- zNXKl)eR7NtbZ@S4^qA*=@e1iTPt*KL`;8~X(8G3t!&CclxFy$q$diTsw$TQ}Elt-5 zWSrpYP&;poDrxGSjK`w~_R+{lFWc=TTb~@MstKOg2!#x~FRXLa1Eko`RR*hy_ucOB zYnt8FbiClYuowJUg2Ft+Szgq4?wA~#Li$I?JasR7ovPu0e*g%nOH?eCNi;H`Y( zo9Iu@&0{Xg?KcRMahC|tFhZVd4&wk{hQN(3#7l>f1lt|JpVXnG*B+F+W1;!)x8?bR z_4A+P4AE4`^R8~UHeUQHGW>6&c*OQ;1#fzGljDk&TeM;CmDI1Bo-X%eRrGdx_N~tC zrYboc`SB2VjbfSTt}k@&7fW+LoQCs7J(CZr2sq#DL1`ZxCGy|3Qoo zt6ffw`^u*xDYVPr#iP8ku7n-OKvPwoJnO zVt*+QBAXv#&(DLtI`^M8s@J9zjo$8R78wqG<$5J~i$2m+Z1KT=Zi+Xa)wn*Z5qSbI z%tan8pUS?*rK2CVe4bX$mJYR{o9+pM6K_dnUY{@fg8kJ^_%Ka9pNaGIEltOUVHm#c zR7?JywZI*~%YBxoyt_;>1a|MPuZ{bw?thr@0gkTZ#-2c+S7tuc1%L)61#--qsfzKV zw$d_1W{p-((hgSAgcmVa2RmIRPEV9z)P53X%W06Nc8251Me26soveEt0r}U~Br>`S z%ldh)@e!T;e;Ea=WyJo|z3*WEG44n~tCG{jGmzNSq^%gbX~gno2ribvURXA=-C)QS zb>d{)Fx4#HvBRA8dxt}NOmE1kohysbpdh|V*uQAn#VBs~QJ?GKPzFsZ#{XT;4@7=R5A+A+D#m@cvmENb&FBXc`k<{6yoP^*4Pn zfbXq!eiM6My0A^>ojo6OB+oPj8Q>bMz1C-V{Ltsf?0TvvD?Aig&UCg!yq*uU5MZFNlxcsE(3E| zL+?-~!_P?<&19unlGktj^q|dCc0A0h{XC_oQeyP2dobrSPW=9Nhmj%fgYVx=U10bo z-A{R3FXWUdk*a~}gIm!MAzvtM6`5wb?C-(F!QUvwRoy`8xQfKJa~fP&{R z0BAiXLXL63Vhch!814yk#UuV=zVw?z0`c-OArX)&JU`*ai4pUQ#rvx&Z2;;v*E9~c z4}%@UG`sRmxL+1mw$T1N)`jK`wM|KMV|JDk(uje09X`DJ$%RuwAADcjSn1& z+OPf()_T8%kIE-VJvq3^as8UlBs*2Y~UwAUo+TJD1HZ3;@EUp!iXG8+}o zji{IJF$C#(h6FuXs3incJV(6cI+02(S3{4mh)9kL8#`v+k zJx2~1MjVQ~ieV6i1x%*NDKBXCFdsHP8=HA3+%YhO@1%&^4)b5~4tS(G=F6pl)I$Zt zXIhl`{*FO$wGQd%@@tAso9&c0RwPs5?!Y;B9g&Kj1Duo}O1jx4&-^WE8Ww~~wz9n> zDb>_-yy)V^V_z*Y|F;BnxWmHKc{PBkF=nh|E zBysM#4fOIMOKNr#Lj&ZC&DzCee}+FH7iQNwcbmkY7pM=dRv=1+X;I4*5oh1?i1TlE zRb?-w_*b&990p!@WgVXpk4?8;w~usiVR=X{zO-9by{4Idw?%^St3T(c`A%?8eKNtIv1dhD8nb)~#&r-qt$`YgiAm>3z|v^V^$8ZumQtG4Pf zD^WuuIXmOL&t9@1>8q3je7OPpPg*2ECl|@lR+*|}ATj+)EK7zoEfP9jp761#+65XL zK2tp%+GzUW`~#Fn)TqFivT(o)tIeHMbqT^qQ537#3zycm45c_Es`ym=OXVw}zsj5) z@xIKa(1-b<{1s#$Y!jyzW`UyCad<8;%V1~>@AU_*t9PW)%)jQ;`#VU$rR*)S#Xko+ zlUcRFAkFf(H8ZHq^u^eD6Mgh;|BAA)!5?<0nAa$0UaPQG^+}v*id&*+zZtu6_K;F# z*7DYS$D5kg`^lfgDl8P%Dh*8nLyo3Bn1+OrGCcr$DvSIEL-N4JFNu)m6jCu88vJ6v zTCUwstnlqDw4DDB&SI(da%OeRVYO$onQG)Vy!$mt<9QJ$XKc7Rs$E`lSTdV*ucwxG z``Rqy?rVmWNnxswe#?!Vzu0w`Ft}xvOEqr8iwhFHiN3Gt4xHaAmEN}G>}-~be9ym2 zM0Rb}D_?VNB+WLk4`Zf_RBN!#JH`!mnbutdTh1%Pfxl(T+7(;v?=;^RC@6s&KN^|J zXH0i*QFfR<|I*c8GkyZ+L` zpjI!wX5(@|?BwXrU-bP#X~^AOM%xgQY^L@1+Q%B4|K)^bGN}Gsm`Qn&7lAl*6lZbT zWn95l1k)*5#I%c0DO$kRhAvoe(N;)SDYCPh{!wI)bC6jFL9~u6sD>&&mxI!Gp&=pZvTSnhK1 z&EdyCiaZ74D;5vj0?X#!k?$<2Q4>FYnXgk+Ptuc(4J-5@Q9BVn#GFU3`BJq+uZK7af304wiZjb2GPRxS9G)9amJ~8!9LQGihUtv{8JTLNdMW5cDg&LPlBKvN;O5 zIS+O8qzf$)Mhp-@+&zcJ((nrFmyc^`*%7C`?%(W^^H(F&OPV+GYY{p%Z*>THrEnd($F*`mIv@&+14VIFN9 z4if&yxoeexs?IB6e_f*9H%tg6TFKPDUVW0B1HYZA>)BaO-yhYoj%^F1cfuV82z=uh zs@U+-zQE<3Uz11c;LU3P?oo=M(0ldH-gDN%T;oQb(n`Y}bPCTka&-B6@!?_ob*NXC zV#nEp?H-lk4hDsI-#aYZLh7PCo2>6BUq|V+&I_;FQfsxV`em~R-b{*BbVAZ=fLl*| z-xm}raWJ^mCZA*q#V*&4mNvT&PtGrez7-a-*oBCcx6Hp`Ikp`01g@#C&JT=*Gcy}N zvwzkC_SrhLJv}b<4^6Z=yr*>(zV4v%hbdfGQ{%|>S*{bw{Hf7C$7WQ3!~*{VP9%$U zX7vpRr2T`K0D}gIK<}rQ zGIz@_cYl1b^Y1IKiBsHZfD)me=Tt4l{_+O8H#gP*>n2`%Y0NH^ZpQEZgsg#~>VQb` zT>L=={6ULt=-|lWZ+c}h0o0cP7wDn)vx2~v+=Ft-NiGh=)^qHXufM6(1hkn&q-Pdi zrw)z3GuAHoi#FlR#)AkhEd@}jnRsJUJjsiyx zqqcjZw`*(DNxkiJip-2QrKC;ADQ332KE&jk%_pzlU7l`fG4`ZK($x8F@`@V?4xjpg zuhX^6DnADldXNc0)GsN=+LNvsus!21<+uL{9DN{>zsc3++@@?L`zjgrZ=hbI>p8v6 z_0Vd#5XH%k7uYK0H$zW_Ej{Mv-G|+7@zkkHPb+@tb#ga~&tY4|2A|kau}fHS>eJTh z$9o2~sE?NO2k@Giac_pTIHAoGG~?qKM6^7Hh696BC+M|Q?`w*p1Hc#)%#a%TUWL-7 zca-3M#CVe3P^dYnE&5E#7Q*50J2gy_j72@yCgvcXGgTZ(N>-nm))^Itqo|yGSBODt zK7Z7nPT!dXL6=9&L2eiod1CN9?!>>4-m4^f2-s?hqP%o$ydw%v*er{-o0VrH*WeS`Lg4 z&5BZZk;a&Ykn4MaRF%(E#@O}5sba#Lk>G0va(%;t7Vfpkc@+M^m!Fpi8ASu&TXC$Y zf-n3Qd+nRLKNuE`y6TDTAZBaMqE(@@xOV9#60E$ z_#CXYr;GjNfs77{qQ|*<0NEa}E2!JsxB&b>;Af8nWJF&?kjgw#WWJy+20@z=AZf!H>0MCj%c+o0s5Su&(Rpgo_z=1OwNn3U<8X%rnqR;)rpw*YG36f8 z0SW9|a&G^?7zg?n_7eUNaX^m01UWrh|Bv6br1aOCrN^}q@ci<}T0MsAAIcNU_AGXJ z@%!YNAfK)O@%jDNq-QD6pK#uQv8j@ssp*X_N-x51tIFcR0eevO+3pGW*j}VxPsKgy z51)&9Xn(&OM1A;Nk!CiJ*k6Qx$F*em9)``?y2TT*za6-f?P*`2D-KnKJOPshGJLOO9B$~`+Hu18uG*E@;6n4b844rL(z9`pB2e{XE< z5tISgIJ5`ap^8MmleNiHW9uFKul#AZ6KqmN{R5nzWZwfaF)y~>CELs9f2^_J$Gzv~cJ}dNeUsC4eLHXxn@^R9dyT+&Q1vjK zdAr8**ZljxmmX`yy?5Wu!nHXeunVREI~~S!@cZ?io7p)9ZQviIf3@dYpW*r)!rgi6 z6ZU06KKyvP9q`ivG1<$KA!iJz<64bjo)XUzarqcKMzRTIX!T%MaJZUWy&i!JT zSV8aZjMhTc!!zssKQ^*+Z`m0~VD}A)es^eUB>UUa#+|sH=5T545j-yk&&UbjJJ8a` zMqGygf4>iZZ-n1np#R{qXv_OhuUqW_-*%kiwL3B5eC(WhN4dT3twk9{PN>&TJPW5h zcJ2+H<$-%I{zjp-hbvh+rNeZeLb^{?=Q-@G%w{~l$mVh0o8e`1#1^GPTBX1&?ML9d ztD15e8wW$&ISbO)q^|a^OFd9fGdPe^?e?(#TQH|_=d;6cFK%!4qH{B#JLt2~oVgJp zc-Dl^&&_azvLjicY+q`~?e7ZltS87m2z-6hvXmjnw0>FL~H_9`;l&{qq)21?I!f zz)`S%sqVB%(d~F93)(2i=Dfz{J345N`ITt%CU$OAB-Ysf)mPOXxr7CIKS~P$5z2Ltk>GinPtpk0MIVt)r^U09Ow)bs)TMO9&e=~dL)b1*az7w?x@qjStg?y9k zs$&TJo(wvVf?p@x4{g%tK1zE8*~d9}`Ys-ywnoaHqRqWIy9s~&+S;p?yP*!Y-0D%W z%}|w-H{!DhJFBCyQ9G+6p(~D!w6kSl9Ov@;a1JQ^Z7av$3ZD(~`@A}-aTn?GbI%Kc z`d_=tq#QdPRHuVV#LMc$r09ISUjlUk+k8Ct8s8ycJKv=G9MH}?wECg>1AT#b9@th^ zLD={dX>h-o-(%fq0?ah$)P59ZcvbDYZ&B>pdmYxM-WekNvw8}3qwCSezNn7@?j4AG zNOM^e!&dDPe2z3$M>YAWpM#vT=>Dd3Ueq%qC)gK`p#P??~4c5nd zq5d~P-DTyx1?w=zZI$VVW%l`fHmJWVF^&aE4}8w%6~yPahji{E>x}s}VNAGHL7(-~ z=C9|*<}?Sjxo$4xD~o=3s1@bUS7iB(T6vBgL-`nUa2`85X9LnR+d%xmGBs)OCl%>9 z-o!YAvN7MX=;2j7)(EoeNcN{4+xy**OzgdqWb7e(A6hQy$KnL}K2)TpHfwyJh9Iu6 zvl@W*IqnC33*r@U0y2Wx`E4zb25t3ab|4k!FhSm_Qr-(G?~R?!yNTxwHeqK<@Vwz( z$h)-@dEY{LS9Lb;AiGx;E&p{Mq=C#vEq|Ywf20%nUqtyYJWji(nb>`AC-Uw`dEauJ zc6XWBy}9GOfBJ#)9(9~{cU#y!+==}EMfvwTPP;26b`NwS@2y(iKmA}3+h$_@v zQVc&7U}a}#!-VPYL%e>6C~dr*Y7aplD8D6}>4*C(9MWRbySRTvs)0ULq|f`@79Gex zqUqXlbqj0XwLKi-<4nsZ#&PDSyD6`&MzM2{L! zY{zl0<$e==sQ&*{rNw3Np%&*;A>Q_eIN!?SJn%GNTGe^htGxdJv^G5BtD`<-zrvq> zkKfxC+gn*Xgy&o0*_Df-KaGDgyJ~4uLFSA-%&yok^t(|GwqMxqj_-rlEivjd*eCrI zYR)m*7x*lT^S{pO;QX)jPM!aiGU=yglmTT})6Duy-ZbdP;yZ~v>?^?E3GjC*J}Zmv z`XGD@o=aG_lKSU1EHn1c_h)-6uwMpaFgK3*(3iMw{$RF$VOjKtZINt$0s5^zVtiIm?8&eixeZ}vmAU74qd{1ceot;?L_G{A`8`qhwSDN%wFP?{PQ*C}9 z%4=f%?MQ&jqP2`YL-G6zp}l7^wY5_5{9vz#n_1tuaU-rX!0%3IiznFnn6@{e4*`9a zAODMbM9^MvX?6X_G1^}EKYkW2(fYy2%j(rFo`T(A_dUQ1eBH1=0d-&_@ctXI5YhHU zSjlDW23v!#t|NKxad|DVyx#jK$SWWjZ*dt-aWWzxDlD-$DLNZ*CE>Bk3XhN` z2h&KHuj?S6>kaa0=pdg72Kh91kWZ#TK6|b588$Kc8%)!rVfWO7MFG?GA&Sy73$9GK z(iNrqUieMZe%aqHMd@)=zc;&jv{$Ri|I>8~NY&?1;G5I|3)0ou5SS zV)+?draxJ zjlN0py=2npKBgD0yTkV(k7R25kKlPfE3`GT{doTb`5>;eV%iS&hjxJ7Jz)10>k|$v zhWe3#eFHo{*dA2bcUsbw?{AVu=Xl|F6BYy8psjZ=J~M%T!;s}C=y}`?d3bRCBF8^Sf-4Un`~gn)JO{(+$^CVZ7JZifVHv@x5->HTYyZrPx__Go9`d`bFR?k^^k zz0dlDedzzp{j8lFv@h($afjl>IzaE#-6+4(eYywe{cGqu{xbLJxbI3`rQOpHp0jV& z+TJrB_U$Gx$nOdb@dIwK?>d96mBsgGw6|6&+snhrZ193WXM2W0Irc;TDcn!m_ZBZd zt17K5`sNY7=d<=MZ}1(J@%#a7Cj|a4i2qIE!LKP>R`^S=T{-{&-*=z7H7Id3TT zHoJ#?6Ttm%@HsrIMILQSJfA<1 zoHi-?KTHd_`3c)(`27L$^TJg$FbH*ds<#Sg-!hD7fB&zZ?SnVyzi{6Gb@PzL`Fkv` zW8K6u9xbg~h2`8*Hr;_Z1lykmw$Fz8`q1}ht$82y+dr}HWetC}sknv{)7N$P+5%^- z`2uA$u)T}4wdt+rt=Ut<&KW!7Rp?^|Fz%N-{f^*SYyQRhluB1Wu7Aa|d22_rHOPHY z-t$A+9QC-rUWvCpT;g?$bG~WbO+Q>G4KW~7pG)J#{S$fz*$?91^lZ3a zf$O^AZ!i4)DDd@yzrj{#R6a7K%^n!!U5IOB;r=0%k)W;pE}%I@>A@*p??D{ves}+TLh{WE9|}q#+Usn(!71{OYsI~HKI88r|EImTkB_Rl_Qv;| znMsC_zytvYjB*H|18NK}YD8;}LN)MF;rdcRk<5@xUNp&!nF%j_dd(O@2-tg@QcEM+ zIsy`Et)|wtKKI_rkj6Bk-l9dM+^Qp`iZ8uQtyM(GJm0nVK6B1YW(K^!&+qv>e|Y$W zGiU9!*Is+=wbxqvzf3^+^zDL)R0e3A+vkks(YxY+uNTrko`KvQA5xqAxLmx`YwQv9@%PAoadD~g0r+`Rt`oM#Us+G( z$$doswtt2;nevk@B=`qXR{hYYq<86Bv~#8G<_eo%PVwu{+oX-%Db5ez=SOT6Jd8to z2DZrY3v7q}{eo6ds_`}I0_cm9|a%}95gJ{?B?P%9FXV?<%^w6039I;Nc`%%>60_ISl{%7J2Si7vFC- z?T!85D=PZW0sO8DKd#cd^Y73(3Ph`o?TJ%8UC=3#zo7lnUcDV5&u^2Qzdx(AjM79o z```Kg{N6Iy`b~7M#39IUx6R|C_2$<=lisz5si*TO$A5p0s>d_OMc#wksa@rGYd+B@90N76T#0M**6eVO?5tL-}8L<@d$lq`|=H!M(8}Y z2?U3Y*?o8gool9A5nm_=b9ej~M$~`mvU$o3p1e%*^v^m^kj+z+23hfQMCtv_Lo2w? zAFr{oKTrAQCf9A+-$d_F8-DmP+7F&M13-Lha^FdFUfM@Tb&`E!s7sF5w{kyH{A21H zwC{=9(~7YLeV?255R6Z}0&p(#WntXnoo~2xAUs~SL#2zIt?Lo_-XLJ0i`)_{U zCK@sm3cXFsR=a(Q;7gT^1??8tE9Owz>Mm1bGQWBoCnh+Lz*n)1=!khUCt z_FEC`iPFv@)(xc*M(b;|mjKUWHtx@$)C zEW{aB^wk2skKnH8#P83K(D-12W}EsJUsnb#n(qxq!n9uP=WFdKYyCWxZE^>c11xF_ zZ;wnYTN3}6@^73IVYF5{urO-9zdvf#^>Hgd6U9^d+I11y@2d>(c>y%L8IpS)HPRSr}#*x*mUPv-#1vqSmV@%vYa^#w^gptpyh zE!M_~=6-qJ=xd2{R^?jbN>7(uvu>5=uc~^CCC}MA+P5;|G}1k5_4MR?VraTKryie}G$R&M~I`{yOcTGAtKsp$SS>Y3plWcT3^>H0}>EvrtkEJ~R zPI+~ik}Mzx2dxut;_KX=y4~n&n`V|;cNdfo5gnp;EEKjKK;2(k7PTA{y0`T(bdl)7 zhLn-a36IkQjMD;Mo213(Cqd&?7G>X!Od`8;;j3jD&ohWJsXaF$&w=G=SN9NaPb#}L z{^HAeo6`PIqD^>$Z%-Zinw9v~`6QmftCe_#KfLiZ(3L!n)p^Wb-hRzgo-@PIEQqP+QR4 z`$0aR`@!2(zTppbKjl4^>ZiVZAO6B^^kEiC?Zd@O;!8-sj6OUyM12^tTtx6T<{7Kc zWk=9%fX|5Jmk*ibP+^k86;cj&ius4(PpK@LM}l5oMm*8p4LZ+5@Ta29U*_q6U!>33 zm}oCG(LPtwUMOVjag!WLhLoRRLLWX_L9zwCN!*TP#=BYKjU_w*d+ANd3!ht(u&{*L zOt9|>*l^qg8$&Qz*PrkmH}SoVVq9DJU~bRv^mBxW)-Ha= z{Q)(q6E>=q9U-1rcvfMt`WIc_!$+e)97V>**OG4G)CYjvhG*Sp0$l*;GVax`|aJR_aPcoc_EYK@=T&F56}J(FZi zWT$iN@a&@T#ZJf|?HTUhj>PAj`5EqdI|fGT`;<=e`z4Umcq$L=`k&j4cWCtdYfbqt zk@?q3J$RFNO2Oyva(@4+nDlK^{$;rZnfU88 z)n}Hh&%%RAJbLLpiM0pCzWuc83(mUyA3StS>|NB?B2wnxpyTlqPuXLgaL%PPCXLbD zY(Kl0aH6a6cbV$g&*#J0>^6C(zY^6h;Oz=HoiW$v^f=lv4%|0Ub+n0%ACGgyyzw9Ugbn+=gRc$8Kc%}~|F)dgIAW-$<@j|W>Zg2s zKKNX%I*y;O+D@!ioze5vqP|Lv>UD% zljE^$Z*PqwR?j6lApg0~sb1Es^yfz_=*nV!aIq z={<2;!|7Y0I-m!(HfMQUpKIw0sV*yX&|Q^d-fmipKwISYO;_EJ3C)jlyMny@jAy_$ zcJcN5DFvW$-u{s4!0$Zzo!7_4@^}bkwJEUGA=TOC&>Vp0ioQ#_1^sb^Ez0rMx5awE zdB2zU&xr=wzjqS4SsOz(-6eqvgH+_dEL;ZgN8#7%$ ztE-JwbDu?O%L z>vN3{@;w*c-CZ``1`A&k>+u-tpZC~V%*o{Zm#vr2lb`nyrRnP<$e-WlYE^&ur?5rJ ziFmo^Df^L=bf%lo6Gk$!C?2Lsop_FPV*d)UHYMtR?z`N-53qtE8ApnBQZINt?{?w| zZ9aN`h6LjibN;B8H_(b`BDvRd7h}UfGi*jn^nvzY`TkDtN!hp0_* z(0A(~-(To{n)>k(-aa1c$2%k}!rRO?&4bua8CS=468_;8s;e!hd?>s_v$#CgJU%8S zU3bJ3CAvPR-4Q<-?u=Q0e_bbhp*i%#h+V=Mkj|KV-|^P1@3Ev zdoU2Aa@FF!+9=%JBm>C<_su9@1s{atR)9k^OgMWbj+<~O&EZl0gY&*zb!>)@SN2}} z9PY}j7qy#7MkwD6Jn&{w23Dv}E+afE9?M7FknhI1rBX&Lx^KDa0v+(nNJiShAHA^u2_fI4_2rilfn9v{k-IPMrxkEmygm2A8X5 zIfcz~qO{_@>`@a98*tVT&LHIEtYbeIxK}N0jSpApejc`Pg;_7r7xKGo)9R$3UqNLh zzQ1s<>gaGrECT@#?O|3nmiBUax$4-Yhf8}M{Wiur;ZHZ)RBh8tX5Hu>vV}J>ib+;= zu&BL%S|d_}^xJdg5E+`m9}eSwGzG+lI#vEDBffBa9pFSeh1=(`_Ht0TG{kgxKR zcEM)&nQrvUQ7U5(%`GkMuuZFgJo3SZinJ-4t*wl3ADHcNZXV@vJba;M@3aQkrrD~q zbChbsv#ncYwo&Erq0Q46(lnb)Qz)%-s%Cq5u4n9K3oGcfc*bnDcqTkh+GR&$5FP_f z%VtQ5czSqdz>2!sJFJ>@U%*oq4S3x6QxDrzs(V3k1-qcLkQHp29k6V}_Z7;;|ZaTMbJKCMhIyham^#!5~ zIHi37dfzwx8163UkyG}IA8kWhQahsk3aGqs9?PFeH(__)LLYMNyH|A$-b=A}INz)r z1H%4T$6@S2dIH*;`w@5SBfGPM)4qSJL3=b{MEk#pHtq*VzxM@I;yv#W=x>J&>w=Bj zZu6)ZbN-#iPTVgniMNo>^sSh-bi1n2dBuSvp=nF|g`VX@CchFgiP}x|tfhJ)hH{f_ z1Yb^_cb#w8h@DZyScrd0>3tZ)o_A6?NOu)Bk>m3&%0sfMU`2#iJfNL( zbj7qtAC<3allo}A0ri5+oSlwX?moz}4gI5C4Nq!wcyc#S)h6wOOxLfoF~AU)MJ*&V zk{|e?vrH|}H9G6O0($3wzf+M`N@Xbh_uud=`s$OA%P%hLEv3By|Av_Um*@+z@W?O+r$s5#edKYqeqM-F;o4x$GHicQ*ZQ2C> zo>CpVUdE|vc&BE8J$+iV8}tm%h>3oRb}8*g+YE4>h*Ce9qxTc)Bg$TOA)lvS;VElp zk;SxbGq8dw$Pe3ZQAC=sTgW?&KQHIyDP+I?QCNz%6Zf-cTADOJnvn78wH>PS|ki zQtAU1dIz=L5rNKxEgMRhr7r{<8G?-rdDH>2k)2^H^m6Kk(g1Kgi`$*(kFZNL$9yEj zENwPsIYRqCLLNF#;${4HK{gH=|H!_Z@JUYp@V(sj!2g41D_=wKpZbDg108Q4#Rj8V zhheuIGEX(-K|h|-etwkZ3KnmGU8eF8S6j$FZ@74=(!pXjnwuY72A$Z;=59u)jq>R` zW;Tk`Iw(GSoZGukVeiUi`#}fT5Be##;%&+JddLyz-4QyoU(}0i+}5b5-zMlT^&iqD zXNS$>rgwCqHxAs@4(4&U(VkquW*y%%OwR;IdLHQDe35lgT}!JB3!S(D6#E%i_wL@}Imn?-fQ7a_*bV8>(XHWqWkKiLU3 z>+{xOdL}s1FQWJZ&#IVHVRp~}Kk>hT24JUnjJyx=0(_!nj^$UaUl5UM!n5^bf@sqE%`vqIF{mqZZjXtJe-eiE~`_ExLh973Q+%x zg}^5SswUj&ha~4%tWad;o;DZ8y5v8L{li6+4&MGjdI&h*8z%hesmsWp@_4B> zJ|yukkiPa)^1G?~_vE;9Vr%@1S1>+rr}OD3Ry>M!3h&%Q?__^{ms2hNuK1P*#gcS3 zm*vO`dIx6mvMo8nSJT|ouKf6$yJ$W`?3Fz0&_e$10oye`Mtgr;Ke;MKdw}g*oooW~ zzPOG1d5n+iSPi|mlJ~OaGVOoZPv_9RE6;i8TNow($o&)b-wxQE0fyKp5~FY3jHa?^ z&z+cOg+H}L>AQvWZhh|hY7gt19%Y2Hm4A~$jPJn1SlnnT29(H2DRwk0*X5 zrHlER$-Vk~jcMF}>?kik%-`?IsbJ?N_F8p%;uv$iE#_auH&mfxxm(eHXiNio`P=xn zBg*6OB_E11CcVew6$Sd>@)WeWNN1Un`aV7AzGzL^_qrvwXAP}c(b<5sE&=-d`%HX2 zr-C_hudXZ~tn67sy4m6U)3^C}w}O>YtYEa|cG_n&MC%K*@8pTxp3i8$Xm>8BSN7zD z?Jn`X6P3<6o7yhwH6HcKqj$!DL*KcXkh6~!ZE>pV3BEsbGM(>sZX4g{p{i($iQ>DM zlkNF7#=8e(UiLC*qiS0qe$Er-k6_eWkVy^P*Pzy~9_khC3tH;ySjH&#}597~iT| zB35z-FfIyP`Iwo<`B7W3NBKRiOBiE&>+^DK@5I>LMK+-q_JHhOo6}=Oyy&3!Bk|k9 z<8p)V5;+%G7(raF&mYpbB!)3SKg|Urmg6v}FZgp2eAdZw{tf6pK39cUZnd$_^7A@SB zAH}#cT8K7uBX(cZ8Xu-Jqt4>7hli;h7$I(eBuDvYq#vuyuYNdx7S$dPUp(1M$6r z@$t!oylUfr6!wPZgQhKOv%&8{r>TB@s2~28A$E2vzqxjCC+y(971O$a*WGR*eM7r@ z=v^~rqxB`|N9$@VBb+J-0Rr<&J{A8`ajS8<5BTPWAn+Jjxo>kM==lYp|Zt1 z&mA%IJkNood7e9HO(Z;uXqa$bGSBl+nyb$8QX6b`FZl)~>gt`ST8Elr!Z#=}?i=!k zuO8hm<}vOg*+HgrsUMK;>HU0i9kX>P>@3o6>hCm$gl>=0b-OsK<@b~BiL-yK(CL$W zt@Tdco}53_zn1Gh@Wh;lz}44f2Wbw3@7oMp^FVtW?3BJPOSq)>6mvs&t&|2^?P#0I z3O2L&-p!*txm?fx*Fx4gmD#u1;?H%CQgdPVEr+4+G~Y+MzG>Y;wv}m==V#l_@>mX| z-ZT#npQ3_Z#UNw@UrRBY`hah#LVW>xeIeS+vCRU%i~9FrY>#_)U(iGIW)a*8z8iPf z{?N28*u3sO)El;8_u!q3?1gQd$5P#9@s!d$0LmGCI5aIX7@+edJbdmJ{&$$3NpFg4 zz5eIO8Vl04C`9i3{p;2`AO4V~Ex8$vRqa|Jd* zuIP{UT}t#UdRGZCW^R|lY#SiYL(R1A&kE6Y3bk#g8l^hH_9-uKpUNn9Q$_nLQHl%c ztd34cM49y>bD^IPccZUAKcgAR zP8G^GDQ51(2ve+Yi1npjMNO*S8*E1!yN)tFdl7ixr@aY==Q_-@U4HAKGc~ zUigH2X`WBS2q(8k?^}s9zOHZS+P4yR zonp%!w9dn#BkWovHU;SkyEaI6Z5Oj4@59M>6m8aK4{p*N}#BK$Ps7h)ZG?>Wc$G&3cIB{Sq5L09ic*o$8nE zj5f}vSexefAG)xV+FF6kS9V(ABMUXYrqxci>|W8%gK{l#K*~IC_^LkG5t{G2lx*at z*#QTQqm&ofG#WE*L%f@-GWPJ?0IeezpkJQL=fo}L>>Sga_(t^2PBxTSM}!X95ck@) zv1kG8mSz215%ZF6!M0ftFOMaA*T!OFI#_JN#@S1)dd!PBn)`F&gYdz3Su_xF<4+yr z^WssPqA?%YjE$uM3+%%c6kBgZ3~cthG(Wv@=2B~?h2|Set%sLsHsv>3up7}BAHO(R z0omrxQROr@XruY*O{GKn`XROP#RD`y&DRpyEYVgmAwTp>VP{T#1inhiceEkS(d}ga z9W<{#Z8v<2GO&zdtFRSg%Sr9FVl7H>DB5gbMVO%-%J_O4Xo7b>K7x-qMKFqI+hOnZ zn3m#Migi%t0NH)wO{^J5ZS(!ZeZ-e$oA7hu6a5$d?&MR{fBRtj+a{_O=zwGWWu@HK zq8;ZC-OF49Qjgk&y^!`*Bl~(DjY&ERHIkFU=blk#@~vElV4I*jb4jmI&aOT_F7_<$ za7Jwda*d*2u2J+0S(SqC$NI_E=z9es(E{*I>kUqQ+=_Ogu^ye1U>!&q>!G}}g+D*J znaY##0nOF^MzoD)<9!X~p{x!nYvX054!O3&^?5V&nbvn6m<@e~uTSXn8LshcPOR}{ zAH!|9%sFC>hxj0T$gC`SujPx^gb8$S&I8*pH=!z>;0xa`=8{iHkS4#^;z96_rospK6{bTXZI}&+hD_A+s4AY z&%&132Qil9eRk)FKC3_%v;mqEqCQ(2|C-!K;gWui*8FMhAF}(Ro!0&PxLwv9ojIz$ zo|H#%cqijA_({HAw360mT0aL4?Bs9*pC5{b?}ERvb&7SRkNFsEIo~(KeF^mXanU#8 zMTDPs{Jv(sMgl)X@eH3&nW?Xn47brbNgt1WHAjaMOX8)&%nM>@;srQlv(J*eT#cCC z+F{}a?QliA8s%$u8`9Xt4JFRRy4^m$Zl|r^W~|%U6YF-n*vNIe+Tr&S>vpxnN5wo_ z#3gNmvtQ^b?8B88LdVhXzo7A*Bk%aPzTh&z7^6d%0dz&k;M8a?1GJqeN3%kPe;(w0 zd6>ulDCF!A{`)`wlwvC2 zltIrHb3I$ZY%=!e`-Y@G6(H}E{P|9gD&`rPwLj=l@#iic`t`${PD1yF`M#&aut9@- zt&feu-EHFIAt@^rybzAN_-|j^Of*b5T@nXveyWY|sDJ2omHG+SWyrDJ27M6v3>lx; zPd>xEk7&OC)Fz7YAg}*rS~sUUtr7hqY$ICziM<~u_HY^^KjAeBUNmlp$o7y8${U{l z3t@l0a8tVqepD4Ps&a(pe`IV5dOx9gr^Xa=_1N zFI00K6>L1<7J?K0CU?a7z--zFj5i#?jz=)K;O&4r%8<{43Y z|23L&|6cJP8hlX^(Zb!6j%L}C_J?34VwMEnSR^7rXw0{rJC{vN@Fx8~r|d@-(z^n5#sK(H?CO5LzTAI4Ka&vy!>z85SF8N{J}BRb zvTb%Xu=JDFs*2wZJHz;WwMy{(Pgkq%``=>h{O{C(p6Q{;O9{L@pMIT`pr$%h(+s*@gE-O+nXGwgBev_^s-SVK5P2TEc z^zIX#p-}XUQXYS1q9>Q$sX=`{B-+FWoxijtmrcs_eii8-$rW*M5q&4%gB9ZJZQ7TR zdNu&P`-^tWrT2cxr^vJY>7Aiv^j(T4ovL#e@82E-WGB@D{O%X;>e%S) z4*mV1^`!wT(x>jCx%9`wiROd;xoEd~wBNZW zh!3hCKNGe!sV;P01<`<9$I?Do$Ts!+Hry6|x~Au|p*214eX^$KucUvlB?YbV;k#f< zLejUW5qb}jzt6<&+hnq92jFkEp}zD@se?Ic5xpl!>+c$~6nFEph4^|2+wiS^CK0xoQWP3kiaHYn!=cr*>XZ0z2EZny|$*)$vyVB!)g6ti}G`&(k z0iS56N#EDQ_WNHD-@0(r!5$({--`Hg(oMo6 zKKeo$qdF0!a{IP(aO^tX5&jCbR%^T;P^_|ArEgq4LU=?+FH6!XraF!ONPBujnj?|6J2mZ9l=td%51n`L7^S82A5>?=K3X5r zk3kQQFpvID<@xW5xs`>mkNo@*=%1|*u?D@Li1hQwH}vMPas4Zz&OX@MPWayr_}_Hr zWzqNWptsJWbiT&Uh_%ea#=mwKz3c7Cfi0d!X|TEDY2Ot7?0`84MrBfY@ZIlHd3vAa zyg0yMK^8a=k&`A&w7vBxj`Wr#w1+k}tI-!T56pfBr2!pYHu7 z*oMil1y7S5esqBE$C{+_LldwzEIw?@x}6<@4Qmp^MhB*dmeqgyr<_6E%jcglPA{JFg6 zx9^wt{O&L1J#YN2yyxwIl=r;%d3n!YPnGj?^ysY1$_I1l+=5}YHMgf#o-aZBw#mNJ zen_gPb1(4lo9bDxcMAV)KdJ2Te_GkIhMr%T(o_55lpg;pQ+n16RrXZs z^&z;qZsxx)@&4&(@&4(No%AhQ@m^v1alS9kgT7-cKTf`y?tH%x;N$$_-OB9WciOY` zbm`gjvo-!J)m+Bi-qqeq8oW)lmwdgs+271=YijmY`D>f%zv-)1Z(6iOUDZ-k<7-w! z>jFNOgukev!B^{TxTd+brP0?E`uf@`Um#TPZ{mYkc9Xy9;_7IPqPo+&?AQ~fn+BWEr_PUnek4QfrZx6vo@@!YV=TXm1>Uv)Q0pw1gq zSNVKRYOS|?!_~|VYG*y&)*~@4)F;QW~3AF3C0#PbGu49l&FG1RDRLI(@{#3zqY}@ z3Qf@LgP!@Cs(cwp+{9a67b6%*K~d)ETfQwEkAvi_`Hna|GlxaxqAr zLHQwnvYgyWb-q=mF7P+4_Q5zbr8tFYJDM+_@bs7zu-Grd1Nn1(Hm2ygz}{AAx3dczBP-`xxMI38T4gwa>(wC}`nZMhmtk0ldB~UX(ENSgjCf{qy;?CeZ zlkJ`E(X*Q9B-&;^7eP;Iea$=wIt_nj)RFaBO_uL;MmL#68jU>@KFp~63dl}t?iZp> zuH=#ImyFM|wCD7in)*t8%yDMznVd!To7Mh%d^CPo%tsJObVQ;#o;_pI>HXMs*DWGZ z>37)q5ou~;eK4qNJK}YaB{y0*L->_NO=#TuYBh*%g&`j$sWYIWGlKI~J&o8P15!n? zVUrm1n$r`bPz>X0crW!gscwDT35o!#J{pJ3L_U2K>z+|PQ}7dL_5~`d>T3+WgXvNi zqrEX!m3-@E$&kWZRpko?*@*G-n)+(fpc&V#euRMDCghOg_Mqx+^sZHBG*Ia&<3@d` zz9isl_EIg3L4HE6LPYfxh0ws&FiIG< zs6k(-B_PYYb4K-DDs;%Kmp6EWAwJwT&5hiQJk3oe70D<*LHEq&FQ8v7O$~nU8O|q| z(52e5hWb@^d)I_Yf-=%ve9i5*R$lK5;l`hNJ=6xjpG&$Wpb~=Kb4mGUnBy{{%`r^+ zTixtkLwSQO%{AVt8|g8aOi45$?=g91dS^JlLlp9oq=7IWJ*W(sA4(A0#Ss7sj;f7cc*eCBX(L9nZILFI?0hX}Ac}WOFxOVhK{Lvhno4 zAZaG=N+rldgdPZTvQW$KX3Y6kJXG|BZlNO>iUE_8oYd4E`Z@9?eH!Z`j?S3dk{bDw zYvox8vK$_#DemIJjONs@dnE8hf+LSH=NqLXOAT{a^{6|OoZ@>5r`L1Qgi&+%w^iX& z94RS*^SyjR{lr)V(Ero9<5;OMqD06$(u0PY8(+ZrX)(JEMUf~iy;Bw(^Y{|c)4jIA zy!WznDA%LtHm?{>b=b3X?FjVFk!re@ZXGoGo`O!@IoQYuhZ;I}QL>k$=ND*S4c@I@~CY7eZQbowXxjG|7JMI_cJi_j8-#Ijx*M ztIbhnX#XKYyM+>=9j|zg>VVD}Hsozh9bilL)1~HTkAT$9&&Tv~&l8YAM)b%b)t_39 zXT8j5nggmYcxO?ZCr>(2Bms2T|+#ho&u7Ug(#zZ(D+NJYRP1vpvQ(<`x^${6jmO-CqGEO)wT z!$}-aM#5LLQ(~ywpY*$?P^F+L1ZSz+T!Opnmo!FEz8xj>HUySKFIhE@=2Us7B#0SB zL*|=Kf&vPMktv#%#A|Xkp_g`&Fszai`(%L2hk9##!s~Ybp?xN}IF@3Eo#OT;nsOs( zGVL~Z2mjg6X4DCK3{=vu05bS~O6{4L>I}27<49hTvl+s-FWoBB+Ip4fxq2?AIWac- z!=3k_03tbe@|K;7k#(#jImhyVH0$X{yYc99`En$7 z+iHTdq4Z-TXBTCjMY(9N=H8FWTPsNq;zV;I!slH&=acwVB)rj9w$GO8?O(2=u^ zE>5u_<+QP!pMkgb`$g~HK|S*9pj&NIOgEEdvwZg;nk0c90h+>>Kt4%!iYw>trbHLIwmZ zza|r{Vm3&~?>3bK6Y5OzgkWKO{S$PLv2r9-#~mMG^$5kNagS)?V!U5|oEhJB6XWTV zK~`7P+1os7(44<4R`~c^-l2wY{3gpf9`nwR85+i3W%~I3rqi&#Em2lnBZ-@S^{rJ9 z8bE`p-`BH&;`E)c6%{OH5p-MA($xa_jtDAuT|dGwH6?*xTK)!difj`iM8S4Z#KTn`a6) zc+mHqe${9JL9HFqp-rp=VcDm@H(p^o2CXAb+aw8&@Fa5BPpns;wad%s{Ao!8;SO-V z13nn%aJWdzOw$^?Kxqh9a{D)62|if^z=y!BM*q!oK#1qaejRzw98m%||0?w6S#%sP zW@H6)77zWSYeS$vz_~G?vYO>j*`Y;#7cJl|Wla_S5Ikjbm3-;ImV0(d$SOCu} zb6}1Hf+NS8xWe}0GIvFJn!|o>*}Ea*pYJ7u$vq)c3Kss{l%5n&+j$Q{-y>BF27h5^ zIlK;Ik`4)kT1{bAP#SJIfJP%YB9jhQN*D>$9XU~p83R_$YKjN_pabgt^I#sHW|j-) z8Qf<{Mgt^6IVOx4{d!swqXT}2xTZ3Y2^K~sq22e%LccC1ZuwVB#Ho3E_HM`TL5mNI55k>uzH5^} zFi{5My3V(Pk{LJVw3%saztbO86t`_6%BLvvQ)FZxk(6(_@)>M{#r!XfW|6tfFO2?O zcNw>z2~e56@r2r(L|BYo9rWad5;8mmA9?jQ=sQw&@zBPs2x3y*$E^h6b`N1=o9jyf z>k{vK1IdPUeoL1jl0p+MmU%P26M}`N8bzT%yAWi>E+ttPnE1>%3hz$KZ$TQRo)pm zl<`y@d~L3%RsKQLSgiK0_a9mQPyhB`>&JhD;XmRyldSk)l+3p&`_LmK$G_ME_$1)l z|IFnYKJ_f4pZbF2&oKi%(%mY-E0d?(m4U-|c!{4C-A5XWKZ~pvSjc>Tj|68^eU@0C zo&(#LgPqbp9L3)w8}9>&&V+MI!0RgDUB>rq#fOzc#A1l8%-h+uN1JgeW#2;o>zz^=V=Xi{nb?tRMr_EVsoyp!*8C9;b zRx@;Y0=~6p-K$zPnqJ~i0c_h*T%Ob&a9JZu+<%?u+qjV#5Nr3(7pVG_8(Wu8d$K{~ zMu<*wntvB~)Q$9wrk>UEc(g}kKhqAAm$gP_OGa-@CfzIlY_c>8&A>RU6A_O}n{6i7 z#JsH;0^dL4&Vd%U5;M}C&*)!jqsH6MEcbt=&Az#dV$(W!YLO?gV<;RP=6VsGS1Gp( zQzmPVRen|ee0FQPld3;N4bMK;`kVPU_Yv4RZ8Gc=p?_WPMzy_qp9(kzklzcS@OM~Fnu*J z(bY_(1rd3goxwbtq2^rV-9XzI-&A-p?_CGhAdNXe6GGYivnETauXBmZ*v zy3g@#^ENgnb=^=*iK*sXEeMY=EZr(QyHPn3tEq}ToiVH{2-8qBGT&jE02A2i=_qQ z{Ct$P^?tReozN?F6YQ}I^tOt3NcYP+eIHW~a1oX{uxjK`54s}j3wRGL>0qooc`H(SM8#1JCYOydk@_rhd2ZMAE|UzgkxSQ1}CHd zKX1W0P#<=ceuLepo6Pu5yXbN6r2P691+;!tI04OJWw!-`Er>#Ns4J#sH$DD{|1EK= z1Uo|nJ9t(>M%j?H7C}Zl%tgZ2Bb4Wq*XyWWjbV*Mz+;XbcmQU>V}S$b&Qm!xhy)Ha zqJmh~Eo|L;y+oP&DAjG!d%b*9(G`jMjBJ8v6x}exvoqobvV!bsVl6rrCP{T#d$X#% zRvarkTz~Gc+K^sV*42aa8Z4a0OcII9RfhxNp@Is0-BcE+FY-BRy3dRcf* zK#I5Gm%lb@OGoO)Ai$*+Bm;YjmI|kwJLED2ZH z^ZR-uS!)LHwn0YeL3+A^PPsdYukPh?*C&wheY0L)3Ti*Kjutt7l-I1rrDB?Puw)xw-sxf1d|J05pMb*U zRZ?#iMBuc#5eZs=tKql^*gkYRXd0Xn6le~7NzGrBB+m#YLy+@3vA^6N)c0BP8F zz#V8t^?{#tZ-TWvriApRypmO_ZK`h%eeeiGK^7#~HuS?o zhvn@1?@E+bAtraUwIAv!kbyGCccQ&LKN^JF0c_MHIAhASV_Ocf(qH$gRNy&wdK`D) zxe&vI5(pI&3XVB}@D^R8Xvb-pYX)gfO}<;pD4-Uq+zaz9SvBFs8M--%K_U4Exg8G29F6CU)(FBk@aFW=*l7|$i&eeN0H@=Qq3Is{%r zQ9uQp|C0RZcQ}MwSlPC`4al^91-uaKP5M#PHcu|T3_i2;FhYNrhR%>l4dv~{`KkH2 zYtI!qY8~e6MUqKTei>Hg;bMQ@0CFJ> z9cBYpDJH@}$gy6%E(O(iQw+G7d&k1;p)(=&Z~Dbyck?2wObz4-7thTwx;F$&H1W)@?znuH+T}|@r2qVhzM+N4VoL=VNxuk5|Klyy+Ievi4 zi<(BiA6zx=zvkWzWbp6cUCsf;jFi{8wm=4o_m6!DD0qB~9Jzc_t;*ui=VI1@*1~#D zLE-Syn}3PLW|7_4TXqdqDn9|Fz`t-G1@1y7Pe>gcsX64+bRc&VpU>i^J3VHp9U8}F zDW!ArH@4dST)kx_b=R%PBLsKRU$Fd|RkmFPF{AFCwXzNh=OYUUtq92kD}M_7MK(Jo zlt?)WS8y`xZmHzMM)|w2kg9&u_}W!e$q!mE3K&s(Pn8E1n?Z%7(hKd12>-A>y8%b3 z`C?f?+?jcwC`XLb2bx*bmsH$dQ9G7MSE0O$-8RwhXw7}W-HTP`zbsM}X5%z-pf7K5 zaX#FDjluoLcNSJw@He+c;=@)@7>$D>o0oNwcUn)_OEP~qm3NZUDSHo-(GVV2WkkxD zC!9Wq>++Qd*Px@&MRAN67lY+Ri@Q0@?+1fS@{u|}%P?=wWA@pZC4XS5qC#5-o3Yg7 zAe8WrygMgkFJ7kK$ieCZcbPxcLf@u~IY%=J%rtd$)=wNOQ6f60ipFI%+q~Qlr@Gf( zzn=BYc-+FK>S-83|l~nJp~J<``pg6U*%% zMjyk;E5!6KZ9}S1=sp@>)T)>5&gffKXIgtj2_Hr;n@DB0%~VeH_4}+i?Wvut_@_qy z(%w>Ca{qa&_(00q|1XP(phfWP{<=d~ZS11RSk4ImiK8s-m9AI)H=|t)2e6!qE|k|p zqRHx4OcZpWVqM;{#Xm*tue`Y53-j_40$MdYgQbuOK1Km|OLyL|| zD>=^f)W=r!dmB&jO}c_XZjVn{(ut|vXf@PlG}`jkV1;E$!Uk1vv@Eq4lY&o~aU7FE z+?M&3s7x-6X%mug{OP@merAcvEGQ;>y4V7b;Aqu43Wnx(hnoK(YWf|KJMQB1)iULK zqT>x8OeOXyNvuq{s`=s&x)bY;c<6!_q`k^va_Rard8brXsd!mbgfkLq)1sa)A#!5P z98_q5oetvuvi@fB0wx#5g|&snqAp7o$`xRWE@IFvVE|`pU7x60-yl5++5}&{uDTs6~BqWJAOr- z)ZTn8J=0s_s=ei*Y{SirANB>g`Q`pBn`lIi;~>(e5u7 z_mDN-2+xR81kNjsl?OR>CIl3etzjn88og7fh)e6u%-2H3N|})Nml+M33a7Q)mFi2_ zD6)ljetd%ka@8oZv8C-z*nqtH>dwoM`<*lvxysrT!#MVcc&es(&%`tamya6SJxQf= zw=$H=3rvw4+qL*QM^~^##rZIhf)&bMn8d;>ad~2YmahA@Am3jdZ*2hE|R_pd@mr%om>OV3t%d z=SPd5D_Zv^sadA3u#$r1a(;RC3L5p~IxT}4R1GgJlfUB|Qbj5K-3rfQ@71Gj-MYf! zMf6oeJ-TtvdY?3CWH3#6Ybf*?1sudY07v@~bb8-sdoB`de&1lcHldiS%@(#5o2!%} zsVbpnhfEfmff@y}!emB6hDJi_r8I)wWwziYOJiR`fhto|bfFp8UE|tTAG>Muv~WBU zi>UoC$ODeAK+|;oD5LGfI_TVHXKUL%Fod!kJi;*OuG6Ig0%GnR@>7O}L4trlfPmOl zRs9a}e|>O2+h&gTEUxYjEVd3NEOs^y?p{n@yxc7R*0`YO#mxeO-9L$*=lNn-EeWdha4D>#~er=%A)2phwfsb>u-Wq&a z&L^J012gU(SGlf7lUW>A)14bxFVpv&jjMLa;BUKR!|Zk3S#TmJgadPMnS1h|Nf_n- zl-|kHbG}t|4#+Fv#q!EC3eHyp?31X~LKn@W_fEe^d#37m+kWnsm+E0WeAlXF*|bY8 zSOhw7DGgX*7w4dSn1j%FUJ&v>;8-ViD?+T00Yws9kyfqLACTxY18Qh9R8m>D!aV5L z%bjw^yL!M46eTvm)2(MqUn4|5`1YCJD}T4=2PbFpPF8QA5#kKSXQ1yLJK%1|8zw*S z_8t|m0k33%5Gc2k1+9b#VCid&=m~_(PXcyM?3WPc5^?r8hFkFi@OtO*@=LOt{sITB z_uzNF>_FnM3yyE2h8?qejqiA4|+FaYPft5fr}LB|?i`sBQ>-rA@$ zuE5SB8DEn8G@yF#9e3ap03filI=G+EmjXXS>-Bi+xxV9_3^qiWQ3H0C7WpO|wZP2y z0_6{HYJl>=G@&DnUaj$w~AE? zS4VqeL>CS#O9W3x9+P`rMbN0E%mm7VufZ2!_>Fw>8#%6?nSB$MsSa(gkD)-L$$<&f z6Y8+Rnd99Z)=m`E6l!ouuWJYO6)!C4FA$Uij^8)&!+%B=-#hMiO{3mQhPhjA@{cR`1_vEIF_JQe9-DX#ht2x_`-%=aN1YJ>N(?lr+O+U-lB{Yo{vUEtLC7<_}|fL)rclgBCk#jJ4qyUcwE z5411b{5cxJGloA1_Dhil~_O6fH{7(tM?o%Gu+c)k}t7fd4!w>or3t&`J&D{t3Mz3 z`;g29@bV}Df+IaiBgf&XE$kuh-CTVu``BV-`nd;c2q@b$q9>cRcGsE|P6@Al{kD?wh5<=1_|b3$*xF#g_6iZ$SGy)4iaszWy! z!5_?vCrTO2eGe4j3uKRDU|Ev@yuA+lO2HG<$3j#f&$QOdR4|B{VBmsgcpEmrF~8k*yhVU+<`SU#yeG;J%*K{=FG7Z;sy6?B01Ek(J^kBW_^NrT0>x z+3PWeP(eS)B$jNq;cupP;1=rrA+ysG^Ui(kA?SYh@-jH_@s?toI{X11VHc&_6R+wzh6`jMV zU@rIy{Iv&{G!Su|tmcpK(;W!U^<@j~#h^axg&d&=V(&LMM*+nCiefVrYY*A}7xK$p zw(_3!pp_vPe{m_IkB}Q=$89csFw4Q~9Z#_lT+-iMLn@%w?~1xt3}5Cq$u>X_Ls3Aq zX2k;s#`?tFgEh&QPQ-WOkuH0tOI|G*i|=JCA_`>&NOx-xcy`C&jb!bWbpUh0on?I^b%k!v9%Te zZd-5}S;#GFXz;)3t4@Dc(0dZ2Kl4GO21O4;kTlV?BT4BtbW8t?z>L~kU5!YcI5ZjR z={CBBnUuWI=xN>2ivYw2TzNGZc&m>XMZ+@za_8uRdI%)rrFRDSlK@|OEsti5K|JMk z$i^br6Z7aHAiM03J1l81G8|gQjT>=YYUutW$;kJt(GNLCppi1V6;(ak*V5~wcMZbh zCmINY8oKQP;65sTF<|6W>*m&e@0B-cL zfVzDaSD)X8ct%JdG(t70irBIUDk!KKS9{F+WsNj0zIu&^%;; zxZ#Zxe4*ja<*Nk$OA&bCad`(pA9Rqdz4-&)3&>x+F-}%Ry$rL+;*Ex0dPsMOhAV;F z5Sy3^fqxP2j|G&Mtm6Z*fFy{+&)?dFrQX}ZUslZ%y!}@t8wrq9OKb`RMGV7JRy(0yc&Hy((DJFi z_9W!19Jb&exISrfw}jrT^9pM@2S`QS3-dq(4*XaJ!1hyY)&E%0#@^=$`e0D1x?Cqt z?xCZxI*Sd-;v1^{DOsCKtTvr$!%@~ZG3H9WH}iA8Ofc1IoPdwP%57`GW~jFFSJ6BT zF5WRtPAT4GuFrO?SPDZ=xv|H1Xp2&Al2talg|4EZii&7bg_ottzox8Oy3z{o+I5=t z(y4Kxs}rnvM<0@s2$kHF6p?Mdy5EnWL#({X_x#BlVzAumZ=OWkN3R zk8cT6`T77sN9u0k@hx+!64YdqDM9H-R)$BDBxHKV$@ksdlX4WJ5?)_!+Q-oS{@FNh>wx0lgQC!%wC8)$r;z_kC09S zKX|w&CTdKXq=sT=;8{b+a^MFCiGmbQji$bTh2bYp#tR{_uQw;bT zqrwTiIjHf3th4*wQGb1PPN@n~>GPSQ%XBl^GRJ_xj_et7p@&t2;ixj!txZ->g`b=; z$0#TGT1CJ&bd|;TG?kku$Y}7AzO$w!y zAd}GSLD*l-lpXSdv)X>WC zu#X|Jkp(O))+RRu$a2{#jQN9bg?WFgiOhZE<|gqim&D>b6Do@#UUJg0upJgS&LmKJVv`aT+tZMB+zyft55t z+~8u;y2>3$B1d3!b1pNUH8DS!qNVj=C6-vBrx%jM!6|4DiB_V!-%~^E;_aM`Q6m4J z=5te+5VW0Z-$6Zf*Bx;$1#RZ9$I%mG7f-6u8v<-%)Q6Z}^s^0W1=l#~OMN`)KbA+h zlcYk<)NaIxyLu#!stdV_ze6};kn|zYg(jO!fnz(_(zlx(8S4nrq%&l2X8T(vs_z3-;U$6PGNUe6tcJlXU6=!$91pTE2w$R zA16-{h*EO}YFb(K126J*2ES97RI@;jj=CP=9k2_Nym~p+xn#yyIsgLWSZE5w0wHOV zHs0$oB)Gps!k0l0H=v`-#wS2kGRdz{m$a{mK%Is?SpP#hY@=43?wRNMa!Ilv%{&wu z0od`u%R(|ZXgAx$!#nC*w@FF!9D=*Pn(<8(2pz8q$x68knRC4>J#Gt$)G}70K0ZFe zIir`ezg3R!KlOG+sR_?rTJ`1TPWH~+_4q;pWDGTGvznXOgO4#8A@jMx*vn4&j!jT>4pBX3AujdA!C7_)U__lpQ%8*fuZ zZKw0VZLYCMYMjm79h8GK%eyJ z&WRr#+52Q~mzZ?=a2JX+{nqIVI^LZV9l93K2?t&4&WQC!C_1D(igWmKFDUC%2M79?pAO3bPc z?Psiw_!?z`dO{Lr;2XSUf{*GGX+kzDfU+-g&Dx3mJj_b^JPb4{^u#xW1DSd80TWDw zKecrcF2-Kasn7#C|G{v^LrvII;Rj4UVevsOCYfl5{XmaT*mcOQ2`}z=nu+ccx%>VJordWesE4>m6W zzn9F5x)RC0ug7JsgauM5BX^HuRo%0%%dr6g&cNoX_Sez8g6Nf0r7j%^km2f zp320YL`VCNVxMD6^OLotyy_{L5^D|L;wit-#p@ih{JK>m)(W`IQ2kFluKQ2)1RT|s zd~%&JBc;PK-dc%c$N#!@Cbktn#Vh%#y2Ag&sk+kt!0|`R|Jha_FROhr+01R}PY^EE z_V@p=(Nm89jTDpqX(}9iGo%i-WE39CP<=P+Oy6TD|6nr|z0pty<8MpcEPgU0xtqWL zG1(jU|Cq?l!zW`Yeuk?Ij8!Uprv7ABs(w{JA0m_kq8-a#N4%hhJXPM!K7TFFC(={7 zGx>~cpE_Dg?eheGDKJ=VJ_@Hceui*tHacw|-dN6C%Rod0mG$F%DJSur3HF!EV3x!$ z8rl=DVBUya&%nLV52}suO{8pMJwc{~JQr^od<%d~;_<|zXZ$rAR#T(+OWDQiY~$k{ z$}~G%c0zFfX)LVnTYsItEw_vXt%y?Ixqd~pph!=EGrkZ zT-Go!fB!Zcd{?fFDXCR$7N3l6iDphuJKD9u{@Q7-CO?*vt?jw^ksb-L{bP#`b&BidjS(}H!qsTsHsD%BUOP}nB5`< zITDmf(j89o$BBkHxWBDNHG=6+ziY31{=#=m`bl->s!TLW_(Ayex*)u-1-@5lhZIdK ze&Ps$Eg{!@J6Gx2b1dsc2VQ7*)lzv5W>t?%KM$wO@`^D;?QKf47O1lAXU@ z!OW4N-w(a-;U$Y>Hc#9i**;_D)$ElWUpTvGqo0p4=E-34dzpE7hL3VVf9xqy*5^ z-EEMgsySjA^eB;6QPn~I76d1^$|M_)T#iv&TX6I@dL&y|g4L+Z_=<(CtHPDNtFZG3 z$rV=iArmZGjwxY%L0t5f-?=0W(UljHH7$>(FGpe!#85=T;EKi1f3t`3sQUCMH>@#y}Lk+MS z8OD@n>=c?S1TzTfRU-1m^N+4dc&(4dY`PN@%kB!03MG?3dr2p4_Q%g#G**I)hM#G3 zHUoCdl2bv+x(CUxzJGZ51s7BMLdkT$%9q#LPGpTCvjY71-dySz8kx%4e$6L0Tg&l3 zQ!-R2(48JW!$ny|?9V=Y4JihL4UvVI9B1;4J9TijDE&e$*ROQoFl7Ndf!Td0*&WS> zkGDRE_Qz{J1XHj=w00G+Fa$twq2gN8VL(M_nt(2yrw)8o%7I!_prN~rl@ZJRmmIc) z8eP(<-0zY7`;NwoU;jjd_{#~fLT7c9Y8D*#P-wzfmidUQ!Qd2^zdt72hnzKQ@k{jm z6RMg!dRTyXYgdso(CetH5IC$`dJPaOu7g*n(Xt0kn-`(2??1P{7CZruJwP-1b?72Ljix=H*$urozR%ieP5kqi-tZ^vjAl9WfSQ-EUSl|A$L9R=R z_m~MEc=3VyDp+TM<^HTmTa1vJ+svRVNyF>k-1l}Y$k1k=Isq!{tN%vgMAs$OQ9A$y z_myQEn>L41#RRSORj!}^$Vj`A@#a}0`g-R&k-1u9+heGuW4DH6e0MZu0r?{u@F zX_vCy2g!r4_h)RW+)%!fV^ZlExm@5cB}bOJ`W^#v%zgGZkC`cv^`5ihX4%pfleFj8 z?6Er2_lm@!T_#bDITwBncD_GoFk2a6gu(7+I=qri8&nru=pP%GWv{lEo!zQQ2K%qt zRSP4HWt9n<)d@4AXmg76GQH(O5zT~)BRzWJ=M-!8LhVhTf@9C=`Tp~DS$Tq0$VN_t zaJ|s*qo|Tv15{{()`WkV#ple!=WqVqw>#IWLxj;Xo?|B^)cn=aJaQfbNv|Hdvagie z7KbgqvdF#1B9Si2^oX}+h9q|n$A^1N!&xWgY+@4)*0xp?IqFus)$y@yV}fVwg&~!i z_V8cZb5*Q9XgbU}p@@}{6q)R-8(77dNL&o>E^P{t2D{tzIyajRi>kjzUNqhiTF9S) z)b#D^$EssA{JMTw$^wSC%uuNL=bLC<`{!1ia4z=j2z`?4JwIjBaCOtS{kY!+NCAxq z_H?qOc1$&en3{Zl@=VW1`~B>-XR6!ND$|ErI0??%&~1Y$s}ltvibCJNCH@PS?{r=K z)f|SF@cPC~!)*kL)WPks6`Pz4GrkVeOEnRR`*h=Jq2g|n&?dfy-pSRb;y|6Xmvt^A zmfRtgGnTVcR&5{@J&a195ETgzSB(gz#3Z?1_el;rH-^=(WcaF0n49%XEC4x}ekw|r zM*Uh{$|+@8{CjmY78K^FLid_deE+x~YDw{SW7)VBZ~-b&dsBJ+hCRCiqx%nr6bAKa zoAB$5m>c)EzgBt>rajAI#mlB1w7cu0)=$aogj5ski~8W<;=MgoG^)7uvOmA2qo3aY zg-~VaRKROmhb%Bqk|8ZR5O0h4qeuqiqn`x?yufl<>9TNV-vvABM$+t)d< zIMS<^C7zqn(4sxG>E3AjHH_Ty(K9F@!mdLtzwqJ}dntGJJ!Xt(5^hIV4+c1}I`H_AvqH#OZhZaMrWFayb6Oy-NvTQ?bg6DE^uZ^TWxcb%) ze<{K%PQHP@M$Pf9X@NHFA?35&o%k1kfOSh&xZPH~Yu3)W)FA0!cm;t?Bx2DYaHjvL zEphQfxl59ktnu{?6pbWi`+DS!xoDonq>zOCqsSyi>Mk{YaD6Hd6FpCKoo=Sk0P2^0fLdOW@0Hc$JygEU&o~sG1@v|e zTX3|if&kDL^^ay&=YG%_dC(QhK`N!-&kj@>l(W>qAZ5%=j~%Uv0G=sIw#+c)3pl=# z9#Wzn=ezB~zN=+AkIqja^A7B&fw7zgSEoCJL119-2T!T`xvB^D-B`$SFaLF~(x#0) zY%n@Oq6vXIVadf%>ZKIjIa|pl?IEK4=`2ThH!Qomu+J)*_wLSgIFoCi&}%fhnchnc z(LEsl@Ap3C)H>M9O zy^fGiAWB3a%5sD#SqAxY*?_@8Z^&CocLXIOHAZYOB%nnBCKcRiCF`!mVLG(~k7kBBR#Vw&;}D@^D$dec#yzQSD>QDvA0> zsvl01*9~HS0Pjqd9S3JqB$QUjPg%L$PWhX{Jv_G;cH1dd@XRyGX`|hZuw4baE4e}X z9x(vTl+HnPFB1Y`+lbUdS_4N}5$l9cuPV5AHQfrGdmXDa_IG%<3hShY_=(2PX3wg^aAXT@LgIePC=;nm}cV!pQa!fz%w5#3>Q$ckZQ zFS|_2-Le~KFOl2-e$9F_kL+#503bM|Nt=Zu-6`C!8Acz8tVQ&M8%?ptl)tSVHKx72 zc%Wz9+N-zIaz|VD@^sKWxun0vqm9Y6b!=T)8y0$2m+=ttEtwHM#6J{Y3y@_lL+*e4 z9PRqH47q!7)~=amBVH~qr*c3!EBSTSwn?fkZy`AzUCyUewp}Ro-ZcCkyP8p7`e8f1 zsm0_@2_;cbOr}(4v?c17r3}IEixKT`dXCrrH~Y}4qotQRG&Z2;Q~bLrv+j~@&iH$z34y;CINPRro4~9M&39yHG|}BE?$o*x!ftK3JC^g= z@llUQjx#l7V;sNU-;ytX4n2odvYuU$(z>Fo&V$pv014Q zsI%IBnnX}NY@(eOpSgrDU9U9uZaFHH*vU1-`YY9`B?#g||{6ZMPyz z0;ro`HEmZ8;Sz4z;s`ov_`N(c|CWolZewPkrG@})ex>}r-Ylyh{g zQCIx4@V$Cvtt&nFNHa=Xggcs-+muBr9B*nR5ND22fg#fY|N50hpcGg1rtC;ou%zL^ z#aWfBG3lrKZ17{M)gQ|bM2V;Lr8Z`5C&taik&i9IzKm~8Ba_{d^f=TYxGqWmLX}@= z;>3f<#A`i?LgihtJ;dhOUd7{$d$j8i(5kflS-CjhQdSTNG&|&dPUQqdED2wtWD;mu zI`8}c&i?9LZ4T-BgXBA9>QMzI3#{U=$O-sW^5|Aoev@cvUHtyQ*_r@zaG!ssZBr`hLdMdH_$%-mHJ8 zm-+T%5o7+h5j8qyB{QaXOonNX5Ct^Pl+Stu#K_x>aB-dl>u1GTe_Wo2F}I4)GLBxQWhidU8r-+%5yKvrrLi{8hH4d$R9kkQ+A%D9BOQKa^ik%>8Ov4EU z3P=`NB->cXjzThj;i6S*Q=gl(_PRvRBalbQCWw8>eL=bt8gb5%67{=W-s*A@qXq4xRRX0kfJyw8Na96>nzn7v9t>@ogR93 zog>6K-yB1u`=y)3V}aZKExbdX{T|fRkJn+Be3|D(v-)^8E6hWUsm{`pe1YRFZVQpW z7?)TH8>1oXppD;riCw8oEd@#;Mq*ZvsNBEe_Nzlt&t*#HNSon)ON)2g-W}>m!-}~I zTd^2*P@wH#FgM+!jp+$>lxlDn+f$XVMmvmz<5wKXVEZs2-kzfiFq*QKvJ95uSdDj_ zewsOamMtR=32Xxpg9voXQ@<#r7@JcNuTaJahdVf6lsT7U5&D}Gs-de01|76JrN&Py z7sqPfp#Ry_S`1tLb#VTCRQRZ<{Awn%EE!gbr90gvQeLkzt#^?q2W6IfKO?a2c~O;S z#aNJT^=Qrj3kyCoYbyGOME}F6b!)kN$EHPeTOU58!P7dU4LvYA-R#z=9Mzax*0ivZ zanNCu9I+-_aLBJO9mhggFE3W}l{-VjAS?kk)%qs${j$sMmR*-4CkoRf)lX*R&;F6L zAM>oBnB&3B5Bf$@J5Og$}*D?5H-EZ1ZkndHtngzv^0blXlk@by%bGQlh40ApemKK zASZy%IC#>5opa$Tve*QxrJ&UyqHE9A5EG5c@-DY@;-&AT? z?iz4nX5R%UsmU05ct|!hQ)hwxk$Q2z=wcYB@>gQ%q-yBH`FPRgN7$VIUMc5^wce9=g&4Lv5MyOtb=&b*H$mjr7o;djX!iD5qgd)+*BQii?NFA; zaB^0HR+dGBclw1Q!?s_~K}~flXuspwc(ca1n-NNooSNXg)Qi9@OBA9yTgPt4^o2KT z4bNZ(@sJA#HqlEqpcpKG4#AIW>S3h(u7Y-N39h{UyJDqlL{8u6D;e)t8MeYb6;x!6 z#0r~eM|VJF-+11FY}${&b&>)5>0sem^^v*Z(Ctgd!00O24SvxKW-JiYlf=ccou70y zbON*wWNwo>pnT zPu}tFnv<~*m$?pzb!@?HF(DGyX#p`p9Sg4;8K`Gx(F77sgdKVrIyzp(w!BlbOKlW_?w?TnmPS+MpZh@x8EFN@zD zm0`qcZ)Kb?_RPS=sH3WM1j&-X+^cs54^M|-4F+S5*df)tpS};cX@q@YG?}r;yc(Tmm?KpSDF9pSIN{MG?knSC3*bL z?laq-r>-c!^38mO(Uyd6fKM$Qp;`MEx%u35QNRkCyF5EPvO0ZClf9sV$hTnybnS}- zzp&B}-g!>N-1niB+tu;1R228CY!>_9(%G<29aM0b38OF6GU+fy@13isg|%r77{T6h zA?C0wr#|Hdbo`Kn(;BL9>h8Z&FV%4U84=aLP5f2I@D2fB2=m2)hCoN@0 z* z9q(8ZF@4P1<{MeiILyS>hqU9xIaxaS6sEJ@KWEuPdKe5aA+g{|Zf?a}Y;LX!FrB;e z#2`2LEml9b)!zrN3=E%FmpvDO`?o<34C!q2mFVs>b5*j)8AlUFGFo1*KRjucmJ=})&@=@F_nU{8B+aU4a=iA{^9j@5xgb8>vvpJ zKCktjQ)DP%=iF0h5qmT4P&)~-af;~UBJI-aY=L8#`3w%yr7DT6B*{DsrY>pWslGSK ze39fUT=}&r;|{pL?%Pb#^Dd!aMappz*5z7R8Pm$y>ExMJoE&Nzb&Jz+{R`@02^1+*_A%^5Xp$ZEw{|9YAlD}H)h+?7=EjRkh zj-5t+*0ayg7n0wlr<0%M?DK01$#2Wwr;(rS?DK00$#3ZC{x%b?IwJo^)RaJ0%=j%%yoe65^F)oH|ZVUWfC*d>w7k|-Ily*&>9#v?3e z&Xrm25rfN|^%JqV0DxhfqA~Rz#Nv*W&HpQ@xJ~OhMk~uEI2swkK0g|g8f;Ui;FxPS ztq6DZ--R5}hex4Om{mty4CDZ6MyW(KBADm-2MO9r1(ZQYrOIpRYVIG@X>$MauhSyF zjIr{%4m!&S+R19U1fbuYjPC!j7}tgG&Zb}Ix&9&7rVR@@0(;^;T&ACBM=%sZHQRCOhBFd^abpn1TwcoQVKA-^!r0C+ZUhW}R~b;9oi4GVwQYC@ zQa@LgXybjyx6}8J4Q!n~BgUKE#%9ED8jXhC*|FFHvmL(lPqA&aCDsX*@yZ%)yzgD2 zaQ*2}=*B20_&_M|d?AU8t)7c+2lT=s^#2(RXmRjMLG~RK&I&5!e}~HdwT}Bnefa_H8x8k_ zzmxE9(BoI?@NIzqWhnl`gn#ra6~CR~H|g+ea8BOY9*lnz;lJ~hF8?+i{$j#!ld?ld zw7-ocTzV3%Iuav3LHP!ipO9}Ln zafVn+HQJX)RKNRD{uE1wJ?C!2rT&2g{uTq5+|k0xfGaBz&yqS%gPeE(r{WST66-tx z*Ol^E|En$NKDHjGqo*!|6f3@6w-x&(e4ALOS&n}XzaMRW$=BsA)~|YnH*}K&@-pR+ zt@3i?f-htxB|iSUEf8pak|wqnwm6XgS=*5RKkAjmJ@;G0PKs~!=FT%}=NZ*+30>FZ z8BId6l@4M)L}C`oaRKJ&hQHSb6{?>d$9O4XiCA-E1P8jlJG@|H)mN#nqEP;ib zKJunsvQKP2E6Kk0Rv-}WQ<%PQ8cEjt=9x=&(CJFH?^~*5ne6s%M%mr+*_p|1+#5!+ zOM62vyV0A@N_I0hhnL;g8;xZ5!NxO}-GI}T-PfB!W%uYNlwHK35ZTFJVs#?BxQ#}# z>$XuZyFPE8mF%wF6kc}EZ7`CZxZ%uY*Z*{7_uQMIvK#p(%5HyMi0tHZYdVo#)9XgE z`}lRe?7rG~R-naQsk$u8sdGnZY$>B?^M8=LLBK?NEggO(iaG8_Gw4AVA>Xc-EI|GW>G{_d=-qXBAuMtnK zH`0g&>-8G3__fZr;53InE@K_E4LW02QQtdW$13>m$7iO#{#T5cJ@|^A*>7JxEA>78 zT6p!%f5oWIM!$0A>YIGJ>YM-CDIK9j+cc8>>s6HO10RJ*mfN$=B)jBgBgsDavR<;D z^=Bp7=TWbDuV^IMo-Z3ow*93um+aWnm2A&fLyhXY>uLO7b7oq3=SxPiyZI%(>_)tD zR9xtDj?5=nv ze2aeaMI+fQc=60-mwvjkd-CN_*$sJ_&i_4dX0rSG1tZyg@Pb};pRPMA+5PfTc-h_k zf|2Y}UpRBwWuC6=?tUp$c3oaV*)6O-GY9;+=Z$11KChQu`HN>IyUpvu%kHA*jbvwi z{>)`J{B&h^(YjDa=)j98J7<+DJDjK7?>uT!o$&33^2=FkB)<`B_43Ppp;P%y2(y{` zffvI&;s1NiNPgAN;TIXsql)j;Xn)(Z$az%BazmIbPXedSk|LZ9FQ9Px?GF|X_YT#z zX)K>xpEHur70>DAbN%yYC7)3*gx9b4))>iW{TlqTL_Orm*(lNJPjZeM!{qoaFxtFW z5s&wI6wf&yoI*VB8jpY17><9}7>s|{b}F8UVVJ%4`BRL4pEVr+KC3JX7|SP|`n>xujVkXo7bW|-`y7~PwkjQ73({OVm+|h zNUU2{>&5#1noh-<6Q+z`KNnuC!&e)L_1e|A+R!QsHM>!Yz=Hu(ELzd750h;!WZV3h zBC6icp{SnNYpi;Tr)w;um!2__(UNEMGJ59Ovy#y}Yr=cF@y{5^sOK|$Ma5Y0-UyRn z8f4h)RixAQEJ~+v&nX(Fv2-4L+DJMNJgt{b$?CI`&Qs5Z_hqA=Hj+;3Q+&1U%%#)s z*&ykBzM9Vet2n)8w!=_Jlb$jXQuX~m26h|^r!g;wO#j=A0+lmKVNDAk2)?XlQKBYrMi{ z-I1TXq7t9tr=}{p+^~wyf8G@`P+)yDO|RMC&W>A@efU%p(38uJDk7s?UlIRVc~)Zw z_p0!|@AoT=gjcfym5nPk9^7gLPxvqsNh^xvb&@&H|G6;v|FshL&1(l)YgeM|Vt1;t zW7Cl_i=3w%rVdzPB(95A=*4yAlV>O{-v6x(ZwI!N8HwxJGIgls^g-3PEpjN?Z3>g! z7r98dYk< z>1S0mo5SR`3z%$Ps)**kaum%^+k-_Tot9)yE;EvhZ<$^)ZDnUA8Ao||$&@TJlFZa) zXD68#R%j#>=gVAylBsz|*PiIsgjkf%DJE?Hx70{J)l2pAIkfz&va^!R=gY&p zutS#^N#@^6H1?(y=WtF>bMlu5X-=QzD3j&e&P*noo-mTh(@*GS^77KNlF8m>;ak%+ zPZ-JMyeH01CRxjZWD>CqWioGTnAUU(`7HGs$>$-jUOta5IV<_Rur$1U>|P`J{Jr@9 z(weSb8q}H^mXQCmMJJ^xD4jjke#90Yw;gawI`c*O#P`#w>#K9a- z5l^oZ@4Y0b6R&szWs~$)NKfUC33iO}q67J!3#g1gaI4u|oL!L*P*0QXf_o@mx0S#6 zWS0c2U#z-d?zxJM_dG*Bb{jcgijjCe=y!8)Iz7Mzf^1Ue6rcKIjz{eiPZHPk9J(oiX=zSIF52{s*d~g`w zSr|)Ts}L;Pv7JtbI~F-BMWkbX|J&)7LJtrVgRXYuUM@Dd?Kle3?<>Tym~X>kn*ZIz z_L4fh!oVN3LlC?SbFV1ic{C_f=Q$=5yEc<=Z(mA>QteS8E=7p0-m)}*fSpZTHWCSz z4`*9b<$D+cOYuTcQRv6f`f$R1y}~Vc#e@ehyA)|Z;wZ+DRiZp-auLrRz#C0Px_J`u zkK$LuGV#zS5K6^}}>`7uVf>D$l73&)*sI%rLieOp7X~pLrFj z^;69`To=WF%v3)%xqg)N(kMl-tv_)hNiva24z#2bB650xN@Q(AD3M(pD7O^t4{zD}pP1#B$`g!jek0I?oNYrFiC9%|OVu&iy8XLvxa za^+qf)hf1d%*sebN1GZ$Tl)si(u&B=n3f@mA{7QA56e2&?XaOiZsJ*Ar)FLFT~OAZ zvFK)%tQB_;qKoeE-j0qPJrMiTKVS0ho{lBkokVGPpFF-ril0Z|xiAv~><$92a1}D( zL9fc2eMl_tkDC%b@$f&oK$16}4)Vt=q}0J3OlSiFsy7seP=tlP-RwsK>@qNEcRy}X zc_Mv#HEUWUBy(Y}1IXq> zU^?n`08}zx?@&@ndPwFb`W^{^oCA>lapXdG=#c2h4Z!ec5kL#;qpdWX>J?Ueg-0!U zh5Rr1>s)%>h6l#JqmuJy(ChwR^ZgoLVLBdcHJ*ODzUDyvD7p!OhO*4?C+V6{gYf@m zR2n#ZJMGbI!<2t8N?^|YR{FUff4)Tk{r<<{t0}tuTYknc3@yIpDQ{48gADi_MH>;& zN#BO{=kAx^Ln$^quxl;->;<~)A4xw~L2L0pPCt|I=Y0BU`HmB1K*+rRe8vb;`SAq) zoP$5_pttGx^ApVtH0gMN)b9(>b)T`0&VRx$L8Y<{W;VRV6P3KqdbNTBb)^-qq@Z=1 zKz0M(b8jzQZl=LhAk(_u?3#q1NM<(zkKbztPR-EC+O=$`J5(z~mfhl;gE4I@y4#JFP9CkvSzOSS) z;tj|yew56hNO|2b4W|J1(MynyD= zna1yQaC~g$FOkP)A#y98FUyVgU{j&-&%cjq{ocdc8t_Z>a*py+{gRT1T?WMbpAk%a zP}ON*BIX-cl%HJ$C>`zu@56bW;N_vLUVSKxthfw*oD19?)m}b#-8|IZH=j50L$dk4 z5xRVW&1{^5LufkJ+AE|gMUuz2NcGxzxVo2E*Zc*Z4PJf;o((?!dD`&q5EtUuo<_UA zhbd(!q$E}d@8WwrrcWK4zfyv{Tng#Fj{ zhq_Rid=4hRH}<6=ey5yxTW{ufzNbS^=MWQ&(B;IT9Q|V*`fv{Mf)To$=;7#xb?6% z(0v?YjS;$>xR9eeb?8kT;yxpEIWdEykJX_!a)^OO=yKwD9DTYDy@5kS7@^CFKROut zLLGWNhZtmpE+<~Vb6=@LPvwgBt3!{jN&dva+{;v)WtF<)6`{16hEwTn#G{<}myPil;Sc38nnP6E40)83U$vb9kI|t#IyjZd z2AL>{X`IJiIv#Bt;yhy><>X`C&wxi;D34Zop|QIGk8ziWlTBGcs=G^!ko%6V>ss1p?UV#W6mMWg&gyLR))DHG|vHgOc!B3 z$1&G&%uhn|OwwZ(66SV}c^}90hvsS1V@@Z`LmV@KV_JR=$DkU@ZHVJP-Gz)2uUP2=9D-$3khIEL z^>sUeke6}f@f^95A@9Pq&Wv51B99~F7dUbpA!FT2*%j=>pB6pNSi*Ui{U4z9#Tpv#bxSgfs>S5l<#z{=_jKwrENy$z}8DGfXG6c8-?HGjz1b zYE;4Mqe-9PaKb#dg<*Cx%&N89t zv{4*w63;L{G{XjchJy%m2FL7Ym|=rH!vTagpQHUA!R<(BhV}Xk69{uP$9yNkD8qVv zhW!ccO^&vJXIRZM^lqVL7?-Y_U@IbcO%iAvM;^+N9}2R11N3MOgjUbdY#gnrS&J60 zN2@2aA2`})W`=ekD7XH4v_pjU8%JBi(dGx`7OO|ACA0uXo66B{Y0;uZ>(Ocmt;a9C z|Kn))2cg;YXw`%k!_odWarYny&7w!EB(!*rwwI$N{u1P^(G>AcGwafJeIMYfTq*Jb zn~N(1txe*=gZ5IdIe2dBc9o*9>qCKn)R(DaBPJ{N3$aTaq%HM0uinQ~=jy3CZJAkO z6u++Jn}3;1@8P7Cr^0nDqiCY^kGc z2B0-pDYpU9`GDVsp56CvllJVsgdf=4^1OTq6;k2P`&;}y!x@>6d}tXc`9)scD0}i3 zd3B@gm0#r5jk0&}=RfJ^fAMEu`uQ#Xw9(Ht{As42UGYR;yne!4b^-pxLn{*N=oT-) z#y4Nm&z<=5WBR$_S9#94>}mYDoqj%!KR43PS@`n>`Z*PUuB4yY_;WG+Ov9fG>1P6+ zD11^~tEjuKmfZqg}IDLX;*ti^?q@^yF&zI%X_oh)Ufish^DrFZplT!P3*U*uhhSBiT!9Ouhv z&Ug^!1-ugCgDOEJD0W<c>;Rs#P48nwb=mkUdcPHETjIxJ>-=IOzFCTwnN`Gy zp6!G(9B26_o3Q~^9A^!v%2UsI5w}&cTehhf)x>8_5TBO@tsO}2czOANDHB0gd1_^x zk~lESmxd@{T(ANXbd~3jjN^{=9044+RXypJ9Uj1L1tKSxpoQJYca;6nH)t~f7KaTR z8h#C3uxjB8Rs$vlLN`>pt(fp0G#+Ui%1TNjmAi5h{vnRC5j%cgY zRq*u{+9PJ)DWwgk=_OE*Na95Fuv;^*fSagT-d#*dpy_97oBmdLOBP#0|6D3ZOff>B zvY7=ch*hYv2t?Sz2o3h49PFNp(7urB1ACXtn#(LrIliXh8E@MIWJ^POZ-7v%AjE|r z95O~Yq#(p92sT1kbzH6f1iq0rNetRZo0cl24HEHe*lpGPVtZD-LPZ3PD@bWcHs#y7 zs^?z>h*iu>JN9cpyUnE%w6wIs^$(US-o^7WUPx2bp>1B6o2T+PAHS4ukolLJFs%Yd zYBF*B7SvdCC=>THUS|uw1$&1FM*DIuLrc*@hmNp@LO$(~UNZUZGI>zt4H?wu-|7|O zf0I30_j+26^BD>CK!xSwlm_R2?znnCneSfgU2-2W@gse0>?~iaZ1&lH^Iju@kK)CH zoZleKD+yEmLR50c$&%WA4^EOa;YR?zcg$0jQEL0GoI~tQ9|$kAGIViXpC6EHu$RHO*%nz*Qk~bvbgi9|k02 zGL-@8bhc@rKMXgNYSQjkisE@|vy}RB5zzpIX?Yg^=75SnFdko7r9M=bi#P94uLI?K6_R~ljYEoKkRnw4e)&{%*)23_-9q-g#@_QgsjoOH0u&$u zBv30q8pXhZGvX`Rc$X}MqX(uWQLCE{-Up%mnvJZ(65_$50>NSd9>vuF5bMz zQ$_tqtVq_}Q|Io+{32>PNZLzh9Wm-mW$hl?foed1WO8P(j#$|_oR30ih~ zn}TDElzhYQAY_m%o~js?(Xn#USRCqrhp`PaH6Jk_LF=~bF6@K}U`UcTjc)Z=5AR^4 z®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

DNe;rSdk{Ilo0 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�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 R91|uM*5&*E3K>aQ9e*Qt_AHm(7 z)=C?Uzwz3?;GAsl1m2V(hoZl6nEFg901$%A@w?Ny`A41qAApp^n12I^EK6?IUZQsZ zHw1VTd#;aL+`a$+V>iFY-HSi!{3F1-aYxhgcYwc_m6_+9ir-ypEeewXfYgBB<4)_p zYWyQGiaWuqrit}8oA_t=mHSp!|8#QiG( zFp8`wcMG!jpN0Mr;$8pAiQ(KqL>_Nl-MRji7Y23;O}JxcmGd1{|NAI*5-V{{TuK7p0zHJ-!%U7l+(t^=}#w6cd-sW z{3dDd!q4}A&h4OHT#9OrV2{0gBv0D!Sd1C}P2(S6-JMKpDT2G+`Zw0^llc=#_McZs ech873{v`8%;LtJt@-`Rp&jcS?lAr|0cmE$~Zjng< literal 0 HcmV?d00001 From 96da673da22e2d27b2279a31eef4249273ac1baa Mon Sep 17 00:00:00 2001 From: Lyor Goldstein Date: Tue, 27 Oct 2015 15:50:00 +0200 Subject: [PATCH 02/29] Added initialization and conversion between Windows SYSTEMTIME and Java Calendar object --- CHANGES.md | 10 + .../com/sun/jna/platform/win32/WinBase.java | 458 ++++++++++-------- .../sun/jna/platform/win32/WinBaseTest.java | 271 ++++++----- 3 files changed, 433 insertions(+), 306 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b29988d4af..bea0090634 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,16 @@ NOTE: as of JNA 4.0, JNA is now dual-licensed under LGPL and ASL (see LICENSE). NOTE: JNI native support is typically incompatible between minor versions, and almost always incompatible between major versions. +Next release +============ + +Features +-------- +* [#526](https://github.com/java-native-access/jna/pull/526): Added initialization and conversion between Windows SYSTEMTIME and Java Calendar [@lgoldstein](https://github.com/lgoldstein) + +Bug Fixes +--------- + Release 4.2.1 ============= diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java b/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java index 545ddacbb4..8623cfe39a 100755 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java @@ -1,18 +1,20 @@ /* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * Lesser General Public License for more details. */ package com.sun.jna.platform.win32; +import java.text.DateFormat; import java.util.Arrays; +import java.util.Calendar; import java.util.Date; import java.util.List; @@ -41,29 +43,29 @@ public interface WinBase extends StdCallLibrary, WinDef, BaseTSD { int WAIT_OBJECT_0 = ((NTStatus.STATUS_WAIT_0 ) + 0 ); int WAIT_ABANDONED = ((NTStatus.STATUS_ABANDONED_WAIT_0 ) + 0 ); int WAIT_ABANDONED_0 = ((NTStatus.STATUS_ABANDONED_WAIT_0 ) + 0 ); - + /** * Maximum computer name length. * The value is 15 on Mac, 31 on everything else. */ int MAX_COMPUTERNAME_LENGTH = Platform.isMac() ? 15 : 31; - + /** - * This logon type is intended for users who will be interactively using the computer, such - * as a user being logged on by a terminal server, remote shell, or similar process. This - * logon type has the additional expense of caching logon information for disconnected operations; - * therefore, it is inappropriate for some client/server applications, such as a mail server. + * This logon type is intended for users who will be interactively using the computer, such + * as a user being logged on by a terminal server, remote shell, or similar process. This + * logon type has the additional expense of caching logon information for disconnected operations; + * therefore, it is inappropriate for some client/server applications, such as a mail server. */ int LOGON32_LOGON_INTERACTIVE = 2; /** - * This logon type is intended for high performance servers to authenticate plaintext passwords. + * This logon type is intended for high performance servers to authenticate plaintext passwords. * The LogonUser function does not cache credentials for this logon type. */ int LOGON32_LOGON_NETWORK = 3; /** - * This logon type is intended for batch servers, where processes may be executing on behalf - * of a user without their direct intervention. This type is also for higher performance servers - * that process many plaintext authentication attempts at a time, such as mail or Web servers. + * This logon type is intended for batch servers, where processes may be executing on behalf + * of a user without their direct intervention. This type is also for higher performance servers + * that process many plaintext authentication attempts at a time, such as mail or Web servers. * The LogonUser function does not cache credentials for this logon type. */ int LOGON32_LOGON_BATCH = 4; @@ -72,32 +74,32 @@ public interface WinBase extends StdCallLibrary, WinDef, BaseTSD { */ int LOGON32_LOGON_SERVICE = 5; /** - * This logon type is for GINA DLLs that log on users who will be interactively using the computer. + * This logon type is for GINA DLLs that log on users who will be interactively using the computer. * This logon type can generate a unique audit record that shows when the workstation was unlocked. */ int LOGON32_LOGON_UNLOCK = 7; /** - * This logon type preserves the name and password in the authentication package, which allows the - * server to make connections to other network servers while impersonating the client. A server can - * accept plaintext credentials from a client, call LogonUser, verify that the user can access the + * This logon type preserves the name and password in the authentication package, which allows the + * server to make connections to other network servers while impersonating the client. A server can + * accept plaintext credentials from a client, call LogonUser, verify that the user can access the * system across the network, and still communicate with other servers. */ int LOGON32_LOGON_NETWORK_CLEARTEXT = 8; /** - * This logon type allows the caller to clone its current token and specify new credentials for - * outbound connections. The new logon session has the same local identifier but uses different - * credentials for other network connections. This logon type is supported only by the + * This logon type allows the caller to clone its current token and specify new credentials for + * outbound connections. The new logon session has the same local identifier but uses different + * credentials for other network connections. This logon type is supported only by the * LOGON32_PROVIDER_WINNT50 logon provider. */ int LOGON32_LOGON_NEW_CREDENTIALS = 9; /** - * Use the standard logon provider for the system. The default security provider is negotiate, - * unless you pass NULL for the domain name and the user name is not in UPN format. In this case, - * the default provider is NTLM. + * Use the standard logon provider for the system. The default security provider is negotiate, + * unless you pass NULL for the domain name and the user name is not in UPN format. In this case, + * the default provider is NTLM. */ int LOGON32_PROVIDER_DEFAULT = 0; - + /** * Use the Windows NT 3.5 logon provider. */ @@ -109,14 +111,14 @@ public interface WinBase extends StdCallLibrary, WinDef, BaseTSD { /** * Use the negotiate logon provider. */ - int LOGON32_PROVIDER_WINNT50 = 3; - + int LOGON32_PROVIDER_WINNT50 = 3; + /** * If this flag is set, a child process created with the bInheritHandles parameter of * CreateProcess set to TRUE will inherit the object handle. */ int HANDLE_FLAG_INHERIT = 1; - + /** * If this flag is set, calling the {@link Kernel32#CloseHandle} function will not * close the object handle. @@ -133,7 +135,7 @@ public interface WinBase extends StdCallLibrary, WinDef, BaseTSD { int STARTF_FORCEONFEEDBACK = 0x040; int STARTF_FORCEOFFFEEDBACK = 0x080; int STARTF_USESTDHANDLES = 0x100; - + // Process Creation flags int DEBUG_PROCESS = 0x00000001; int DEBUG_ONLY_THIS_PROCESS = 0x00000002; @@ -164,24 +166,24 @@ public interface WinBase extends StdCallLibrary, WinDef, BaseTSD { int FILE_USER_DISALLOWED = 7; int FILE_READ_ONLY = 8; int FILE_DIR_DISALOWED = 9; - + /* Open encrypted files raw flags */ int CREATE_FOR_IMPORT = 1; int CREATE_FOR_DIR = 2; int OVERWRITE_HIDDEN = 4; - + /* Invalid return values */ int INVALID_FILE_SIZE = 0xFFFFFFFF; int INVALID_SET_FILE_POINTER = 0xFFFFFFFF; int INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF; - + /** * Return code for a process still active. */ int STILL_ACTIVE = WinNT.STATUS_PENDING; /** - * The FILETIME structure is a 64-bit value representing the number of + * The FILETIME structure is a 64-bit value representing the number of * 100-nanosecond intervals since January 1, 1601 (UTC). * Conversion code in this class Copyright 2002-2004 Apache Software Foundation. * @author Rainer Klute (klute@rainer-klute.de) for the Apache Software Foundation (org.apache.poi.hpsf) @@ -189,8 +191,9 @@ public interface WinBase extends StdCallLibrary, WinDef, BaseTSD { public static class FILETIME extends Structure { public int dwLowDateTime; public int dwHighDateTime; - - protected List getFieldOrder() { + + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "dwLowDateTime", "dwHighDateTime" }); } @@ -226,7 +229,7 @@ public FILETIME(Pointer memory) { * operating system is the modern one? :-))

*/ private static final long EPOCH_DIFF = 11644473600000L; - + /** *

Converts a Windows FILETIME into a {@link Date}. The Windows * FILETIME structure holds a date and time associated with a @@ -245,7 +248,7 @@ public static Date filetimeToDate(final int high, final int low) { final long ms_since_19700101 = ms_since_16010101 - EPOCH_DIFF; return new Date(ms_since_19700101); } - + /** *

Converts a {@link Date} into a filetime.

* @@ -259,20 +262,21 @@ public static long dateToFileTime(final Date date) { final long ms_since_16010101 = ms_since_19700101 + EPOCH_DIFF; return ms_since_16010101 * 1000 * 10; } - + public Date toDate() { return filetimeToDate(dwHighDateTime, dwLowDateTime); } - + public long toLong() { return toDate().getTime(); } - + + @Override public String toString() { return super.toString() + ": " + toDate().toString(); //$NON-NLS-1$ } } - + /* Local Memory Flags */ int LMEM_FIXED = 0x0000; int LMEM_MOVEABLE = 0x0002; @@ -289,14 +293,14 @@ public String toString() { /* Flags returned by LocalFlags (in addition to LMEM_DISCARDABLE) */ int LMEM_DISCARDED = 0x4000; - int LMEM_LOCKCOUNT = 0x00FF; - + int LMEM_LOCKCOUNT = 0x00FF; + /** - * Specifies a date and time, using individual members for the month, - * day, year, weekday, hour, minute, second, and millisecond. The time - * is either in coordinated universal time (UTC) or local time, depending + * Specifies a date and time, using individual members for the month, + * day, year, weekday, hour, minute, second, and millisecond. The time + * is either in coordinated universal time (UTC) or local time, depending * on the function that is being called. - * http://msdn.microsoft.com/en-us/library/ms724950(VS.85).aspx + * @see
SYSTEMTIME structure */ public static class SYSTEMTIME extends Structure { // The year. The valid values for this member are 1601 through 30827. @@ -315,12 +319,68 @@ public static class SYSTEMTIME extends Structure { public short wSecond; // The millisecond. The valid values for this member are 0 through 999. public short wMilliseconds; - - protected List getFieldOrder() { + + public SYSTEMTIME() { + super(); + } + + public SYSTEMTIME(Date date) { + this(date.getTime()); + } + + public SYSTEMTIME(long timestamp) { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(timestamp); + fromCalendar(cal); + } + + public SYSTEMTIME(Calendar cal) { + fromCalendar(cal); + } + + public void fromCalendar(Calendar cal) { + wYear = (short) cal.get(Calendar.YEAR); + wMonth = (short) (1 + cal.get(Calendar.MONTH) - Calendar.JANUARY); // 1 = January + wDay = (short) cal.get(Calendar.DAY_OF_MONTH); + wHour = (short) cal.get(Calendar.HOUR_OF_DAY); + wMinute = (short) cal.get(Calendar.MINUTE); + wSecond = (short) cal.get(Calendar.SECOND); + wMilliseconds = (short) cal.get(Calendar.MILLISECOND); + wDayOfWeek = (short) (cal.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY); // 0 = Sunday + } + + public Calendar toCalendar() { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.YEAR, wYear); + cal.set(Calendar.MONTH, Calendar.JANUARY + (wMonth - 1)); + cal.set(Calendar.DAY_OF_MONTH, wDay); + cal.set(Calendar.HOUR_OF_DAY, wHour); + cal.set(Calendar.MINUTE, wMinute); + cal.set(Calendar.SECOND, wSecond); + cal.set(Calendar.MILLISECOND, wMilliseconds); + return cal; + } + + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "wYear", "wMonth", "wDayOfWeek", "wDay", "wHour", "wMinute", "wSecond", "wMilliseconds" }); } + + @Override + public String toString() { + // if not initialized, return the default representation + if ((wYear == 0) && (wMonth == 0) && (wDay == 0) + && (wHour == 0) && (wMinute == 0) && (wSecond == 0) + && (wMilliseconds == 0)) { + return super.toString(); + } + + DateFormat dtf = DateFormat.getDateTimeInstance(); + Calendar cal = toCalendar(); + return dtf.format(cal.getTime()); + } } - + /** * Specifies settings for a time zone. * http://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v=vs.85).aspx @@ -333,54 +393,55 @@ public static class TIME_ZONE_INFORMATION extends Structure { public String DaylightName; public SYSTEMTIME DaylightDate; public LONG DaylightBias; - - protected List getFieldOrder() { + + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "Bias", "StandardName", "StandardDate", "StandardBias", "DaylightName", "DaylightDate", "DaylightBias" }); } - } - + } + /** - * The lpBuffer parameter is a pointer to a PVOID pointer, and that the nSize - * parameter specifies the minimum number of TCHARs to allocate for an output - * message buffer. The function allocates a buffer large enough to hold the - * formatted message, and places a pointer to the allocated buffer at the address - * specified by lpBuffer. The caller should use the LocalFree function to free + * The lpBuffer parameter is a pointer to a PVOID pointer, and that the nSize + * parameter specifies the minimum number of TCHARs to allocate for an output + * message buffer. The function allocates a buffer large enough to hold the + * formatted message, and places a pointer to the allocated buffer at the address + * specified by lpBuffer. The caller should use the LocalFree function to free * the buffer when it is no longer needed. */ int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100; /** * Insert sequences in the message definition are to be ignored and passed through - * to the output buffer unchanged. This flag is useful for fetching a message for + * to the output buffer unchanged. This flag is useful for fetching a message for * later formatting. If this flag is set, the Arguments parameter is ignored. */ int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200; /** * The lpSource parameter is a pointer to a null-terminated message definition. - * The message definition may contain insert sequences, just as the message text + * The message definition may contain insert sequences, just as the message text * in a message table resource may. Cannot be used with FORMAT_MESSAGE_FROM_HMODULE * or FORMAT_MESSAGE_FROM_SYSTEM. */ int FORMAT_MESSAGE_FROM_STRING = 0x00000400; /** - * The lpSource parameter is a module handle containing the message-table + * The lpSource parameter is a module handle containing the message-table * resource(s) to search. If this lpSource handle is NULL, the current process's - * application image file will be searched. Cannot be used with + * application image file will be searched. Cannot be used with * FORMAT_MESSAGE_FROM_STRING. */ int FORMAT_MESSAGE_FROM_HMODULE = 0x00000800; /** - * The function should search the system message-table resource(s) for the + * The function should search the system message-table resource(s) for the * requested message. If this flag is specified with FORMAT_MESSAGE_FROM_HMODULE, - * the function searches the system message table if the message is not found in - * the module specified by lpSource. Cannot be used with FORMAT_MESSAGE_FROM_STRING. - * If this flag is specified, an application can pass the result of the + * the function searches the system message table if the message is not found in + * the module specified by lpSource. Cannot be used with FORMAT_MESSAGE_FROM_STRING. + * If this flag is specified, an application can pass the result of the * GetLastError function to retrieve the message text for a system-defined error. */ int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000; /** * The Arguments parameter is not a va_list structure, but is a pointer to an array - * of values that represent the arguments. This flag cannot be used with 64-bit - * argument values. If you are using 64-bit values, you must use the va_list + * of values that represent the arguments. This flag cannot be used with 64-bit + * argument values. If you are using 64-bit values, you must use the va_list * structure. */ int FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000; @@ -394,7 +455,7 @@ protected List getFieldOrder() { */ int DRIVE_NO_ROOT_DIR = 1; /** - * The drive is a type that has removable media, for example, a floppy drive + * The drive is a type that has removable media, for example, a floppy drive * or removable hard disk. */ int DRIVE_REMOVABLE = 2; @@ -413,10 +474,10 @@ protected List getFieldOrder() { /** * The drive is a RAM disk. */ - int DRIVE_RAMDISK = 6; - + int DRIVE_RAMDISK = 6; + /** - * The OVERLAPPED structure contains information used in + * The OVERLAPPED structure contains information used in * asynchronous (or overlapped) input and output (I/O). */ public static class OVERLAPPED extends Structure { @@ -425,32 +486,33 @@ public static class OVERLAPPED extends Structure { public int Offset; public int OffsetHigh; public HANDLE hEvent; - - protected List getFieldOrder() { + + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "Internal", "InternalHigh", "Offset", "OffsetHigh", "hEvent" }); } - } - + } + int INFINITE = 0xFFFFFFFF; /** - * Contains information about the current computer system. This includes the architecture and + * Contains information about the current computer system. This includes the architecture and * type of the processor, the number of processors in the system, the page size, and other such * information. */ public static class SYSTEM_INFO extends Structure { - + /** Unnamed inner structure. */ public static class PI extends Structure { - + public static class ByReference extends PI implements Structure.ByReference { - + } /** - * System's processor architecture. + * System's processor architecture. * This value can be one of the following values: - * + * * PROCESSOR_ARCHITECTURE_UNKNOWN * PROCESSOR_ARCHITECTURE_INTEL * PROCESSOR_ARCHITECTURE_IA64 @@ -461,23 +523,24 @@ public static class ByReference extends PI implements Structure.ByReference { * Reserved for future use. */ public WORD wReserved; - - protected List getFieldOrder() { + + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "wProcessorArchitecture", "wReserved" }); - } + } } - + /** Unnamed inner union. */ public static class UNION extends Union { - + public static class ByReference extends UNION implements Structure.ByReference { - + } /** * An obsolete member that is retained for compatibility with Windows NT 3.5 and earlier. * New applications should use the wProcessorArchitecture branch of the union. - * Windows Me/98/95: The system always sets this member to zero, the value defined + * Windows Me/98/95: The system always sets this member to zero, the value defined * for PROCESSOR_ARCHITECTURE_INTEL. */ public DWORD dwOemID; @@ -486,7 +549,7 @@ public static class ByReference extends UNION implements Structure.ByReference { */ public PI pi; } - + /** * Processor architecture (unnamed union). */ @@ -496,36 +559,36 @@ public static class ByReference extends UNION implements Structure.ByReference { */ public DWORD dwPageSize; /** - * Pointer to the lowest memory address accessible to applications and dynamic-link libraries (DLLs). + * Pointer to the lowest memory address accessible to applications and dynamic-link libraries (DLLs). */ public Pointer lpMinimumApplicationAddress; /** - * Pointer to the highest memory address accessible to applications and DLLs. + * Pointer to the highest memory address accessible to applications and DLLs. */ public Pointer lpMaximumApplicationAddress; /** - * Mask representing the set of processors configured into the system. Bit 0 is processor 0; bit 31 is processor 31. + * Mask representing the set of processors configured into the system. Bit 0 is processor 0; bit 31 is processor 31. */ public DWORD_PTR dwActiveProcessorMask; /** - * Number of processors in the system. + * Number of processors in the system. */ public DWORD dwNumberOfProcessors; /** - * An obsolete member that is retained for compatibility with Windows NT 3.5 and Windows Me/98/95. - * Use the wProcessorArchitecture, wProcessorLevel, and wProcessorRevision members to determine - * the type of processor. + * An obsolete member that is retained for compatibility with Windows NT 3.5 and Windows Me/98/95. + * Use the wProcessorArchitecture, wProcessorLevel, and wProcessorRevision members to determine + * the type of processor. * PROCESSOR_INTEL_386 * PROCESSOR_INTEL_486 * PROCESSOR_INTEL_PENTIUM */ - public DWORD dwProcessorType; + public DWORD dwProcessorType; /** * Granularity for the starting address at which virtual memory can be allocated. */ public DWORD dwAllocationGranularity; /** - * System's architecture-dependent processor level. It should be used only for display purposes. + * System's architecture-dependent processor level. It should be used only for display purposes. * To determine the feature set of a processor, use the IsProcessorFeaturePresent function. * If wProcessorArchitecture is PROCESSOR_ARCHITECTURE_INTEL, wProcessorLevel is defined by the CPU vendor. * If wProcessorArchitecture is PROCESSOR_ARCHITECTURE_IA64, wProcessorLevel is set to 1. @@ -535,14 +598,15 @@ public static class ByReference extends UNION implements Structure.ByReference { * Architecture-dependent processor revision. */ public WORD wProcessorRevision; - - protected List getFieldOrder() { + + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "processorArchitecture", "dwPageSize", "lpMinimumApplicationAddress", "lpMaximumApplicationAddress", "dwActiveProcessorMask", "dwNumberOfProcessors", "dwProcessorType", "dwAllocationGranularity", "wProcessorLevel", "wProcessorRevision"}); } } - + /** - * Contains information about the current state of both physical and virtual memory, including + * Contains information about the current state of both physical and virtual memory, including * extended memory. The GlobalMemoryStatusEx function stores information in this structure. */ public static class MEMORYSTATUSEX extends Structure { @@ -551,7 +615,7 @@ public static class MEMORYSTATUSEX extends Structure { */ public DWORD dwLength; /** - * A number between 0 and 100 that specifies the approximate percentage of physical memory + * A number between 0 and 100 that specifies the approximate percentage of physical memory * that is in use (0 indicates no memory use and 100 indicates full memory use). */ public DWORD dwMemoryLoad; @@ -561,12 +625,12 @@ public static class MEMORYSTATUSEX extends Structure { public DWORDLONG ullTotalPhys; /** * The amount of physical memory currently available, in bytes. This is the amount of physical - * memory that can be immediately reused without having to write its contents to disk first. + * memory that can be immediately reused without having to write its contents to disk first. * It is the sum of the size of the standby, free, and zero lists. */ public DWORDLONG ullAvailPhys; /** - * The current committed memory limit for the system or the current process, whichever is smaller, in bytes. + * The current committed memory limit for the system or the current process, whichever is smaller, in bytes. */ public DWORDLONG ullTotalPageFile; /** @@ -579,7 +643,7 @@ public static class MEMORYSTATUSEX extends Structure { */ public DWORDLONG ullTotalVirtual; /** - * The amount of unreserved and uncommitted memory currently in the user-mode portion of the + * The amount of unreserved and uncommitted memory currently in the user-mode portion of the * virtual address space of the calling process, in bytes. */ public DWORDLONG ullAvailVirtual; @@ -587,16 +651,17 @@ public static class MEMORYSTATUSEX extends Structure { * Reserved. This value is always 0. */ public DWORDLONG ullAvailExtendedVirtual; - - protected List getFieldOrder() { + + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "dwLength", "dwMemoryLoad", "ullTotalPhys", "ullAvailPhys", "ullTotalPageFile", "ullAvailPageFile", "ullTotalVirtual", "ullAvailVirtual", "ullAvailExtendedVirtual" }); } - + public MEMORYSTATUSEX() { dwLength = new DWORD(size()); } }; - + /** * The SECURITY_ATTRIBUTES structure contains the security descriptor for an * object and specifies whether the handle retrieved by specifying this @@ -609,27 +674,28 @@ public static class SECURITY_ATTRIBUTES extends Structure { * The size of the structure, in bytes. */ public DWORD dwLength; - + /** * A pointer to a SECURITY_DESCRIPTOR structure that controls access to the object. */ public Pointer lpSecurityDescriptor; - + /** * A Boolean value that specifies whether the returned handle is inherited when * a new process is created */ public boolean bInheritHandle; - - protected List getFieldOrder() { + + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "dwLength", "lpSecurityDescriptor", "bInheritHandle" }); } - + public SECURITY_ATTRIBUTES() { dwLength = new DWORD(size()); } } - + /** * Specifies the window station, desktop, standard handles, and appearance of the main * window for a process at creation time. @@ -639,19 +705,19 @@ public static class STARTUPINFO extends Structure { * The size of the structure, in bytes. */ public DWORD cb; - + /** * Reserved; must be NULL. */ public String lpReserved; - + /** * The name of the desktop, or the name of both the desktop and window station for this process. * A backslash in the string indicates that the string includes both the desktop and window * station names. For more information, see Thread Connection to a Desktop. */ public String lpDesktop; - + /** * For console processes, this is the title displayed in the title bar * if a new console window is created. If NULL, the name of the @@ -660,12 +726,12 @@ public static class STARTUPINFO extends Structure { * console window. */ public String lpTitle; - + /** * If dwFlags specifies STARTF_USEPOSITION, this member is the x offset * of the upper left corner of a window if a new window is created, in * pixels. Otherwise, this member is ignored. - * + * * The offset is from the upper left corner of the screen. For GUI * processes, the specified position is used the first time the new * process calls CreateWindow to create an overlapped window if the x @@ -677,7 +743,7 @@ public static class STARTUPINFO extends Structure { * If dwFlags specifies STARTF_USEPOSITION, this member is the y offset * of the upper left corner of a window if a new window is created, in * pixels. Otherwise, this member is ignored. - * + * * The offset is from the upper left corner of the screen. For GUI * processes, the specified position is used the first time the new * process calls CreateWindow to create an overlapped window if the y @@ -689,18 +755,18 @@ public static class STARTUPINFO extends Structure { * If dwFlags specifies STARTF_USESIZE, this member is the width of the * window if a new window is created, in pixels. Otherwise, this member * is ignored. - * + * * For GUI processes, this is used only the first time the new process * calls CreateWindow to create an overlapped window if the nWidth * parameter of CreateWindow is CW_USEDEFAULT. */ public DWORD dwXSize; - + /** * If dwFlags specifies STARTF_USESIZE, this member is the height of the * window if a new window is created, in pixels. Otherwise, this member * is ignored. - * + * * For GUI processes, this is used only the first time the new process * calls CreateWindow to create an overlapped window if the nHeight * parameter of CreateWindow is CW_USEDEFAULT. @@ -725,13 +791,13 @@ public static class STARTUPINFO extends Structure { * If dwFlags specifies STARTF_USEFILLATTRIBUTE, this member is the * initial text and background colors if a new console window is created * in a console application. Otherwise, this member is ignored. - * + * * This value can be any combination of the following values: * FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, * FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, * BACKGROUND_RED, and BACKGROUND_INTENSITY. For example, the following * combination of values produces red text on a white background: - * + * * FOREGROUND_RED| BACKGROUND_RED| BACKGROUND_GREEN| BACKGROUND_BLUE */ public DWORD dwFillAttribute; @@ -747,7 +813,7 @@ public static class STARTUPINFO extends Structure { * the values that can be specified in the nCmdShow parameter for the * ShowWindow function, except for SW_SHOWDEFAULT. Otherwise, this * member is ignored. - * + * * For GUI processes, the first time ShowWindow is called, its nCmdShow * parameter is ignored wShowWindow specifies the default value. In * subsequent calls to ShowWindow, the wShowWindow member is used if the @@ -769,14 +835,14 @@ public static class STARTUPINFO extends Structure { * If dwFlags specifies STARTF_USESTDHANDLES, this member is the * standard input handle for the process. If STARTF_USESTDHANDLES is not * specified, the default for standard input is the keyboard buffer. - * + * * If dwFlags specifies STARTF_USEHOTKEY, this member specifies a hotkey * value that is sent as the wParam parameter of a WM_SETHOTKEY message * to the first eligible top-level window created by the application * that owns the process. If the window is created with the WS_POPUP * window style, it is not eligible unless the WS_EX_APPWINDOW extended * window style is also set. For more information, see CreateWindowEx. - * + * * Otherwise, this member is ignored. */ public HANDLE hStdInput; @@ -796,11 +862,12 @@ public static class STARTUPINFO extends Structure { * buffer. */ public HANDLE hStdError; - - protected List getFieldOrder() { + + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "cb", "lpReserved", "lpDesktop", "lpTitle", "dwX", "dwY", "dwXSize", "dwYSize", "dwXCountChars", "dwYCountChars", "dwFillAttribute", "dwFlags", "wShowWindow", "cbReserved2", "lpReserved2", "hStdInput", "hStdOutput", "hStdError" }); } - + public STARTUPINFO() { cb = new DWORD(size()); } @@ -819,7 +886,7 @@ public static class PROCESS_INFORMATION extends Structure { * object. */ public HANDLE hProcess; - + /** * A handle to the primary thread of the newly created process. The * handle is used to specify the thread in all functions that perform @@ -842,8 +909,9 @@ public static class PROCESS_INFORMATION extends Structure { * identifier may be reused. */ public DWORD dwThreadId; - - protected List getFieldOrder() { + + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "hProcess", "hThread", "dwProcessId", "dwThreadId" }); } @@ -927,7 +995,7 @@ public PROCESS_INFORMATION(Pointer memory) { public interface THREAD_START_ROUTINE extends Callback{ public DWORD apply( LPVOID lpParameter ); } - + /** * Represents a thread entry point in another process. Can only be expressed as a pointer, as * the location has no meaning in the Java process. @@ -936,11 +1004,11 @@ public class FOREIGN_THREAD_START_ROUTINE extends Structure { LPVOID foreignLocation; @Override - protected List getFieldOrder() { + protected List getFieldOrder() { return Arrays.asList(new String[] { "foreignLocation" }); } } - + /** * Specifies a type of computer name to be retrieved by the GetComputerNameEx function */ @@ -952,18 +1020,18 @@ public static interface COMPUTER_NAME_FORMAT { * "corporate-mail-server", the NetBIOS name would be "corporate-mail-"". */ int ComputerNameNetBIOS = 0; - + /** * The DNS name of the local computer or the cluster associated with the local computer. */ int ComputerNameDnsHostname = 1; - + /** * The name of the DNS domain assigned to the local computer or the cluster associated * with the local computer. */ int ComputerNameDnsDomain = 2; - + /** * The fully qualified DNS name that uniquely identifies the local computer or the cluster * associated with the local computer. This name is a combination of the DNS host name and @@ -972,32 +1040,32 @@ public static interface COMPUTER_NAME_FORMAT { * the fully qualified DNS name is "corporate-mail-server.microsoft.com". */ int ComputerNameDnsFullyQualified = 3; - + /** * The NetBIOS name of the local computer. On a cluster, this is the NetBIOS name of the * local node on the cluster. */ int ComputerNamePhysicalNetBIOS = 4; - + /** * The DNS host name of the local computer. On a cluster, this is the DNS host name of the * local node on the cluster. */ int ComputerNamePhysicalDnsHostname = 5; - + /** * The name of the DNS domain assigned to the local computer. On a cluster, this is the DNS * domain of the local node on the cluster. */ int ComputerNamePhysicalDnsDomain = 6; - + /** * The fully qualified DNS name that uniquely identifies the computer. On a cluster, this is * the fully qualified DNS name of the local node on the cluster. The fully qualified DNS name * is a combination of the DNS host name and the DNS domain name, using the form HostName.DomainName. */ int ComputerNamePhysicalDnsFullyQualified = 7; - + /** * Note used - serves as an upper limit in case one wants to go through all the values */ @@ -1027,7 +1095,7 @@ public interface FE_IMPORT_FUNC extends Callback { public DWORD callback(ByteByReference pbData, Pointer pvCallbackContext, ULONGByReference ulLength); } - + int PIPE_CLIENT_END=0x00000000; int PIPE_SERVER_END=0x00000001; @@ -1035,33 +1103,33 @@ public DWORD callback(ByteByReference pbData, Pointer pvCallbackContext, int PIPE_ACCESS_DUPLEX=0x00000003; int PIPE_ACCESS_INBOUND=0x00000001; int PIPE_ACCESS_OUTBOUND=0x00000002; - + /* Pipe type values */ int PIPE_TYPE_BYTE=0x00000000; int PIPE_TYPE_MESSAGE=0x00000004; - + /* Pipe read modes */ int PIPE_READMODE_BYTE=0x00000000; int PIPE_READMODE_MESSAGE=0x00000002; - + /* Pipe wait modes */ int PIPE_WAIT=0x00000000; int PIPE_NOWAIT=0x00000001; - + int PIPE_ACCEPT_REMOTE_CLIENTS=0x00000000; int PIPE_REJECT_REMOTE_CLIENTS=0x00000008; - + int PIPE_UNLIMITED_INSTANCES=255; - + /* Named pipe pre-defined timeout values */ int NMPWAIT_USE_DEFAULT_WAIT=0x00000000; int NMPWAIT_NOWAIT=0x00000001; int NMPWAIT_WAIT_FOREVER=0xffffffff; - + /** - * + * * Contains the time-out parameters for a communications device. The * parameters determine the behavior of * {@link Kernel32#ReadFile(com.sun.jna.platform.win32.WinNT.HANDLE, java.nio.Buffer, int, com.sun.jna.ptr.IntByReference, com.sun.jna.platform.win32.WinBase.OVERLAPPED)} @@ -1070,7 +1138,7 @@ public DWORD callback(ByteByReference pbData, Pointer pvCallbackContext, * com.sun.jna.platform.win32.WinBase.OVERLAPPED))}, ReadFileEx, and * WriteFileEx operations on the device.
*
- * + * * Remarks
* If an application sets ReadIntervalTimeout and ReadTotalTimeoutMultiplier * to MAXDWORD and sets ReadTotalTimeoutConstant to a value greater than @@ -1082,26 +1150,26 @@ public DWORD callback(ByteByReference pbData, Pointer pvCallbackContext, * byte arrives and then returns immediately. *
  • If no bytes arrive within the time specified by * ReadTotalTimeoutConstant, ReadFile times out.
  • - * + * * @author Markus * */ public static class COMMTIMEOUTS extends Structure { /** - * + * * The maximum time allowed to elapse before the arrival of the next * byte on the communications line, in milliseconds. If the interval * between the arrival of any two bytes exceeds this amount, the * {@link Kernel32#ReadFile(com.sun.jna.platform.win32.WinNT.HANDLE, java.nio.Buffer, int, com.sun.jna.ptr.IntByReference, com.sun.jna.platform.win32.WinBase.OVERLAPPED)} * operation is completed and any buffered data is returned. A value of * zero indicates that interval time-outs are not used. - * + * * A value of MAXDWORD, combined with zero values for both the * {@link COMMTIMEOUTS#ReadTotalTimeoutConstant} and * {@link COMMTIMEOUTS#ReadTotalTimeoutMultiplier} members, specifies * that the read operation is to return immediately with the bytes that * have already been received, even if no bytes have been received. - * + * */ public DWORD ReadIntervalTimeout; @@ -1118,7 +1186,7 @@ public static class COMMTIMEOUTS extends Structure { * added to the product of the * {@link COMMTIMEOUTS#ReadTotalTimeoutMultiplier} member and the * requested number of bytes. - * + * * A value of zero for both the * {@link COMMTIMEOUTS#ReadTotalTimeoutMultiplier} and * {@link COMMTIMEOUTS#ReadTotalTimeoutConstant} members indicates that @@ -1139,16 +1207,17 @@ public static class COMMTIMEOUTS extends Structure { * added to the product of the * {@link COMMTIMEOUTS#WriteTotalTimeoutMultiplier} member and the * number of bytes to be written. - * + * * A value of zero for both the * {@link COMMTIMEOUTS#WriteTotalTimeoutMultiplier} and * {@link COMMTIMEOUTS#WriteTotalTimeoutConstant} members indicates that * total time-outs are not used for write operations. - * + * */ public DWORD WriteTotalTimeoutConstant; - protected List getFieldOrder() { + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "ReadIntervalTimeout", "ReadTotalTimeoutMultiplier", "ReadTotalTimeoutConstant", "WriteTotalTimeoutMultiplier", "WriteTotalTimeoutConstant" }); } @@ -1160,7 +1229,7 @@ protected List getFieldOrder() { * Defines the control setting for a serial communications device. */ public static class DCB extends Structure { - + /** * Type is used to handle the bitfield of the DBC structure. */ @@ -1265,10 +1334,10 @@ public boolean getfTXContinueOnXoff() { * The driver will not accept any further communications operations * until the application has acknowledged the error by calling the * ClearCommError function. - * + * * @param fAbortOnError */ - public void setfAbortOnError(boolean fAbortOnError) { + public void setfAbortOnError(boolean fAbortOnError) { int tmp = leftShiftMask(fAbortOnError ? 1 : 0, (byte)14, 0x01, this.intValue()); this.setValue(tmp); } @@ -1277,10 +1346,10 @@ public void setfAbortOnError(boolean fAbortOnError) { * If this member is TRUE, binary mode is enabled.
    * Windows does not support nonbinary mode transfers, so this member * must be TRUE. - * + * * @param fBinary */ - public void setfBinary(boolean fBinary) { + public void setfBinary(boolean fBinary) { int tmp = leftShiftMask(fBinary ? 1 : 0, (byte)0, 0x01, this.intValue()); this.setValue(tmp); } @@ -1290,10 +1359,10 @@ public void setfBinary(boolean fBinary) { * state of the DSR signal.
    * The driver ignores any bytes received, unless the DSR modem input * line is high. - * + * * @param fDsrSensitivity */ - public void setfDsrSensitivity(boolean fDsrSensitivity) { + public void setfDsrSensitivity(boolean fDsrSensitivity) { int tmp = leftShiftMask(fDsrSensitivity ? 1 : 0, (byte)6, 0x01, this.intValue()); this.setValue(tmp); } @@ -1304,7 +1373,7 @@ public void setfDsrSensitivity(boolean fDsrSensitivity) { *
  • {@link WinBase#DTR_CONTROL_DISABLE}
  • *
  • {@link WinBase#DTR_CONTROL_ENABLE}
  • *
  • {@link WinBase#DTR_CONTROL_HANDSHAKE}
  • - * + * * @param fOutxDsrFlow * value to set */ @@ -1318,7 +1387,7 @@ public void setfDtrControl(int fOutxDsrFlow) { * the character specified by the ErrorChar member.
    * If this member is TRUE and the fParity member is TRUE, replacement * occurs. - * + * * @param fErrorChar */ public void setfErrorChar(boolean fErrorChar) { @@ -1332,20 +1401,20 @@ public void setfErrorChar(boolean fErrorChar) { * buffer comes within XoffLim bytes of being full, and the XonChar * character is sent when the input buffer comes within XonLim bytes of * being empty. - * + * * @param fInX */ - public void setfInX(boolean fInX) { + public void setfInX(boolean fInX) { int tmp = leftShiftMask(fInX ? 1 : 0, (byte)9, 0x01, this.intValue()); this.setValue(tmp); } /** * If this member is TRUE, null bytes are discarded when received. - * + * * @param fNull */ - public void setfNull(boolean fNull) { + public void setfNull(boolean fNull) { int tmp = leftShiftMask(fNull ? 1 : 0, (byte)11, 0x01, this.intValue()); this.setValue(tmp); } @@ -1356,7 +1425,7 @@ public void setfNull(boolean fNull) { * If this member is TRUE, transmission stops when the XoffChar * character is received and starts again when the XonChar character is * received. - * + * * @param fOutX */ public void setfOutX(boolean fOutX) { @@ -1369,7 +1438,7 @@ public void setfOutX(boolean fOutX) { * for output flow control.
    * If this member is TRUE and CTS is turned off, output is suspended * until CTS is sent again. - * + * * @param fOutxCtsFlow */ public void setfOutxCtsFlow(boolean fOutxCtsFlow) { @@ -1382,7 +1451,7 @@ public void setfOutxCtsFlow(boolean fOutxCtsFlow) { * for output flow control.
    * If this member is TRUE and DSR is turned off, output is suspended * until DSR is sent again. - * + * * @param fOutxDsrFlow */ public void setfOutxDsrFlow(boolean fOutxDsrFlow) { @@ -1393,23 +1462,23 @@ public void setfOutxDsrFlow(boolean fOutxDsrFlow) { /** * If this member is TRUE, parity checking is performed and errors are * reported. - * + * * @param fParity */ - public void setfParity(boolean fParity) { + public void setfParity(boolean fParity) { int tmp = leftShiftMask(fParity ? 1 : 0, (byte)1, 0x01, this.intValue()); this.setValue(tmp); } /** - * + * * The RTS (request-to-send) flow control. This member can be one of the * following values. *
  • {@link WinBase#RTS_CONTROL_DISABLE}
  • *
  • {@link WinBase#RTS_CONTROL_ENABLE}
  • *
  • {@link WinBase#RTS_CONTROL_HANDSHAKE}
  • *
  • {@link WinBase#RTS_CONTROL_TOGGLE}
  • - * + * * @param fRtsControl */ public void setfRtsControl(int fRtsControl) { @@ -1424,15 +1493,15 @@ public void setfRtsControl(int fRtsControl) { * If this member is FALSE, transmission does not continue until the * input buffer is within XonLim bytes of being empty and the driver has * transmitted the XonChar character to resume reception. - * + * * @param fTXContinueOnXoff */ - public void setfTXContinueOnXoff(boolean fTXContinueOnXoff) { + public void setfTXContinueOnXoff(boolean fTXContinueOnXoff) { int tmp = leftShiftMask(fTXContinueOnXoff ? 1 : 0, (byte)7, 0x01, this.intValue()); this.setValue(tmp); } - - + + private static int leftShiftMask(int valuetoset, byte shift, int mask, int storage) { int tmp = storage; tmp &= ~(mask << shift); @@ -1447,7 +1516,7 @@ private static int leftShiftMask(int valuetoset, byte shift, int mask, int stor public DWORD DCBlength; /** - * + * * The baud rate at which the communications device operates. This * member can be an actual baud rate value, or one of the following * indexes. @@ -1464,7 +1533,7 @@ private static int leftShiftMask(int valuetoset, byte shift, int mask, int stor *
  • {@link WinBase#CBR_56000}
  • *
  • {@link WinBase#CBR_128000}
  • *
  • {@link WinBase#CBR_256000}
  • - * + * */ public DWORD BaudRate; @@ -1504,7 +1573,7 @@ private static int leftShiftMask(int valuetoset, byte shift, int mask, int stor public BYTE ByteSize; /** - * + * * The parity scheme to be used. This member can be one of the following * values. *
  • {@link WinBase#EVENPARITY}
  • @@ -1559,7 +1628,8 @@ public DCB() { DCBlength = new DWORD(size()); } - protected List getFieldOrder() { + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "DCBlength", "BaudRate", "controllBits", "wReserved", "XonLim", "XoffLim", "ByteSize", "Parity", "StopBits", "XonChar", "XoffChar", "ErrorChar", "EofChar", "EvtChar", "wReserved1" }); diff --git a/contrib/platform/test/com/sun/jna/platform/win32/WinBaseTest.java b/contrib/platform/test/com/sun/jna/platform/win32/WinBaseTest.java index cecb4b3b7d..2e03b14c46 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/WinBaseTest.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/WinBaseTest.java @@ -1,133 +1,180 @@ /* Copyright (c) 2015 Markus Bollig, All Rights Reserved - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * Lesser General Public License for more details. */ package com.sun.jna.platform.win32; +import java.util.Calendar; + import com.sun.jna.platform.win32.WinBase.DCB; +import com.sun.jna.platform.win32.WinBase.SYSTEMTIME; import junit.framework.TestCase; public class WinBaseTest extends TestCase { + public WinBaseTest() { + super(); + } + + public WinBaseTest(String name) { + super(name); + } + + public void testCalendarToSystemTimeConversion() { + Calendar expected = Calendar.getInstance(); + SYSTEMTIME sysTime = new SYSTEMTIME(); + sysTime.fromCalendar(expected); + + assertEquals("Mismatched systime year", expected.get(Calendar.YEAR), sysTime.wYear); + assertEquals("Mismatched systime month", (1 + expected.get(Calendar.MONTH) - Calendar.JANUARY), sysTime.wMonth); + assertEquals("Mismatched systime day", expected.get(Calendar.DAY_OF_MONTH), sysTime.wDay); + assertEquals("Mismatched systime weekday", expected.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY, sysTime.wDayOfWeek); + + assertEquals("Mismatched systime hour", expected.get(Calendar.HOUR_OF_DAY), sysTime.wHour); + assertEquals("Mismatched systime minute", expected.get(Calendar.MINUTE), sysTime.wMinute); + assertEquals("Mismatched systime second", expected.get(Calendar.SECOND), sysTime.wSecond); + // NOTE: we do not check millis due to clock granularity issues - /** - * Test the mapping of the {@link DCB} structure. - * Particularly the mapping of the bit field is tested. - */ + Calendar actual = sysTime.toCalendar(); + assertEquals("Mismatched calendar year", sysTime.wYear, actual.get(Calendar.YEAR)); + assertEquals("Mismatched calendar month", Calendar.JANUARY + (sysTime.wMonth - 1), actual.get(Calendar.MONTH)); + assertEquals("Mismatched calendar day", sysTime.wDay, actual.get(Calendar.DAY_OF_MONTH)); + assertEquals("Mismatched calendar weekday", sysTime.wDayOfWeek, actual.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY); + + assertEquals("Mismatched calendar hour", sysTime.wHour, actual.get(Calendar.HOUR_OF_DAY)); + assertEquals("Mismatched calendar minute", sysTime.wMinute, actual.get(Calendar.MINUTE)); + assertEquals("Mismatched calendar second", sysTime.wSecond, actual.get(Calendar.SECOND)); + // NOTE: we do not check millis due to clock granularity issues + + assertEquals("Mismatched reconstructed year", expected.get(Calendar.YEAR), actual.get(Calendar.YEAR)); + assertEquals("Mismatched reconstructed month", expected.get(Calendar.MONTH), actual.get(Calendar.MONTH)); + assertEquals("Mismatched reconstructed day", expected.get(Calendar.DAY_OF_MONTH), actual.get(Calendar.DAY_OF_MONTH)); + assertEquals("Mismatched reconstructed weekday", expected.get(Calendar.DAY_OF_WEEK), actual.get(Calendar.DAY_OF_WEEK)); + + assertEquals("Mismatched reconstructed hour", expected.get(Calendar.HOUR_OF_DAY), actual.get(Calendar.HOUR_OF_DAY)); + assertEquals("Mismatched reconstructed minute", expected.get(Calendar.MINUTE), actual.get(Calendar.MINUTE)); + assertEquals("Mismatched reconstructed second", expected.get(Calendar.SECOND), actual.get(Calendar.SECOND)); + // NOTE: we do not check millis due to clock granularity issues + } + + /** + * Test the mapping of the {@link DCB} structure. + * Particularly the mapping of the bit field is tested. + */ public void testDCBStructureMapping() { - //first we test if the WinBase.DCB bitfiled mapping works as expected. - WinBase.DCB lpDCB = new WinBase.DCB(); - lpDCB.controllBits.setValue(0); - - lpDCB.controllBits.setfBinary(true); - assertEquals(1, lpDCB.controllBits.longValue()); - assertEquals(true, lpDCB.controllBits.getfBinary()); - lpDCB.controllBits.setfBinary(false); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(false, lpDCB.controllBits.getfBinary()); - - lpDCB.controllBits.setfParity(true); - assertEquals(2, lpDCB.controllBits.longValue()); - assertEquals(true, lpDCB.controllBits.getfParity()); - lpDCB.controllBits.setfParity(false); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(false, lpDCB.controllBits.getfParity()); - - lpDCB.controllBits.setfOutxCtsFlow(true); - assertEquals(4, lpDCB.controllBits.longValue()); - assertEquals(true, lpDCB.controllBits.getfOutxCtsFlow()); - lpDCB.controllBits.setfOutxCtsFlow(false); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(false, lpDCB.controllBits.getfOutxCtsFlow()); - - lpDCB.controllBits.setfOutxDsrFlow(true); - assertEquals(8, lpDCB.controllBits.longValue()); - assertEquals(true, lpDCB.controllBits.getfOutxDsrFlow()); - lpDCB.controllBits.setfOutxDsrFlow(false); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(false, lpDCB.controllBits.getfOutxDsrFlow()); - - lpDCB.controllBits.setfDtrControl(WinBase.DTR_CONTROL_ENABLE); - assertEquals(16, lpDCB.controllBits.longValue()); - assertEquals(WinBase.DTR_CONTROL_ENABLE, lpDCB.controllBits.getfDtrControl()); - lpDCB.controllBits.setfDtrControl(WinBase.DTR_CONTROL_HANDSHAKE); - assertEquals(32, lpDCB.controllBits.longValue()); - assertEquals(WinBase.DTR_CONTROL_HANDSHAKE, lpDCB.controllBits.getfDtrControl()); - lpDCB.controllBits.setfDtrControl(WinBase.DTR_CONTROL_DISABLE); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(WinBase.DTR_CONTROL_DISABLE, lpDCB.controllBits.getfDtrControl()); - - lpDCB.controllBits.setfDsrSensitivity(true); - assertEquals(64, lpDCB.controllBits.longValue()); - assertEquals(true, lpDCB.controllBits.getfDsrSensitivity()); - lpDCB.controllBits.setfDsrSensitivity(false); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(false, lpDCB.controllBits.getfDsrSensitivity()); - - lpDCB.controllBits.setfTXContinueOnXoff(true); - assertEquals(128, lpDCB.controllBits.longValue()); - assertEquals(true, lpDCB.controllBits.getfTXContinueOnXoff()); - lpDCB.controllBits.setfTXContinueOnXoff(false); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(false, lpDCB.controllBits.getfTXContinueOnXoff()); - - lpDCB.controllBits.setfOutX(true); - assertEquals(256, lpDCB.controllBits.longValue()); - assertEquals(true, lpDCB.controllBits.getfOutX()); - lpDCB.controllBits.setfOutX(false); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(false, lpDCB.controllBits.getfOutX()); - - lpDCB.controllBits.setfInX(true); - assertEquals(512, lpDCB.controllBits.longValue()); - assertEquals(true, lpDCB.controllBits.getfInX()); - lpDCB.controllBits.setfInX(false); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(false, lpDCB.controllBits.getfInX()); - - lpDCB.controllBits.setfErrorChar(true); - assertEquals(1024, lpDCB.controllBits.longValue()); - assertEquals(true, lpDCB.controllBits.getfErrorChar()); - lpDCB.controllBits.setfErrorChar(false); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(false, lpDCB.controllBits.getfErrorChar()); - - lpDCB.controllBits.setfNull(true); - assertEquals(2048, lpDCB.controllBits.longValue()); - assertEquals(true, lpDCB.controllBits.getfNull()); - lpDCB.controllBits.setfNull(false); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(false, lpDCB.controllBits.getfNull()); - - - lpDCB.controllBits.setfRtsControl(WinBase.RTS_CONTROL_ENABLE); - assertEquals(4096, lpDCB.controllBits.longValue()); - assertEquals(WinBase.RTS_CONTROL_ENABLE, lpDCB.controllBits.getfRtsControl()); - lpDCB.controllBits.setfRtsControl(WinBase.RTS_CONTROL_HANDSHAKE); - assertEquals(8192, lpDCB.controllBits.longValue()); - assertEquals(WinBase.RTS_CONTROL_HANDSHAKE, lpDCB.controllBits.getfRtsControl()); - lpDCB.controllBits.setfRtsControl(WinBase.RTS_CONTROL_TOGGLE); - assertEquals(12288, lpDCB.controllBits.longValue()); - assertEquals(WinBase.RTS_CONTROL_TOGGLE, lpDCB.controllBits.getfRtsControl()); - lpDCB.controllBits.setfRtsControl(WinBase.RTS_CONTROL_DISABLE); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(WinBase.RTS_CONTROL_DISABLE, lpDCB.controllBits.getfRtsControl()); - - - lpDCB.controllBits.setfAbortOnError(true); - assertEquals(16384, lpDCB.controllBits.longValue()); - assertEquals(true, lpDCB.controllBits.getfAbortOnError()); - lpDCB.controllBits.setfAbortOnError(false); - assertEquals(0, lpDCB.controllBits.longValue()); - assertEquals(false, lpDCB.controllBits.getfAbortOnError()); + //first we test if the WinBase.DCB bitfiled mapping works as expected. + WinBase.DCB lpDCB = new WinBase.DCB(); + lpDCB.controllBits.setValue(0); + + lpDCB.controllBits.setfBinary(true); + assertEquals(1, lpDCB.controllBits.longValue()); + assertEquals(true, lpDCB.controllBits.getfBinary()); + lpDCB.controllBits.setfBinary(false); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(false, lpDCB.controllBits.getfBinary()); + + lpDCB.controllBits.setfParity(true); + assertEquals(2, lpDCB.controllBits.longValue()); + assertEquals(true, lpDCB.controllBits.getfParity()); + lpDCB.controllBits.setfParity(false); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(false, lpDCB.controllBits.getfParity()); + + lpDCB.controllBits.setfOutxCtsFlow(true); + assertEquals(4, lpDCB.controllBits.longValue()); + assertEquals(true, lpDCB.controllBits.getfOutxCtsFlow()); + lpDCB.controllBits.setfOutxCtsFlow(false); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(false, lpDCB.controllBits.getfOutxCtsFlow()); + + lpDCB.controllBits.setfOutxDsrFlow(true); + assertEquals(8, lpDCB.controllBits.longValue()); + assertEquals(true, lpDCB.controllBits.getfOutxDsrFlow()); + lpDCB.controllBits.setfOutxDsrFlow(false); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(false, lpDCB.controllBits.getfOutxDsrFlow()); + + lpDCB.controllBits.setfDtrControl(WinBase.DTR_CONTROL_ENABLE); + assertEquals(16, lpDCB.controllBits.longValue()); + assertEquals(WinBase.DTR_CONTROL_ENABLE, lpDCB.controllBits.getfDtrControl()); + lpDCB.controllBits.setfDtrControl(WinBase.DTR_CONTROL_HANDSHAKE); + assertEquals(32, lpDCB.controllBits.longValue()); + assertEquals(WinBase.DTR_CONTROL_HANDSHAKE, lpDCB.controllBits.getfDtrControl()); + lpDCB.controllBits.setfDtrControl(WinBase.DTR_CONTROL_DISABLE); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(WinBase.DTR_CONTROL_DISABLE, lpDCB.controllBits.getfDtrControl()); + + lpDCB.controllBits.setfDsrSensitivity(true); + assertEquals(64, lpDCB.controllBits.longValue()); + assertEquals(true, lpDCB.controllBits.getfDsrSensitivity()); + lpDCB.controllBits.setfDsrSensitivity(false); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(false, lpDCB.controllBits.getfDsrSensitivity()); + + lpDCB.controllBits.setfTXContinueOnXoff(true); + assertEquals(128, lpDCB.controllBits.longValue()); + assertEquals(true, lpDCB.controllBits.getfTXContinueOnXoff()); + lpDCB.controllBits.setfTXContinueOnXoff(false); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(false, lpDCB.controllBits.getfTXContinueOnXoff()); + + lpDCB.controllBits.setfOutX(true); + assertEquals(256, lpDCB.controllBits.longValue()); + assertEquals(true, lpDCB.controllBits.getfOutX()); + lpDCB.controllBits.setfOutX(false); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(false, lpDCB.controllBits.getfOutX()); + + lpDCB.controllBits.setfInX(true); + assertEquals(512, lpDCB.controllBits.longValue()); + assertEquals(true, lpDCB.controllBits.getfInX()); + lpDCB.controllBits.setfInX(false); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(false, lpDCB.controllBits.getfInX()); + + lpDCB.controllBits.setfErrorChar(true); + assertEquals(1024, lpDCB.controllBits.longValue()); + assertEquals(true, lpDCB.controllBits.getfErrorChar()); + lpDCB.controllBits.setfErrorChar(false); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(false, lpDCB.controllBits.getfErrorChar()); + + lpDCB.controllBits.setfNull(true); + assertEquals(2048, lpDCB.controllBits.longValue()); + assertEquals(true, lpDCB.controllBits.getfNull()); + lpDCB.controllBits.setfNull(false); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(false, lpDCB.controllBits.getfNull()); + + + lpDCB.controllBits.setfRtsControl(WinBase.RTS_CONTROL_ENABLE); + assertEquals(4096, lpDCB.controllBits.longValue()); + assertEquals(WinBase.RTS_CONTROL_ENABLE, lpDCB.controllBits.getfRtsControl()); + lpDCB.controllBits.setfRtsControl(WinBase.RTS_CONTROL_HANDSHAKE); + assertEquals(8192, lpDCB.controllBits.longValue()); + assertEquals(WinBase.RTS_CONTROL_HANDSHAKE, lpDCB.controllBits.getfRtsControl()); + lpDCB.controllBits.setfRtsControl(WinBase.RTS_CONTROL_TOGGLE); + assertEquals(12288, lpDCB.controllBits.longValue()); + assertEquals(WinBase.RTS_CONTROL_TOGGLE, lpDCB.controllBits.getfRtsControl()); + lpDCB.controllBits.setfRtsControl(WinBase.RTS_CONTROL_DISABLE); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(WinBase.RTS_CONTROL_DISABLE, lpDCB.controllBits.getfRtsControl()); + + + lpDCB.controllBits.setfAbortOnError(true); + assertEquals(16384, lpDCB.controllBits.longValue()); + assertEquals(true, lpDCB.controllBits.getfAbortOnError()); + lpDCB.controllBits.setfAbortOnError(false); + assertEquals(0, lpDCB.controllBits.longValue()); + assertEquals(false, lpDCB.controllBits.getfAbortOnError()); } public static void main(String[] args) { From f0b6b129bd1dce68fad725469e5f9e11ab6edf85 Mon Sep 17 00:00:00 2001 From: Michael Freeman Date: Sat, 31 Oct 2015 12:15:45 -0400 Subject: [PATCH 03/29] test for issue #520 --- .../COM/ShellApplicationWindowsTest.java | 232 ++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 contrib/platform/test/com/sun/jna/platform/win32/COM/ShellApplicationWindowsTest.java diff --git a/contrib/platform/test/com/sun/jna/platform/win32/COM/ShellApplicationWindowsTest.java b/contrib/platform/test/com/sun/jna/platform/win32/COM/ShellApplicationWindowsTest.java new file mode 100644 index 0000000000..c2b2947cf8 --- /dev/null +++ b/contrib/platform/test/com/sun/jna/platform/win32/COM/ShellApplicationWindowsTest.java @@ -0,0 +1,232 @@ +package com.sun.jna.platform.win32.COM; + +import java.util.Iterator; +import java.util.NoSuchElementException; + +import com.sun.jna.Native; +import com.sun.jna.NativeLibrary; +import com.sun.jna.platform.win32.OleAuto; +import com.sun.jna.platform.win32.Variant; +import com.sun.jna.platform.win32.Variant.VARIANT; +import com.sun.jna.platform.win32.WinDef.LONG; +import com.sun.jna.platform.win32.WinDef.LONGLONG; + +import junit.framework.TestCase; + +public class ShellApplicationWindowsTest extends TestCase { + + @Override + protected void setUp() throws Exception { + String[] commands = {"cmd", "/c", "start", "iexplore.exe","-nohome", "\"http://www.srh.noaa.gov/jax\""}; + Runtime.getRuntime().exec(commands); + Thread.sleep(30000); + } + + public void testWindowsCount() { + System.out.println("java.vendor: " + System.getProperty("java.vendor")); + System.out.println("java.version: " + System.getProperty("java.version")); + System.out.println("os.version: " + System.getProperty("os.version")); + System.out.println("os.arch: " + System.getProperty("os.arch")); + System.out.println("os.name: " + System.getProperty("os.name")); + + ShellApplication sa = new ShellApplication(); + System.out.println("Shell.Application.Windows found: " + sa.Windows().Count()); + assertTrue(sa.Windows().Count() > 0); + for (InternetExplorer ie : sa.Windows()) + { + System.out.println(); + System.out.println("============================================"); + if (ie != null) + { + System.out.println("Title: " + ie.getTitle()); + System.out.println("URL: " + ie.getURL()); + System.out.println("App Name: " + ie.getName()); + System.out.println("Window Handle: " + ie.getWindowHandle()); + } + else + { + System.out.println("Null encountered."); + } + System.out.println("============================================"); + System.out.println(); + } + } + + @Override + protected void tearDown() throws Exception { + Runtime.getRuntime().exec("taskkill.exe /f /im iexplore.exe"); + } + + + + /** + * A COM representation of the Windows shell. + */ + private static class ShellApplication extends COMLateBindingObject + { + public ShellApplication() throws COMException + { + super("Shell.Application", false); + } + + /** + * @return Creates and returns a ShellWindows object.
    + * This object represents a collection of all of the open windows that belong to the Shell. + */ + public ShellWindows Windows() + { + return new ShellWindows((IDispatch) invoke("Windows").getValue()); + } + + /** + * Represents a collection of the open windows that belong to the Shell.
    + * Methods associated with this objects can control and execute commands within the Shell, and obtain other Shell-related objects. + */ + public static class ShellWindows extends COMLateBindingObject implements Iterable + { + + private static class ShellWindowsIterator implements Iterator + { + + private ShellWindows source; + + private int count; + + private int max; + + public ShellWindowsIterator(ShellWindows collection) + { + source = collection; + max = source.Count(); + } + + @Override + public boolean hasNext() + { + return count < max; + } + + @Override + public InternetExplorer next() + { + if (!hasNext()) + { + throw new NoSuchElementException(); + } + return source.Item(count++); + } + + @Override + public void remove() + { + throw new UnsupportedOperationException(); + } + + } + + public ShellWindows(IDispatch iDispatch) + { + super(iDispatch); + } + + /** + * Retrieves an InternetExplorer object that represents the Shell window. + * + * @param idx + * The zero-based index of the item to retrieve.
    + * This value must be less than the value of the Count property. + * @return an InternetExplorer object that represents the Shell window. + */ + public InternetExplorer Item(int idx) + { + VARIANT arg = new VARIANT(); + arg.setValue(Variant.VT_I4, new LONG(idx)); + IDispatch result = (IDispatch) invoke("Item", arg).getValue(); + if (result == null) + { + return null; + } + return new InternetExplorer(result); + } + + /** + * @return the number of items in the collection. + */ + public int Count() + { + return getIntProperty("Count"); + } + + @SuppressWarnings({"unchecked", "rawtypes"}) + @Override + public Iterator iterator() + { + return new ShellWindowsIterator(this); + } + } + + } + + /** + * InternetExplorer / IWebBrowser2 - see http://msdn.microsoft.com/en-us/library/aa752127(v=vs.85).aspx + */ + private static class InternetExplorer extends COMLateBindingObject + { + + public InternetExplorer(IDispatch iDispatch) + { + super(iDispatch); + } + + /** + * @return the title of the browser window. This may not always be the title of the main document + */ + public String getTitle() + { + return getStringProperty("LocationName"); + } + + /** + * IWebBrowser2::get_LocationURL
    + * Read-only COM property.
    + * + * @return the URL of the resource that is currently displayed. + */ + public String getURL() + { + return getStringProperty("LocationURL"); + } + + /** + * IWebBrowser2::get_Name
    + * Read-only COM property.
    + * + * @return the frame name or application name of the object. + */ + public String getName() + { + return getStringProperty("Name"); + } + + /** + * IWebBrowser2::HWND
    + * Read-only COM property.
    + * + * @return the handle of the Internet Explorer main window. + */ + public long getWindowHandle() + { + VARIANT.ByReference result = new VARIANT.ByReference(); + this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this.getIDispatch(), "HWND"); + + if (result.getVarType().intValue() == Variant.VT_I8) + { + return ((LONGLONG) result.getValue()).longValue(); + } + return ((LONG) result.getValue()).longValue(); + + } + } + + +} From 84041b3fb88b9eb22db23550a65d4f297d9507ba Mon Sep 17 00:00:00 2001 From: Michael Freeman Date: Sat, 31 Oct 2015 22:59:09 -0400 Subject: [PATCH 04/29] updating test to remove println()s and add more assertions --- .../COM/ShellApplicationWindowsTest.java | 128 ++++++------------ 1 file changed, 41 insertions(+), 87 deletions(-) diff --git a/contrib/platform/test/com/sun/jna/platform/win32/COM/ShellApplicationWindowsTest.java b/contrib/platform/test/com/sun/jna/platform/win32/COM/ShellApplicationWindowsTest.java index c2b2947cf8..1d0bd8687f 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/COM/ShellApplicationWindowsTest.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/COM/ShellApplicationWindowsTest.java @@ -3,67 +3,60 @@ import java.util.Iterator; import java.util.NoSuchElementException; -import com.sun.jna.Native; -import com.sun.jna.NativeLibrary; -import com.sun.jna.platform.win32.OleAuto; import com.sun.jna.platform.win32.Variant; import com.sun.jna.platform.win32.Variant.VARIANT; import com.sun.jna.platform.win32.WinDef.LONG; -import com.sun.jna.platform.win32.WinDef.LONGLONG; import junit.framework.TestCase; -public class ShellApplicationWindowsTest extends TestCase { - - @Override - protected void setUp() throws Exception { - String[] commands = {"cmd", "/c", "start", "iexplore.exe","-nohome", "\"http://www.srh.noaa.gov/jax\""}; - Runtime.getRuntime().exec(commands); - Thread.sleep(30000); - } - - public void testWindowsCount() { - System.out.println("java.vendor: " + System.getProperty("java.vendor")); - System.out.println("java.version: " + System.getProperty("java.version")); - System.out.println("os.version: " + System.getProperty("os.version")); - System.out.println("os.arch: " + System.getProperty("os.arch")); - System.out.println("os.name: " + System.getProperty("os.name")); +public class ShellApplicationWindowsTest extends TestCase +{ + + @Override + public void setUp() throws Exception + { + // Launch IE in a manner that should ensure it opens even if the system default browser is Chrome, Firefox, or something else. + Runtime.getRuntime().exec("cmd /c start iexplore.exe -nohome \"about:blank\""); + // Even when going to "about:blank", IE still needs a few seconds to start up and add itself to Shell.Application.Windows + // Removing this delay will cause the test to fail even on the fastest boxes I can find. + Thread.sleep(3000); + } + + public void testWindowsCount() + { ShellApplication sa = new ShellApplication(); - System.out.println("Shell.Application.Windows found: " + sa.Windows().Count()); + + // IE is open, so there should be at least one present. + // More may exist if Windows Explorer windows are open. assertTrue(sa.Windows().Count() > 0); + + boolean pageFound = false; for (InternetExplorer ie : sa.Windows()) - { - System.out.println(); - System.out.println("============================================"); - if (ie != null) - { - System.out.println("Title: " + ie.getTitle()); - System.out.println("URL: " + ie.getURL()); - System.out.println("App Name: " + ie.getName()); - System.out.println("Window Handle: " + ie.getWindowHandle()); - } - else + { + // For reasons unknown, Shell.Application.Windows can have null members inside it. + // All I care about is whether or not the collection contains the window I opened. + if (ie != null && "about:blank".equals(ie.getURL())) { - System.out.println("Null encountered."); + pageFound = true; } - System.out.println("============================================"); - System.out.println(); } - } - - @Override - protected void tearDown() throws Exception { - Runtime.getRuntime().exec("taskkill.exe /f /im iexplore.exe"); - } - - - + + // Finally, did we find our page in the collection? + assertTrue(pageFound); + } + + @Override + protected void tearDown() throws Exception + { + Runtime.getRuntime().exec("taskkill.exe /f /im iexplore.exe"); + } + /** * A COM representation of the Windows shell. */ private static class ShellApplication extends COMLateBindingObject - { + { public ShellApplication() throws COMException { super("Shell.Application", false); @@ -89,11 +82,11 @@ private static class ShellWindowsIterator implements Iterator { private ShellWindows source; - + private int count; - + private int max; - + public ShellWindowsIterator(ShellWindows collection) { source = collection; @@ -178,14 +171,6 @@ public InternetExplorer(IDispatch iDispatch) super(iDispatch); } - /** - * @return the title of the browser window. This may not always be the title of the main document - */ - public String getTitle() - { - return getStringProperty("LocationName"); - } - /** * IWebBrowser2::get_LocationURL
    * Read-only COM property.
    @@ -196,37 +181,6 @@ public String getURL() { return getStringProperty("LocationURL"); } - - /** - * IWebBrowser2::get_Name
    - * Read-only COM property.
    - * - * @return the frame name or application name of the object. - */ - public String getName() - { - return getStringProperty("Name"); - } - - /** - * IWebBrowser2::HWND
    - * Read-only COM property.
    - * - * @return the handle of the Internet Explorer main window. - */ - public long getWindowHandle() - { - VARIANT.ByReference result = new VARIANT.ByReference(); - this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this.getIDispatch(), "HWND"); - - if (result.getVarType().intValue() == Variant.VT_I8) - { - return ((LONGLONG) result.getValue()).longValue(); - } - return ((LONG) result.getValue()).longValue(); - - } } - - + } From 9036d9f7b8689570b93ee0c8a5b9c4a7805fb39e Mon Sep 17 00:00:00 2001 From: Adam Marcionek Date: Fri, 6 Nov 2015 15:21:30 -0500 Subject: [PATCH 05/29] Added new library Mpr and functions to Netapi32 Added com.sun.jna.platform.win32.Mpr, com.sun.jna.platform.win32.LmShare, and com.sun.jna.platform.win32.Winnetwk Added ACCESS_* definitions to com.sun.jna.platform.win32.LmAccess Added NetShareAdd and NetShareDel to com.sun.jna.platform.win32.Netapi32 --- CHANGES.md | 5 +- .../com/sun/jna/platform/win32/LMAccess.java | 19 +- .../com/sun/jna/platform/win32/LMShare.java | 226 +++++++++ .../src/com/sun/jna/platform/win32/Mpr.java | 421 ++++++++++++++++ .../com/sun/jna/platform/win32/Netapi32.java | 43 +- .../com/sun/jna/platform/win32/Winnetwk.java | 457 ++++++++++++++++++ .../com/sun/jna/platform/win32/MprTest.java | 324 +++++++++++++ .../sun/jna/platform/win32/Netapi32Test.java | 100 +++- 8 files changed, 1590 insertions(+), 5 deletions(-) create mode 100644 contrib/platform/src/com/sun/jna/platform/win32/LMShare.java create mode 100644 contrib/platform/src/com/sun/jna/platform/win32/Mpr.java create mode 100644 contrib/platform/src/com/sun/jna/platform/win32/Winnetwk.java create mode 100644 contrib/platform/test/com/sun/jna/platform/win32/MprTest.java diff --git a/CHANGES.md b/CHANGES.md index bea0090634..9e2498e3e0 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,9 @@ Next release Features -------- * [#526](https://github.com/java-native-access/jna/pull/526): Added initialization and conversion between Windows SYSTEMTIME and Java Calendar [@lgoldstein](https://github.com/lgoldstein) +* [#532](https://github.com/java-native-access/jna/pull/529): Added `com.sun.jna.platform.win32.Mpr`, `com.sun.jna.platform.win32.LmShare`, and `com.sun.jna.platform.win32.Winnetwk` - [@amarcionek](https://github.com/amarcionek). +* [#532](https://github.com/java-native-access/jna/pull/529): Added `ACCESS_*` definitions to `com.sun.jna.platform.win32.LmAccess` - [@amarcionek](https://github.com/amarcionek). +* [#532](https://github.com/java-native-access/jna/pull/529): Added `NetShareAdd` and `NetShareDel` to `com.sun.jna.platform.win32.Netapi32` - [@amarcionek](https://github.com/amarcionek). Bug Fixes --------- @@ -17,7 +20,7 @@ Release 4.2.1 Features -------- -* [#504](https://github.com/java-native-access/jna/pull/504): Add support for linux-sparcv9 [@alexvsimon](https://github.com/alexvsimon). +* [#504](https://github.com/java-native-access/jna/pull/504): Add support for linux-sparcv9 - [@alexvsimon](https://github.com/alexvsimon). * [#510](https://github.com/java-native-access/jna/pull/510): Added `GetCommState`, `GetCommTimeouts` `SetCommState` and `SetCommTimeouts` to `com.sun.jna.platform.win32.Kernel32`. Added `DCB` structure to `com.sun.jna.platform.win32.WinBase` - [@MBollig](https://github.com/MBollig). * [#512](https://github.com/java-native-access/jna/pull/512): Make loading debug flags mutable [@lwahonen](https://github.com/lwahonen). * [#514](https://github.com/java-native-access/jna/pull/514): Added `host_processor_info` to `com.sun.jna.platform.mac.SystemB` - [@dbwiddis](https://github.com/dbwiddis). diff --git a/contrib/platform/src/com/sun/jna/platform/win32/LMAccess.java b/contrib/platform/src/com/sun/jna/platform/win32/LMAccess.java index ccd7259a31..3e8c8153b7 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/LMAccess.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/LMAccess.java @@ -422,5 +422,22 @@ protected List getFieldOrder() { int USER_PRIV_MASK = 3; int USER_PRIV_GUEST = 0; int USER_PRIV_USER = 1; - int USER_PRIV_ADMIN = 2; + int USER_PRIV_ADMIN = 2; + + // + // Bit values for the access permissions. ACCESS_ALL is a handy + // way to specify maximum permissions. These are used in + // acl_access field of access_list structures. + // + + int ACCESS_NONE = 0x00; + int ACCESS_READ = 0x01; + int ACCESS_WRITE = 0x02; + int ACCESS_CREATE = 0x04; + int ACCESS_EXEC = 0x08; + int ACCESS_DELETE = 0x10; + int ACCESS_ATRIB = 0x20; + int ACCESS_PERM = 0x40; + int ACCESS_ALL = ACCESS_READ | ACCESS_WRITE | ACCESS_CREATE | ACCESS_EXEC | ACCESS_DELETE | ACCESS_ATRIB | ACCESS_PERM; + int ACCESS_GROUP = 0x8000; } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/LMShare.java b/contrib/platform/src/com/sun/jna/platform/win32/LMShare.java new file mode 100644 index 0000000000..dabb8bc42b --- /dev/null +++ b/contrib/platform/src/com/sun/jna/platform/win32/LMShare.java @@ -0,0 +1,226 @@ +/* Copyright (c) 2015 Adam Marcionek, All Rights Reserved + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +package com.sun.jna.platform.win32; + +import java.util.Arrays; +import java.util.List; + +import com.sun.jna.Pointer; +import com.sun.jna.Structure; +import com.sun.jna.WString; +import com.sun.jna.win32.StdCallLibrary; + +/** + * Ported from LMShare.h. + * Windows SDK 7.1 + * @author amarcionek[at]seven10storage.com + */ +public interface LMShare extends StdCallLibrary { + + // + // Share types (shi1_type and shi2_type fields). + // + + /** + * Disk Drive. + */ + int STYPE_DISKTREE = 0; + + /** + * Print Queue. + */ + int STYPE_PRINTQ = 1; + + /** + * Communication device. + */ + int STYPE_DEVICE = 2; + + /** + * Interprocess communication (IPC). + */ + int STYPE_IPC = 3; + + /** + * A temporary share. + */ + int STYPE_TEMPORARY = 0x40000000; + + /** + * Special share reserved for interprocess communication (IPC$) or remote administration of the server (ADMIN$). + * Can also refer to administrative shares such as C$, D$, E$, and so forth. For more information, see the network share functions. + */ + int STYPE_SPECIAL = 0x80000000; + + /** + * Contains information about the shared resource, including name of the resource, type and permissions, number of connections, and other pertinent information. + */ + public static class SHARE_INFO_2 extends Structure { + public SHARE_INFO_2() { + super(); + } + + public SHARE_INFO_2(Pointer memory) { + super(memory); + read(); + } + + /** + * Pointer to a Unicode string specifying the name of a shared resource. Calls to the NetShareSetInfo function ignore this member. + */ + public WString shi2_netname; + + /** + * A combination of values that specify the type of share. Calls to the NetShareSetInfo function ignore this member. + * One of the following values may be specified. You can isolate these values by using the STYPE_MASK value. + * STYPE_DISKTREE, STYPE_PRINTQ, STYPE_DEVICE, STYPE_IPC, STYPE_TEMPORARY, STYPE_SPECIAL + */ + public int shi2_type; + + /** + * Pointer to a Unicode string specifying an optional comment about the shared resource. + */ + public WString shi2_remark; + + /** + * Specifies a DWORD value that indicates the shared resource's permissions for servers running with share-level security. + * This member is ignored on a server running user-level security. This member can be any of the following values. + * Calls to the NetShareSetInfo function ignore this member. Note that Windows does not support share-level security. + * For more information about controlling access to securable objects, see Access Control, Privileges, and Securable Objects. + * NOTE: Bit masks are defined in LmAccess.Java + */ + public int shi2_permissions; + + /** + * Specifies a DWORD value that indicates the maximum number of concurrent connections that the shared resource can accommodate. + * The number of connections is unlimited if the value specified in this member is -1. + */ + public int shi2_max_uses; + + /** + * Specifies a DWORD value that indicates the number of current connections to the resource. Calls to the NetShareSetInfo function ignore this member. + */ + public int shi2_current_uses; + + /** + * Pointer to a Unicode string that contains the local path for the shared resource. For disks, this member is the path being shared. + * For print queues, this member is the name of the print queue being shared. Calls to the NetShareSetInfo function ignore this member. + */ + public WString shi2_path; + + /** + * Pointer to a Unicode string that specifies the share's password (when the server is running with share-level security). If the server is + * running with user-level security, this member is ignored. Note that Windows does not support share-level security. + * This member can be no longer than SHPWLEN+1 bytes (including a terminating null character). Calls to the NetShareSetInfo function ignore this member. + */ + public WString shi2_passwd; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "shi2_netname", + "shi2_type", + "shi2_remark", + "shi2_permissions", + "shi2_max_uses", + "shi2_current_uses", + "shi2_path", + "shi2_passwd" }); + } + } + + /** + * Contains information about the shared resource, including name of the resource, type and permissions, number of connections, and other pertinent information. + */ + public static class SHARE_INFO_502 extends Structure { + public SHARE_INFO_502() { + super(); + } + + public SHARE_INFO_502(Pointer memory) { + super(memory); + read(); + } + + /** + * Pointer to a Unicode string specifying the name of a shared resource. Calls to the NetShareSetInfo function ignore this member. + */ + public WString shi502_netname; + + /** + * A combination of values that specify the type of share. Calls to the NetShareSetInfo function ignore this member. + * One of the following values may be specified. You can isolate these values by using the STYPE_MASK value. + * STYPE_DISKTREE, STYPE_PRINTQ, STYPE_DEVICE, STYPE_IPC, STYPE_TEMPORARY, STYPE_SPECIAL + */ + public int shi502_type; + + /** + * Pointer to a Unicode string specifying an optional comment about the shared resource. + */ + public WString shi502_remark; + + /** + * Specifies a DWORD value that indicates the shared resource's permissions for servers running with share-level security. + * This member is ignored on a server running user-level security. This member can be any of the following values. + * Calls to the NetShareSetInfo function ignore this member. Note that Windows does not support share-level security. + * For more information about controlling access to securable objects, see Access Control, Privileges, and Securable Objects. + * NOTE: Bit masks are defined in LmAccess.Java + */ + public int shi502_permissions; + + /** + * Specifies a DWORD value that indicates the maximum number of concurrent connections that the shared resource can accommodate. + * The number of connections is unlimited if the value specified in this member is -1. + */ + public int shi502_max_uses; + + /** + * Specifies a DWORD value that indicates the number of current connections to the resource. Calls to the NetShareSetInfo function ignore this member. + */ + public int shi502_current_uses; + + /** + * Pointer to a Unicode string that contains the local path for the shared resource. For disks, this member is the path being shared. + * For print queues, this member is the name of the print queue being shared. Calls to the NetShareSetInfo function ignore this member. + */ + public WString shi502_path; + + /** + * Pointer to a Unicode string that specifies the share's password (when the server is running with share-level security). If the server is + * running with user-level security, this member is ignored. Note that Windows does not support share-level security. + * This member can be no longer than SHPWLEN+1 bytes (including a terminating null character). Calls to the NetShareSetInfo function ignore this member. + */ + public WString shi502_passwd; + + /** + * Reserved; must be zero. Calls to the NetShareSetInfo function ignore this member. + */ + public int shi502_reserved; + + /** + * Specifies the SECURITY_DESCRIPTOR associated with this share. + */ + public Pointer shi502_security_descriptor; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "shi502_netname", + "shi502_type", + "shi502_remark", + "shi502_permissions", + "shi502_max_uses", + "shi502_current_uses", + "shi502_path", + "shi502_passwd", + "shi502_reserved", + "shi502_security_descriptor" }); + } + } +} diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Mpr.java b/contrib/platform/src/com/sun/jna/platform/win32/Mpr.java new file mode 100644 index 0000000000..0f6d99cbf8 --- /dev/null +++ b/contrib/platform/src/com/sun/jna/platform/win32/Mpr.java @@ -0,0 +1,421 @@ +/* Copyright (c) 2015 Adam Marcionek, All Rights Reserved + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ + +package com.sun.jna.platform.win32; + +import com.sun.jna.Native; +import com.sun.jna.Pointer; +import com.sun.jna.WString; +import com.sun.jna.platform.win32.WinDef.HWND; +import com.sun.jna.platform.win32.WinNT.HANDLE; +import com.sun.jna.platform.win32.WinNT.HANDLEByReference; +import com.sun.jna.platform.win32.Winnetwk.*; +import com.sun.jna.ptr.IntByReference; +import com.sun.jna.ptr.PointerByReference; +import com.sun.jna.win32.StdCallLibrary; +import com.sun.jna.win32.W32APIOptions; + +/** + * Ported from Winnetwk.h. Microsoft Windows SDK 8.1 + * + * @author amarcionek[at]gmail.com + */ + +public interface Mpr extends StdCallLibrary { + + Mpr INSTANCE = (Mpr) Native.loadLibrary("Mpr", Mpr.class, W32APIOptions.UNICODE_OPTIONS); + + /** + * The WNetOpenEnum function starts an enumeration of network resources or + * existing connections. You can continue the enumeration by calling the + * WNetEnumResource function. + * + * @param dwScope + * Scope of the enumeration. This parameter can be one of the + * following values from NETRESOURCEScope: RESOURCE_CONNECTED, + * RESOURCE_CONTEXT, RESOURCE_GLOBALNET, RESOURCE_REMEMBERED + * @param dwType + * Resource types to be enumerated. This parameter can be a + * combination of the following values from NETRESOURCEType: + * RESOURCETYPE_ANY, RESOURCETYPE_DISK, RESOURCETYPE_PRINT + * @param dwUsage + * Resource usage type to be enumerated. This parameter can be a + * combination of the following values from NETRESOURCEUsage: 0, + * RESOURCEUSAGE_CONNECTABLE, RESOURCEUSAGE_CONTAINER, + * RESOURCEUSAGE_ATTACHED, RESOURCEUSAGE_ALL + * @param lpNETRESOURCE + * Pointer to a NETRESOURCE structure that specifies the + * container to enumerate. If the dwScope parameter is not + * RESOURCE_GLOBALNET, this parameter must be NULL. If this + * parameter is NULL, the root of the network is assumed. (The + * system organizes a network as a hierarchy; the root is the + * topmost container in the network.) If this parameter is not + * NULL, it must point to a NETRESOURCE structure. This structure + * can be filled in by the application or it can be returned by a + * call to the WNetEnumResource function. The NETRESOURCE + * structure must specify a container resource; that is, the + * RESOURCEUSAGE_CONTAINER value must be specified in the dwUsage + * parameter. To enumerate all network resources, an application + * can begin the enumeration by calling WNetOpenEnum with the + * lpNETRESOURCE parameter set to NULL, and then use the returned + * handle to call WNetEnumResource to enumerate resources. If one + * of the resources in the NETRESOURCE array returned by the + * WNetEnumResource function is a container resource, you can + * call WNetOpenEnum to open the resource for further + * enumeration. + * @param lphEnum + * Pointer to an enumeration handle that can be used in a + * subsequent call to WNetEnumResource. + * @return NO_ERROR if the function succeeds, otherwise a + * system error code. See MSDN documentation for common error + * values: + * https://msdn.microsoft.com/en-us/library/windows/desktop/aa385478 + * (v=vs.85).aspx + */ + public int WNetOpenEnum(int dwScope, int dwType, int dwUsage, NETRESOURCE.ByReference lpNETRESOURCE, HANDLEByReference lphEnum); + + /** + * The WNetEnumResource function continues an enumeration of network + * resources that was started by a call to the WNetOpenEnum function. + * + * @param hEnum + * [in] Handle that identifies an enumeration instance. This + * handle must be returned by the WNetOpenEnum function. + * @param lpcCount + * [in, out] Pointer to a variable specifying the number of + * entries requested. If the number requested is -1, the function + * returns as many entries as possible. If the function succeeds, + * on return the variable pointed to by this parameter contains + * the number of entries actually read. + * @param lpBuffer + * [out] Pointer to the buffer that receives the enumeration + * results. The results are returned as an array of NETRESOURCE + * structures. Note that the buffer you allocate must be large + * enough to hold the structures, plus the strings to which their + * members point. For more information, see the Remarks section + * on MSDN: + * https://msdn.microsoft.com/en-us/library/windows/desktop/ + * aa385449(v=vs.85).aspx The buffer is valid until the next call + * using the handle specified by the hEnum parameter. The order + * of NETRESOURCE structures in the array is not predictable. + * @param lpBufferSize + * [in, out] Pointer to a variable that specifies the size of the + * lpBuffer parameter, in bytes. If the buffer is too small to + * receive even one entry, this parameter receives the required + * size of the buffer. + * @return If the function succeeds, the return value is one of the + * following values: NO_ERROR - The enumeration succeeded, and the + * buffer contains the requested data. The calling application can + * continue to call WNetEnumResource to complete the enumeration. + * ERROR_NO_MORE_ITEMS - There are no more entries. The buffer + * contents are undefined. If the function fails, see MSDN + * documentation for common error values: + * https://msdn.microsoft.com/en-us/library/windows/desktop/aa385478 + * (v=vs.85).aspx + */ + public int WNetEnumResource(HANDLE hEnum, IntByReference lpcCount, Pointer lpBuffer, IntByReference lpBufferSize); + + /** + * The WNetCloseEnum function ends a network resource enumeration started by + * a call to the WNetOpenEnum function. + * + * @param hEnum + * [in] Handle that identifies an enumeration instance. This + * handle must be returned by the WNetOpenEnum function. + * @return NO_ERROR if the function succeeds, otherwise a + * system error code. See MSDN documentation for common error + * values: + * https://msdn.microsoft.com/en-us/library/windows/desktop/aa385431 + * (v=vs.85).aspx + */ + int WNetCloseEnum(HANDLE hEnum); + + /** + * The WNetGetUniversalName function takes a drive-based path for a network + * resource and returns an information structure that contains a more + * universal form of the name. + * + * @param lpLocalPath + * [in] A pointer to a constant null-terminated string that is a + * drive-based path for a network resource. For example, if drive + * H has been mapped to a network drive share, and the network + * resource of interest is a file named Sample.doc in the + * directory \Win32\Examples on that share, the drive-based path + * is H:\Win32\Examples\Sample.doc. + * @param dwInfoLevel + * [in] The type of structure that the function stores in the + * buffer pointed to by the lpBuffer parameter. This parameter + * can be one of the following values defined in the + * Winnetwk.java. UNIVERSAL_NAME_INFO_LEVEL - The function stores + * a UNIVERSAL_NAME_INFO structure in the buffer. + * REMOTE_NAME_INFO_LEVEL - The function stores a + * REMOTE_NAME_INFO structure in the buffer. The + * UNIVERSAL_NAME_INFO structure points to a Universal Naming + * Convention (UNC) name string. The REMOTE_NAME_INFO structure + * points to a UNC name string and two additional connection + * information strings. For more information, see the following + * Remarks section. + * @param lpBuffer + * [out] A pointer to a buffer that receives the structure + * specified by the dwInfoLevel parameter. + * @param lpBufferSize + * [in,out] A pointer to a variable that specifies the size, in + * bytes, of the buffer pointed to by the lpBuffer parameter. If + * the function succeeds, it sets the variable pointed to by + * lpBufferSize to the number of bytes stored in the buffer. If + * the function fails because the buffer is too small, this + * location receives the required buffer size, and the function + * returns ERROR_MORE_DATA. + * @return If the function succeeds, the return value is NO_ERROR, otherwise + * see MSDN for common error codes: + * https://msdn.microsoft.com/en-us/library/windows/desktop/aa385474 + * (v=vs.85).aspx + */ + int WNetGetUniversalName(WString lpLocalPath, int dwInfoLevel, Pointer lpBuffer, IntByReference lpBufferSize); + + /** + * The WNetUseConnection function makes a connection to a network resource. + * The function can redirect a local device to a network resource. + * + * The WNetUseConnection function is similar to the WNetAddConnection3 + * function. The main difference is that WNetUseConnection can automatically + * select an unused local device to redirect to the network resource. + * + * @param hwndOwner + * [in] Handle to a window that the provider of network resources + * can use as an owner window for dialog boxes. Use this + * parameter if you set the CONNECT_INTERACTIVE value in the + * dwFlags parameter. + * @param lpNETRESOURCE + * [in] Pointer to a NETRESOURCE structure that specifies details + * of the proposed connection. The structure contains information + * about the network resource, the local device, and the network + * resource provider. + * + * You must specify the following members of the NETRESOURCE + * structure. The WNetUseConnection function ignores the other + * members of the NETRESOURCE structure. For more information, + * see the descriptions following for the dwFlags parameter. + * + * dwType Specifies the type of resource to connect to. It is + * most efficient to specify a resource type in this member, such + * as RESOURCETYPE_DISK or RESOURCETYPE_PRINT. However, if the + * lpLocalName member is NULL, or if it points to an empty string + * and CONNECT_REDIRECT is not set, dwType can be + * RESOURCETYPE_ANY. + * + * This method works only if the function does not automatically + * choose a device to redirect to the network resource. Although + * this member is required, its information may be ignored by the + * network service provider lpLocalName Pointer to a + * null-terminated string that specifies the name of a local + * device to be redirected, such as "F:" or "LPT1". The string is + * treated in a case-insensitive manner. If the string is empty, + * or if lpLocalName is NULL, a connection to the network occurs + * without redirection. If the CONNECT_REDIRECT value is set in + * the dwFlags parameter, or if the network requires a redirected + * local device, the function chooses a local device to redirect + * and returns the name of the device in the lpAccessName + * parameter. lpRemoveName Pointer to a null-terminated string + * that specifies the network resource to connect to. The string + * can be up to MAX_PATH characters in length, and it must follow + * the network provider's naming conventions. lpProvider Pointer + * to a null-terminated string that specifies the network + * provider to connect to. If lpProvider is NULL, or if it points + * to an empty string, the operating system attempts to determine + * the correct provider by parsing the string pointed to by the + * lpRemoteName member. If this member is not NULL, the operating + * system attempts to make a connection only to the named network + * provider. You should set this member only if you know the + * network provider you want to use. Otherwise, let the operating + * system determine which provider the network name maps to. + * @param lpPassword + * [in] Pointer to a constant null-terminated string that + * specifies a password to be used in making the network + * connection. If lpPassword is NULL, the function uses the + * current default password associated with the user specified by + * lpUserID. If lpPassword points to an empty string, the + * function does not use a password. If the connection fails + * because of an invalid password and the CONNECT_INTERACTIVE + * value is set in the dwFlags parameter, the function displays a + * dialog box asking the user to type the password. + * @param lpUserID + * [in] Pointer to a constant null-terminated string that + * specifies a user name for making the connection. If lpUserID + * is NULL, the function uses the default user name. (The user + * context for the process provides the default user name.) The + * lpUserID parameter is specified when users want to connect to + * a network resource for which they have been assigned a user + * name or account other than the default user name or account. + * The user-name string represents a security context. It may be + * specific to a network provider. For security context, see + * https://msdn.microsoft.com/en-us/library/windows/desktop/ + * ms721625(v=vs.85).aspx + * @param dwFlags + * [in] Set of bit flags describing the connection. This + * parameter can be any combination of the values in ConnectFlag. + * @param lpAccessName + * [out] Pointer to a buffer that receives system requests on the + * connection. This parameter can be NULL. If this parameter is + * specified, and the lpLocalName member of the NETRESOURCE + * structure specifies a local device, this buffer receives the + * local device name. If lpLocalName does not specify a device + * and the network requires a local device redirection, or if the + * CONNECT_REDIRECT value is set, this buffer receives the name + * of the redirected local device. Otherwise, the name copied + * into the buffer is that of a remote resource. If specified, + * this buffer must be at least as large as the string pointed to + * by the lpRemoteName member. + * @param lpBufferSize + * [in, out] Pointer to a variable that specifies the size of the + * lpAccessName buffer, in characters. If the call fails because + * the buffer is not large enough, the function returns the + * required buffer size in this location. For more information, + * see the descriptions of the lpAccessName parameter and the + * ERROR_MORE_DATA error code in the Return Values section. + * @param lpResult + * [out] Pointer to a variable that receives additional + * information about the connection. This parameter can be the + * following value: + * + * ConnectFlag.CONNECT_LOCALDRIVE - If this flag is set, the + * connection was made using a local device redirection. If the + * lpAccessName parameter points to a buffer, the local device + * name is copied to the buffer. + * @return NO_ERROR if the function succeeds, otherwise a + * system error code. See MSDN documentation for common error + * values: + * https://msdn.microsoft.com/en-us/library/windows/desktop/aa385482 + * (v=vs.85).aspx + */ + public int WNetUseConnection(HWND hwndOwner, NETRESOURCE lpNETRESOURCE, WString lpPassword, WString lpUserID, int dwFlags, + PointerByReference lpAccessName, IntByReference lpBufferSize, IntByReference lpResult); + + /** + * The WNetAddConnection3 function makes a connection to a network resource. + * The function can redirect a local device to the network resource. + * + * @param hwndOwner + * [in] Handle to a window that the provider of network resources + * can use as an owner window for dialog boxes. Use this + * parameter if you set the CONNECT_INTERACTIVE value in the + * dwFlags parameter. + * @param lpNETRESOURCE + * [in] Pointer to a NETRESOURCE structure that specifies details + * of the proposed connection. The structure contains information + * about the network resource, the local device, and the network + * resource provider. + * + * You must specify the following members of the NETRESOURCE + * structure. The WNetUseConnection function ignores the other + * members of the NETRESOURCE structure. For more information, + * see the descriptions following for the dwFlags parameter. + * + * dwType Specifies the type of resource to connect to. It is + * most efficient to specify a resource type in this member, such + * as RESOURCETYPE_DISK or RESOURCETYPE_PRINT. However, if the + * lpLocalName member is NULL, or if it points to an empty string + * and CONNECT_REDIRECT is not set, dwType can be + * RESOURCETYPE_ANY. + * + * This method works only if the function does not automatically + * choose a device to redirect to the network resource. Although + * this member is required, its information may be ignored by the + * network service provider lpLocalName Pointer to a + * null-terminated string that specifies the name of a local + * device to be redirected, such as "F:" or "LPT1". The string is + * treated in a case-insensitive manner. If the string is empty, + * or if lpLocalName is NULL, a connection to the network occurs + * without redirection. If the CONNECT_REDIRECT value is set in + * the dwFlags parameter, or if the network requires a redirected + * local device, the function chooses a local device to redirect + * and returns the name of the device in the lpAccessName + * parameter. lpRemoveName Pointer to a null-terminated string + * that specifies the network resource to connect to. The string + * can be up to MAX_PATH characters in length, and it must follow + * the network provider's naming conventions. lpProvider Pointer + * to a null-terminated string that specifies the network + * provider to connect to. If lpProvider is NULL, or if it points + * to an empty string, the operating system attempts to determine + * the correct provider by parsing the string pointed to by the + * lpRemoteName member. If this member is not NULL, the operating + * system attempts to make a connection only to the named network + * provider. You should set this member only if you know the + * network provider you want to use. Otherwise, let the operating + * system determine which provider the network name maps to. + * @param lpPassword + * [in] Pointer to a constant null-terminated string that + * specifies a password to be used in making the network + * connection. If lpPassword is NULL, the function uses the + * current default password associated with the user specified by + * lpUserID. If lpPassword points to an empty string, the + * function does not use a password. If the connection fails + * because of an invalid password and the CONNECT_INTERACTIVE + * value is set in the dwFlags parameter, the function displays a + * dialog box asking the user to type the password. + * @param lpUserID + * [in] Pointer to a constant null-terminated string that + * specifies a user name for making the connection. If lpUserID + * is NULL, the function uses the default user name. (The user + * context for the process provides the default user name.) The + * lpUserID parameter is specified when users want to connect to + * a network resource for which they have been assigned a user + * name or account other than the default user name or account. + * The user-name string represents a security context. It may be + * specific to a network provider. For security context, see + * https://msdn.microsoft.com/en-us/library/windows/desktop/ + * ms721625(v=vs.85).aspx + * @param dwFlags + * [in] Set of bit flags describing the connection. This + * parameter can be any combination of the values in ConnectFlag. + */ + public int WNetAddConnection3(HWND hwndOwner, NETRESOURCE lpNETRESOURCE, WString lpPassword, WString lpUserID, int dwFlags); + + /** + * The WNetCancelConnection2 function cancels an existing network + * connection. You can also call the function to remove remembered network + * connections that are not currently connected. + * + * @param lpName + * [in] Pointer to a constant null-terminated string that + * specifies the name of either the redirected local device or + * the remote network resource to disconnect from. If this + * parameter specifies a redirected local device, the function + * cancels only the specified device redirection. If the + * parameter specifies a remote network resource, all connections + * without devices are canceled. + * @param dwFlags + * [in] Connection type. The following values are defined. 0 - + * The system does not update information about the connection. + * If the connection was marked as persistent in the registry, + * the system continues to restore the connection at the next + * logon. If the connection was not marked as persistent, the + * function ignores the setting of the CONNECT_UPDATE_PROFILE + * flag. CONNECT_UPDATE_PROFILE - The system updates the user + * profile with the information that the connection is no longer + * a persistent one. The system will not restore this connection + * during subsequent logon operations. (Disconnecting resources + * using remote names has no effect on persistent connections.) + * @param fForce + * [in] Specifies whether the disconnection should occur if there + * are open files or jobs on the connection. If this parameter is + * FALSE, the function fails if there are open files or jobs. + * @return NO_ERROR if the function succeeds, otherwise a + * system error code. See MSDN documentation for common error + * values: + * https://msdn.microsoft.com/en-us/library/windows/desktop/aa385482 + * (v=vs.85).aspx + */ + public int WNetCancelConnection2(WString lpName, int dwFlags, boolean fForce); +} diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Netapi32.java b/contrib/platform/src/com/sun/jna/platform/win32/Netapi32.java index 2bd667ba60..ec9ee45127 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Netapi32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Netapi32.java @@ -15,6 +15,7 @@ import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.Structure; +import com.sun.jna.WString; import com.sun.jna.platform.win32.DsGetDC.PDOMAIN_CONTROLLER_INFO; import com.sun.jna.platform.win32.Guid.GUID; import com.sun.jna.platform.win32.NTSecApi.PLSA_FOREST_TRUST_INFORMATION; @@ -426,6 +427,44 @@ public int DsEnumerateDomainTrusts(String serverName, int Flags, * @return * If the function succeeds, the return value is NERR_Success. */ - public int NetUserGetInfo( String servername, String username, int level, PointerByReference bufptr ); - + public int NetUserGetInfo(String servername, String username, int level, PointerByReference bufptr); + + /** + * Shares a server resource. + * + * @param servername [in] + * Pointer to a string that specifies the DNS or NetBIOS name of the remote server on which the function is to execute. + * If this parameter is NULL, the local computer is used. + * @param level [in] + * Specifies the information level of the data. This parameter can be one of the following values: + * 2 - Specifies information about the shared resource, including the name of the resource, type and permissions, and number of connections. + * The buf parameter points to a SHARE_INFO_2 structure. + * 502 - Specifies information about the shared resource, including the name of the resource, type and permissions, number of connections, and other pertinent information. + * The buf parameter points to a SHARE_INFO_502 structure. + * 503 - Specifies information about the shared resource, including the name of the resource, type and permissions, number of connections, and other pertinent information. + * The buf parameter points to a SHARE_INFO_503 structure. + * @param buf [in] + * Pointer to the buffer that specifies the data. The format of this data depends on the value of the level parameter. + * For more information, see Network Management Function Buffers (https://msdn.microsoft.com/en-us/library/windows/desktop/aa370676(v=vs.85).aspx) + * @param parm_err [out] + * Pointer to a value that receives the index of the first member of the share information structure that causes the ERROR_INVALID_PARAMETER error. If this parameter is NULL, the + * index is not returned on error. For more information, see the NetShareSetInfo function. + * @return If the function succeeds, the return value is NERR_Success. If the function fails, the return value can be an error code as seen on MSDN. + */ + public int NetShareAdd(WString servername, int level, Pointer buf, IntByReference parm_err); + + /** + * Deletes a share name from a server's list of shared resources, disconnecting all connections to the shared resource. + * + * @param servername [in] + * Pointer to a string that specifies the DNS or NetBIOS name of the remote server on which the function is to execute. + * If this parameter is NULL, the local computer is used. + * @param netname [in] + * Pointer to a string that specifies the name of the share to delete. + * @param reserved + * Reserved, must be zero. + * @return If the function succeeds, the return value is LMErr.NERR_Success. + * If the function fails, the return value can be an error code as seen on MSDN. + */ + public int NetShareDel(WString servername, WString netname, int reserved); } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Winnetwk.java b/contrib/platform/src/com/sun/jna/platform/win32/Winnetwk.java new file mode 100644 index 0000000000..1f44d2e6a6 --- /dev/null +++ b/contrib/platform/src/com/sun/jna/platform/win32/Winnetwk.java @@ -0,0 +1,457 @@ +/* Copyright (c) 2015 Adam Marcionek, All Rights Reserved + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ + +package com.sun.jna.platform.win32; + +import java.util.Arrays; +import java.util.List; + +import com.sun.jna.Pointer; +import com.sun.jna.Structure; +import com.sun.jna.WString; +import com.sun.jna.win32.StdCallLibrary; + +/** + * Ported from AccCtrl.h. Microsoft Windows SDK 7.1 + * + * @author amarcionek[at]gmail.com + */ + +public abstract class Winnetwk implements StdCallLibrary { + + /** + * The scope of the enumeration. This member can be one of the following + * values defined in the Winnetwk.h header file. NOTE: This are for the + * dwScope member of NetResource. NOTE: Certain functions allow different + * values of the scope parameter. Consult MSDN for more info. + */ + public class RESOURCESCOPE { + + /** + * Enumerate currently connected resources. The dwUsage member cannot be + * specified. + */ + public static final int RESOURCE_CONNECTED = 1; + + /** + * Enumerate all resources on the network. The dwUsage member is + * specified. + */ + public static final int RESOURCE_GLOBALNET = 2; + + /** + * Enumerate remembered (persistent) connections. The dwUsage member + * cannot be specified. + */ + public static final int RESOURCE_REMEMBERED = 3; + + /** + * NOTE: Definition for this is not defined in Windows Kits nor on MSDN + */ + public static final int RESOURCE_RECENT = 4; + + /** + * Enumerate only resources in the network context of the caller. + * Specify this value for a Network Neighborhood view. The function + * ignores the dwUsage parameter. + */ + public static final int RESOURCE_CONTEXT = 5; + } + + /** + * The type of resource. This member can be one of the following values + * defined in the Winnetwk.h header file. NOTE: This are for the dwType + * member of NetResource + */ + public class RESOURCETYPE { + + /** + * All resources + */ + public static final int RESOURCETYPE_ANY = 0; + + /** + * Disk resources + */ + public static final int RESOURCETYPE_DISK = 1; + + /** + * Print resources + */ + public static final int RESOURCETYPE_PRINT = 2; + + /** + * NOTE: Definition for this is not defined in Windows Kits nor on MSDN + */ + public static final int RESOURCETYPE_RESERVED = 8; + + /** + * The WNetEnumResource function can also return the value + * RESOURCETYPE_UNKNOWN if a resource is neither a disk nor a print + * resource. + */ + public static final int RESOURCETYPE_UNKNOWN = 0xFFFFFFFF; + } + + /** + * The type of resource. This member can be one of the following values + * defined in the Winnetwk.h header file. NOTE: This are for the dwScope + * member of NetResource + */ + public class RESOURCEDISPLAYTYPE { + + /** + * The method used to display the object does not matter. + */ + public static final int RESOURCEDISPLAYTYPE_GENERIC = 0; + + /** + * The object should be displayed as a domain. + */ + public static final int RESOURCEDISPLAYTYPE_DOMAIN = 1; + + /** + * The object should be displayed as a server. + */ + public static final int RESOURCEDISPLAYTYPE_SERVER = 2; + + /** + * The object should be displayed as a share. + */ + public static final int RESOURCEDISPLAYTYPE_SHARE = 3; + + /** + * The object should be displayed as a file. + */ + public static final int RESOURCEDISPLAYTYPE_FILE = 4; + + // TODO: Add the others + } + + /** + * A set of bit flags describing how the resource can be used. Note that + * this member can be specified only if the dwScope member is equal to + * RESOURCE_GLOBALNET. This member can be one of the following values + * defined in the Winnetwk.h header file. NOTE: This are for the dwUsage + * member of NetResource + */ + public class RESOURCEUSAGE { + /** + * The resource is a connectable resource; the name pointed to by the + * lpRemoteName member can be passed to the WNetAddConnection function + * to make a network connection. + */ + public static final int RESOURCEUSAGE_CONNECTABLE = 0x00000001; + + /** + * The resource is a container resource; the name pointed to by the + * lpRemoteName member can be passed to the WNetOpenEnum function to + * enumerate the resources in the container. + */ + public static final int RESOURCEUSAGE_CONTAINER = 0x00000002; + + /** + * The resource is not a local device. + */ + public static final int RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004; + + /** + * The resource is a sibling. This value is not used by Windows. + */ + public static final int RESOURCEUSAGE_SIBLING = 0x00000008; + + /** + * The resource must be attached. This value specifies that a function + * to enumerate resource this should fail if the caller is not + * authenticated, even if the network permits enumeration without + * authentication. + */ + public static final int RESOURCEUSAGE_ATTACHED = 0x00000010; + + /** + * Setting this value is equivalent to setting + * RESOURCEUSAGE_CONNECTABLE, RESOURCEUSAGE_CONTAINER, and + * RESOURCEUSAGE_ATTACHED. + */ + public static final int RESOURCEUSAGE_ALL = RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED; + } + + /** + * A set of bit flags describing how the resource can be used. Note that + * this member can be specified only if the dwScope member is equal to + * RESOURCE_GLOBALNET. This member can be one of the following values + * defined in the Winnetwk.h header file. NOTE: This are for the dwUsage + * member of NetResource + */ + public class ConnectFlag { + + /** + * This flag instructs the operating system to store the network + * resource connection. If this bit flag is set, the operating system + * automatically attempts to restore the connection when the user logs + * on. The system remembers only successful connections that redirect + * local devices. It does not remember connections that are unsuccessful + * or deviceless connections. (A deviceless connection occurs when + * lpLocalName is NULL or when it points to an empty string.) If this + * bit flag is clear, the operating system does not automatically + * restore the connection at logon. + */ + public static final int CONNECT_UPDATE_PROFILE = 0x00000001; + + /** + * If this flag is set, the operating system may interact with the user + * for authentication purposes. + */ + public static final int CONNECT_INTERACTIVE = 0x00000008; + + /** + * This flag instructs the system not to use any default settings for + * user names or passwords without offering the user the opportunity to + * supply an alternative. This flag is ignored unless + * CONNECT_INTERACTIVE is also set. + */ + public static final int CONNECT_PROMPT = 0x00000010; + + /** + * This flag forces the redirection of a local device when making the + * connection. If the lpLocalName member of NETRESOURCE specifies a + * local device to redirect, this flag has no effect, because the + * operating system still attempts to redirect the specified device. + * When the operating system automatically chooses a local device, the + * dwType member must not be equal to RESOURCETYPE_ANY. If this flag is + * not set, a local device is automatically chosen for redirection only + * if the network requires a local device to be redirected. Windows XP: + * When the system automatically assigns network drive letters, letters + * are assigned beginning with Z:, then Y:, and ending with C:. This + * reduces collision between per-logon drive letters (such as network + * drive letters) and global drive letters (such as disk drives). Note + * that previous releases assigned drive letters beginning with C: and + * ending with Z:. + */ + public static final int CONNECT_REDIRECT = 0x00000080; + + /** + * If this flag is set, the connection was made using a local device + * redirection. If the lpAccessName parameter points to a buffer, the + * local device name is copied to the buffer. + */ + public static final int CONNECT_LOCALDRIVE = 0x00000100; + + /** + * If this flag is set, the operating system prompts the user for + * authentication using the command line instead of a graphical user + * interface (GUI). This flag is ignored unless CONNECT_INTERACTIVE is + * also set. Windows 2000/NT and Windows Me/98/95: This value is not + * supported. + */ + public static final int CONNECT_COMMANDLINE = 0x00000800; + + /** + * If this flag is set, and the operating system prompts for a + * credential, the credential should be saved by the credential manager. + * If the credential manager is disabled for the caller's logon session, + * or if the network provider does not support saving credentials, this + * flag is ignored. This flag is also ignored unless you set the + * CONNECT_COMMANDLINE flag. Windows 2000/NT and Windows Me/98/95: This + * value is not supported. + */ + public static final int CONNECT_CMD_SAVECRED = 0x00001000; + } + + /** + * The NETRESOURCE structure contains information about a network resource. + */ + public static class NETRESOURCE extends Structure { + + public static class ByReference extends NETRESOURCE implements Structure.ByReference { + + public ByReference() { + + } + + public ByReference(Pointer memory) { + super(memory); + } + } + + public NETRESOURCE() { + + } + + public NETRESOURCE(Pointer address) { + super(address); + read(); + } + + @Override + protected List getFieldOrder() { + return Arrays.asList("dwScope", "dwType", "dwDisplayType", "dwUsage", "lpLocalName", "lpRemoteName", "lpComment", "lpProvider"); + } + + /** + * The scope of the enumeration. This member can be one of the values + * defined in class NetResourceSope. + */ + public int dwScope; + + /** + * The type of resource. This member can be one of first 3 values + * defined in the NetResourceType. + */ + public int dwType; + + /** + * The display options for the network object in a network browsing user + * interface. This member can be one of the values defined in the + * NetResourceDisplayType. + */ + public int dwDisplayType; + + /** + * A set of bit flags describing how the resource can be used. + */ + public int dwUsage; + + /** + * If the dwScope member is equal to RESOURCE_CONNECTED or + * RESOURCE_REMEMBERED, this member is a pointer to a null-terminated + * character string that specifies the name of a local device. This + * member is NULL if the connection does not use a device. + */ + public WString lpLocalName; + + /** + * If the entry is a network resource, this member is a pointer to a + * null-terminated character string that specifies the remote network + * name. + * + * If the entry is a current or persistent connection, lpRemoteName + * member points to the network name associated with the name pointed to + * by the lpLocalName member. + * + * The string can be MAX_PATH characters in length, and it must follow + * the network provider's naming conventions + */ + public WString lpRemoteName; + + /** + * A pointer to a NULL-terminated string that contains a comment + * supplied by the network provider. + */ + public WString lpComment; + + /** + * A pointer to a NULL-terminated string that contains the name of the + * provider that owns the resource. This member can be NULL if the + * provider name is unknown. To retrieve the provider name, you can call + * the WNetGetProviderName function. + */ + public WString lpProvider; + } + + // + // Universal Naming. + // + public static int UNIVERSAL_NAME_INFO_LEVEL = 0x00000001; + public static int REMOTE_NAME_INFO_LEVEL = 0x00000002; + + /** + * The UNIVERSAL_NAME_INFO structure contains a pointer to a Universal + * Naming Convention (UNC) name string for a network resource. + */ + public static class UNIVERSAL_NAME_INFO extends Structure { + + public static class ByReference extends REMOTE_NAME_INFO implements Structure.ByReference { + + public ByReference() { + + } + + public ByReference(Pointer memory) { + super(memory); + } + } + + public UNIVERSAL_NAME_INFO() { + + } + + public UNIVERSAL_NAME_INFO(Pointer address) { + super(address); + read(); + } + + /** + * Pointer to the null-terminated UNC name string that identifies a + * network resource. + */ + public WString lpUniversalName; + + @Override + protected List getFieldOrder() { + return Arrays.asList("lpUniversalName"); + } + } + + /** + * The REMOTE_NAME_INFO structure contains path and name information for a + * network resource. The structure contains a member that points to a + * Universal Naming Convention (UNC) name string for the resource, and two + * members that point to additional network connection information strings. + */ + public static class REMOTE_NAME_INFO extends Structure { + + public static class ByReference extends REMOTE_NAME_INFO implements Structure.ByReference { + + public ByReference() { + + } + + public ByReference(Pointer memory) { + super(memory); + } + } + + public REMOTE_NAME_INFO() { + + } + + public REMOTE_NAME_INFO(Pointer address) { + super(address); + read(); + } + + /** + * Pointer to the null-terminated UNC name string that identifies a + * network resource. + */ + public WString lpUniversalName; + + /** + * Pointer to a null-terminated string that is the name of a network + * connection. + */ + public WString lpConnectionName; + + /** + * Pointer to a null-terminated name string. + */ + public WString lpRemainingPath; + + @Override + protected List getFieldOrder() { + return Arrays.asList("lpUniversalName", "lpConnectionName", "lpRemainingPath"); + } + } +} diff --git a/contrib/platform/test/com/sun/jna/platform/win32/MprTest.java b/contrib/platform/test/com/sun/jna/platform/win32/MprTest.java new file mode 100644 index 0000000000..40bb22d45f --- /dev/null +++ b/contrib/platform/test/com/sun/jna/platform/win32/MprTest.java @@ -0,0 +1,324 @@ +/* Copyright (c) 2015 Adam Marcionek, All Rights Reserved + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ + +package com.sun.jna.platform.win32; + +import java.io.File; + +import com.sun.jna.Memory; +import com.sun.jna.WString; +import com.sun.jna.platform.win32.LMShare.SHARE_INFO_2; +import com.sun.jna.platform.win32.WinNT.HANDLEByReference; +import com.sun.jna.platform.win32.Winnetwk.ConnectFlag; +import com.sun.jna.platform.win32.Winnetwk.NETRESOURCE; +import com.sun.jna.platform.win32.Winnetwk.REMOTE_NAME_INFO; +import com.sun.jna.platform.win32.Winnetwk.RESOURCESCOPE; +import com.sun.jna.platform.win32.Winnetwk.RESOURCETYPE; +import com.sun.jna.platform.win32.Winnetwk.RESOURCEUSAGE; +import com.sun.jna.platform.win32.Winnetwk.UNIVERSAL_NAME_INFO; +import com.sun.jna.ptr.IntByReference; + +import junit.framework.TestCase; + +/** + * @author amarcionek[at]gmail[dot]com + */ +public class MprTest extends TestCase { + + public static void main(String[] args) throws Exception { + junit.textui.TestRunner.run(MprTest.class); + } + + public void testWNetUseConnection() throws Exception { + // First create a share on the local machine + File fileShareFolder = createTempFolder(); + WString share = createLocalShare(fileShareFolder); + + NETRESOURCE resource = new NETRESOURCE(); + + resource.dwDisplayType = 0; + resource.dwScope = 0; + resource.dwType = RESOURCETYPE.RESOURCETYPE_DISK; + resource.lpRemoteName = new WString("\\\\" + getLocalComputerName() + "\\" + share); + + try { + // Cancel any existing connections of the same name + Mpr.INSTANCE.WNetCancelConnection2(resource.lpRemoteName, 0, true); + // Establish a new one + assertEquals(WinError.ERROR_SUCCESS, Mpr.INSTANCE.WNetUseConnection(null, resource, null, null, 0, null, null, null)); + } finally { + // Clean up resources + Mpr.INSTANCE.WNetCancelConnection2(resource.lpRemoteName, 0, true); + Netapi32.INSTANCE.NetShareDel(null, share, 0); + fileShareFolder.delete(); + } + } + + public void testWNetAddConnection3() throws Exception { + // First create a share on the local machine + File fileShareFolder = createTempFolder(); + WString share = createLocalShare(fileShareFolder); + + NETRESOURCE resource = new NETRESOURCE(); + + resource.dwDisplayType = 0; + resource.dwScope = 0; + resource.dwType = RESOURCETYPE.RESOURCETYPE_DISK; + resource.lpRemoteName = new WString("\\\\" + getLocalComputerName() + "\\" + share); + + try { + // Cancel any existing connections of the same name + Mpr.INSTANCE.WNetCancelConnection2(resource.lpRemoteName, 0, true); + // Establish a new one + assertEquals(WinError.ERROR_SUCCESS, Mpr.INSTANCE.WNetAddConnection3(null, resource, null, null, 0)); + } finally { + // Clean up resources + Mpr.INSTANCE.WNetCancelConnection2(resource.lpRemoteName, 0, true); + Netapi32.INSTANCE.NetShareDel(null, share, 0); + fileShareFolder.delete(); + } + } + + public void testWNetOpenCloseConnection() throws Exception { + HANDLEByReference lphEnum = new HANDLEByReference(); + assertEquals(WinError.ERROR_SUCCESS, Mpr.INSTANCE.WNetOpenEnum(RESOURCESCOPE.RESOURCE_CONNECTED, RESOURCETYPE.RESOURCETYPE_DISK, + RESOURCEUSAGE.RESOURCEUSAGE_ALL, null, lphEnum)); + assertEquals(WinError.ERROR_SUCCESS, Mpr.INSTANCE.WNetCloseEnum(lphEnum.getValue())); + } + + public void testWNetEnumConnection() throws Exception { + int bufferSize = 16 * 1024; // MSDN recommends this as a reasonable size + HANDLEByReference lphEnum = new HANDLEByReference(); + + // Create a local share and connect to it. This ensures the enum will + // find at least one entry. + File fileShareFolder = createTempFolder(); + WString share = createLocalShare(fileShareFolder); + // Connect to local share + connectToLocalShare(share, null); + + try { + + // Open an enumeration + assertEquals(WinError.ERROR_SUCCESS, Mpr.INSTANCE.WNetOpenEnum(RESOURCESCOPE.RESOURCE_CONNECTED, RESOURCETYPE.RESOURCETYPE_DISK, + RESOURCEUSAGE.RESOURCEUSAGE_ALL, null, lphEnum)); + + int winError = WinError.ERROR_SUCCESS; + + while (true) { + + Memory memory = new Memory(bufferSize); + + IntByReference lpBufferSize = new IntByReference(bufferSize); + IntByReference lpcCount = new IntByReference(1); + + // Get next value + winError = Mpr.INSTANCE.WNetEnumResource(lphEnum.getValue(), lpcCount, memory, lpBufferSize); + + // Reached end of enumeration + if (winError == WinError.ERROR_NO_MORE_ITEMS) + break; + + // Unlikely, but means our buffer size isn't large enough. + if (winError == WinError.ERROR_MORE_DATA) { + bufferSize = bufferSize * 2; + continue; + } + + // If we get here, it means it has to be a success or our + // programming logic was wrong. + assertEquals(winError, WinError.ERROR_SUCCESS); + + // Asked for one, should only get one. + assertEquals(1, lpcCount.getValue()); + + // Create a NETRESOURCE based on the memory + NETRESOURCE resource = new NETRESOURCE(memory); + + // Assert things we know for sure. + assertNotNull(resource.lpRemoteName); + } + + // Expect ERROR_NO_MORE_ITEMS here. + assertEquals(winError, WinError.ERROR_NO_MORE_ITEMS); + } finally { + // Clean up resources + Mpr.INSTANCE.WNetCloseEnum(lphEnum.getValue()); + disconnectFromLocalShare(new WString("\\\\" + getLocalComputerName() + "\\" + share)); + deleteLocalShare(share); + fileShareFolder.delete(); + } + } + + public void testWNetGetUniversalName() throws Exception { + int bufferSize = 1024; // MSDN recommends this as a reasonable size + Memory memory = new Memory(bufferSize); + IntByReference lpBufferSize = new IntByReference(bufferSize); + File file = null; + WString share = null; + String driveLetter = new String("x:"); + File fileShareFolder = createTempFolder(); + + try { + // Create a local share and connect to it. + share = createLocalShare(fileShareFolder); + // Connect to share using a drive letter. + connectToLocalShare(share, new WString(driveLetter)); + + // Create a path on local device redirected to the share. + String filePath = new String(driveLetter + "\\testfile.txt"); + file = new File(filePath); + file.createNewFile(); + + // Test WNetGetUniversalName using UNIVERSAL_NAME_INFO_LEVEL + assertEquals(WinError.ERROR_SUCCESS, + Mpr.INSTANCE.WNetGetUniversalName(new WString(filePath), Winnetwk.UNIVERSAL_NAME_INFO_LEVEL, memory, lpBufferSize)); + + UNIVERSAL_NAME_INFO uinfo = new UNIVERSAL_NAME_INFO(memory); + assertNotNull(uinfo.lpUniversalName); + + // Test WNetGetUniversalName using REMOTE_NAME_INFO_LEVEL + assertEquals(WinError.ERROR_SUCCESS, + Mpr.INSTANCE.WNetGetUniversalName(new WString(filePath), Winnetwk.REMOTE_NAME_INFO_LEVEL, memory, lpBufferSize)); + + REMOTE_NAME_INFO rinfo = new REMOTE_NAME_INFO(memory); + assertNotNull(rinfo.lpUniversalName); + assertNotNull(rinfo.lpConnectionName); + assertNotNull(rinfo.lpRemainingPath); + } finally { + // Clean up resources + if (file != null) + file.delete(); + if (share != null) { + disconnectFromLocalShare(new WString(driveLetter)); + deleteLocalShare(share); + fileShareFolder.delete(); + } + } + } + + private static File createTempFolder() throws Exception { + String folderPath = System.getProperty("java.io.tmpdir") + File.separatorChar + System.nanoTime(); + File file = new File(folderPath); + file.mkdir(); + return file; + } + + /** + * Get local NETBIOS machine name + * + * @return String with machine name + * @throws Exception + */ + private String getLocalComputerName() throws Exception { + IntByReference lpnSize = new IntByReference(0); + // Get size of char array + Kernel32.INSTANCE.GetComputerName(null, lpnSize); + assertEquals(WinError.ERROR_BUFFER_OVERFLOW, Kernel32.INSTANCE.GetLastError()); + // Allocate character array + char buffer[] = new char[WinBase.MAX_COMPUTERNAME_LENGTH + 1]; + lpnSize.setValue(buffer.length); + assertTrue(Kernel32.INSTANCE.GetComputerName(buffer, lpnSize)); + // Return string with computer name + String computerName = new String(buffer); + computerName = computerName.trim(); + return computerName; + } + + /** + * Create a share on the local machine. Uses a temporary directory and + * shares it out with ACCESS_ALL + * + * @param shareFolder + * the full path local folder to share + * @return WString with the share name, essentially the top level folder + * name. + * @throws Exception + * the exception + */ + private WString createLocalShare(File shareFolder) throws Exception { + + SHARE_INFO_2 shi = new SHARE_INFO_2(); + shi.shi2_netname = new WString(shareFolder.getName()); + shi.shi2_type = LMShare.STYPE_DISKTREE; + shi.shi2_remark = new WString(""); + shi.shi2_permissions = LMAccess.ACCESS_ALL; + shi.shi2_max_uses = -1; + shi.shi2_current_uses = 0; + shi.shi2_path = new WString(shareFolder.getAbsolutePath()); + shi.shi2_passwd = new WString(""); + + // Write from struct to native memory. + shi.write(); + + IntByReference parm_err = new IntByReference(0); + assertEquals(LMErr.NERR_Success, Netapi32.INSTANCE.NetShareAdd(null, // Use + // local + // computer + 2, shi.getPointer(), parm_err)); + + return new WString(shareFolder.getName()); + } + + /** + * Delete a local share + * + * @param share + */ + private void deleteLocalShare(WString share) { + Netapi32.INSTANCE.NetShareDel(null, share, 0); + } + + /** + * Connect to a local share on the local machine. Assumes the share is + * already present + * + * @param share + * name of share on local computer. + * @param lpLocalName + * name of local device to redirect to. E.g. F:. If null, makes a + * connection without redirecting. + * @throws Exception + * the exception + */ + private void connectToLocalShare(WString share, WString lpLocalName) throws Exception { + NETRESOURCE resource = new NETRESOURCE(); + + resource.dwDisplayType = 0; + resource.dwScope = 0; + resource.dwType = RESOURCETYPE.RESOURCETYPE_DISK; + resource.lpLocalName = lpLocalName; + resource.lpRemoteName = new WString("\\\\" + getLocalComputerName() + "\\" + share); + + // Establish connection + assertEquals(WinError.ERROR_SUCCESS, Mpr.INSTANCE.WNetAddConnection3(null, resource, null, null, 0)); + } + + /** + * Disconnect from a share. + * + * @param lpName + * [in] Pointer to a constant null-terminated string that + * specifies the name of either the redirected local device or + * the remote network resource to disconnect from. If this + * parameter specifies a redirected local device, the function + * cancels only the specified device redirection. If the + * parameter specifies a remote network resource, all connections + * without devices are canceled. + */ + private void disconnectFromLocalShare(WString lpName) { + // Remove connection + Mpr.INSTANCE.WNetCancelConnection2(lpName, ConnectFlag.CONNECT_UPDATE_PROFILE, true); + } +} \ No newline at end of file diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Netapi32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/Netapi32Test.java index ca6c47b43a..5ef332b432 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/Netapi32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Netapi32Test.java @@ -12,7 +12,7 @@ */ package com.sun.jna.platform.win32; -import junit.framework.TestCase; +import java.io.File; import com.sun.jna.WString; import com.sun.jna.platform.win32.DsGetDC.DS_DOMAIN_TRUSTS; @@ -21,6 +21,8 @@ import com.sun.jna.platform.win32.LMAccess.GROUP_USERS_INFO_0; import com.sun.jna.platform.win32.LMAccess.LOCALGROUP_USERS_INFO_0; import com.sun.jna.platform.win32.LMAccess.USER_INFO_1; +import com.sun.jna.platform.win32.LMShare.SHARE_INFO_2; +import com.sun.jna.platform.win32.LMShare.SHARE_INFO_502; import com.sun.jna.platform.win32.NTSecApi.LSA_FOREST_TRUST_RECORD; import com.sun.jna.platform.win32.NTSecApi.PLSA_FOREST_TRUST_INFORMATION; import com.sun.jna.platform.win32.NTSecApi.PLSA_FOREST_TRUST_RECORD; @@ -29,6 +31,8 @@ import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.PointerByReference; +import junit.framework.TestCase; + /** * @author dblock[at]dblock[dot]org */ @@ -257,4 +261,98 @@ public void testDsEnumerateDomainTrusts() { assertEquals(W32Errors.ERROR_SUCCESS, Netapi32.INSTANCE.NetApiBufferFree(domainTrustRefs.getPointer())); } + public void testNetShareAddShareInfo2() throws Exception { + + File fileShareFolder = createTempFolder(); + + SHARE_INFO_2 shi = new SHARE_INFO_2(); + shi.shi2_netname = new WString(fileShareFolder.getName()); + shi.shi2_type = LMShare.STYPE_DISKTREE; + shi.shi2_remark = new WString(""); + shi.shi2_permissions = LMAccess.ACCESS_ALL; + shi.shi2_max_uses = -1; + shi.shi2_current_uses = 0; + shi.shi2_path = new WString(fileShareFolder.getAbsolutePath()); + shi.shi2_passwd = new WString(""); + + // Write from struct to native memory. + shi.write(); + + IntByReference parm_err = new IntByReference(0); + int winError = Netapi32.INSTANCE.NetShareAdd(null, // Use local computer + 2, shi.getPointer(), parm_err); + + if (winError == W32Errors.ERROR_INVALID_PARAMETER) { + // fail with offset. + throw new Exception("testNetShareAddShareInfo2 failed with invalid parameter on structure offset: " + parm_err.getValue()); + } + + assertEquals(LMErr.NERR_Success, winError); + + Netapi32.INSTANCE.NetShareDel(null, shi.shi2_netname, 0); + } + + public void testNetShareAddShareInfo502() throws Exception { + + File fileShareFolder = createTempFolder(); + + SHARE_INFO_502 shi = new SHARE_INFO_502(); + shi.shi502_netname = new WString(fileShareFolder.getName()); + shi.shi502_type = LMShare.STYPE_DISKTREE; + shi.shi502_remark = new WString(""); + shi.shi502_permissions = LMAccess.ACCESS_ALL; + shi.shi502_max_uses = -1; + shi.shi502_current_uses = 0; + shi.shi502_path = new WString(fileShareFolder.getAbsolutePath()); + shi.shi502_passwd = null; + shi.shi502_reserved = 0; + shi.shi502_security_descriptor = null; + + // Write from struct to native memory. + shi.write(); + + IntByReference parm_err = new IntByReference(0); + int winError = Netapi32.INSTANCE.NetShareAdd(null, // Use local computer + 502, shi.getPointer(), parm_err); + + if (winError == W32Errors.ERROR_INVALID_PARAMETER) { + // fail with offset. + throw new Exception("testNetShareAddShareInfo502 failed with invalid parameter on structure offset: " + parm_err.getValue()); + } + + assertEquals(LMErr.NERR_Success, winError); + + Netapi32.INSTANCE.NetShareDel(null, shi.shi502_netname, 0); + } + + public void testNetShareDel() throws Exception { + + File fileShareFolder = createTempFolder(); + + SHARE_INFO_2 shi = new SHARE_INFO_2(); + shi.shi2_netname = new WString(fileShareFolder.getName()); + shi.shi2_type = LMShare.STYPE_DISKTREE; + shi.shi2_remark = new WString(""); + shi.shi2_permissions = LMAccess.ACCESS_ALL; + shi.shi2_max_uses = -1; + shi.shi2_current_uses = 0; + shi.shi2_path = new WString(fileShareFolder.getAbsolutePath()); + shi.shi2_passwd = new WString(""); + + // Write from struct to native memory. + shi.write(); + + IntByReference parm_err = new IntByReference(0); + assertEquals(LMErr.NERR_Success, Netapi32.INSTANCE.NetShareAdd(null, // Use local computer + 2, shi.getPointer(), parm_err)); + + assertEquals(LMErr.NERR_Success, Netapi32.INSTANCE.NetShareDel(null, shi.shi2_netname, 0)); + } + + private File createTempFolder() throws Exception { + String folderPath = System.getProperty("java.io.tmpdir") + File.separatorChar + System.nanoTime(); + File file = new File(folderPath); + file.mkdir(); + return file; + } } From db86ae6c9151aabb45b9e12cd2df348e1de21030 Mon Sep 17 00:00:00 2001 From: Michael Freeman Date: Mon, 16 Nov 2015 07:05:33 -0500 Subject: [PATCH 06/29] Added Win32 mappings. * Advapi32 * Added LOGON_WITH_PROFILE constant * Added LOGON_NETCREDENTIALS_ONLY constant * Added CreateProcessWithLogonW(String, String, String, int, String, String, int, Pointer, String, STARTUPINFO, PROCESS_INFORMATION) * No Unit Test - I would have to make it create a user to be 100% able to run a process as another user and that would be a security issue I figure. * Crypt32 * Added CertAddEncodedCertificateToSystemStore(String, Pointer, DWORD) * No Unit Test - I doubt anyone would want the security risk of a unit test installing a root certificate. * GDI32 * Added SRCCOPY constant * Added BitBlt(HDC, int, int, int, int, HDC, int, int, int) * No direct unit test - the test for GDI32Util.getScreenshot() seemed to cover it just fine. * Added GDI32Util.getScreenshot(HWND) * Added unit test as GDI32UtilTest.testGetScreenshot() * Shell32 * Added SHERB_NOCONFIRMATION constant * Added SHERB_NOPROGRESSUI constant * Added SHERB_NOSOUND constant * Added SEE_MASK_NOCLOSEPROCESS constant * Added SHEmptyRecycleBin(HANDLE, String, int) * No unit test - no idea how to tell if the recycle bin is empty afterwards * Added ShellExecuteEx(SHELLEXECUTEINFO) * No unit test - there are a bunch of cases where the hProcess member in SHELLEXECUTEINFO isn't set - not sure how to control for that * ShellAPI * Added SHELLEXECUTEINFO structure * User32 * Added GetDesktopWindow() * Added test as User32Test.testGetDesktopWindow() * WinGDI * Added HGDI_ERROR * Removed superfluous "public" and "public final" from WinGDI --- CHANGES.md | 9 +- .../com/sun/jna/platform/win32/Advapi32.java | 339 +++++++ .../com/sun/jna/platform/win32/Crypt32.java | 24 + .../src/com/sun/jna/platform/win32/GDI32.java | 150 +++ .../com/sun/jna/platform/win32/GDI32Util.java | 166 ++++ .../com/sun/jna/platform/win32/Shell32.java | 85 +- .../com/sun/jna/platform/win32/ShellAPI.java | 854 +++++++++++++++++- .../com/sun/jna/platform/win32/User32.java | 23 + .../com/sun/jna/platform/win32/WinCrypt.java | 115 +++ .../com/sun/jna/platform/win32/WinGDI.java | 98 +- .../sun/jna/platform/win32/Advapi32Test.java | 56 +- .../sun/jna/platform/win32/Crypt32Test.java | 21 +- .../sun/jna/platform/win32/GDI32UtilTest.java | 56 ++ .../sun/jna/platform/win32/Shell32Test.java | 111 ++- .../sun/jna/platform/win32/User32Test.java | 8 +- 15 files changed, 2042 insertions(+), 73 deletions(-) create mode 100644 contrib/platform/src/com/sun/jna/platform/win32/GDI32Util.java create mode 100644 contrib/platform/test/com/sun/jna/platform/win32/GDI32UtilTest.java diff --git a/CHANGES.md b/CHANGES.md index 9e2498e3e0..f44c9530c3 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,11 @@ Features * [#532](https://github.com/java-native-access/jna/pull/529): Added `com.sun.jna.platform.win32.Mpr`, `com.sun.jna.platform.win32.LmShare`, and `com.sun.jna.platform.win32.Winnetwk` - [@amarcionek](https://github.com/amarcionek). * [#532](https://github.com/java-native-access/jna/pull/529): Added `ACCESS_*` definitions to `com.sun.jna.platform.win32.LmAccess` - [@amarcionek](https://github.com/amarcionek). * [#532](https://github.com/java-native-access/jna/pull/529): Added `NetShareAdd` and `NetShareDel` to `com.sun.jna.platform.win32.Netapi32` - [@amarcionek](https://github.com/amarcionek). +* [#535](https://github.com/java-native-access/jna/pull/535): Added `CreateProcessWithLogonW` to `com.sun.jna.platform.win32.Advapi32` - [@mlfreeman2](https://github.com/mlfreeman2). +* [#535](https://github.com/java-native-access/jna/pull/535): Added `CertAddEncodedCertificateToSystemStore` to `com.sun.jna.platform.win32.Crypt32` - [@mlfreeman2](https://github.com/mlfreeman2). +* [#535](https://github.com/java-native-access/jna/pull/535): Added `BitBlt` to `com.sun.jna.platform.win32.GDI32`, Added `com.sun.jna.platform.win32.GDI32Util` and added `getScreenshot()` to it - [@mlfreeman2](https://github.com/mlfreeman2). +* [#535](https://github.com/java-native-access/jna/pull/535): Added `SHEmptyRecycleBin`, `ShellExecuteEx` to `com.sun.jna.platform.win32.Shell32` - [@mlfreeman2](https://github.com/mlfreeman2). +* [#535](https://github.com/java-native-access/jna/pull/535): Added `GetDesktopWindow` to `com.sun.jna.platform.win32.User32` - [@mlfreeman2](https://github.com/mlfreeman2). Bug Fixes --------- @@ -99,10 +104,10 @@ Bug Fixes * Remove unsupported JAWT from OSX build - [@twall](https://github.com/twall). * Disable WebStart tests - [@twall](https://github.com/twall). * Dispose all native resources when JNA's native library is unloaded - Paul Grütter, [@twall](https://github.com/twall). -* Weakly hold registered direct-mapped classes - [@twall](https://github.com/twall). +* Weakly hold registered direct-mapped classes - [@twall](https://github.com/twall). * [#382](https://github.com/java-native-access/jna/pull/382): Fixed memory allocation in `com.sun.jna.platform.win32.WTypes.LPWSTR` and `LPSTR` constructors - [@junak-michal](https://github.com/junak-michal). * Fix publish doc links - [@bhamail](https://github.com/bhamail). -* [#388](https://github.com/java-native-access/jna/issues/388): Ensure native library always opened with provided flags - [@zolyfarkas](https://github.com/zolyfarkas). +* [#388](https://github.com/java-native-access/jna/issues/388): Ensure native library always opened with provided flags - [@zolyfarkas](https://github.com/zolyfarkas). * [#403](https://github.com/java-native-access/jna/pull/403): Fix `com.sun.jna.platform.win32.COM.COMUtils.SUCCEEDED` and `FAILED` - [@lwahonen](https://github.com/lwahonen). * [#404](https://github.com/java-native-access/jna/pull/404): Fix `VARIANT` constructors for `int`, `short`, and `long` - [@lwahonen](https://github.com/lwahonen). * [#420](https://github.com/java-native-access/jna/pull/420): Fix structure leaving always one element in ThreadLocal set - [@sjappig](https://github.com/sjappig). diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Advapi32.java b/contrib/platform/src/com/sun/jna/platform/win32/Advapi32.java index 3ad52d0a21..c32facfb02 100755 --- a/contrib/platform/src/com/sun/jna/platform/win32/Advapi32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Advapi32.java @@ -17,8 +17,10 @@ import com.sun.jna.Structure; import com.sun.jna.WString; import com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES; +import com.sun.jna.platform.win32.WinBase.STARTUPINFO; import com.sun.jna.platform.win32.WinBase.FE_EXPORT_FUNC; import com.sun.jna.platform.win32.WinBase.FE_IMPORT_FUNC; +import com.sun.jna.platform.win32.WinBase.PROCESS_INFORMATION; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.platform.win32.WinNT.HANDLEByReference; import com.sun.jna.platform.win32.WinNT.PSID; @@ -64,6 +66,36 @@ public interface Advapi32 extends StdCallLibrary { public static final int RRF_RT_REG_QWORD = 0x00000040; public static final int RRF_RT_REG_SZ = 0x00000002; + /** + * LOGON_WITH_PROFILE: 0x00000001
    + * Log on, then load the user profile in the HKEY_USERS registry key.
    + * The function returns after the profile is loaded.
    + * Loading the profile can be time-consuming, so it is best to use this + * value only if you must access the information in the HKEY_CURRENT_USER + * registry key.
    + * Windows Server 2003: The profile is unloaded after the new process is + * terminated, whether or not it has created child processes.
    + * Windows XP: The profile is unloaded after the new process and all child + * processes it has created are terminated.
    + */ + int LOGON_WITH_PROFILE = 0x00000001; + + /** + * LOGON_NETCREDENTIALS_ONLY: 0x00000002
    + * Log on, but use the specified credentials on the network only.
    + * The new process uses the same token as the caller, but the system creates + * a new logon session within LSA, and the process uses the specified + * credentials as the default credentials.
    + * This value can be used to create a process that uses a different set of + * credentials locally than it does remotely.
    + * This is useful in inter-domain scenarios where there is no trust + * relationship.
    + * The system does not validate the specified credentials.
    + * Therefore, the process can start, but it may not have access to network + * resources. + */ + int LOGON_NETCREDENTIALS_ONLY = 0x00000002; + /** * Retrieves the name of the user associated with the current thread. * http://msdn.microsoft.com/en-us/library/ms724432(VS.85).aspx @@ -1902,4 +1934,311 @@ public int WriteEncryptedFileRaw(FE_IMPORT_FUNC pfImportCallback, * OpenEncryptedFileRaw function returns the context block. */ public void CloseEncryptedFileRaw(Pointer pvContext); + + /** + * + BOOL WINAPI CreateProcessWithLogonW( + _In_ LPCWSTR lpUsername, + _In_opt_ LPCWSTR lpDomain, + _In_ LPCWSTR lpPassword, + _In_ DWORD dwLogonFlags, + _In_opt_ LPCWSTR lpApplicationName, + _Inout_opt_ LPWSTR lpCommandLine, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCWSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOW lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInfo + ); + * + * + * @param lpUsername + * [in]
    + * The name of the user. This is the name of the user account to + * log on to.
    + * If you use the UPN format, user@DNS_domain_name, the lpDomain + * parameter must be NULL.
    + * The user account must have the Log On Locally permission on + * the local computer.
    + * This permission is granted to all users on workstations and + * servers, but only to administrators on domain controllers. + * @param lpDomain + * [in, optional]
    + * The name of the domain or server whose account database + * contains the lpUsername account.
    + * If this parameter is NULL, the user name must be specified in + * UPN format. + * @param lpPassword + * [in]
    + * The clear-text password for the lpUsername account. + * @param dwLogonFlags + * [in]
    + * The logon option. This parameter can be 0 (zero) or one of the + * following values.
    + * LOGON_WITH_PROFILE: 0x00000001
    + * Log on, then load the user profile in the HKEY_USERS registry + * key.
    + * The function returns after the profile is loaded.
    + * Loading the profile can be time-consuming, so it is best to + * use this value only if you must access the information in the + * HKEY_CURRENT_USER registry key.
    + * Windows Server 2003: The profile is unloaded after the new + * process is terminated, whether or not it has created child + * processes.
    + * Windows XP: The profile is unloaded after the new process and + * all child processes it has created are terminated.
    + *
    + * LOGON_NETCREDENTIALS_ONLY: 0x00000002
    + * Log on, but use the specified credentials on the network only. + *
    + * The new process uses the same token as the caller, but the + * system creates a new logon session within LSA, and the process + * uses the specified credentials as the default credentials. + *
    + * This value can be used to create a process that uses a + * different set of credentials locally than it does remotely. + *
    + * This is useful in inter-domain scenarios where there is no + * trust relationship.
    + * The system does not validate the specified credentials.
    + * Therefore, the process can start, but it may not have access + * to network resources. + * @param lpApplicationName + * [in, optional]
    + * The name of the module to be executed. This module can be a + * Windows-based application.
    + * It can be some other type of module (for example, MS-DOS or + * OS/2) if the appropriate subsystem is available on the local + * computer. The string can specify the full path and file name + * of the module to execute or it can specify a partial name. + *
    + * If it is a partial name, the function uses the current drive + * and current directory to complete the specification.
    + * The function does not use the search path. This parameter must + * include the file name extension; no default extension is + * assumed. The lpApplicationName parameter can be NULL, and the + * module name must be the first white space-delimited token in + * the lpCommandLine string.
    + * If you are using a long file name that contains a space, use + * quoted strings to indicate where the file name ends and the + * arguments begin; otherwise, the file name is ambiguous. For + * example, the following string can be interpreted in different + * ways:
    + * "c:\program files\sub dir\program name"
    + * The system tries to interpret the possibilities in the + * following order:
    + *
    + * c:\program.exe files\sub dir\program name
    + * c:\program files\sub.exe dir\program name
    + * c:\program files\sub dir\program.exe name
    + * c:\program files\sub dir\program name.exe
    + *
    + * If the executable module is a 16-bit application, + * lpApplicationName should be NULL, and the string pointed to by + * lpCommandLine should specify the executable module and its + * arguments. + * @param lpCommandLine + * [in, out, optional]
    + * The command line to be executed. The maximum length of this + * string is 1024 characters.
    + * If lpApplicationName is NULL, the module name portion of + * lpCommandLine is limited to MAX_PATH characters.
    + * The function can modify the contents of this string.
    + * Therefore, this parameter cannot be a pointer to read-only + * memory (such as a const variable or a literal string).
    + * If this parameter is a constant string, the function may cause + * an access violation.
    + * The lpCommandLine parameter can be NULL, and the function uses + * the string pointed to by lpApplicationNameas the command line. + *
    + *
    + * If both lpApplicationName and lpCommandLine are non-NULL, + * *lpApplicationName specifies the module to execute, and + * *lpCommandLine specifies the command line.
    + * The new process can use GetCommandLine to retrieve the entire + * command line.
    + * Console processes written in C can use the argc and argv + * arguments to parse the command line.
    + * Because argv[0] is the module name, C programmers typically + * repeat the module name as the first token in the command line. + *
    + * If lpApplicationName is NULL, the first white space-delimited + * token of the command line specifies the module name.
    + * If you are using a long file name that contains a space, use + * quoted strings to indicate where the file name ends and the + * arguments begin (see the explanation for the lpApplicationName + * parameter). If the file name does not contain an extension, + * .exe is appended. Therefore, if the file name extension is + * .com, this parameter must include the .com extension. If the + * file name ends in a period with no extension, or if the file + * name contains a path, .exe is not appended. If the file name + * does not contain a directory path, the system searches for the + * executable file in the following sequence:
    + *
    + * 1. The directory from which the application loaded.
    + * 2. The current directory for the parent process.
    + * 3. The 32-bit Windows system directory. Use the + * GetSystemDirectory function to get the path of this directory. + *
    + * 4. The 16-bit Windows system directory. There is no function + * that obtains the path of this directory, but it is searched. + *
    + * 5. The Windows directory. Use the GetWindowsDirectory function + * to get the path of this directory.
    + * 6. The directories that are listed in the PATH environment + * variable. Note that this function does not search the + * per-application path specified by the App Paths registry key. + * To include this per-application path in the search sequence, + * use the ShellExecute function.
    + *
    + * The system adds a null character to the command line string to + * separate the file name from the arguments. This divides the + * original string into two strings for internal processing.
    + * @param dwCreationFlags + * The flags that control how the process is created.
    + * The CREATE_DEFAULT_ERROR_MODE, CREATE_NEW_CONSOLE, and + * CREATE_NEW_PROCESS_GROUP flags are enabled by default.
    + * Even if you do not set the flag, the system functions as if it + * were set. You can specify additional flags as noted.
    + *
    + * CREATE_DEFAULT_ERROR_MODE: 0x04000000
    + * The new process does not inherit the error mode of the calling + * process.
    + * Instead, CreateProcessWithLogonW gives the new process the + * current default error mode.
    + * An application sets the current default error mode by calling + * SetErrorMode. This flag is enabled by default.
    + *
    + * CREATE_NEW_CONSOLE: 0x00000010
    + * The new process has a new console, instead of inheriting the + * parent's console. This flag cannot be used with the + * DETACHED_PROCESS flag.
    + * This flag is enabled by default.
    + *
    + * CREATE_NEW_PROCESS_GROUP: 0x00000200
    + * The new process is the root process of a new process group. + *
    + * The process group includes all processes that are descendants + * of this root process.
    + * The process identifier of the new process group is the same as + * the process identifier, which is returned in the lpProcessInfo + * parameter.
    + * Process groups are used by the GenerateConsoleCtrlEvent + * function to enable sending a CTRL+C or CTRL+BREAK signal to a + * group of console processes.
    + * This flag is enabled by default.
    + *
    + * CREATE_SEPARATE_WOW_VDM: 0x00000800
    + * This flag is only valid starting a 16-bit Windows-based + * application.
    + * If set, the new process runs in a private Virtual DOS Machine + * (VDM).
    + * By default, all 16-bit Windows-based applications run in a + * single, shared VDM.
    + * The advantage of running separately is that a crash only + * terminates the single VDM; any other programs running in + * distinct VDMs continue to function normally.
    + * Also, 16-bit Windows-based applications that run in separate + * VDMs have separate input queues, which means that if one + * application stops responding momentarily, applications in + * separate VDMs continue to receive input.
    + * CREATE_SUSPENDED: 0x00000004
    + * The primary thread of the new process is created in a + * suspended state, and does not run until the ResumeThread + * function is called.
    + *
    + * CREATE_UNICODE_ENVIRONMENT: 0x00000400
    + * Indicates the format of the lpEnvironment parameter.
    + * If this flag is set, the environment block pointed to by + * lpEnvironment uses Unicode characters.
    + * Otherwise, the environment block uses ANSI characters.
    + * EXTENDED_STARTUPINFO_PRESENT: 0x00080000
    + * The process is created with extended startup information; the + * lpStartupInfo parameter specifies a STARTUPINFOEX structure. + *
    + * Windows Server 2003 and Windows XP: This value is not + * supported.
    + * @param lpEnvironment + * [in, optional]
    + * A pointer to an environment block for the new process.
    + * If this parameter is NULL, the new process uses an environment + * created from the profile of the user specified by lpUsername. + * An environment block consists of a null-terminated block of + * null-terminated strings.
    + * Each string is in the following form:
    + * name=value
    + * Because the equal sign (=) is used as a separator, it must not + * be used in the name of an environment variable.
    + * An environment block can contain Unicode or ANSI characters. + *
    + * If the environment block pointed to by lpEnvironment contains + * Unicode characters, ensure that dwCreationFlags includes + * CREATE_UNICODE_ENVIRONMENT.
    + * If this parameter is NULL and the environment block of the + * parent process contains Unicode characters, you must also + * ensure that dwCreationFlags includes + * CREATE_UNICODE_ENVIRONMENT.
    + * An ANSI environment block is terminated by two 0 (zero) bytes: + * one for the last string and one more to terminate the block. + *
    + * A Unicode environment block is terminated by four zero bytes: + * two for the last string and two more to terminate the block. + *
    + * To retrieve a copy of the environment block for a specific + * user, use the CreateEnvironmentBlock function.
    + * @param lpCurrentDirectory + * [in, optional]
    + * The full path to the current directory for the process.
    + * The string can also specify a UNC path.
    + * If this parameter is NULL, the new process has the same + * current drive and directory as the calling process.
    + * This feature is provided primarily for shells that need to + * start an application, and specify its initial drive and + * working directory.
    + * @param lpStartupInfo + * [in]
    + * A pointer to a STARTUPINFO or STARTUPINFOEX structure.
    + * The application must add permission for the specified user + * account to the specified window station and desktop, even for + * WinSta0\Default.
    + * If the lpDesktop member is NULL or an empty string, the new + * process inherits the desktop and window station of its parent + * process.
    + * The application must add permission for the specified user + * account to the inherited window station and desktop.
    + * Windows XP: CreateProcessWithLogonW adds permission for the + * specified user account to the inherited window station and + * desktop.
    + * Handles in STARTUPINFO or STARTUPINFOEX must be closed with + * CloseHandle when they are no longer needed.
    + * Important If the dwFlags member of the STARTUPINFO structure + * specifies STARTF_USESTDHANDLES, the standard handle fields are + * copied unchanged to the child process without validation.
    + * The caller is responsible for ensuring that these fields + * contain valid handle values. Incorrect values can cause the + * child process to misbehave or crash.
    + * Use the Application Verifier runtime verification tool to + * detect invalid handles. + * @param lpProcessInfo + * [out]
    + * A pointer to a PROCESS_INFORMATION structure that receives + * identification information for the new process, including a + * handle to the process.
    + * Handles in PROCESS_INFORMATION must be closed with the + * CloseHandle function when they are not needed.
    + * @return If the function succeeds, the return value is nonzero.
    + * If the function fails, the return value is 0 (zero).
    + * To get extended error information, call GetLastError.
    + * Note that the function returns before the process has finished + * initialization.
    + * If a required DLL cannot be located or fails to initialize, the + * process is terminated.
    + * To get the termination status of a process, call + * GetExitCodeProcess. + * @see MSDN {@link http://msdn.microsoft.com/en-us/library/windows/desktop/ms682431%28v=vs.85%29.aspx } + */ + boolean CreateProcessWithLogonW(String lpUsername, String lpDomain, String lpPassword, int dwLogonFlags, + String lpApplicationName, String lpCommandLine, int dwCreationFlags, Pointer lpEnvironment, + String lpCurrentDirectory, STARTUPINFO lpStartupInfo, PROCESS_INFORMATION lpProcessInfo); + } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Crypt32.java b/contrib/platform/src/com/sun/jna/platform/win32/Crypt32.java index 9e5aefa31c..e5b9035762 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Crypt32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Crypt32.java @@ -16,6 +16,7 @@ import com.sun.jna.Pointer; import com.sun.jna.platform.win32.WinCrypt.CRYPTPROTECT_PROMPTSTRUCT; import com.sun.jna.platform.win32.WinCrypt.DATA_BLOB; +import com.sun.jna.platform.win32.WinDef.DWORD; import com.sun.jna.ptr.PointerByReference; import com.sun.jna.win32.StdCallLibrary; import com.sun.jna.win32.W32APIOptions; @@ -109,4 +110,27 @@ public boolean CryptUnprotectData(DATA_BLOB pDataIn, PointerByReference szDataDe CRYPTPROTECT_PROMPTSTRUCT pPromptStruct, int dwFlags, DATA_BLOB pDataOut); + + /** + * The CertAddEncodedCertificateToSystemStore function opens the specified + * system store and adds the encoded certificate to it. + * + * @param szCertStoreName + * A null-terminated string that contains the name of the system + * store for the encoded certificate. + * @param pbCertEncoded + * A pointer to a buffer that contains the encoded certificate to + * add. + * @param cbCertEncoded + * The size, in bytes, of the pbCertEncoded buffer. + * @return If the function succeeds, the return value is TRUE.
    + * If the function fails, the return value is FALSE.
    + * CertAddEncodedCertificateToSystemStore depends on the functions + * listed in the following remarks for error handling.
    + * Refer to those function topics for their respective error + * handling behaviors.
    + * For extended error information, call GetLastError. + * @see MSDN {@link http://msdn.microsoft.com/en-us/library/bb736347(v=vs.85).aspx } + */ + boolean CertAddEncodedCertificateToSystemStore(String szCertStoreName, Pointer pbCertEncoded, int cbCertEncoded); } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/GDI32.java b/contrib/platform/src/com/sun/jna/platform/win32/GDI32.java index 11de5a5cc3..62af79d769 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/GDI32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/GDI32.java @@ -42,6 +42,12 @@ public interface GDI32 extends StdCallLibrary { GDI32 INSTANCE = (GDI32) Native.loadLibrary("gdi32", GDI32.class, W32APIOptions.DEFAULT_OPTIONS); + /** + * Used with BitBlt. Copies the source rectangle directly to the destination + * rectangle. + */ + int SRCCOPY = 0xCC0020; + /** * The ExtCreateRegion function creates a region from the specified region and transformation data. * @param lpXform @@ -430,4 +436,148 @@ HBITMAP CreateDIBSection(HDC hDC, BITMAPINFO pbmi, int iUsage, */ public int GetObject(final HANDLE hgdiobj, final int cbBuffer, final Pointer lpvObject); + + /** + * The BitBlt function performs a bit-block transfer of the color data + * corresponding to a rectangle of pixels from the specified source device + * context into a destination device context. + * + * @param hdcDest + * A handle to the destination device context. + * @param nXDest + * The x-coordinate, in logical units, of the upper-left corner + * of the destination rectangle. + * @param nYDest + * The y-coordinate, in logical units, of the upper-left corner + * of the destination rectangle. + * @param nWidth + * The width, in logical units, of the source and destination + * rectangles. + * @param nHeight + * The height, in logical units, of the source and the + * destination rectangles. + * @param hdcSrc + * A handle to the source device context. + * @param nXSrc + * The x-coordinate, in logical units, of the upper-left corner + * of the source rectangle. + * @param nYSrc + * The y-coordinate, in logical units, of the upper-left corner + * of the source rectangle. + * @param dwRop + * A raster-operation code.
    + * These codes define how the color data for the source rectangle + * is to be combined with the color data for the destination + * rectangle to achieve the final color.
    + * The following list shows some common raster operation codes. + *
    + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    ValueMeaning
    BLACKNESSFills the destination rectangle using the color associated + * with index 0 in the physical palette. (This color is black for + * the default physical palette.)
    CAPTUREBLTIncludes any windows that are layered on top of your + * window in the resulting image. By default, the image only + * contains your window. Note that this generally cannot be used + * for printing device contexts.
    DSTINVERTInverts the destination rectangle.
    MERGECOPYMerges the colors of the source rectangle with the brush + * currently selected in hdcDest, by using the Boolean + * AND operator.
    MERGEPAINTMerges the colors of the inverted source rectangle with + * the colors of the destination rectangle by using the Boolean + * OR operator.
    NOMIRRORBITMAP + * Prevents the bitmap from being mirrored.
    NOTSRCCOPYCopies the inverted source rectangle to the destination. + *
    NOTSRCERASECombines the colors of the source and destination + * rectangles by using the Boolean OR operator and then inverts + * the resultant color.
    PATCOPYCopies the brush currently selected in hdcDest, + * into the destination bitmap.
    PATINVERTCombines the colors of the brush currently selected in + * hdcDest, with the colors of the destination rectangle + * by using the Boolean XOR operator.
    PATPAINTCombines the colors of the brush currently selected in + * hdcDest, with the colors of the inverted source + * rectangle by using the Boolean OR operator. The result of this + * operation is combined with the colors of the destination + * rectangle by using the Boolean OR operator.
    SRCANDCombines the colors of the source and destination + * rectangles by using the Boolean AND operator.
    SRCCOPYCopies the source rectangle directly to the destination + * rectangle.
    SRCERASECombines the inverted colors of the destination rectangle + * with the colors of the source rectangle by using the Boolean + * AND operator.
    SRCINVERTCombines the colors of the source and destination + * rectangles by using the Boolean XOR operator.
    SRCPAINTCombines the colors of the source and destination + * rectangles by using the Boolean OR operator.
    WHITENESSFills the destination rectangle using the color associated + * with index 1 in the physical palette. (This color is white for + * the default physical palette.)
    + * @return True if the function succeeded, False if not. To get extended + * error information, call GetLastError. + */ + boolean BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, + int dwRop); + } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/GDI32Util.java b/contrib/platform/src/com/sun/jna/platform/win32/GDI32Util.java new file mode 100644 index 0000000000..7acc6dee8a --- /dev/null +++ b/contrib/platform/src/com/sun/jna/platform/win32/GDI32Util.java @@ -0,0 +1,166 @@ +/* Copyright (c) 2015 Michael Freeman, All Rights Reserved + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +package com.sun.jna.platform.win32; + +import java.awt.Rectangle; +import java.awt.image.BufferedImage; + +import com.sun.jna.Memory; +import com.sun.jna.Native; +import com.sun.jna.platform.win32.WinDef.HBITMAP; +import com.sun.jna.platform.win32.WinDef.HDC; +import com.sun.jna.platform.win32.WinDef.HWND; +import com.sun.jna.platform.win32.WinDef.RECT; +import com.sun.jna.platform.win32.WinGDI.BITMAPINFO; +import com.sun.jna.platform.win32.WinNT.HANDLE; + +/** + * GDI32 utility API. + * + * @author mlfreeman[at]gmail.com + */ +public class GDI32Util { + /** + * Takes a screenshot of the given window + * + * @param target + * The window to target + * @return the window captured as a screenshot, or null if the BufferedImage doesn't construct properly + * @throws IllegalStateException + * if the rectangle from GetWindowRect has a width and/or height + * of 0.
    + * if the device context acquired from the original HWND doesn't + * release properly + */ + public static BufferedImage getScreenshot(HWND target) { + RECT rect = new RECT(); + if (!User32.INSTANCE.GetWindowRect(target, rect)) { + throw new Win32Exception(Native.getLastError()); + } + Rectangle jRectangle = rect.toRectangle(); + int windowWidth = jRectangle.width; + int windowHeight = jRectangle.height; + + if (windowWidth == 0 || windowHeight == 0) { + throw new IllegalStateException("Window width and/or height were 0 even though GetWindowRect did not appear to fail."); + } + + HDC hdcTarget = User32.INSTANCE.GetDC(target); + if (hdcTarget == null) { + throw new Win32Exception(Native.getLastError()); + } + + Win32Exception we = null; + + // device context used for drawing + HDC hdcTargetMem = null; + + // handle to the bitmap to be drawn to + HBITMAP hBitmap = null; + + // original display surface associated with the device context + HANDLE hOriginal = null; + + // final java image structure we're returning. + BufferedImage image = null; + + try { + image = new BufferedImage(windowWidth, windowHeight, BufferedImage.TYPE_INT_RGB); + + hdcTargetMem = GDI32.INSTANCE.CreateCompatibleDC(hdcTarget); + if (hdcTargetMem == null) { + throw new Win32Exception(Native.getLastError()); + } + + hBitmap = GDI32.INSTANCE.CreateCompatibleBitmap(hdcTarget, windowWidth, windowHeight); + if (hBitmap == null) { + throw new Win32Exception(Native.getLastError()); + } + + hOriginal = GDI32.INSTANCE.SelectObject(hdcTargetMem, hBitmap); + if (hOriginal == null) { + throw new Win32Exception(Native.getLastError()); + } + + // draw to the bitmap + if (!GDI32.INSTANCE.BitBlt(hdcTargetMem, 0, 0, windowWidth, windowHeight, hdcTarget, 0, 0, GDI32.SRCCOPY)) { + throw new Win32Exception(Native.getLastError()); + } + + BITMAPINFO bmi = new BITMAPINFO(); + bmi.bmiHeader.biWidth = windowWidth; + bmi.bmiHeader.biHeight = -windowHeight; + bmi.bmiHeader.biPlanes = 1; + bmi.bmiHeader.biBitCount = 32; + bmi.bmiHeader.biCompression = WinGDI.BI_RGB; + + Memory buffer = new Memory(windowWidth * windowHeight * 4); + int resultOfDrawing = GDI32.INSTANCE.GetDIBits(hdcTarget, hBitmap, 0, windowHeight, buffer, bmi, + WinGDI.DIB_RGB_COLORS); + if (resultOfDrawing == 0 || resultOfDrawing == WinError.ERROR_INVALID_PARAMETER) { + throw new Win32Exception(Native.getLastError()); + } + + image.setRGB(0, 0, windowWidth, windowHeight, buffer.getIntArray(0, windowWidth * windowHeight), 0, + windowWidth); + + } catch (Win32Exception e) { + we = e; + } finally { + if (hOriginal != null) { + // per MSDN, set the display surface back when done drawing + HANDLE result = GDI32.INSTANCE.SelectObject(hdcTargetMem, hOriginal); + // failure modes are null or equal to HGDI_ERROR + if (result == null || WinGDI.HGDI_ERROR.equals(result)) { + Win32Exception ex = new Win32Exception(Native.getLastError()); + if (we != null) { + ex.addSuppressed(we); + } + we = ex; + } + } + + if (hBitmap != null) { + if (!GDI32.INSTANCE.DeleteObject(hBitmap)) { + Win32Exception ex = new Win32Exception(Native.getLastError()); + if (we != null) { + ex.addSuppressed(we); + } + we = ex; + } + } + + if (hdcTargetMem != null) { + // get rid of the device context when done + if (!GDI32.INSTANCE.DeleteDC(hdcTargetMem)) { + Win32Exception ex = new Win32Exception(Native.getLastError()); + if (we != null) { + ex.addSuppressed(we); + } + we = ex; + } + } + + if (hdcTarget != null) { + if (0 == User32.INSTANCE.ReleaseDC(target, hdcTarget)) { + throw new IllegalStateException("Device context did not release properly."); + } + } + } + + if (we != null) { + throw we; + } + return image; + } +} \ No newline at end of file diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Shell32.java b/contrib/platform/src/com/sun/jna/platform/win32/Shell32.java index a2b839c505..38b5f00218 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Shell32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Shell32.java @@ -31,7 +31,42 @@ public interface Shell32 extends ShellAPI, StdCallLibrary { Shell32 INSTANCE = (Shell32) Native.loadLibrary("shell32", Shell32.class, W32APIOptions.UNICODE_OPTIONS); - + + /** + * No dialog box confirming the deletion of the objects will be displayed. + */ + int SHERB_NOCONFIRMATION = 0x00000001; + + /** + * No dialog box indicating the progress will be displayed. + */ + int SHERB_NOPROGRESSUI = 0x00000002; + + /** + * No sound will be played when the operation is complete. + */ + int SHERB_NOSOUND = 0x00000004; + + /** + *

    + * SEE_MASK_NOCLOSEPROCESS (0x00000040) + *

    + *

    + * Use to indicate that the hProcess member receives the + * process handle. This handle is typically used to allow an application to + * find out when a process created with terminates. In some cases, such as + * when execution is satisfied through a DDE conversation, no handle will be + * returned. The calling application is responsible for closing the handle + * when it is no longer needed. + *

    + */ + int SEE_MASK_NOCLOSEPROCESS = 0x00000040; + + /** + * Do not display an error message box if an error occurs. + */ + int SEE_MASK_FLAG_NO_UI = 0x00000400; + /** * This function can be used to copy, move, rename, or delete a file system object. * @param fileop @@ -238,4 +273,52 @@ INT_PTR ShellExecute(HWND hwnd, String lpOperation, String lpFile, String lpPara * */ UINT_PTR SHAppBarMessage( DWORD dwMessage, APPBARDATA pData ); + + /** + * Empties the Recycle Bin on the specified drive. + * + * @param hwnd + * A handle to the parent window of any dialog boxes that might + * be displayed during the operation.
    + * This parameter can be NULL. + * @param pszRootPath + * a null-terminated string of maximum length MAX_PATH that + * contains the path of the root
    + * drive on which the Recycle Bin is located. This parameter can + * contain a string formatted with the drive,
    + * folder, and subfolder names, for example c:\windows\system\, + * etc. It can also contain an empty string or
    + * NULL. If this value is an empty string or NULL, all Recycle + * Bins on all drives will be emptied. + * @param dwFlags + * a bitwise combination of SHERB_NOCONFIRMATION, + * SHERB_NOPROGRESSUI and SHERB_NOSOUND.
    + * @return Returns S_OK (0) if successful, or a COM-defined error value + * otherwise.
    + */ + int SHEmptyRecycleBin(HANDLE hwnd, String pszRootPath, int dwFlags); + + /** + * @param lpExecInfo + *

    + * Type: SHELLEXECUTEINFO* + *

    + *

    + * A pointer to a + * SHELLEXECUTEINFO + * structure that contains and receives information + * about the application being executed. + *

    + * @return + *

    + * Returns TRUE if successful; otherwise, + * FALSE. Call + * GetLastError + * for extended error information. + *

    + */ + boolean ShellExecuteEx(ShellAPI.SHELLEXECUTEINFO lpExecInfo); + } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/ShellAPI.java b/contrib/platform/src/com/sun/jna/platform/win32/ShellAPI.java index 5a06f64544..11079d0bc7 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/ShellAPI.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/ShellAPI.java @@ -18,15 +18,18 @@ import com.sun.jna.Platform; import com.sun.jna.Pointer; import com.sun.jna.Structure; +import com.sun.jna.TypeMapper; import com.sun.jna.WString; import com.sun.jna.platform.win32.WinDef.DWORD; +import com.sun.jna.platform.win32.WinDef.HINSTANCE; import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.win32.WinDef.LPARAM; import com.sun.jna.platform.win32.WinDef.RECT; import com.sun.jna.platform.win32.WinDef.UINT; import com.sun.jna.platform.win32.WinNT.HANDLE; -import com.sun.jna.platform.win32.WinNT.PSID; +import com.sun.jna.platform.win32.WinReg.HKEY; import com.sun.jna.win32.StdCallLibrary; +import com.sun.jna.win32.W32APITypeMapper; /** * Ported from ShellAPI.h. @@ -36,6 +39,7 @@ public interface ShellAPI extends StdCallLibrary { int STRUCTURE_ALIGNMENT = Platform.is64Bit() ? Structure.ALIGN_DEFAULT : Structure.ALIGN_NONE; + TypeMapper TYPE_MAPPER = Boolean.getBoolean("w32.ascii") ? W32APITypeMapper.ASCII : W32APITypeMapper.UNICODE; int FO_MOVE = 0x0001; int FO_COPY = 0x0002; @@ -209,4 +213,852 @@ protected List getFieldOrder() { } } + /** + *

    + * Contains information used by + * ShellExecuteEx. + *

    + * + *
    +	 * typedef struct _SHELLEXECUTEINFO {
    +	 *   DWORD     cbSize;
    +	 *   ULONG     fMask;
    +	 *   HWND      hwnd;
    +	 *   LPCTSTR   lpVerb;
    +	 *   LPCTSTR   lpFile;
    +	 *   LPCTSTR   lpParameters;
    +	 *   LPCTSTR   lpDirectory;
    +	 *   int       nShow;
    +	 *   HINSTANCE hInstApp;
    +	 *   LPVOID    lpIDList;
    +	 *   LPCTSTR   lpClass;
    +	 *   HKEY      hkeyClass;
    +	 *   DWORD     dwHotKey;
    +	 *   union {
    +	 *     HANDLE hIcon;
    +	 *     HANDLE hMonitor;
    +	 *   } DUMMYUNIONNAME;
    +	 *   HANDLE    hProcess;
    +	 * } SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;
    +	 * 
    + * + *

    Remarks

    + *

    + * The SEE_MASK_NOASYNC flag must be specified if the + * thread calling + * ShellExecuteEx + * does not have a message loop or if the thread or process will terminate + * soon after ShellExecuteEx returns. Under such + * conditions, the calling thread will not be available to complete the DDE + * conversation, so it is important that ShellExecuteEx + * complete the conversation before returning control to the calling + * application. Failure to complete the conversation can result in an + * unsuccessful launch of the document. + *

    + *

    + * If the calling thread has a message loop and will exist for some time + * after the call to + * ShellExecuteEx + * returns, the SEE_MASK_NOASYNC flag is optional. If the + * flag is omitted, the calling thread's message pump will be used to + * complete the DDE conversation. The calling application regains control + * sooner, since the DDE conversation can be completed in the background. + *

    + *

    + * When populating the most frequently used program list using the + * SEE_MASK_FLAG_LOG_USAGE flag in fMask, + * counts are made differently for the classic and Windows XP-style + * Start menus. The classic style menu only counts hits to the shortcuts in + * the Program menu. The Windows XP-style menu counts both hits to the + * shortcuts in the Program menu and hits to those shortcuts' targets + * outside of the Program menu. Therefore, setting lpFile + * to myfile.exe would affect the count for the Windows XP-style menu + * regardless of whether that file was launched directly or through a + * shortcut. The classic style-which would require lpFile + * to contain a .lnk file name-would not be affected. + *

    + *

    + * To include double quotation marks in lpParameters, + * enclose each mark in a pair of quotation marks, as in the following + * example. + *

    + *
    + *
    + *
    + * + *
    +	 * sei.lpParameters = "An example: \"\"\"quoted text\"\"\"";
    +	 * 
    + * + *
    + *

    + * In this case, the application receives three parameters: An, + * example:, and "quoted text". + *

    + */ + public class SHELLEXECUTEINFO extends Structure { + + /** + *

    + * Type: DWORD + *

    + *

    + * Required. The size of this structure, in bytes. + *

    + */ + public int cbSize = size(); + + /** + *

    + * Type: ULONG + *

    + *

    + * Flags that indicate the content and validity of the other structure + * members; a combination of the following values: + *

    + *
    + *
    + *

    + * SEE_MASK_DEFAULT (0x00000000) + *

    + *
    + *
    + *

    + * Use default values. + *

    + *
    + *
    + *

    + * SEE_MASK_CLASSNAME (0x00000001) + *

    + *
    + *
    + *

    + * Use the class name given by the lpClass member. If + * both SEE_MASK_CLASSKEY and SEE_MASK_CLASSNAME are set, the class key + * is used. + *

    + *
    + *
    + *

    + * SEE_MASK_CLASSKEY (0x00000003) + *

    + *
    + *
    + *

    + * Use the class key given by the hkeyClass member. If + * both SEE_MASK_CLASSKEY and SEE_MASK_CLASSNAME are set, the class key + * is used. + *

    + *
    + *
    + *

    + * SEE_MASK_IDLIST (0x00000004) + *

    + *
    + *
    + *

    + * Use the item identifier list given by the lpIDList + * member. The lpIDList member must point to an + * structure. + *

    + *
    + *
    + *

    + * SEE_MASK_INVOKEIDLIST (0x0000000C) + *

    + *
    + *
    + *

    + * Use the interface of the selected item's . Use either + * lpFile to identify the item by its file system path + * or lpIDList to identify the item by its PIDL. This + * flag allows applications to use to invoke verbs from shortcut menu + * extensions instead of the static verbs listed in the registry. + *

    + *
    Note + *   SEE_MASK_INVOKEIDLIST overrides and implies + * SEE_MASK_IDLIST.
    + *
    + *

    + * SEE_MASK_ICON (0x00000010) + *

    + *
    + *
    + *

    + * Use the icon given by the hIcon member. This flag + * cannot be combined with SEE_MASK_HMONITOR. + *

    + *
    Note  This flag is used + * only in Windows XP and earlier. It is ignored as of + * Windows Vista.
    + *
    + *

    + * SEE_MASK_HOTKEY (0x00000020) + *

    + *
    + *
    + *

    + * Use the keyboard shortcut given by the dwHotKey + * member. + *

    + *
    + *
    + *

    + * SEE_MASK_NOCLOSEPROCESS (0x00000040) + *

    + *
    + *
    + *

    + * Use to indicate that the hProcess member receives + * the process handle. This handle is typically used to allow an + * application to find out when a process created with terminates. In + * some cases, such as when execution is satisfied through a DDE + * conversation, no handle will be returned. The calling application is + * responsible for closing the handle when it is no longer needed. + *

    + *
    + *
    + *

    + * SEE_MASK_CONNECTNETDRV (0x00000080) + *

    + *
    + *
    + *

    + * Validate the share and connect to a drive letter. This enables + * reconnection of disconnected network drives. The + * lpFile member is a UNC path of a file on a network. + *

    + *
    + *
    + *

    + * SEE_MASK_NOASYNC (0x00000100) + *

    + *
    + *
    + *

    + * Wait for the execute operation to complete before returning. This + * flag should be used by callers that are using ShellExecute forms that + * might result in an async activation, for example DDE, and create a + * process that might be run on a background thread. (Note: runs on a + * background thread by default if the caller's threading model is not + * Apartment.) Calls to ShellExecuteEx from processes + * already running on background threads should always pass this flag. + * Also, applications that exit immediately after calling + * ShellExecuteEx should specify this flag. + *

    + *

    + * If the execute operation is performed on a background thread and the + * caller did not specify the SEE_MASK_ASYNCOK flag, then the calling + * thread waits until the new process has started before returning. This + * typically means that either has been called, the DDE communication + * has completed, or that the custom execution delegate has notified + * that it is done. If the SEE_MASK_WAITFORINPUTIDLE flag is specified, + * then ShellExecuteEx calls and waits for the new + * process to idle before returning, with a maximum timeout of 1 minute. + *

    + *

    + * For further discussion on when this flag is necessary, see the + * Remarks section. + *

    + *
    + *
    + *

    + * SEE_MASK_FLAG_DDEWAIT (0x00000100) + *

    + *
    + *
    + *

    + * Do not use; use SEE_MASK_NOASYNC instead. + *

    + *
    + *
    + *

    + * SEE_MASK_DOENVSUBST (0x00000200) + *

    + *
    + *
    + *

    + * Expand any environment variables specified in the string given by the + * lpDirectory or lpFile member. + *

    + *
    + *
    + *

    + * SEE_MASK_FLAG_NO_UI (0x00000400) + *

    + *
    + *
    + *

    + * Do not display an error message box if an error occurs. + *

    + *
    + *
    + *

    + * SEE_MASK_UNICODE (0x00004000) + *

    + *
    + *
    + *

    + * Use this flag to indicate a Unicode application. + *

    + *
    + *
    + *

    + * SEE_MASK_NO_CONSOLE (0x00008000) + *

    + *
    + *
    + *

    + * Use to inherit the parent's console for the new process instead of + * having it create a new console. It is the opposite of using a + * CREATE_NEW_CONSOLE flag with . + *

    + *
    + *
    + *

    + * SEE_MASK_ASYNCOK (0x00100000) + *

    + *
    + *
    + *

    + * The execution can be performed on a background thread and the call + * should return immediately without waiting for the background thread + * to finish. Note that in certain cases ignores this flag and waits for + * the process to finish before returning. + *

    + *
    + *
    + *

    + * SEE_MASK_NOQUERYCLASSSTORE (0x01000000) + *

    + *
    + *
    + *

    + * Not used. + *

    + *
    + *
    + *

    + * SEE_MASK_HMONITOR (0x00200000) + *

    + *
    + *
    + *

    + * Use this flag when specifying a monitor on multi-monitor systems. The + * monitor is specified in the hMonitor member. This + * flag cannot be combined with SEE_MASK_ICON. + *

    + *
    + *
    + *

    + * SEE_MASK_NOZONECHECKS (0x00800000) + *

    + *
    + *
    + *

    + * Introduced in Windows XP. Do not perform a zone + * check. This flag allows to bypass zone checking put into place by . + *

    + *
    + *
    + *

    + * SEE_MASK_WAITFORINPUTIDLE (0x02000000) + *

    + *
    + *
    + *

    + * After the new process is created, wait for the process to become idle + * before returning, with a one minute timeout. See for more details. + *

    + *
    + *
    + *

    + * SEE_MASK_FLAG_LOG_USAGE (0x04000000) + *

    + *
    + *
    + *

    + * Introduced in Windows XP. Keep track of the + * number of times this application has been launched. Applications with + * sufficiently high counts appear in the Start Menu's list of most + * frequently used programs. + *

    + *
    + *
    + *

    + * SEE_MASK_FLAG_HINST_IS_SITE (0x08000000) + *

    + *
    + *
    + *

    + * Introduced in Windows 8. The + * hInstApp member is used to specify the of an object + * that implements . This object will be used as a site pointer. The + * site pointer is used to provide services to the function, the handler + * binding process, and invoked verb handlers. + *

    + *
    + *
    + */ + public int fMask; + + /** + *

    + * Type: HWND + *

    + *

    + * Optional. A handle to the parent window, used to display any message + * boxes that the system might produce while executing this function. + * This value can be NULL. + *

    + */ + public HWND hwnd; + + /** + *

    + * Type: LPCTSTR + *

    + * + *
    + *

    + * A string, referred to as a verb, that specifies the action + * to be performed. The set of available verbs depends on the particular + * file or folder. Generally, the actions available from an object's + * shortcut menu are available verbs. This parameter can be + * NULL, in which case the default verb is used if + * available. If not, the "open" verb is used. If neither verb is + * available, the system uses the first verb listed in the registry. The + * following verbs are commonly used: + *

    + *
    + *
    + *

    + * edit + *

    + *
    + *
    + *

    + * Launches an editor and opens the document for editing. If + * lpFile is not a document file, the function will + * fail. + *

    + *
    + *
    + *

    + * explore + *

    + *
    + *
    + *

    + * Explores the folder specified by lpFile. + *

    + *
    + *
    + *

    + * find + *

    + *
    + *
    + *

    + * Initiates a search starting from the specified directory. + *

    + *
    + *
    + *

    + * open + *

    + *
    + *
    + *

    + * Opens the file specified by the lpFile parameter. + * The file can be an executable file, a document file, or a folder. + *

    + *
    + *
    + *

    + * print + *

    + *
    + *
    + *

    + * Prints the document file specified by lpFile. If + * lpFile is not a document file, the function will + * fail. + *

    + *
    + *
    + *

    + * properties + *

    + *
    + *
    + *

    + * Displays the file or folder's properties. + *

    + *
    + *
    + */ + public String lpVerb; + + /** + *

    + * Type: LPCTSTR + *

    + *

    + * The address of a null-terminated string that specifies the name of + * the file or object on which will perform the action specified by the + * lpVerb parameter. The system registry verbs that are + * supported by the ShellExecuteEx function include + * "open" for executable files and document files and "print" for + * document files for which a print handler has been registered. Other + * applications might have added Shell verbs through the system + * registry, such as "play" for .avi and .wav files. To specify a Shell + * namespace object, pass the fully qualified parse name and set the + * SEE_MASK_INVOKEIDLIST flag in the + * fMask parameter. + *

    + *
    Note  If the + * SEE_MASK_INVOKEIDLIST flag is set, you can use + * either lpFile or lpIDList to + * identify the item by its file system path or its PIDL respectively. + * One of the two values-lpFile or + * lpIDList-must be set.
    + *
    Note  If the path is not + * included with the name, the current directory is assumed.
    + */ + public String lpFile; + + /** + *

    + * Type: LPCTSTR + *

    + *

    + * Optional. The address of a null-terminated string that contains the + * application parameters. The parameters must be separated by spaces. + * If the lpFile member specifies a document file, + * lpParameters should be NULL. + *

    + */ + public String lpParameters; + + /** + *

    + * Type: LPCTSTR + *

    + *

    + * Optional. The address of a null-terminated string that specifies the + * name of the working directory. If this member is + * NULL, the current directory is used as the working + * directory. + *

    + */ + public String lpDirectory; + + /** + *

    + * Type: int + *

    + *

    + * Required. Flags that specify how an application is to be shown when + * it is opened; one of the SW_ values listed for the + * ShellExecute + * function. If lpFile specifies a document file, + * the flag is simply passed to the associated application. It is up to + * the application to decide how to handle it. + *

    + */ + public int nShow; + + /** + *

    + * Type: HINSTANCE + *

    + *

    + * [out] If SEE_MASK_NOCLOSEPROCESS is set and the call succeeds, it + * sets this member to a value greater than 32. If the function fails, + * it is set to an SE_ERR_XXX error value that indicates the cause of + * the failure. Although hInstApp is declared as an + * HINSTANCE for compatibility with 16-bit Windows applications, it is + * not a true HINSTANCE. It can be cast only to an int + * and compared to either 32 or the following SE_ERR_XXX error codes. + *

    + *
    + *
    + *

    + * SE_ERR_FNF (2) + *

    + *
    + *
    + *

    + * File not found. + *

    + *
    + *
    + *

    + * SE_ERR_PNF (3) + *

    + *
    + *
    + *

    + * Path not found. + *

    + *
    + *
    + *

    + * SE_ERR_ACCESSDENIED (5) + *

    + *
    + *
    + *

    + * Access denied. + *

    + *
    + *
    + *

    + * SE_ERR_OOM (8) + *

    + *
    + *
    + *

    + * Out of memory. + *

    + *
    + *
    + *

    + * SE_ERR_DLLNOTFOUND (32) + *

    + *
    + *
    + *

    + * Dynamic-link library not found. + *

    + *
    + *
    + *

    + * SE_ERR_SHARE (26) + *

    + *
    + *
    + *

    + * Cannot share an open file. + *

    + *
    + *
    + *

    + * SE_ERR_ASSOCINCOMPLETE (27) + *

    + *
    + *
    + *

    + * File association information not complete. + *

    + *
    + *
    + *

    + * SE_ERR_DDETIMEOUT (28) + *

    + *
    + *
    + *

    + * DDE operation timed out. + *

    + *
    + *
    + *

    + * SE_ERR_DDEFAIL (29) + *

    + *
    + *
    + *

    + * DDE operation failed. + *

    + *
    + *
    + *

    + * SE_ERR_DDEBUSY (30) + *

    + *
    + *
    + *

    + * DDE operation is busy. + *

    + *
    + *
    + *

    + * SE_ERR_NOASSOC (31) + *

    + *
    + *
    + *

    + * File association not available. + *

    + *
    + *
    + */ + public HINSTANCE hInstApp; + + /** + *

    + * Type: LPVOID + *

    + *

    + * The address of an absolute + * ITEMIDLIST + * structure (PCIDLIST_ABSOLUTE) to contain an item identifier list that + * uniquely identifies the file to execute. This member is ignored if + * the fMask member does not include + * SEE_MASK_IDLIST or + * SEE_MASK_INVOKEIDLIST. + *

    + */ + public Pointer lpIDList; + + /** + *

    + * Type: LPCTSTR + *

    + * + *

    + * The address of a null-terminated string that specifies one of the + * following: + *

    + *
      + *
    • A ProgId. For example, "Paint.Picture".
    • + *
    • A URI protocol scheme. For example, "http".
    • + *
    • A file extension. For example, ".txt".
    • + *
    • A registry path under HKEY_CLASSES_ROOT that names a subkey that + * contains one or more Shell verbs. This key will have a subkey that + * conforms to the Shell verb registry schema, such as + *

      + * shell\verb name + *

      + * .
    • + *
    + *

    + * This member is ignored if fMask does not include + * SEE_MASK_CLASSNAME. + *

    + */ + public String lpClass; + + /** + *

    + * Type: HKEY + *

    + *

    + * A handle to the registry key for the file type. The access rights for + * this registry key should be set to KEY_READ. This member is ignored + * if fMask does not include + * SEE_MASK_CLASSKEY. + *

    + */ + public HKEY hKeyClass; + + /** + *

    + * Type: DWORD + *

    + *

    + * A keyboard shortcut to associate with the application. The low-order + * word is the virtual key code, and the high-order word is a modifier + * flag (HOTKEYF_). For a list of modifier flags, see the description of + * the + * WM_SETHOTKEY + * message. This member is ignored if fMask does + * not include SEE_MASK_HOTKEY. + *

    + */ + public int dwHotKey; + + /** + * This is actually a union: + * + *
    +		 * union { HANDLE hIcon; HANDLE hMonitor; } DUMMYUNIONNAME;
    +		 * 
    + * + * DUMMYUNIONNAME + *
    + *
    hIcon
    + *
    + *

    + * Type: HANDLE + *

    + *
    + *
    + *

    + * A handle to the icon for the file type. This member is ignored if + * fMask does not include + * SEE_MASK_ICON. This value is used only in + * Windows XP and earlier. It is ignored as of Windows Vista. + *

    + *
    + *
    hMonitor
    + *
    + *

    + * Type: HANDLE + *

    + *
    + *
    + *

    + * A handle to the monitor upon which the document is to be displayed. + * This member is ignored if fMask does not include + * SEE_MASK_HMONITOR. + *

    + *
    + *
    + */ + public HANDLE hMonitor; + + /** + *

    + * Type: HANDLE + *

    + *

    + * A handle to the newly started application. This member is set on + * return and is always NULL unless + * fMask is set to + * SEE_MASK_NOCLOSEPROCESS. Even if + * fMask is set to + * SEE_MASK_NOCLOSEPROCESS, hProcess + * will be NULL if no process was launched. For + * example, if a document to be launched is a URL and an instance of + * Internet Explorer is already running, it will display the document. + * No new process is launched, and hProcess will be + * NULL. + *

    + *
    Note   + * ShellExecuteEx + * does not always return an hProcess, even if a + * process is launched as the result of the call. For example, an + * hProcess does not return when you use + * SEE_MASK_INVOKEIDLIST to invoke + * IContextMenu + * .
    + */ + public HANDLE hProcess; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "cbSize", "fMask", "hwnd", "lpVerb", "lpFile", "lpParameters", + "lpDirectory", "nShow", "hInstApp", "lpIDList", "lpClass", "hKeyClass", "dwHotKey", "hMonitor", + "hProcess", }); + } + } + } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/User32.java b/contrib/platform/src/com/sun/jna/platform/win32/User32.java index 6420bbfe01..fe696ebbca 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/User32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/User32.java @@ -58,6 +58,19 @@ public interface User32 extends StdCallLibrary, WinUser, WinNT { /** The device notify all interface classes. */ int DEVICE_NOTIFY_ALL_INTERFACE_CLASSES = 0x00000004; + /** + *

    + * Sets the show state based on the SW_ value specified in the + * STARTUPINFO + * structure passed to the + * CreateProcess + * function by the program that started the application. + *

    + */ + int SW_SHOWDEFAULT = 10; + /** * This function retrieves a handle to a display device context (DC) for the * client area of the specified window. The display device context can be @@ -2011,4 +2024,14 @@ long SendMessageTimeout(HWND hWnd, int msg, long wParam, long lParam, * @see GetRawInputDeviceList */ int GetRawInputDeviceList(RAWINPUTDEVICELIST[] pRawInputDeviceList, IntByReference puiNumDevices, int cbSize); + + + /** + * Retrieves a handle to the desktop window. The desktop window covers the + * entire screen. The desktop window is the area on top of which other + * windows are painted. + * + * @return Type: HWND The return value is a handle to the desktop window. + */ + HWND GetDesktopWindow(); } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java b/contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java index 07078abc82..7bab7735b6 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java @@ -172,4 +172,119 @@ protected List getFieldOrder() { * Regenerate the local machine protection. */ int CRYPTPROTECT_CRED_REGENERATE = 0x80; + + /** + * ASN.1 Certificate encode/decode return value base + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_ERROR = 0x80093100; + + /** + * ASN.1 internal encode or decode error + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_INTERNAL = 0x80093101; + + /** + * ASN.1 unexpected end of data + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_EOD = 0x80093102; + + /** + * ASN.1 corrupted data + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_CORRUPT = 0x80093103; + + /** + * ASN.1 value too large + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_LARGE = 0x80093104; + + /** + * ASN.1 constraint violated + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_CONSTRAINT = 0x80093105; + + /** + * ASN.1 out of memory + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_MEMORY = 0x80093106; + + /** + * ASN.1 buffer overflow + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_OVERFLOW = 0x80093107; + + /** + * ASN.1 function not supported for this PDU + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_BADPDU = 0x80093108; + + /** + * ASN.1 bad arguments to function call + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_BADARGS = 0x80093109; + + /** + * ASN.1 bad real value + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_BADREAL = 0x8009310A; + + /** + * ASN.1 bad tag value met + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_BADTAG = 0x8009310B; + + /** + * ASN.1 bad choice value + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_CHOICE = 0x8009310C; + + /** + * ASN.1 bad encoding rule + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_RULE = 0x8009310D; + + /** + * ASN.1 bad Unicode (UTF8) + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_UTF8 = 0x8009310E; + + /** + * ASN.1 bad PDU type + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_PDU_TYPE = 0x80093133; + + /** + * ASN.1 not yet implemented + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_NYI = 0x80093134; + + /** + * ASN.1 skipped unknown extensions + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_EXTENDED = 0x80093201; + + /** + * ASN.1 end of data expected + * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx + */ + int CRYPT_E_ASN1_NOEOD = 0x80093202; + } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinGDI.java b/contrib/platform/src/com/sun/jna/platform/win32/WinGDI.java index c1faa9c005..92cd1a14d2 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinGDI.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinGDI.java @@ -30,9 +30,9 @@ * @author Andreas "PAX" Lück, onkelpax-git[at]yahoo.de */ public interface WinGDI extends StdCallLibrary { - public int RDH_RECTANGLES = 1; + int RDH_RECTANGLES = 1; - public class RGNDATAHEADER extends Structure { + class RGNDATAHEADER extends Structure { public int dwSize = size(); public int iType = RDH_RECTANGLES; // required public int nCount; @@ -44,7 +44,7 @@ protected List getFieldOrder() { } } - public class RGNDATA extends Structure { + class RGNDATA extends Structure { public RGNDATAHEADER rdh; public byte[] Buffer; @@ -61,50 +61,52 @@ public RGNDATA(int bufferSize) { } } - public int RGN_AND = 1; - public int RGN_OR = 2; - public int RGN_XOR = 3; - public int RGN_DIFF = 4; - public int RGN_COPY = 5; + HANDLE HGDI_ERROR = new HANDLE(Pointer.createConstant(0xFFFFFFFF)); - public int ERROR = 0; - public int NULLREGION = 1; - public int SIMPLEREGION = 2; - public int COMPLEXREGION = 3; + int RGN_AND = 1; + int RGN_OR = 2; + int RGN_XOR = 3; + int RGN_DIFF = 4; + int RGN_COPY = 5; + + int ERROR = 0; + int NULLREGION = 1; + int SIMPLEREGION = 2; + int COMPLEXREGION = 3; - public int ALTERNATE = 1; - public int WINDING = 2; + int ALTERNATE = 1; + int WINDING = 2; - public int BI_RGB = 0; - public int BI_RLE8 = 1; - public int BI_RLE4 = 2; - public int BI_BITFIELDS = 3; - public int BI_JPEG = 4; - public int BI_PNG = 5; + int BI_RGB = 0; + int BI_RLE8 = 1; + int BI_RLE4 = 2; + int BI_BITFIELDS = 3; + int BI_JPEG = 4; + int BI_PNG = 5; - public final int PFD_TYPE_RGBA = 0; - public final int PFD_TYPE_COLORINDEX = 1; + int PFD_TYPE_RGBA = 0; + int PFD_TYPE_COLORINDEX = 1; - public final int PFD_MAIN_PLANE = 0; - public final int PFD_OVERLAY_PLANE = 1; - public final int PFD_UNDERLAY_PLANE = (-1); + int PFD_MAIN_PLANE = 0; + int PFD_OVERLAY_PLANE = 1; + int PFD_UNDERLAY_PLANE = (-1); - public final int PFD_DOUBLEBUFFER = 0x00000001; - public final int PFD_STEREO = 0x00000002; - public final int PFD_DRAW_TO_WINDOW = 0x00000004; - public final int PFD_DRAW_TO_BITMAP = 0x00000008; - public final int PFD_SUPPORT_GDI = 0x00000010; - public final int PFD_SUPPORT_OPENGL = 0x00000020; - public final int PFD_GENERIC_FORMAT = 0x00000040; - public final int PFD_NEED_PALETTE = 0x00000080; - public final int PFD_NEED_SYSTEM_PALETTE = 0x00000100; - public final int PFD_SWAP_EXCHANGE = 0x00000200; - public final int PFD_SWAP_COPY = 0x00000400; - public final int PFD_SWAP_LAYER_BUFFERS = 0x00000800; - public final int PFD_GENERIC_ACCELERATED = 0x00001000; - public final int PFD_SUPPORT_DIRECTDRAW = 0x00002000; + int PFD_DOUBLEBUFFER = 0x00000001; + int PFD_STEREO = 0x00000002; + int PFD_DRAW_TO_WINDOW = 0x00000004; + int PFD_DRAW_TO_BITMAP = 0x00000008; + int PFD_SUPPORT_GDI = 0x00000010; + int PFD_SUPPORT_OPENGL = 0x00000020; + int PFD_GENERIC_FORMAT = 0x00000040; + int PFD_NEED_PALETTE = 0x00000080; + int PFD_NEED_SYSTEM_PALETTE = 0x00000100; + int PFD_SWAP_EXCHANGE = 0x00000200; + int PFD_SWAP_COPY = 0x00000400; + int PFD_SWAP_LAYER_BUFFERS = 0x00000800; + int PFD_GENERIC_ACCELERATED = 0x00001000; + int PFD_SUPPORT_DIRECTDRAW = 0x00002000; - public class BITMAPINFOHEADER extends Structure { + class BITMAPINFOHEADER extends Structure { public int biSize = size(); public int biWidth; public int biHeight; @@ -121,7 +123,7 @@ protected List getFieldOrder() { } } - public class RGBQUAD extends Structure { + class RGBQUAD extends Structure { public byte rgbBlue; public byte rgbGreen; public byte rgbRed; @@ -131,7 +133,7 @@ protected List getFieldOrder() { } } - public class BITMAPINFO extends Structure { + class BITMAPINFO extends Structure { public BITMAPINFOHEADER bmiHeader = new BITMAPINFOHEADER(); public RGBQUAD[] bmiColors = new RGBQUAD[1]; protected List getFieldOrder() { @@ -143,7 +145,7 @@ public BITMAPINFO(int size) { } } - public class ICONINFO extends Structure { + class ICONINFO extends Structure { public boolean fIcon; public int xHotspot; public int yHotspot; @@ -155,7 +157,7 @@ protected List getFieldOrder() { } } - public class BITMAP extends Structure { + class BITMAP extends Structure { public NativeLong bmType; public NativeLong bmWidth; public NativeLong bmHeight; @@ -169,7 +171,7 @@ protected List getFieldOrder() { } } - public class DIBSECTION extends Structure { + class DIBSECTION extends Structure { public BITMAP dsBm; public BITMAPINFOHEADER dsBmih; public int[] dsBitfields = new int[3]; @@ -180,13 +182,13 @@ protected List getFieldOrder() { } } - public int DIB_RGB_COLORS = 0; - public int DIB_PAL_COLORS = 1; + int DIB_RGB_COLORS = 0; + int DIB_PAL_COLORS = 1; /** * The PIXELFORMATDESCRIPTOR structure describes the pixel format of a drawing surface. */ - public static class PIXELFORMATDESCRIPTOR extends Structure { + class PIXELFORMATDESCRIPTOR extends Structure { public PIXELFORMATDESCRIPTOR() { super(); nSize = (short) size(); diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Advapi32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/Advapi32Test.java index 54e790578c..abe4e5d11f 100755 --- a/contrib/platform/test/com/sun/jna/platform/win32/Advapi32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Advapi32Test.java @@ -12,24 +12,55 @@ */ package com.sun.jna.platform.win32; +import static com.sun.jna.platform.win32.WinBase.CREATE_FOR_IMPORT; +import static com.sun.jna.platform.win32.WinBase.FILE_DIR_DISALOWED; +import static com.sun.jna.platform.win32.WinBase.FILE_ENCRYPTABLE; +import static com.sun.jna.platform.win32.WinBase.FILE_IS_ENCRYPTED; +import static com.sun.jna.platform.win32.WinBase.FILE_READ_ONLY; +import static com.sun.jna.platform.win32.WinNT.DACL_SECURITY_INFORMATION; +import static com.sun.jna.platform.win32.WinNT.FILE_ALL_ACCESS; +import static com.sun.jna.platform.win32.WinNT.FILE_GENERIC_EXECUTE; +import static com.sun.jna.platform.win32.WinNT.FILE_GENERIC_READ; +import static com.sun.jna.platform.win32.WinNT.FILE_GENERIC_WRITE; +import static com.sun.jna.platform.win32.WinNT.GENERIC_ALL; +import static com.sun.jna.platform.win32.WinNT.GENERIC_EXECUTE; +import static com.sun.jna.platform.win32.WinNT.GENERIC_READ; +import static com.sun.jna.platform.win32.WinNT.GENERIC_WRITE; +import static com.sun.jna.platform.win32.WinNT.GROUP_SECURITY_INFORMATION; +import static com.sun.jna.platform.win32.WinNT.OWNER_SECURITY_INFORMATION; +import static com.sun.jna.platform.win32.WinNT.SACL_SECURITY_INFORMATION; +import static com.sun.jna.platform.win32.WinNT.SE_RESTORE_NAME; +import static com.sun.jna.platform.win32.WinNT.SE_SECURITY_NAME; +import static com.sun.jna.platform.win32.WinNT.TOKEN_ADJUST_PRIVILEGES; +import static com.sun.jna.platform.win32.WinNT.TOKEN_DUPLICATE; +import static com.sun.jna.platform.win32.WinNT.TOKEN_IMPERSONATE; + import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Collection; -import junit.framework.TestCase; - import com.sun.jna.Memory; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.WString; import com.sun.jna.platform.win32.LMAccess.USER_INFO_1; +import com.sun.jna.platform.win32.WinBase.FE_EXPORT_FUNC; +import com.sun.jna.platform.win32.WinBase.FE_IMPORT_FUNC; import com.sun.jna.platform.win32.WinBase.FILETIME; +import com.sun.jna.platform.win32.WinBase.PROCESS_INFORMATION; +import com.sun.jna.platform.win32.WinBase.STARTUPINFO; +import com.sun.jna.platform.win32.WinDef.BOOLByReference; import com.sun.jna.platform.win32.WinDef.DWORD; +import com.sun.jna.platform.win32.WinDef.DWORDByReference; +import com.sun.jna.platform.win32.WinDef.ULONG; +import com.sun.jna.platform.win32.WinDef.ULONGByReference; import com.sun.jna.platform.win32.WinNT.EVENTLOGRECORD; +import com.sun.jna.platform.win32.WinNT.GENERIC_MAPPING; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.platform.win32.WinNT.HANDLEByReference; +import com.sun.jna.platform.win32.WinNT.PRIVILEGE_SET; import com.sun.jna.platform.win32.WinNT.PSID; import com.sun.jna.platform.win32.WinNT.PSIDByReference; import com.sun.jna.platform.win32.WinNT.SECURITY_IMPERSONATION_LEVEL; @@ -46,7 +77,7 @@ import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.PointerByReference; -import static com.sun.jna.platform.win32.WinNT.*; +import junit.framework.TestCase; /** * @author dblock[at]dblock[dot]org @@ -1493,4 +1524,23 @@ private File createTempFile() throws Exception { fileWriter.close(); return file; } + + public void testCreateProcessWithLogonW() { + String winDir = Kernel32Util.getEnvironmentVariable("WINDIR"); + assertNotNull("No WINDIR value returned", winDir); + assertTrue("Specified WINDIR does not exist: " + winDir, new File(winDir).exists()); + + STARTUPINFO si = new STARTUPINFO(); + si.lpDesktop = null; + PROCESS_INFORMATION results = new PROCESS_INFORMATION(); + + // i have the same combination on my luggage + boolean result = Advapi32.INSTANCE.CreateProcessWithLogonW("A" + System.currentTimeMillis(), "localhost", "12345", Advapi32.LOGON_WITH_PROFILE, new File(winDir, "notepad.exe").getAbsolutePath(), "", 0, null, "", si, results); + + // we tried to run notepad as a bogus user, so it should fail. + assertFalse("CreateProcessWithLogonW should have returned false because the username was bogus.", result); + + // should fail with "the user name or password is incorrect" (error 1326) + assertEquals("GetLastError() should have returned ERROR_LOGON_FAILURE because the username was bogus.", W32Errors.ERROR_LOGON_FAILURE, Native.getLastError()); + } } diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Crypt32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/Crypt32Test.java index 1955e62e73..36f3436687 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/Crypt32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Crypt32Test.java @@ -12,11 +12,21 @@ */ package com.sun.jna.platform.win32; -import junit.framework.TestCase; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URISyntaxException; +import com.sun.jna.Memory; +import com.sun.jna.Native; +import com.sun.jna.Pointer; import com.sun.jna.platform.win32.WinCrypt.DATA_BLOB; +import com.sun.jna.platform.win32.WinDef.DWORD; import com.sun.jna.ptr.PointerByReference; +import junit.framework.TestCase; + /** * @author dblock[at]dblock[dot]org */ @@ -61,5 +71,12 @@ public void testCryptProtectUnprotectDataWithEntropy() { Kernel32.INSTANCE.LocalFree(pDataEncrypted.pbData); Kernel32.INSTANCE.LocalFree(pDataDecrypted.pbData); Kernel32.INSTANCE.LocalFree(pDescription.getValue()); - } + } + + public void testCertAddEncodedCertificateToSystemStore() { + // try to install a non-existent certificate + assertFalse("Attempting to install a non-existent certificate should have returned false and set GetLastError()", Crypt32.INSTANCE.CertAddEncodedCertificateToSystemStore("ROOT", null, 0)); + // should fail with "unexpected end of data" + assertEquals("GetLastError() should have been set to CRYPT_E_ASN1_EOD ('ASN.1 unexpected end of data' in WinCrypt.h)", WinCrypt.CRYPT_E_ASN1_EOD, Native.getLastError()); + } } \ No newline at end of file diff --git a/contrib/platform/test/com/sun/jna/platform/win32/GDI32UtilTest.java b/contrib/platform/test/com/sun/jna/platform/win32/GDI32UtilTest.java new file mode 100644 index 0000000000..d02dca5d25 --- /dev/null +++ b/contrib/platform/test/com/sun/jna/platform/win32/GDI32UtilTest.java @@ -0,0 +1,56 @@ +/* Copyright (c) 2015 Michael Freeman, All Rights Reserved + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +package com.sun.jna.platform.win32; + +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; +import org.junit.runner.JUnitCore; + +import com.sun.jna.platform.win32.WinDef.HWND; + +public class GDI32UtilTest extends AbstractWin32TestSupport { + + public static void main(String[] args) { + JUnitCore jUnitCore = new JUnitCore(); + jUnitCore.run(GDI32UtilTest.class); + } + + @Test + public void testGetScreenshot() { + HWND desktopWindow = User32.INSTANCE.GetDesktopWindow(); + assertNotNull("Failed to obtain desktop window handle", desktopWindow); + BufferedImage image = GDI32Util.getScreenshot(desktopWindow); + // Since this test involves taking a whole-desktop screenshot + // we can't be sure what the image will be exactly. + // We'll validate that the image is "good" + // by checking for 20 distinct colors. + // BufferedImages normally start life as one uniform color + // so if that's not the case then some data was indeed copied over as a result of the getScreenshot() function. + List distinctPixels = new ArrayList(); + for (int x = 0; x < image.getWidth(); x++) { + for (int y = 0; y < image.getHeight(); y++) { + int pixel = image.getRGB(x, y); + if (!distinctPixels.contains(pixel)) { + distinctPixels.add(pixel); + } + if (distinctPixels.size() > 20) { + break; + } + } + } + assertTrue("Number of distinct pixels was not above 20.", distinctPixels.size() > 20); + } +} diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Shell32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/Shell32Test.java index e280be3abc..7ba2413428 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/Shell32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Shell32Test.java @@ -12,19 +12,23 @@ */ package com.sun.jna.platform.win32; -import junit.framework.TestCase; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; import com.sun.jna.Native; +import com.sun.jna.WString; import com.sun.jna.platform.win32.Guid.GUID; import com.sun.jna.platform.win32.ShellAPI.APPBARDATA; +import com.sun.jna.platform.win32.ShellAPI.SHELLEXECUTEINFO; import com.sun.jna.platform.win32.WinDef.DWORD; -import com.sun.jna.platform.win32.WinDef.LPVOID; -import com.sun.jna.platform.win32.WinDef.RECT; import com.sun.jna.platform.win32.WinDef.UINT_PTR; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.platform.win32.WinNT.HRESULT; import com.sun.jna.ptr.PointerByReference; +import junit.framework.TestCase; + /** * @author dblock[at]dblock[dot]org @@ -131,16 +135,93 @@ public void testResizeDesktopFromTop() throws InterruptedException { } - public void testSHGetKnownFolderPath() - { - int flags = ShlObj.KNOWN_FOLDER_FLAG.NONE.getFlag(); - PointerByReference outPath = new PointerByReference(); - HANDLE token = null; - GUID guid = KnownFolders.FOLDERID_Fonts; - HRESULT hr = Shell32.INSTANCE.SHGetKnownFolderPath(guid, flags, token, outPath); - - Ole32.INSTANCE.CoTaskMemFree(outPath.getValue()); - - assertTrue(W32Errors.SUCCEEDED(hr.intValue())); - } + public void testSHGetKnownFolderPath() { + int flags = ShlObj.KNOWN_FOLDER_FLAG.NONE.getFlag(); + PointerByReference outPath = new PointerByReference(); + HANDLE token = null; + GUID guid = KnownFolders.FOLDERID_Fonts; + HRESULT hr = Shell32.INSTANCE.SHGetKnownFolderPath(guid, flags, token, outPath); + + Ole32.INSTANCE.CoTaskMemFree(outPath.getValue()); + + assertTrue(W32Errors.SUCCEEDED(hr.intValue())); + } + + public void testSHEmptyRecycleBin() { + File file = new File(System.getProperty("java.io.tmpdir"), System.nanoTime() + ".txt"); + try { + // Create a file and immediately send it to the recycle bin. + try { + fillTempFile(file); + W32FileUtils.getInstance().moveToTrash(new File[] { file }); + } catch (IOException e) { + throw new RuntimeException(e); + } + + int result = Shell32.INSTANCE.SHEmptyRecycleBin(null, null, + Shell32.SHERB_NOCONFIRMATION | Shell32.SHERB_NOPROGRESSUI | Shell32.SHERB_NOSOUND); + // for reasons I can not find documented on MSDN, + // the function returns the following: + // 0 when the recycle bin has items in it + // -2147418113 when the recycle bin has no items in it + assertEquals("Result should have been ERROR_SUCCESS when emptying Recycle Bin - there should have been a file in it.", + W32Errors.ERROR_SUCCESS, result); + } finally { + // if the file wasn't sent to the recycle bin, delete it. + if (file.exists()) { + file.delete(); + } + } + } + + public void testShellExecuteEx() { + File file = new File(System.getProperty("java.io.tmpdir"), System.nanoTime() + ".txt"); + try { + try { + fillTempFile(file); + } catch (IOException e) { + throw new RuntimeException(e); + } + + SHELLEXECUTEINFO lpExecInfo = new SHELLEXECUTEINFO(); + // to avoid opening something and having hProcess come up null + // (meaning we opened something but can't close it) + // we will do a negative test with a bogus action. + lpExecInfo.lpVerb = "0p3n"; + lpExecInfo.nShow = User32.SW_SHOWDEFAULT; + lpExecInfo.fMask = Shell32.SEE_MASK_NOCLOSEPROCESS | Shell32.SEE_MASK_FLAG_NO_UI; + lpExecInfo.lpFile = file.getAbsolutePath(); + + assertFalse("ShellExecuteEx should have returned false - action verb was bogus.", + Shell32.INSTANCE.ShellExecuteEx(lpExecInfo)); + assertEquals("GetLastError() should have been set to ERROR_NO_ASSOCIATION because of bogus action", + W32Errors.ERROR_NO_ASSOCIATION, Native.getLastError()); + } finally { + if (file.exists()) { + file.delete(); + } + } + + } + + /** + * Creates (if needed) and fills the specified file with some content (10 lines of the same text) + * + * @param file + * The file to fill with content + * @throws IOException + * If writing the content fails + */ + private void fillTempFile(File file) throws IOException { + file.createNewFile(); + FileWriter fileWriter = new FileWriter(file); + try { + for (int i = 0; i < 10; i++) { + fileWriter.write("Sample line of text"); + fileWriter.write(System.getProperty("line.separator")); + } + } finally { + fileWriter.close(); + } + } } diff --git a/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java index 21ae47c685..6e2e43f7bf 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java @@ -243,7 +243,7 @@ public final void testLockWorkStation() { assertTrue(User32.INSTANCE.LockWorkStation().booleanValue()); } - @Ignore("Shutsdown the workstation") + @Ignore("Shuts down the workstation") @Test public final void testExitWindows() { assertTrue(User32.INSTANCE.ExitWindowsEx(new UINT(WinUser.EWX_LOGOFF), new DWORD(0x00030000)).booleanValue()); //This only tries to log off. @@ -299,4 +299,10 @@ public void testGetClassLongPtr() { assertNotEquals(0, result); } + + @Test + public void testGetDesktopWindow() { + HWND desktopWindow = User32.INSTANCE.GetDesktopWindow(); + assertNotNull("Failed to get desktop window HWND", desktopWindow); + } } From 85a7bad9c3d7d8a48287755d2356346efff54f45 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Sun, 22 Nov 2015 05:15:23 -0500 Subject: [PATCH 07/29] Use unicode escapes to avoid w32 compilation errors --- .../test/com/sun/jna/platform/mac/XAttrUtilTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/contrib/platform/test/com/sun/jna/platform/mac/XAttrUtilTest.java b/contrib/platform/test/com/sun/jna/platform/mac/XAttrUtilTest.java index 8902fe6650..6abd401181 100644 --- a/contrib/platform/test/com/sun/jna/platform/mac/XAttrUtilTest.java +++ b/contrib/platform/test/com/sun/jna/platform/mac/XAttrUtilTest.java @@ -84,7 +84,13 @@ public void testRemoveXAttr() { } public void testUnicode() { - String[] names = new String[] { "中文", "にほんご", "Österreichisch", "Française", "Português" }; + String[] names = new String[] { + "\u4E2D\u6587", + "\u306B\u307B\u3093\u3054", + "\u00D6sterreichisch", + "Fran\u00E7aise", + "Portugu\u00EAs", + }; for (int i = 0; i < names.length; i++) { // set xattr XAttrUtil.setXAttr(testPath, names[i], names[i]); From 54aa55f2c617d4ed02fb84cf9ec5a0dd2af029f5 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Sun, 22 Nov 2015 13:17:25 -0500 Subject: [PATCH 08/29] Drop StdCallLibrary inheritance from non-library interfaces Prefer String over WString Fix some w32 API callback types to be stdcall Fix platform test execution from top level 'test-platform' target --- build.xml | 10 ++-- contrib/platform/build.xml | 8 ++-- .../com/sun/jna/platform/win32/Advapi32.java | 19 +++++++- .../sun/jna/platform/win32/Advapi32Util.java | 32 ++++++------- .../com/sun/jna/platform/win32/BaseTSD.java | 12 ++--- .../com/sun/jna/platform/win32/Crypt32.java | 2 +- .../src/com/sun/jna/platform/win32/DBT.java | 3 +- .../com/sun/jna/platform/win32/DsGetDC.java | 35 +++++++------- .../src/com/sun/jna/platform/win32/GL.java | 4 +- .../com/sun/jna/platform/win32/Kernel32.java | 5 +- .../com/sun/jna/platform/win32/LMAccess.java | 46 +++++++++--------- .../com/sun/jna/platform/win32/LMCons.java | 4 +- .../src/com/sun/jna/platform/win32/LMErr.java | 4 +- .../com/sun/jna/platform/win32/LMJoin.java | 4 +- .../com/sun/jna/platform/win32/LMShare.java | 19 ++++---- .../src/com/sun/jna/platform/win32/Mpr.java | 11 ++--- .../src/com/sun/jna/platform/win32/Msi.java | 2 +- .../com/sun/jna/platform/win32/NTSecApi.java | 3 +- .../com/sun/jna/platform/win32/Netapi32.java | 7 ++- .../src/com/sun/jna/platform/win32/NtDll.java | 4 +- .../src/com/sun/jna/platform/win32/Ole32.java | 4 +- .../com/sun/jna/platform/win32/OleAuto.java | 4 +- .../src/com/sun/jna/platform/win32/Pdh.java | 2 +- .../com/sun/jna/platform/win32/Rasapi32.java | 2 +- .../com/sun/jna/platform/win32/Secur32.java | 2 +- .../com/sun/jna/platform/win32/Shell32.java | 2 +- .../com/sun/jna/platform/win32/ShellAPI.java | 9 ++-- .../src/com/sun/jna/platform/win32/Sspi.java | 8 ++-- .../com/sun/jna/platform/win32/Tlhelp32.java | 3 +- .../com/sun/jna/platform/win32/User32.java | 9 +++- .../sun/jna/platform/win32/User32Util.java | 5 +- .../com/sun/jna/platform/win32/VerRsrc.java | 3 +- .../sun/jna/platform/win32/W32FileUtils.java | 3 +- .../src/com/sun/jna/platform/win32/Wdm.java | 3 +- .../com/sun/jna/platform/win32/WinBase.java | 13 ++--- .../com/sun/jna/platform/win32/WinCrypt.java | 3 +- .../com/sun/jna/platform/win32/WinDef.java | 3 +- .../com/sun/jna/platform/win32/WinGDI.java | 3 +- .../src/com/sun/jna/platform/win32/WinNT.java | 1 + .../com/sun/jna/platform/win32/WinRas.java | 4 +- .../com/sun/jna/platform/win32/WinReg.java | 3 +- .../com/sun/jna/platform/win32/WinUser.java | 11 ++--- .../com/sun/jna/platform/win32/Winioctl.java | 3 +- .../com/sun/jna/platform/win32/Winnetwk.java | 20 ++++---- .../com/sun/jna/platform/win32/Winspool.java | 2 +- .../com/sun/jna/platform/win32/Winsvc.java | 3 +- .../sun/jna/platform/win32/Advapi32Test.java | 43 +++++++++-------- .../jna/platform/win32/Advapi32UtilTest.java | 9 ++-- .../com/sun/jna/platform/win32/MprTest.java | 47 +++++++++---------- .../sun/jna/platform/win32/Netapi32Test.java | 31 ++++++------ 50 files changed, 246 insertions(+), 246 deletions(-) diff --git a/build.xml b/build.xml index 07bf219196..9e7d75086c 100644 --- a/build.xml +++ b/build.xml @@ -307,6 +307,7 @@ + @@ -520,7 +521,7 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc - + @@ -543,7 +544,7 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc - + @@ -971,6 +972,9 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc + + + @@ -1025,7 +1029,7 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc - + diff --git a/contrib/platform/build.xml b/contrib/platform/build.xml index 1658e1b44a..26000e2c65 100644 --- a/contrib/platform/build.xml +++ b/contrib/platform/build.xml @@ -111,13 +111,13 @@ com.sun.jna.platform.wince Saving test results in ${build.test.results.dir.abs} - + - + - + @@ -155,7 +155,7 @@ com.sun.jna.platform.wince - + diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Advapi32.java b/contrib/platform/src/com/sun/jna/platform/win32/Advapi32.java index c32facfb02..5fc3979628 100755 --- a/contrib/platform/src/com/sun/jna/platform/win32/Advapi32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Advapi32.java @@ -50,7 +50,7 @@ */ public interface Advapi32 extends StdCallLibrary { Advapi32 INSTANCE = (Advapi32) Native.loadLibrary("Advapi32", - Advapi32.class, W32APIOptions.UNICODE_OPTIONS); + Advapi32.class, W32APIOptions.DEFAULT_OPTIONS); public static final int MAX_KEY_LENGTH = 255; public static final int MAX_VALUE_NAME = 16383; @@ -1581,6 +1581,10 @@ public boolean LookupPrivilegeValue(String lpSystemName, String lpName, * otherwise, none of the descriptor is returned. * @return whether the call succeeded */ + public boolean GetFileSecurity(String lpFileName, + int RequestedInformation, Pointer pointer, int nLength, + IntByReference lpnLengthNeeded); + /** @deprecated Use the String version */ public boolean GetFileSecurity(WString lpFileName, int RequestedInformation, Pointer pointer, int nLength, IntByReference lpnLengthNeeded); @@ -1796,6 +1800,8 @@ public boolean AccessCheck(Pointer pSecurityDescriptor, * function fails, the return value is zero. To get extended error * information, call GetLastError. */ + public boolean EncryptFile(String lpFileName); + /** @deprecated Use the String version */ public boolean EncryptFile(WString lpFileName); /** @@ -1809,6 +1815,8 @@ public boolean AccessCheck(Pointer pSecurityDescriptor, * function fails, the return value is zero. To get extended error * information, call GetLastError. */ + public boolean DecryptFile(String lpFileName, DWORD dwReserved); + /** @deprecated Use the String version */ public boolean DecryptFile(WString lpFileName, DWORD dwReserved); /** @@ -1823,6 +1831,8 @@ public boolean AccessCheck(Pointer pSecurityDescriptor, * function fails, the return value is zero. To get extended error * information, call GetLastError. */ + public boolean FileEncryptionStatus(String lpFileName, DWORDByReference lpStatus); + /** @deprecated Use the String version */ public boolean FileEncryptionStatus(WString lpFileName, DWORDByReference lpStatus); /** @@ -1840,6 +1850,8 @@ public boolean AccessCheck(Pointer pSecurityDescriptor, * function fails, the return value is zero. To get extended error * information, call GetLastError. */ + public boolean EncryptionDisable(String DirPath, boolean Disable); + /** @deprecated Use the String version */ public boolean EncryptionDisable(WString DirPath, boolean Disable); /** @@ -1862,8 +1874,11 @@ public boolean AccessCheck(Pointer pSecurityDescriptor, * FormatMessage with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic * text description of the error. */ + public int OpenEncryptedFileRaw(String lpFileName, ULONG ulFlags, + PointerByReference pvContext); + /** @deprecated Use the String version */ public int OpenEncryptedFileRaw(WString lpFileName, ULONG ulFlags, - PointerByReference pvContext); + PointerByReference pvContext); /** * Backs up (export) encrypted files. This is one of a group of Encrypted File diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Advapi32Util.java b/contrib/platform/src/com/sun/jna/platform/win32/Advapi32Util.java index 96065f65fa..871801746e 100755 --- a/contrib/platform/src/com/sun/jna/platform/win32/Advapi32Util.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Advapi32Util.java @@ -2032,8 +2032,8 @@ public static ACCESS_ACEStructure[] getFileSecurity(String fileName, repeat = false; memory = new Memory(nLength); IntByReference lpnSize = new IntByReference(); - boolean succeded = Advapi32.INSTANCE.GetFileSecurity(new WString( - fileName), infoType, memory, nLength, lpnSize); + boolean succeded = Advapi32.INSTANCE.GetFileSecurity( + fileName, infoType, memory, nLength, lpnSize); if (!succeded) { int lastError = Kernel32.INSTANCE.GetLastError(); @@ -2100,7 +2100,7 @@ private static Memory getSecurityDescriptorForFile(final String absoluteFilePath final IntByReference lpnSize = new IntByReference(); boolean succeeded = Advapi32.INSTANCE.GetFileSecurity( - new WString(absoluteFilePath), + absoluteFilePath, infoType, null, 0, lpnSize); @@ -2114,8 +2114,8 @@ private static Memory getSecurityDescriptorForFile(final String absoluteFilePath final int nLength = lpnSize.getValue(); final Memory securityDescriptorMemoryPointer = new Memory(nLength); - succeeded = Advapi32.INSTANCE.GetFileSecurity(new WString( - absoluteFilePath), infoType, securityDescriptorMemoryPointer, nLength, lpnSize); + succeeded = Advapi32.INSTANCE.GetFileSecurity( + absoluteFilePath, infoType, securityDescriptorMemoryPointer, nLength, lpnSize); if (!succeeded) { securityDescriptorMemoryPointer.clear(); @@ -2407,7 +2407,7 @@ public static void setFileSecurityDescriptor( * The file or directory to encrypt. */ public static void encryptFile(File file) { - WString lpFileName = new WString(file.getAbsolutePath()); + String lpFileName = file.getAbsolutePath(); if (!Advapi32.INSTANCE.EncryptFile(lpFileName)) { throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); } @@ -2420,7 +2420,7 @@ public static void encryptFile(File file) { * The file or directory to decrypt. */ public static void decryptFile(File file) { - WString lpFileName = new WString(file.getAbsolutePath()); + String lpFileName = file.getAbsolutePath(); if (!Advapi32.INSTANCE.DecryptFile(lpFileName, new DWORD(0))) { throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); } @@ -2435,7 +2435,7 @@ public static void decryptFile(File file) { */ public static int fileEncryptionStatus(File file) { DWORDByReference status = new DWORDByReference(); - WString lpFileName = new WString(file.getAbsolutePath()); + String lpFileName = file.getAbsolutePath(); if (!Advapi32.INSTANCE.FileEncryptionStatus(lpFileName, status)) { throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); } @@ -2452,7 +2452,7 @@ public static int fileEncryptionStatus(File file) { * TRUE to disable encryption. FALSE to enable it. */ public static void disableEncryption(File directory, boolean disable) { - WString dirPath = new WString(directory.getAbsolutePath()); + String dirPath = directory.getAbsolutePath(); if (!Advapi32.INSTANCE.EncryptionDisable(dirPath, disable)) { throw new Win32Exception(Native.getLastError()); } @@ -2484,7 +2484,7 @@ public static void backupEncryptedFile(File src, File destDir) { } // open encrypted file for export - WString srcFileName = new WString(src.getAbsolutePath()); + String srcFileName = src.getAbsolutePath(); PointerByReference pvContext = new PointerByReference(); if (Advapi32.INSTANCE.OpenEncryptedFileRaw(srcFileName, readFlag, pvContext) != W32Errors.ERROR_SUCCESS) { @@ -2495,9 +2495,9 @@ public static void backupEncryptedFile(File src, File destDir) { final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); FE_EXPORT_FUNC pfExportCallback = new FE_EXPORT_FUNC() { @Override - public DWORD callback(ByteByReference pbData, Pointer pvCallbackContext, + public DWORD callback(Pointer pbData, Pointer pvCallbackContext, ULONG ulLength) { - byte[] arr = pbData.getPointer().getByteArray(0, ulLength.intValue()); + byte[] arr = pbData.getByteArray(0, ulLength.intValue()); try { outputStream.write(arr); } catch (IOException e) { @@ -2521,8 +2521,8 @@ public DWORD callback(ByteByReference pbData, Pointer pvCallbackContext, Advapi32.INSTANCE.CloseEncryptedFileRaw(pvContext.getValue()); // open file for import - WString destFileName = new WString(destDir.getAbsolutePath() + File.separator - + src.getName()); + String destFileName = destDir.getAbsolutePath() + File.separator + + src.getName(); pvContext = new PointerByReference(); if (Advapi32.INSTANCE.OpenEncryptedFileRaw(destFileName, writeFlag, pvContext) != W32Errors.ERROR_SUCCESS) { @@ -2533,12 +2533,12 @@ public DWORD callback(ByteByReference pbData, Pointer pvCallbackContext, final IntByReference elementsReadWrapper = new IntByReference(0); FE_IMPORT_FUNC pfImportCallback = new FE_IMPORT_FUNC() { @Override - public DWORD callback(ByteByReference pbData, Pointer pvCallbackContext, + public DWORD callback(Pointer pbData, Pointer pvCallbackContext, ULONGByReference ulLength) { int elementsRead = elementsReadWrapper.getValue(); int remainingElements = outputStream.size() - elementsRead; int length = Math.min(remainingElements, ulLength.getValue().intValue()); - pbData.getPointer().write(0, outputStream.toByteArray(), elementsRead, + pbData.write(0, outputStream.toByteArray(), elementsRead, length); elementsReadWrapper.setValue(elementsRead + length); ulLength.setValue(new ULONG(length)); diff --git a/contrib/platform/src/com/sun/jna/platform/win32/BaseTSD.java b/contrib/platform/src/com/sun/jna/platform/win32/BaseTSD.java index a2475f8d8b..e17f05cd58 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/BaseTSD.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/BaseTSD.java @@ -15,18 +15,18 @@ import com.sun.jna.IntegerType; import com.sun.jna.Pointer; import com.sun.jna.ptr.ByReference; -import com.sun.jna.win32.StdCallLibrary; /** * Based on basetsd.h (various types) * @author dblock[at]dblock[dot]org */ @SuppressWarnings("serial") -public interface BaseTSD extends StdCallLibrary { +public interface BaseTSD { + /** -* Signed long type for pointer precision. -* Use when casting a pointer to a long to perform pointer arithmetic. -*/ + * Signed long type for pointer precision. + * Use when casting a pointer to a long to perform pointer arithmetic. + */ public static class LONG_PTR extends IntegerType { public LONG_PTR() { this(0); @@ -124,4 +124,4 @@ public SIZE_T(long value) { super(value); } } -} \ No newline at end of file +} diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Crypt32.java b/contrib/platform/src/com/sun/jna/platform/win32/Crypt32.java index e5b9035762..170029f5b1 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Crypt32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Crypt32.java @@ -28,7 +28,7 @@ public interface Crypt32 extends StdCallLibrary { Crypt32 INSTANCE = (Crypt32) Native.loadLibrary("Crypt32", - Crypt32.class, W32APIOptions.UNICODE_OPTIONS); + Crypt32.class, W32APIOptions.DEFAULT_OPTIONS); /** * The CryptProtectData function performs encryption on the data in a DATA_BLOB diff --git a/contrib/platform/src/com/sun/jna/platform/win32/DBT.java b/contrib/platform/src/com/sun/jna/platform/win32/DBT.java index b747810a74..5380efe27a 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/DBT.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/DBT.java @@ -22,7 +22,6 @@ import com.sun.jna.platform.win32.WinDef.LONG; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.platform.win32.WinUser.HDEVNOTIFY; -import com.sun.jna.win32.StdCallLibrary; /** * Based on dbt.h (various types) @@ -30,7 +29,7 @@ * @author Tobias Wolf, wolf.tobias@gmx.net */ @SuppressWarnings("serial") -public interface DBT extends StdCallLibrary { +public interface DBT { /** The dbt no disk space. */ int DBT_NO_DISK_SPACE = 0x0047; diff --git a/contrib/platform/src/com/sun/jna/platform/win32/DsGetDC.java b/contrib/platform/src/com/sun/jna/platform/win32/DsGetDC.java index 5e52093ff8..eb84634016 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/DsGetDC.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/DsGetDC.java @@ -17,7 +17,6 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; -import com.sun.jna.WString; import com.sun.jna.platform.win32.Guid.GUID; import com.sun.jna.platform.win32.WinNT.PSID; import com.sun.jna.win32.StdCallLibrary; @@ -27,7 +26,7 @@ * * @author dblock[at]dblock.org */ -public interface DsGetDC extends StdCallLibrary { +public interface DsGetDC { /** * The DOMAIN_CONTROLLER_INFO structure is used with the DsGetDcName @@ -48,7 +47,7 @@ public DOMAIN_CONTROLLER_INFO(Pointer memory) { } /** - * Pointer to a null-terminated WString that specifies the computer name + * Pointer to a null-terminated string that specifies the computer name * of the discovered domain controller. The returned computer name is * prefixed with "\\". The DNS-style name, for example, * "\\phoenix.fabrikam.com", is returned, if available. If the DNS-style @@ -57,16 +56,16 @@ public DOMAIN_CONTROLLER_INFO(Pointer memory) { * 4.0 domain or if the domain does not support the IP family of * protocols. */ - public WString DomainControllerName; + public String DomainControllerName; /** - * Pointer to a null-terminated WString that specifies the address of + * Pointer to a null-terminated string that specifies the address of * the discovered domain controller. The address is prefixed with "\\". - * This WString is one of the types defined by the + * This string is one of the types defined by the * DomainControllerAddressType member. */ - public WString DomainControllerAddress; + public String DomainControllerAddress; /** - * Indicates the type of WString that is contained in the + * Indicates the type of string that is contained in the * DomainControllerAddress member. */ public int DomainControllerAddressType; @@ -77,40 +76,40 @@ public DOMAIN_CONTROLLER_INFO(Pointer memory) { */ public GUID DomainGuid; /** - * Pointer to a null-terminated WString that specifies the name of the + * Pointer to a null-terminated string that specifies the name of the * domain. The DNS-style name, for example, "fabrikam.com", is returned * if available. Otherwise, the flat-style name, for example, * "fabrikam", is returned. This name may be different than the * requested domain name if the domain has been renamed. */ - public WString DomainName; + public String DomainName; /** - * Pointer to a null-terminated WString that specifies the name of the + * Pointer to a null-terminated string that specifies the name of the * domain at the root of the DS tree. The DNS-style name, for example, * "fabrikam.com", is returned if available. Otherwise, the flat-style * name, for example, "fabrikam" is returned. */ - public WString DnsForestName; + public String DnsForestName; /** * Contains a set of flags that describe the domain controller. */ public int Flags; /** - * Pointer to a null-terminated WString that specifies the name of the + * Pointer to a null-terminated string that specifies the name of the * site where the domain controller is located. This member may be NULL * if the domain controller is not in a site; for example, the domain * controller is a Windows NT 4.0 domain controller. */ - public WString DcSiteName; + public String DcSiteName; /** - * Pointer to a null-terminated WString that specifies the name of the + * Pointer to a null-terminated string that specifies the name of the * site that the computer belongs to. The computer is specified in the * ComputerName parameter passed to DsGetDcName. This member may be NULL * if the site that contains the computer cannot be found; for example, * if the DS administrator has not associated the subnet that the * computer is in with a valid site. */ - public WString ClientSiteName; + public String ClientSiteName; protected List getFieldOrder() { return Arrays.asList(new String[] { "DomainControllerName", @@ -182,12 +181,12 @@ public static class ByReference extends DS_DOMAIN_TRUSTS implements * Pointer to a null-terminated string that contains the NetBIOS name of * the domain. */ - public WString NetbiosDomainName; + public String NetbiosDomainName; /** * Pointer to a null-terminated string that contains the DNS name of the * domain. This member may be NULL. */ - public WString DnsDomainName; + public String DnsDomainName; /** * Contains a set of flags that specify more data about the domain * trust. diff --git a/contrib/platform/src/com/sun/jna/platform/win32/GL.java b/contrib/platform/src/com/sun/jna/platform/win32/GL.java index 0638abe6e0..da808ace16 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/GL.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/GL.java @@ -12,12 +12,10 @@ */ package com.sun.jna.platform.win32; -import com.sun.jna.win32.StdCallLibrary; - /** * Definitions for WinOpenGL */ -public interface GL extends StdCallLibrary { +public interface GL { public final int GL_VENDOR = 0x1F00; public final int GL_RENDERER = 0x1F01; public final int GL_VERSION = 0x1F02; diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java index 87af3296d5..5ee11bd2d5 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java @@ -18,17 +18,18 @@ import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.PointerByReference; import com.sun.jna.win32.W32APIOptions; +import com.sun.jna.win32.StdCallLibrary; /** * Interface definitions for kernel32.dll. Includes additional * alternate mappings from {@link WinNT} which make use of NIO buffers, * {@link Wincon} for console API. */ -public interface Kernel32 extends WinNT, Wincon { +public interface Kernel32 extends StdCallLibrary, WinNT, Wincon { /** The instance. */ Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("kernel32", - Kernel32.class, W32APIOptions.UNICODE_OPTIONS); + Kernel32.class, W32APIOptions.DEFAULT_OPTIONS); /** * Reads data from the specified file or input/output (I/O) device. Reads diff --git a/contrib/platform/src/com/sun/jna/platform/win32/LMAccess.java b/contrib/platform/src/com/sun/jna/platform/win32/LMAccess.java index 3e8c8153b7..badd31e365 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/LMAccess.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/LMAccess.java @@ -17,16 +17,14 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; -import com.sun.jna.WString; import com.sun.jna.platform.win32.WinNT.PSID; -import com.sun.jna.win32.StdCallLibrary; /** * Ported from LMAccess.h. * Windows SDK 6.0A. * @author dblock[at]dblock.org */ -public interface LMAccess extends StdCallLibrary { +public interface LMAccess { public static class LOCALGROUP_INFO_0 extends Structure { public LOCALGROUP_INFO_0() { @@ -38,7 +36,7 @@ public LOCALGROUP_INFO_0(Pointer memory) { read(); } - public WString lgrui0_name; + public String lgrui0_name; protected List getFieldOrder() { return Arrays.asList(new String[] { "lgrui0_name" }); @@ -55,8 +53,8 @@ public LOCALGROUP_INFO_1(Pointer memory) { read(); } - public WString lgrui1_name; - public WString lgrui1_comment; + public String lgrui1_name; + public String lgrui1_comment; protected List getFieldOrder() { return Arrays.asList(new String[] { "lgrui1_name", "lgrui1_comment" }); } @@ -89,7 +87,7 @@ public USER_INFO_0(Pointer memory) { /** * Pointer to a Unicode string that specifies the name of the user account. */ - public WString usri0_name; + public String usri0_name; protected List getFieldOrder() { return Arrays.asList(new String[] { "usri0_name" }); } @@ -114,12 +112,12 @@ public USER_INFO_1(Pointer memory) { * Pointer to a Unicode string that specifies the name of the user * account. */ - public WString usri1_name; + public String usri1_name; /** * Pointer to a Unicode string that specifies the password of the user * indicated by the usri1_name member. */ - public WString usri1_password; + public String usri1_password; /** * Specifies a DWORD value that indicates the number of seconds that have * elapsed since the usri1_password member was last changed. @@ -134,12 +132,12 @@ public USER_INFO_1(Pointer memory) { * Pointer to a Unicode string specifying the path of the home directory * for the user specified in the usri1_name member. */ - public WString usri1_home_dir; + public String usri1_home_dir; /** * Pointer to a Unicode string that contains a comment to associate with * the user account. */ - public WString usri1_comment; + public String usri1_comment; /** * Specifies a DWORD value that determines several features. */ @@ -148,7 +146,7 @@ public USER_INFO_1(Pointer memory) { * Pointer to a Unicode string specifying the path for the user's * logon script file. */ - public WString usri1_script_path; + public String usri1_script_path; protected List getFieldOrder() { return Arrays.asList(new String[] { "usri1_name", "usri1_password", "usri1_password_age", "usri1_priv", "usri1_home_dir", "usri1_comment", "usri1_flags", "usri1_script_path" }); @@ -178,17 +176,17 @@ public USER_INFO_23(Pointer memory) { * A pointer to a Unicode string that specifies the name of the user account. * Calls to the NetUserSetInfo function ignore this member. */ - public WString usri23_name; + public String usri23_name; /** * A pointer to a Unicode string that contains the full name of the user. * This string can be a null string, or it can have any number of characters before the terminating null character. */ - public WString usri23_full_name; + public String usri23_full_name; /** * A pointer to a Unicode string that contains a comment associated with the user account. * This string can be a null string, or it can have any number of characters before the terminating null character. */ - public WString usri23_comment; + public String usri23_comment; /** * This member can be one or more of the following values. * Note that setting user account control flags may require certain privileges and control access rights. @@ -246,7 +244,7 @@ public GROUP_USERS_INFO_0(Pointer memory) { /** * Pointer to a null-terminated Unicode character string that specifies a name. */ - public WString grui0_name; + public String grui0_name; protected List getFieldOrder() { return Arrays.asList(new String[] { "grui0_name" }); @@ -269,7 +267,7 @@ public LOCALGROUP_USERS_INFO_0(Pointer memory) { /** * Pointer to a Unicode string specifying the name of a local group to which the user belongs. */ - public WString lgrui0_name; + public String lgrui0_name; protected List getFieldOrder() { return Arrays.asList(new String[] { "lgrui0_name" }); @@ -295,7 +293,7 @@ public GROUP_INFO_0(Pointer memory) { * Pointer to a null-terminated Unicode character string that specifies * the name of the global group. */ - public WString grpi0_name; + public String grpi0_name; protected List getFieldOrder() { return Arrays.asList(new String[] { "grpi0_name" }); @@ -320,13 +318,13 @@ public GROUP_INFO_1(Pointer memory) { * Pointer to a null-terminated Unicode character string that specifies * the name of the global group. */ - public WString grpi1_name; + public String grpi1_name; /** * Pointer to a null-terminated Unicode character string that specifies * a remark associated with the global group. This member can be a null * string. The comment can contain MAXCOMMENTSZ characters. */ - public WString grpi1_comment; + public String grpi1_comment; protected List getFieldOrder() { return Arrays.asList(new String[] { "grpi1_name", "grpi1_comment" }); @@ -351,13 +349,13 @@ public GROUP_INFO_2(Pointer memory) { * Pointer to a null-terminated Unicode character string that * specifies the name of the global group. */ - public WString grpi2_name; + public String grpi2_name; /** * Pointer to a null-terminated Unicode character string that contains a * remark associated with the global group. This member can be a null string. * The comment can contain MAXCOMMENTSZ characters. */ - public WString grpi2_comment; + public String grpi2_comment; /** * Specifies a DWORD value that contains the relative identifier (RID) of * the global group. @@ -392,13 +390,13 @@ public GROUP_INFO_3(Pointer memory) { * Pointer to a null-terminated Unicode character string that * specifies the name of the global group. */ - public WString grpi3_name; + public String grpi3_name; /** * Pointer to a null-terminated Unicode character string that * contains a remark associated with the global group. This member can be * a null string. The comment can contain MAXCOMMENTSZ characters. */ - public WString grpi3_comment; + public String grpi3_comment; /** * Pointer to a SID structure that contains the security identifier (SID) that * uniquely identifies the global group. diff --git a/contrib/platform/src/com/sun/jna/platform/win32/LMCons.java b/contrib/platform/src/com/sun/jna/platform/win32/LMCons.java index cbfd186efb..dbf8c82575 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/LMCons.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/LMCons.java @@ -12,14 +12,12 @@ */ package com.sun.jna.platform.win32; -import com.sun.jna.win32.StdCallLibrary; - /** * Ported from LMCons.h. * @author dblock[at]dblock.org * Windows SDK 6.0A */ -public interface LMCons extends StdCallLibrary { +public interface LMCons { int NETBIOS_NAME_LEN = 16; // NetBIOS net name (bytes) /** diff --git a/contrib/platform/src/com/sun/jna/platform/win32/LMErr.java b/contrib/platform/src/com/sun/jna/platform/win32/LMErr.java index cfbd30f95d..4e595e348d 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/LMErr.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/LMErr.java @@ -12,14 +12,12 @@ */ package com.sun.jna.platform.win32; -import com.sun.jna.win32.StdCallLibrary; - /** * Ported from LMErr.h. * @author dblock[at]dblock.org * Windows SDK 6.0A */ -public interface LMErr extends StdCallLibrary { +public interface LMErr { int NERR_Success = 0; int NERR_BASE = 2100; diff --git a/contrib/platform/src/com/sun/jna/platform/win32/LMJoin.java b/contrib/platform/src/com/sun/jna/platform/win32/LMJoin.java index 2eccc337f6..dab5cc5ddb 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/LMJoin.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/LMJoin.java @@ -12,14 +12,12 @@ */ package com.sun.jna.platform.win32; -import com.sun.jna.win32.StdCallLibrary; - /** * Ported from LMJoin.h. * Windows SDK 6.0A. * @author dblock[at]dblock.org */ -public interface LMJoin extends StdCallLibrary { +public interface LMJoin { /** * Status of a workstation. diff --git a/contrib/platform/src/com/sun/jna/platform/win32/LMShare.java b/contrib/platform/src/com/sun/jna/platform/win32/LMShare.java index dabb8bc42b..bd6ce1a9d5 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/LMShare.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/LMShare.java @@ -17,7 +17,6 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; -import com.sun.jna.WString; import com.sun.jna.win32.StdCallLibrary; /** @@ -25,7 +24,7 @@ * Windows SDK 7.1 * @author amarcionek[at]seven10storage.com */ -public interface LMShare extends StdCallLibrary { +public interface LMShare { // // Share types (shi1_type and shi2_type fields). @@ -78,7 +77,7 @@ public SHARE_INFO_2(Pointer memory) { /** * Pointer to a Unicode string specifying the name of a shared resource. Calls to the NetShareSetInfo function ignore this member. */ - public WString shi2_netname; + public String shi2_netname; /** * A combination of values that specify the type of share. Calls to the NetShareSetInfo function ignore this member. @@ -90,7 +89,7 @@ public SHARE_INFO_2(Pointer memory) { /** * Pointer to a Unicode string specifying an optional comment about the shared resource. */ - public WString shi2_remark; + public String shi2_remark; /** * Specifies a DWORD value that indicates the shared resource's permissions for servers running with share-level security. @@ -116,14 +115,14 @@ public SHARE_INFO_2(Pointer memory) { * Pointer to a Unicode string that contains the local path for the shared resource. For disks, this member is the path being shared. * For print queues, this member is the name of the print queue being shared. Calls to the NetShareSetInfo function ignore this member. */ - public WString shi2_path; + public String shi2_path; /** * Pointer to a Unicode string that specifies the share's password (when the server is running with share-level security). If the server is * running with user-level security, this member is ignored. Note that Windows does not support share-level security. * This member can be no longer than SHPWLEN+1 bytes (including a terminating null character). Calls to the NetShareSetInfo function ignore this member. */ - public WString shi2_passwd; + public String shi2_passwd; protected List getFieldOrder() { return Arrays.asList(new String[] { "shi2_netname", @@ -153,7 +152,7 @@ public SHARE_INFO_502(Pointer memory) { /** * Pointer to a Unicode string specifying the name of a shared resource. Calls to the NetShareSetInfo function ignore this member. */ - public WString shi502_netname; + public String shi502_netname; /** * A combination of values that specify the type of share. Calls to the NetShareSetInfo function ignore this member. @@ -165,7 +164,7 @@ public SHARE_INFO_502(Pointer memory) { /** * Pointer to a Unicode string specifying an optional comment about the shared resource. */ - public WString shi502_remark; + public String shi502_remark; /** * Specifies a DWORD value that indicates the shared resource's permissions for servers running with share-level security. @@ -191,14 +190,14 @@ public SHARE_INFO_502(Pointer memory) { * Pointer to a Unicode string that contains the local path for the shared resource. For disks, this member is the path being shared. * For print queues, this member is the name of the print queue being shared. Calls to the NetShareSetInfo function ignore this member. */ - public WString shi502_path; + public String shi502_path; /** * Pointer to a Unicode string that specifies the share's password (when the server is running with share-level security). If the server is * running with user-level security, this member is ignored. Note that Windows does not support share-level security. * This member can be no longer than SHPWLEN+1 bytes (including a terminating null character). Calls to the NetShareSetInfo function ignore this member. */ - public WString shi502_passwd; + public String shi502_passwd; /** * Reserved; must be zero. Calls to the NetShareSetInfo function ignore this member. diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Mpr.java b/contrib/platform/src/com/sun/jna/platform/win32/Mpr.java index 0f6d99cbf8..7929d050d4 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Mpr.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Mpr.java @@ -16,7 +16,6 @@ import com.sun.jna.Native; import com.sun.jna.Pointer; -import com.sun.jna.WString; import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.platform.win32.WinNT.HANDLEByReference; @@ -34,7 +33,7 @@ public interface Mpr extends StdCallLibrary { - Mpr INSTANCE = (Mpr) Native.loadLibrary("Mpr", Mpr.class, W32APIOptions.UNICODE_OPTIONS); + Mpr INSTANCE = (Mpr) Native.loadLibrary("Mpr", Mpr.class, W32APIOptions.DEFAULT_OPTIONS); /** * The WNetOpenEnum function starts an enumeration of network resources or @@ -182,7 +181,7 @@ public interface Mpr extends StdCallLibrary { * https://msdn.microsoft.com/en-us/library/windows/desktop/aa385474 * (v=vs.85).aspx */ - int WNetGetUniversalName(WString lpLocalPath, int dwInfoLevel, Pointer lpBuffer, IntByReference lpBufferSize); + int WNetGetUniversalName(String lpLocalPath, int dwInfoLevel, Pointer lpBuffer, IntByReference lpBufferSize); /** * The WNetUseConnection function makes a connection to a network resource. @@ -299,7 +298,7 @@ public interface Mpr extends StdCallLibrary { * https://msdn.microsoft.com/en-us/library/windows/desktop/aa385482 * (v=vs.85).aspx */ - public int WNetUseConnection(HWND hwndOwner, NETRESOURCE lpNETRESOURCE, WString lpPassword, WString lpUserID, int dwFlags, + public int WNetUseConnection(HWND hwndOwner, NETRESOURCE lpNETRESOURCE, String lpPassword, String lpUserID, int dwFlags, PointerByReference lpAccessName, IntByReference lpBufferSize, IntByReference lpResult); /** @@ -380,7 +379,7 @@ public int WNetUseConnection(HWND hwndOwner, NETRESOURCE lpNETRESOURCE, WString * [in] Set of bit flags describing the connection. This * parameter can be any combination of the values in ConnectFlag. */ - public int WNetAddConnection3(HWND hwndOwner, NETRESOURCE lpNETRESOURCE, WString lpPassword, WString lpUserID, int dwFlags); + public int WNetAddConnection3(HWND hwndOwner, NETRESOURCE lpNETRESOURCE, String lpPassword, String lpUserID, int dwFlags); /** * The WNetCancelConnection2 function cancels an existing network @@ -417,5 +416,5 @@ public int WNetUseConnection(HWND hwndOwner, NETRESOURCE lpNETRESOURCE, WString * https://msdn.microsoft.com/en-us/library/windows/desktop/aa385482 * (v=vs.85).aspx */ - public int WNetCancelConnection2(WString lpName, int dwFlags, boolean fForce); + public int WNetCancelConnection2(String lpName, int dwFlags, boolean fForce); } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Msi.java b/contrib/platform/src/com/sun/jna/platform/win32/Msi.java index 2874918569..7fc72b2937 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Msi.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Msi.java @@ -21,7 +21,7 @@ public interface Msi extends StdCallLibrary { Msi INSTANCE = (Msi) - Native.loadLibrary("msi", Msi.class, W32APIOptions.UNICODE_OPTIONS); + Native.loadLibrary("msi", Msi.class, W32APIOptions.DEFAULT_OPTIONS); /** * The component being requested is disabled on the computer. diff --git a/contrib/platform/src/com/sun/jna/platform/win32/NTSecApi.java b/contrib/platform/src/com/sun/jna/platform/win32/NTSecApi.java index c76db51ae2..425f7ab6f1 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/NTSecApi.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/NTSecApi.java @@ -21,14 +21,13 @@ import com.sun.jna.Union; import com.sun.jna.platform.win32.WinNT.LARGE_INTEGER; import com.sun.jna.platform.win32.WinNT.PSID; -import com.sun.jna.win32.StdCallLibrary; /** * Ported from NTSecApi.h * Windows SDK 6.0A. * @author dblock[at]dblock.org */ -public interface NTSecApi extends StdCallLibrary { +public interface NTSecApi { /** * The LSA_UNICODE_STRING structure is used by various Local Security Authority (LSA) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Netapi32.java b/contrib/platform/src/com/sun/jna/platform/win32/Netapi32.java index ec9ee45127..161edd1cc9 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Netapi32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Netapi32.java @@ -15,7 +15,6 @@ import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.Structure; -import com.sun.jna.WString; import com.sun.jna.platform.win32.DsGetDC.PDOMAIN_CONTROLLER_INFO; import com.sun.jna.platform.win32.Guid.GUID; import com.sun.jna.platform.win32.NTSecApi.PLSA_FOREST_TRUST_INFORMATION; @@ -31,7 +30,7 @@ public interface Netapi32 extends StdCallLibrary { Netapi32 INSTANCE = (Netapi32) Native.loadLibrary("Netapi32", - Netapi32.class, W32APIOptions.UNICODE_OPTIONS); + Netapi32.class, W32APIOptions.DEFAULT_OPTIONS); /** * Retrieves join status information for the specified computer. @@ -451,7 +450,7 @@ public int DsEnumerateDomainTrusts(String serverName, int Flags, * index is not returned on error. For more information, see the NetShareSetInfo function. * @return If the function succeeds, the return value is NERR_Success. If the function fails, the return value can be an error code as seen on MSDN. */ - public int NetShareAdd(WString servername, int level, Pointer buf, IntByReference parm_err); + public int NetShareAdd(String servername, int level, Pointer buf, IntByReference parm_err); /** * Deletes a share name from a server's list of shared resources, disconnecting all connections to the shared resource. @@ -466,5 +465,5 @@ public int DsEnumerateDomainTrusts(String serverName, int Flags, * @return If the function succeeds, the return value is LMErr.NERR_Success. * If the function fails, the return value can be an error code as seen on MSDN. */ - public int NetShareDel(WString servername, WString netname, int reserved); + public int NetShareDel(String servername, String netname, int reserved); } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/NtDll.java b/contrib/platform/src/com/sun/jna/platform/win32/NtDll.java index bd69134ca6..e25e6e7adb 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/NtDll.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/NtDll.java @@ -26,7 +26,7 @@ public interface NtDll extends StdCallLibrary { NtDll INSTANCE = (NtDll) Native.loadLibrary("NtDll", - NtDll.class, W32APIOptions.UNICODE_OPTIONS); + NtDll.class, W32APIOptions.DEFAULT_OPTIONS); /** * The ZwQueryKey routine provides information about the class of a registry key, @@ -52,4 +52,4 @@ public interface NtDll extends StdCallLibrary { */ public int ZwQueryKey(HANDLE KeyHandle, int KeyInformationClass, Structure KeyInformation, int Length, IntByReference ResultLength); -} \ No newline at end of file +} diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Ole32.java b/contrib/platform/src/com/sun/jna/platform/win32/Ole32.java index 90eb10f0ac..3df89c47af 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Ole32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Ole32.java @@ -34,7 +34,7 @@ public interface Ole32 extends StdCallLibrary { /** The instance. */ Ole32 INSTANCE = (Ole32) Native.loadLibrary("Ole32", Ole32.class, - W32APIOptions.UNICODE_OPTIONS); + W32APIOptions.DEFAULT_OPTIONS); /** * Creates a GUID, a unique 128-bit integer used for CLSIDs and interface @@ -217,6 +217,8 @@ HRESULT CoCreateInstance(GUID rclsid, Pointer pUnkOuter, int dwClsContext, * * REGDB_E_READREGDB The registry could not be opened for reading. */ + HRESULT CLSIDFromString(String lpsz, CLSID.ByReference pclsid); + /** @deprecated use the String version */ HRESULT CLSIDFromString(WString lpsz, CLSID.ByReference pclsid); /** diff --git a/contrib/platform/src/com/sun/jna/platform/win32/OleAuto.java b/contrib/platform/src/com/sun/jna/platform/win32/OleAuto.java index 4a992ffb33..7cec6e09f7 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/OleAuto.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/OleAuto.java @@ -100,7 +100,7 @@ public interface OleAuto extends StdCallLibrary { /** The instance. */ OleAuto INSTANCE = (OleAuto) Native.loadLibrary("OleAut32", OleAuto.class, - W32APIOptions.UNICODE_OPTIONS); + W32APIOptions.DEFAULT_OPTIONS); /** * This function allocates a new string and copies the passed string into @@ -473,6 +473,8 @@ public HRESULT LoadRegTypeLib(GUID rguid, int wVerMajor, int wVerMinor, * loaded. * @return status */ + public HRESULT LoadTypeLib(String szFile, PointerByReference pptlib); + /** @deprecated use the String version */ public HRESULT LoadTypeLib(WString szFile, PointerByReference pptlib); /** diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Pdh.java b/contrib/platform/src/com/sun/jna/platform/win32/Pdh.java index 1c28fb02e1..99af9441ae 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Pdh.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Pdh.java @@ -33,7 +33,7 @@ */ public interface Pdh extends StdCallLibrary { Pdh INSTANCE = (Pdh) Native.loadLibrary("Pdh", - Pdh.class, W32APIOptions.UNICODE_OPTIONS); + Pdh.class, W32APIOptions.DEFAULT_OPTIONS); /** Maximum counter name length. */ diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Rasapi32.java b/contrib/platform/src/com/sun/jna/platform/win32/Rasapi32.java index e8388789e6..a0ca394abe 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Rasapi32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Rasapi32.java @@ -33,7 +33,7 @@ * Rasapi32.dll Interface. */ public interface Rasapi32 extends StdCallLibrary { - Rasapi32 INSTANCE = (Rasapi32) Native.loadLibrary("Rasapi32", Rasapi32.class, W32APIOptions.UNICODE_OPTIONS); + Rasapi32 INSTANCE = (Rasapi32) Native.loadLibrary("Rasapi32", Rasapi32.class, W32APIOptions.DEFAULT_OPTIONS); /** * The RasDial function establishes a RAS connection between a RAS client and a RAS server. diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Secur32.java b/contrib/platform/src/com/sun/jna/platform/win32/Secur32.java index 3444fcc857..c63c203033 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Secur32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Secur32.java @@ -30,7 +30,7 @@ * @author dblock[at]dblock.org */ public interface Secur32 extends StdCallLibrary { - Secur32 INSTANCE = (Secur32) Native.loadLibrary("Secur32", Secur32.class, W32APIOptions.UNICODE_OPTIONS); + Secur32 INSTANCE = (Secur32) Native.loadLibrary("Secur32", Secur32.class, W32APIOptions.DEFAULT_OPTIONS); /** * Specifies a format for a directory service object name. diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Shell32.java b/contrib/platform/src/com/sun/jna/platform/win32/Shell32.java index 38b5f00218..1f98925861 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Shell32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Shell32.java @@ -30,7 +30,7 @@ public interface Shell32 extends ShellAPI, StdCallLibrary { Shell32 INSTANCE = (Shell32) Native.loadLibrary("shell32", Shell32.class, - W32APIOptions.UNICODE_OPTIONS); + W32APIOptions.DEFAULT_OPTIONS); /** * No dialog box confirming the deletion of the objects will be displayed. diff --git a/contrib/platform/src/com/sun/jna/platform/win32/ShellAPI.java b/contrib/platform/src/com/sun/jna/platform/win32/ShellAPI.java index 11079d0bc7..2495c97ee3 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/ShellAPI.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/ShellAPI.java @@ -19,7 +19,6 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; import com.sun.jna.TypeMapper; -import com.sun.jna.WString; import com.sun.jna.platform.win32.WinDef.DWORD; import com.sun.jna.platform.win32.WinDef.HINSTANCE; import com.sun.jna.platform.win32.WinDef.HWND; @@ -39,7 +38,7 @@ public interface ShellAPI extends StdCallLibrary { int STRUCTURE_ALIGNMENT = Platform.is64Bit() ? Structure.ALIGN_DEFAULT : Structure.ALIGN_NONE; - TypeMapper TYPE_MAPPER = Boolean.getBoolean("w32.ascii") ? W32APITypeMapper.ASCII : W32APITypeMapper.UNICODE; + TypeMapper TYPE_MAPPER = Boolean.getBoolean("w32.ascii") ? W32APITypeMapper.ASCII : W32APITypeMapper.UNICODE; int FO_MOVE = 0x0001; int FO_COPY = 0x0002; @@ -85,11 +84,11 @@ public static class SHFILEOPSTRUCT extends Structure { /** * A pointer to one or more source file names, double null-terminated. */ - public WString pFrom; + public String pFrom; /** * A pointer to the destination file or directory name. */ - public WString pTo; + public String pTo; /** * Flags that control the file operation. */ @@ -110,7 +109,7 @@ public static class SHFILEOPSTRUCT extends Structure { /** * A pointer to the title of a progress dialog box. This is a null-terminated string. */ - public WString lpszProgressTitle; + public String lpszProgressTitle; protected List getFieldOrder() { return Arrays.asList(new String[] { "hwnd", "wFunc", "pFrom", "pTo", "fFlags", "fAnyOperationsAborted", "pNameMappings", "lpszProgressTitle" }); diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Sspi.java b/contrib/platform/src/com/sun/jna/platform/win32/Sspi.java index 42fde7b374..b249ce2f0c 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Sspi.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Sspi.java @@ -18,15 +18,13 @@ import com.sun.jna.Memory; import com.sun.jna.Pointer; import com.sun.jna.Structure; -import com.sun.jna.WString; -import com.sun.jna.win32.StdCallLibrary; /** * Ported from Sspi.h. * Microsoft Windows SDK 6.0A. * @author dblock[at]dblock.org */ -public interface Sspi extends StdCallLibrary { +public interface Sspi { /** * Maximum size in bytes of a security token. @@ -431,12 +429,12 @@ public static class ByReference extends SecPkgInfo implements Structure.ByRefere /** * Pointer to a null-terminated string that contains the name of the security package. */ - public WString Name; + public String Name; /** * Pointer to a null-terminated string. This can be any additional string passed * back by the package. */ - public WString Comment; + public String Comment; protected List getFieldOrder() { return Arrays.asList(new String[] { "fCapabilities", "wVersion", "wRPCID", "cbMaxToken", "Name", "Comment" }); diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Tlhelp32.java b/contrib/platform/src/com/sun/jna/platform/win32/Tlhelp32.java index 9c787ec769..32fac29565 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Tlhelp32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Tlhelp32.java @@ -15,12 +15,11 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; -import com.sun.jna.win32.StdCallLibrary; /** * Interface for the Tlhelp32.h header file. */ -public interface Tlhelp32 extends StdCallLibrary { +public interface Tlhelp32 { /** * Includes all heaps of the process specified in th32ProcessID in the snapshot. To enumerate the heaps, see diff --git a/contrib/platform/src/com/sun/jna/platform/win32/User32.java b/contrib/platform/src/com/sun/jna/platform/win32/User32.java index fe696ebbca..d92c49a5a1 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/User32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/User32.java @@ -1303,6 +1303,8 @@ boolean RedrawWindow(HWND hWnd, RECT lprcUpdate, * If the function fails, the return value is zero. To get extended * error information, call {@link Kernel32#GetLastError}. */ + public boolean UnregisterClass(String lpClassName, HINSTANCE hInstance); + /** @deprecated use the String version */ public boolean UnregisterClass(WString lpClassName, HINSTANCE hInstance); /** @@ -1471,6 +1473,11 @@ boolean RedrawWindow(HWND hWnd, RECT lprcUpdate, * WM_NCCREATE * */ + public HWND CreateWindowEx(int dwExStyle, String lpClassName, + String lpWindowName, int dwStyle, int x, int y, int nWidth, + int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, + LPVOID lpParam); + /** @deprecated use the String version */ public HWND CreateWindowEx(int dwExStyle, WString lpClassName, String lpWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, @@ -1537,7 +1544,7 @@ public HWND CreateWindowEx(int dwExStyle, WString lpClassName, * If the function fails, the return value is zero. To get extended * error information, call {@link Kernel32#GetLastError} . */ - public boolean GetClassInfoEx(HINSTANCE hinst, WString lpszClass, + public boolean GetClassInfoEx(HINSTANCE hinst, String lpszClass, WNDCLASSEX lpwcx); /** diff --git a/contrib/platform/src/com/sun/jna/platform/win32/User32Util.java b/contrib/platform/src/com/sun/jna/platform/win32/User32Util.java index 69b5223d64..ef43290a02 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/User32Util.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/User32Util.java @@ -12,7 +12,6 @@ import java.util.Arrays; import java.util.List; -import com.sun.jna.WString; import com.sun.jna.platform.win32.WinDef.HINSTANCE; import com.sun.jna.platform.win32.WinDef.HMENU; import com.sun.jna.platform.win32.WinDef.HWND; @@ -43,7 +42,7 @@ public static final HWND createWindow(final String className, final String windo public static final HWND createWindowEx(final int exStyle, final String className, final String windowName, final int style, final int x, final int y, final int width, final int height, final HWND parent, final HMENU menu, final HINSTANCE instance, final LPVOID param) { final HWND hWnd = User32.INSTANCE - .CreateWindowEx(exStyle, new WString(className), windowName, style, x, y, width, height, parent, menu, instance, param); + .CreateWindowEx(exStyle, className, windowName, style, x, y, width, height, parent, menu, instance, param); if (hWnd == null) throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); return hWnd; @@ -77,4 +76,4 @@ public static final List GetRawInputDeviceList() { return Arrays.asList(records); } -} \ No newline at end of file +} diff --git a/contrib/platform/src/com/sun/jna/platform/win32/VerRsrc.java b/contrib/platform/src/com/sun/jna/platform/win32/VerRsrc.java index 52e7f39c2e..2b69e978a7 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/VerRsrc.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/VerRsrc.java @@ -15,12 +15,11 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; -import com.sun.jna.win32.StdCallLibrary; /** * Interface for the VerRsrc.h header file. */ -public interface VerRsrc extends StdCallLibrary { +public interface VerRsrc { /** * Contains version information for a file. This information is language and code page independent. diff --git a/contrib/platform/src/com/sun/jna/platform/win32/W32FileUtils.java b/contrib/platform/src/com/sun/jna/platform/win32/W32FileUtils.java index d2a0d83e16..fa4dba8eea 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/W32FileUtils.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/W32FileUtils.java @@ -15,7 +15,6 @@ import java.io.File; import java.io.IOException; -import com.sun.jna.WString; import com.sun.jna.platform.FileUtils; public class W32FileUtils extends FileUtils { @@ -32,7 +31,7 @@ public void moveToTrash(File[] files) throws IOException { for (int i=0;i < paths.length;i++) { paths[i] = files[i].getAbsolutePath(); } - fileop.pFrom = new WString(fileop.encodePaths(paths)); + fileop.pFrom = fileop.encodePaths(paths); fileop.fFlags = ShellAPI.FOF_ALLOWUNDO|ShellAPI.FOF_NO_UI; int ret = shell.SHFileOperation(fileop); if (ret != 0) { diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Wdm.java b/contrib/platform/src/com/sun/jna/platform/win32/Wdm.java index 8dfcb03904..9693f94f5f 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Wdm.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Wdm.java @@ -18,14 +18,13 @@ import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.Structure; -import com.sun.jna.win32.StdCallLibrary; /** * Ported from Wdm.h. * Microsoft Windows DDK. * @author dblock[at]dblock.org */ -public interface Wdm extends StdCallLibrary { +public interface Wdm { /** * The KEY_BASIC_INFORMATION structure defines a subset of diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java b/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java index 8623cfe39a..d8f30cae81 100755 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java @@ -26,13 +26,14 @@ import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.ptr.ByteByReference; import com.sun.jna.win32.StdCallLibrary; +import com.sun.jna.win32.StdCallLibrary.StdCallCallback; /** * Ported from Winbase.h (kernel32.dll/kernel services). * Microsoft Windows SDK 6.0A. * @author dblock[at]dblock.org */ -public interface WinBase extends StdCallLibrary, WinDef, BaseTSD { +public interface WinBase extends WinDef, BaseTSD { /** Constant value representing an invalid HANDLE. */ HANDLE INVALID_HANDLE_VALUE = @@ -992,7 +993,7 @@ public PROCESS_INFORMATION(Pointer memory) { /** * Represents a thread entry point local to this process, as a Callback. */ - public interface THREAD_START_ROUTINE extends Callback{ + public interface THREAD_START_ROUTINE extends StdCallCallback{ public DWORD apply( LPVOID lpParameter ); } @@ -1079,8 +1080,8 @@ public static interface COMPUTER_NAME_FORMAT { * ExportCallback writes the encrypted file's data to another storage media, * usually for purposes of backing up the file. */ - public interface FE_EXPORT_FUNC extends Callback { - public DWORD callback(ByteByReference pbData, Pointer pvCallbackContext, + public interface FE_EXPORT_FUNC extends StdCallCallback { + public DWORD callback(Pointer pbData, Pointer pvCallbackContext, ULONG ulLength); } @@ -1091,8 +1092,8 @@ public DWORD callback(ByteByReference pbData, Pointer pvCallbackContext, * backup file sequentially and restores the data, and the system continues * calling it until it has read all of the backup file data. */ - public interface FE_IMPORT_FUNC extends Callback { - public DWORD callback(ByteByReference pbData, Pointer pvCallbackContext, + public interface FE_IMPORT_FUNC extends StdCallCallback { + public DWORD callback(Pointer pbData, Pointer pvCallbackContext, ULONGByReference ulLength); } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java b/contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java index 7bab7735b6..cc57161b1f 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java @@ -20,14 +20,13 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; import com.sun.jna.platform.win32.WinDef.HWND; -import com.sun.jna.win32.StdCallLibrary; /** * Ported from WinCrypt.h. * Microsoft Windows SDK 6.0A. * @author dblock[at]dblock.org */ -public interface WinCrypt extends StdCallLibrary { +public interface WinCrypt { /** * The CryptoAPI CRYPTOAPI_BLOB structure is used for an arbitrary array of bytes. diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinDef.java b/contrib/platform/src/com/sun/jna/platform/win32/WinDef.java index f2f99a2075..3c531fca88 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinDef.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinDef.java @@ -25,7 +25,6 @@ import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.platform.win32.WinNT.HANDLEByReference; import com.sun.jna.ptr.ByReference; -import com.sun.jna.win32.StdCallLibrary; /** * Ported from Windef.h (various macros and types). Microsoft Windows SDK 6.0A. @@ -33,7 +32,7 @@ * @author dblock[at]dblock.org */ @SuppressWarnings("serial") -public interface WinDef extends StdCallLibrary { +public interface WinDef { /** The max path. */ int MAX_PATH = 260; diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinGDI.java b/contrib/platform/src/com/sun/jna/platform/win32/WinGDI.java index 92cd1a14d2..40e1f38a4c 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinGDI.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinGDI.java @@ -21,7 +21,6 @@ import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.platform.win32.WinDef.HBITMAP; import com.sun.jna.platform.win32.WinDef.RECT; -import com.sun.jna.win32.StdCallLibrary; /** * Ported from WinGDI.h. @@ -29,7 +28,7 @@ * @author dblock[at]dblock.org * @author Andreas "PAX" Lück, onkelpax-git[at]yahoo.de */ -public interface WinGDI extends StdCallLibrary { +public interface WinGDI { int RDH_RECTANGLES = 1; class RGNDATAHEADER extends Structure { diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java b/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java index efbcd83318..b61585a829 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java @@ -26,6 +26,7 @@ import com.sun.jna.Structure; import com.sun.jna.Union; import com.sun.jna.ptr.ByReference; +import com.sun.jna.win32.StdCallLibrary.StdCallCallback; /** * This module defines the 32-Bit Windows types and constants that are defined diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinRas.java b/contrib/platform/src/com/sun/jna/platform/win32/WinRas.java index 13d8142a03..331042abf0 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinRas.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinRas.java @@ -26,12 +26,12 @@ import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.platform.win32.WinNT.LUID; -import com.sun.jna.win32.StdCallLibrary; +import com.sun.jna.win32.StdCallLibrary.StdCallCallback; /** * Definitions for RASAPI32 */ -public interface WinRas extends StdCallLibrary { +public interface WinRas { public static final int ERROR_BUFFER_TOO_SMALL = 603; public static final int ERROR_CANNOT_FIND_PHONEBOOK_ENTRY = 623; diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinReg.java b/contrib/platform/src/com/sun/jna/platform/win32/WinReg.java index c3e7458739..3ef54c876f 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinReg.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinReg.java @@ -15,7 +15,6 @@ import com.sun.jna.Pointer; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.ptr.ByReference; -import com.sun.jna.win32.StdCallLibrary; /** * This module contains the function prototypes and constant, type and structure @@ -24,7 +23,7 @@ * Microsoft Windows SDK 6.0A. * @author dblock[at]dblock.org */ -public interface WinReg extends StdCallLibrary { +public interface WinReg { public static class HKEY extends HANDLE { public HKEY() { } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinUser.java b/contrib/platform/src/com/sun/jna/platform/win32/WinUser.java index 3d5ab193ac..f85f5ba358 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinUser.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinUser.java @@ -19,10 +19,9 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; import com.sun.jna.Union; -import com.sun.jna.WString; import com.sun.jna.platform.win32.BaseTSD.ULONG_PTR; import com.sun.jna.platform.win32.WinNT.HANDLE; -import com.sun.jna.win32.StdCallLibrary; +import com.sun.jna.win32.StdCallLibrary.StdCallCallback; /** * Ported from WinUser.h Microsoft Windows SDK 6.0A. @@ -30,7 +29,7 @@ * @author dblock[at]dblock.org * @author Andreas "PAX" Lück, onkelpax-git[at]yahoo.de */ -public interface WinUser extends StdCallLibrary, WinDef { +public interface WinUser extends WinDef { HWND HWND_BROADCAST = new HWND(Pointer.createConstant(0xFFFF)); HWND HWND_MESSAGE = new HWND(Pointer.createConstant(-3)); @@ -1039,7 +1038,7 @@ public WNDCLASSEX(Pointer memory) { public String lpszMenuName; /** The lpsz class name. */ - public WString lpszClassName; + public String lpszClassName; /** The h icon sm. */ public HICON hIconSm; @@ -1059,7 +1058,7 @@ protected List getFieldOrder() { * * WindowProc is a placeholder for the application-defined function name. */ - public interface WindowProc extends Callback { + public interface WindowProc extends StdCallCallback { /** * @param hwnd @@ -1260,7 +1259,7 @@ protected List getFieldOrder() * display monitor. You can then paint into the device context in a manner that is optimal for the * display monitor. */ - public interface MONITORENUMPROC extends Callback + public interface MONITORENUMPROC extends StdCallCallback { /** * @param hMonitor A handle to the display monitor. This value will always be non-NULL. diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Winioctl.java b/contrib/platform/src/com/sun/jna/platform/win32/Winioctl.java index 80ade8622d..c697f11a42 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Winioctl.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Winioctl.java @@ -15,12 +15,11 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; -import com.sun.jna.win32.StdCallLibrary; /** * Interface for the Winioctl.h header file. */ -public interface Winioctl extends StdCallLibrary { +public interface Winioctl { /** * Retrieves the device type, device number, and, for a partitionable device, the partition number of a device. diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Winnetwk.java b/contrib/platform/src/com/sun/jna/platform/win32/Winnetwk.java index 1f44d2e6a6..07933e60f6 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Winnetwk.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Winnetwk.java @@ -19,8 +19,6 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; -import com.sun.jna.WString; -import com.sun.jna.win32.StdCallLibrary; /** * Ported from AccCtrl.h. Microsoft Windows SDK 7.1 @@ -28,7 +26,7 @@ * @author amarcionek[at]gmail.com */ -public abstract class Winnetwk implements StdCallLibrary { +public abstract class Winnetwk { /** * The scope of the enumeration. This member can be one of the following @@ -329,7 +327,7 @@ protected List getFieldOrder() { * character string that specifies the name of a local device. This * member is NULL if the connection does not use a device. */ - public WString lpLocalName; + public String lpLocalName; /** * If the entry is a network resource, this member is a pointer to a @@ -343,13 +341,13 @@ protected List getFieldOrder() { * The string can be MAX_PATH characters in length, and it must follow * the network provider's naming conventions */ - public WString lpRemoteName; + public String lpRemoteName; /** * A pointer to a NULL-terminated string that contains a comment * supplied by the network provider. */ - public WString lpComment; + public String lpComment; /** * A pointer to a NULL-terminated string that contains the name of the @@ -357,7 +355,7 @@ protected List getFieldOrder() { * provider name is unknown. To retrieve the provider name, you can call * the WNetGetProviderName function. */ - public WString lpProvider; + public String lpProvider; } // @@ -396,7 +394,7 @@ public UNIVERSAL_NAME_INFO(Pointer address) { * Pointer to the null-terminated UNC name string that identifies a * network resource. */ - public WString lpUniversalName; + public String lpUniversalName; @Override protected List getFieldOrder() { @@ -436,18 +434,18 @@ public REMOTE_NAME_INFO(Pointer address) { * Pointer to the null-terminated UNC name string that identifies a * network resource. */ - public WString lpUniversalName; + public String lpUniversalName; /** * Pointer to a null-terminated string that is the name of a network * connection. */ - public WString lpConnectionName; + public String lpConnectionName; /** * Pointer to a null-terminated name string. */ - public WString lpRemainingPath; + public String lpRemainingPath; @Override protected List getFieldOrder() { diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Winspool.java b/contrib/platform/src/com/sun/jna/platform/win32/Winspool.java index 4d3d16167b..822c00e7d9 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Winspool.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Winspool.java @@ -93,7 +93,7 @@ public interface Winspool extends StdCallLibrary { int PRINTER_ENUM_HIDE = 0x01000000; Winspool INSTANCE = (Winspool) Native.loadLibrary("Winspool.drv", - Winspool.class, W32APIOptions.UNICODE_OPTIONS); + Winspool.class, W32APIOptions.DEFAULT_OPTIONS); /** * The EnumPrinters function enumerates available printers, print servers, diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Winsvc.java b/contrib/platform/src/com/sun/jna/platform/win32/Winsvc.java index b5e1916672..cc34077935 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Winsvc.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Winsvc.java @@ -19,7 +19,6 @@ import com.sun.jna.Memory; import com.sun.jna.Structure; import com.sun.jna.platform.win32.WinNT.HANDLE; -import com.sun.jna.win32.StdCallLibrary; /** * This module defines the 32-Bit Windows types and constants that are defined @@ -28,7 +27,7 @@ * Microsoft Windows SDK 7.0A. * @author EugineLev */ -public interface Winsvc extends StdCallLibrary { +public interface Winsvc { /** * Contains status information for a service. The ControlService, EnumDependentServices, diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Advapi32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/Advapi32Test.java index abe4e5d11f..e49a253875 100755 --- a/contrib/platform/test/com/sun/jna/platform/win32/Advapi32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Advapi32Test.java @@ -44,7 +44,6 @@ import com.sun.jna.Memory; import com.sun.jna.Native; import com.sun.jna.Pointer; -import com.sun.jna.WString; import com.sun.jna.platform.win32.LMAccess.USER_INFO_1; import com.sun.jna.platform.win32.WinBase.FE_EXPORT_FUNC; import com.sun.jna.platform.win32.WinBase.FE_IMPORT_FUNC; @@ -73,7 +72,6 @@ import com.sun.jna.platform.win32.Winsvc.SC_HANDLE; import com.sun.jna.platform.win32.Winsvc.SC_STATUS_TYPE; import com.sun.jna.platform.win32.Winsvc.SERVICE_STATUS_PROCESS; -import com.sun.jna.ptr.ByteByReference; import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.PointerByReference; @@ -387,8 +385,8 @@ public void testGetTokenGroupsInformation() { public void testImpersonateLoggedOnUser() { USER_INFO_1 userInfo = new USER_INFO_1(); - userInfo.usri1_name = new WString("JNAAdvapi32TestImp"); - userInfo.usri1_password = new WString("!JNAP$$Wrd0"); + userInfo.usri1_name = "JNAAdvapi32TestImp"; + userInfo.usri1_password = "!JNAP$$Wrd0"; userInfo.usri1_priv = LMAccess.USER_PRIV_USER; // ignore test if not able to add user (need to be administrator to do this). if (LMErr.NERR_Success != Netapi32.INSTANCE.NetUserAdd(null, 1, userInfo, null)) { @@ -1306,7 +1304,7 @@ public void testAccessCheck() { public void testEncryptFile() throws Exception { // create a temp file File file = createTempFile(); - WString lpFileName = new WString(file.getAbsolutePath()); + String lpFileName = file.getAbsolutePath(); // encrypt a read only file file.setWritable(false); @@ -1323,7 +1321,7 @@ public void testEncryptFile() throws Exception { public void testDecryptFile() throws Exception { // create an encrypted file File file = createTempFile(); - WString lpFileName = new WString(file.getAbsolutePath()); + String lpFileName = file.getAbsolutePath(); assertTrue(Advapi32.INSTANCE.EncryptFile(lpFileName)); // decrypt a read only file @@ -1343,7 +1341,7 @@ public void testFileEncryptionStatus() throws Exception { // create a temp file File file = createTempFile(); - WString lpFileName = new WString(file.getAbsolutePath()); + String lpFileName = file.getAbsolutePath(); // unencrypted file assertTrue(Advapi32.INSTANCE.FileEncryptionStatus(lpFileName, lpStatus)); @@ -1369,7 +1367,7 @@ public void testEncryptionDisable() throws Exception { // create a temp dir String filePath = System.getProperty("java.io.tmpdir") + File.separator + System.nanoTime(); - WString DirPath = new WString(filePath); + String DirPath = filePath; File dir = new File(filePath); dir.mkdir(); @@ -1397,7 +1395,7 @@ public void testEncryptionDisable() throws Exception { public void testOpenEncryptedFileRaw() throws Exception { // create an encrypted file File file = createTempFile(); - WString lpFileName = new WString(file.getAbsolutePath()); + String lpFileName = file.getAbsolutePath(); assertTrue(Advapi32.INSTANCE.EncryptFile(lpFileName)); // open file for export @@ -1413,7 +1411,7 @@ public void testOpenEncryptedFileRaw() throws Exception { public void testReadEncryptedFileRaw() throws Exception { // create an encrypted file File file = createTempFile(); - WString lpFileName = new WString(file.getAbsolutePath()); + String lpFileName = file.getAbsolutePath(); assertTrue(Advapi32.INSTANCE.EncryptFile(lpFileName)); // open file for export @@ -1426,9 +1424,12 @@ public void testReadEncryptedFileRaw() throws Exception { final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); FE_EXPORT_FUNC pfExportCallback = new FE_EXPORT_FUNC() { @Override - public DWORD callback(ByteByReference pbData, Pointer + public DWORD callback(Pointer pbData, Pointer pvCallbackContext, ULONG ulLength) { - byte[] arr = pbData.getPointer().getByteArray(0, ulLength.intValue()); + if (pbData == null) { + throw new NullPointerException("Callback data unexpectedly missing"); + } + byte[] arr = pbData.getByteArray(0, ulLength.intValue()); try { outputStream.write(arr); } catch (IOException e) { @@ -1449,7 +1450,7 @@ public DWORD callback(ByteByReference pbData, Pointer public void testWriteEncryptedFileRaw() throws Exception { // create an encrypted file File file = createTempFile(); - WString lpFileName = new WString(file.getAbsolutePath()); + String lpFileName = file.getAbsolutePath(); assertTrue(Advapi32.INSTANCE.EncryptFile(lpFileName)); // open file for export @@ -1462,9 +1463,12 @@ public void testWriteEncryptedFileRaw() throws Exception { final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); FE_EXPORT_FUNC pfExportCallback = new FE_EXPORT_FUNC() { @Override - public DWORD callback(ByteByReference pbData, Pointer + public DWORD callback(Pointer pbData, Pointer pvCallbackContext, ULONG ulLength) { - byte[] arr = pbData.getPointer().getByteArray(0, ulLength.intValue()); + if (pbData == null) { + throw new NullPointerException("Callback data unexpectedly null"); + } + byte[] arr = pbData.getByteArray(0, ulLength.intValue()); try { outputStream.write(arr); } catch (IOException e) { @@ -1480,8 +1484,8 @@ public DWORD callback(ByteByReference pbData, Pointer Advapi32.INSTANCE.CloseEncryptedFileRaw(pvContext.getValue()); // open file for import - WString lbFileName2 = new WString(System.getProperty("java.io.tmpdir") + - File.separator + "backup-" + file.getName()); + String lbFileName2 = System.getProperty("java.io.tmpdir") + + File.separator + "backup-" + file.getName(); ULONG ulFlags2 = new ULONG(CREATE_FOR_IMPORT); PointerByReference pvContext2 = new PointerByReference(); assertEquals(W32Errors.ERROR_SUCCESS, Advapi32.INSTANCE.OpenEncryptedFileRaw( @@ -1491,13 +1495,12 @@ public DWORD callback(ByteByReference pbData, Pointer final IntByReference elementsReadWrapper = new IntByReference(0); FE_IMPORT_FUNC pfImportCallback = new FE_IMPORT_FUNC() { @Override - public DWORD callback(ByteByReference pbData, Pointer pvCallbackContext, + public DWORD callback(Pointer pbData, Pointer pvCallbackContext, ULONGByReference ulLength) { int elementsRead = elementsReadWrapper.getValue(); int remainingElements = outputStream.size() - elementsRead; int length = Math.min(remainingElements, ulLength.getValue().intValue()); - pbData.getPointer().write(0, outputStream.toByteArray(), elementsRead, - length); + pbData.write(0, outputStream.toByteArray(), elementsRead, length); elementsReadWrapper.setValue(elementsRead + length); ulLength.setValue(new ULONG(length)); return new DWORD(W32Errors.ERROR_SUCCESS); diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Advapi32UtilTest.java b/contrib/platform/test/com/sun/jna/platform/win32/Advapi32UtilTest.java index 5f0b38db79..0aa0aa6d3f 100755 --- a/contrib/platform/test/com/sun/jna/platform/win32/Advapi32UtilTest.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Advapi32UtilTest.java @@ -19,7 +19,6 @@ import junit.framework.TestCase; -import com.sun.jna.WString; import com.sun.jna.platform.win32.Advapi32Util.Account; import com.sun.jna.platform.win32.Advapi32Util.EventLogIterator; import com.sun.jna.platform.win32.Advapi32Util.EventLogRecord; @@ -127,8 +126,8 @@ public void testGetCurrentUserGroups() { public void testGetUserGroups() { USER_INFO_1 userInfo = new USER_INFO_1(); - userInfo.usri1_name = new WString("JNANetapi32TestUser"); - userInfo.usri1_password = new WString("!JNAP$$Wrd0"); + userInfo.usri1_name = "JNANetapi32TestUser"; + userInfo.usri1_password = "!JNAP$$Wrd0"; userInfo.usri1_priv = LMAccess.USER_PRIV_USER; // ignore test if not able to add user (need to be administrator to do this). if (LMErr.NERR_Success != Netapi32.INSTANCE.NetUserAdd(null, 1, userInfo, null)) { @@ -161,8 +160,8 @@ public void testGetUserGroups() { public void testGetUserAccount() { USER_INFO_1 userInfo = new USER_INFO_1(); - userInfo.usri1_name = new WString("JNANetapi32TestUser"); - userInfo.usri1_password = new WString("!JNAP$$Wrd0"); + userInfo.usri1_name = "JNANetapi32TestUser"; + userInfo.usri1_password = "!JNAP$$Wrd0"; userInfo.usri1_priv = LMAccess.USER_PRIV_USER; // ignore test if not able to add user (need to be administrator to do this). if (LMErr.NERR_Success != Netapi32.INSTANCE.NetUserAdd(null, 1, userInfo, null)) { diff --git a/contrib/platform/test/com/sun/jna/platform/win32/MprTest.java b/contrib/platform/test/com/sun/jna/platform/win32/MprTest.java index 40bb22d45f..c174136911 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/MprTest.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/MprTest.java @@ -17,7 +17,6 @@ import java.io.File; import com.sun.jna.Memory; -import com.sun.jna.WString; import com.sun.jna.platform.win32.LMShare.SHARE_INFO_2; import com.sun.jna.platform.win32.WinNT.HANDLEByReference; import com.sun.jna.platform.win32.Winnetwk.ConnectFlag; @@ -43,14 +42,14 @@ public static void main(String[] args) throws Exception { public void testWNetUseConnection() throws Exception { // First create a share on the local machine File fileShareFolder = createTempFolder(); - WString share = createLocalShare(fileShareFolder); + String share = createLocalShare(fileShareFolder); NETRESOURCE resource = new NETRESOURCE(); resource.dwDisplayType = 0; resource.dwScope = 0; resource.dwType = RESOURCETYPE.RESOURCETYPE_DISK; - resource.lpRemoteName = new WString("\\\\" + getLocalComputerName() + "\\" + share); + resource.lpRemoteName = "\\\\" + getLocalComputerName() + "\\" + share; try { // Cancel any existing connections of the same name @@ -68,14 +67,14 @@ public void testWNetUseConnection() throws Exception { public void testWNetAddConnection3() throws Exception { // First create a share on the local machine File fileShareFolder = createTempFolder(); - WString share = createLocalShare(fileShareFolder); + String share = createLocalShare(fileShareFolder); NETRESOURCE resource = new NETRESOURCE(); resource.dwDisplayType = 0; resource.dwScope = 0; resource.dwType = RESOURCETYPE.RESOURCETYPE_DISK; - resource.lpRemoteName = new WString("\\\\" + getLocalComputerName() + "\\" + share); + resource.lpRemoteName = "\\\\" + getLocalComputerName() + "\\" + share; try { // Cancel any existing connections of the same name @@ -104,7 +103,7 @@ public void testWNetEnumConnection() throws Exception { // Create a local share and connect to it. This ensures the enum will // find at least one entry. File fileShareFolder = createTempFolder(); - WString share = createLocalShare(fileShareFolder); + String share = createLocalShare(fileShareFolder); // Connect to local share connectToLocalShare(share, null); @@ -155,7 +154,7 @@ public void testWNetEnumConnection() throws Exception { } finally { // Clean up resources Mpr.INSTANCE.WNetCloseEnum(lphEnum.getValue()); - disconnectFromLocalShare(new WString("\\\\" + getLocalComputerName() + "\\" + share)); + disconnectFromLocalShare("\\\\" + getLocalComputerName() + "\\" + share); deleteLocalShare(share); fileShareFolder.delete(); } @@ -166,7 +165,7 @@ public void testWNetGetUniversalName() throws Exception { Memory memory = new Memory(bufferSize); IntByReference lpBufferSize = new IntByReference(bufferSize); File file = null; - WString share = null; + String share = null; String driveLetter = new String("x:"); File fileShareFolder = createTempFolder(); @@ -174,7 +173,7 @@ public void testWNetGetUniversalName() throws Exception { // Create a local share and connect to it. share = createLocalShare(fileShareFolder); // Connect to share using a drive letter. - connectToLocalShare(share, new WString(driveLetter)); + connectToLocalShare(share, driveLetter); // Create a path on local device redirected to the share. String filePath = new String(driveLetter + "\\testfile.txt"); @@ -183,14 +182,14 @@ public void testWNetGetUniversalName() throws Exception { // Test WNetGetUniversalName using UNIVERSAL_NAME_INFO_LEVEL assertEquals(WinError.ERROR_SUCCESS, - Mpr.INSTANCE.WNetGetUniversalName(new WString(filePath), Winnetwk.UNIVERSAL_NAME_INFO_LEVEL, memory, lpBufferSize)); + Mpr.INSTANCE.WNetGetUniversalName(filePath, Winnetwk.UNIVERSAL_NAME_INFO_LEVEL, memory, lpBufferSize)); UNIVERSAL_NAME_INFO uinfo = new UNIVERSAL_NAME_INFO(memory); assertNotNull(uinfo.lpUniversalName); // Test WNetGetUniversalName using REMOTE_NAME_INFO_LEVEL assertEquals(WinError.ERROR_SUCCESS, - Mpr.INSTANCE.WNetGetUniversalName(new WString(filePath), Winnetwk.REMOTE_NAME_INFO_LEVEL, memory, lpBufferSize)); + Mpr.INSTANCE.WNetGetUniversalName(filePath, Winnetwk.REMOTE_NAME_INFO_LEVEL, memory, lpBufferSize)); REMOTE_NAME_INFO rinfo = new REMOTE_NAME_INFO(memory); assertNotNull(rinfo.lpUniversalName); @@ -201,7 +200,7 @@ public void testWNetGetUniversalName() throws Exception { if (file != null) file.delete(); if (share != null) { - disconnectFromLocalShare(new WString(driveLetter)); + disconnectFromLocalShare(driveLetter); deleteLocalShare(share); fileShareFolder.delete(); } @@ -242,22 +241,22 @@ private String getLocalComputerName() throws Exception { * * @param shareFolder * the full path local folder to share - * @return WString with the share name, essentially the top level folder + * @return String with the share name, essentially the top level folder * name. * @throws Exception * the exception */ - private WString createLocalShare(File shareFolder) throws Exception { + private String createLocalShare(File shareFolder) throws Exception { SHARE_INFO_2 shi = new SHARE_INFO_2(); - shi.shi2_netname = new WString(shareFolder.getName()); + shi.shi2_netname = shareFolder.getName(); shi.shi2_type = LMShare.STYPE_DISKTREE; - shi.shi2_remark = new WString(""); + shi.shi2_remark = ""; shi.shi2_permissions = LMAccess.ACCESS_ALL; shi.shi2_max_uses = -1; shi.shi2_current_uses = 0; - shi.shi2_path = new WString(shareFolder.getAbsolutePath()); - shi.shi2_passwd = new WString(""); + shi.shi2_path = shareFolder.getAbsolutePath(); + shi.shi2_passwd = ""; // Write from struct to native memory. shi.write(); @@ -268,7 +267,7 @@ private WString createLocalShare(File shareFolder) throws Exception { // computer 2, shi.getPointer(), parm_err)); - return new WString(shareFolder.getName()); + return shareFolder.getName(); } /** @@ -276,7 +275,7 @@ private WString createLocalShare(File shareFolder) throws Exception { * * @param share */ - private void deleteLocalShare(WString share) { + private void deleteLocalShare(String share) { Netapi32.INSTANCE.NetShareDel(null, share, 0); } @@ -292,14 +291,14 @@ private void deleteLocalShare(WString share) { * @throws Exception * the exception */ - private void connectToLocalShare(WString share, WString lpLocalName) throws Exception { + private void connectToLocalShare(String share, String lpLocalName) throws Exception { NETRESOURCE resource = new NETRESOURCE(); resource.dwDisplayType = 0; resource.dwScope = 0; resource.dwType = RESOURCETYPE.RESOURCETYPE_DISK; resource.lpLocalName = lpLocalName; - resource.lpRemoteName = new WString("\\\\" + getLocalComputerName() + "\\" + share); + resource.lpRemoteName = "\\\\" + getLocalComputerName() + "\\" + share; // Establish connection assertEquals(WinError.ERROR_SUCCESS, Mpr.INSTANCE.WNetAddConnection3(null, resource, null, null, 0)); @@ -317,8 +316,8 @@ private void connectToLocalShare(WString share, WString lpLocalName) throws Exce * parameter specifies a remote network resource, all connections * without devices are canceled. */ - private void disconnectFromLocalShare(WString lpName) { + private void disconnectFromLocalShare(String lpName) { // Remove connection Mpr.INSTANCE.WNetCancelConnection2(lpName, ConnectFlag.CONNECT_UPDATE_PROFILE, true); } -} \ No newline at end of file +} diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Netapi32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/Netapi32Test.java index 5ef332b432..0e1c269949 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/Netapi32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Netapi32Test.java @@ -14,7 +14,6 @@ import java.io.File; -import com.sun.jna.WString; import com.sun.jna.platform.win32.DsGetDC.DS_DOMAIN_TRUSTS; import com.sun.jna.platform.win32.DsGetDC.PDOMAIN_CONTROLLER_INFO; import com.sun.jna.platform.win32.LMAccess.GROUP_INFO_2; @@ -150,8 +149,8 @@ public void testNetUserEnum() { public void testNetUserAdd() { USER_INFO_1 userInfo = new USER_INFO_1(); - userInfo.usri1_name = new WString("JNANetapi32TestUser"); - userInfo.usri1_password = new WString("!JNAP$$Wrd0"); + userInfo.usri1_name = "JNANetapi32TestUser"; + userInfo.usri1_password = "!JNAP$$Wrd0"; userInfo.usri1_priv = LMAccess.USER_PRIV_USER; // ignore test if not able to add user (need to be administrator to do this). if (LMErr.NERR_Success != Netapi32.INSTANCE.NetUserAdd(Kernel32Util.getComputerName(), 1, userInfo, null)) { @@ -163,8 +162,8 @@ public void testNetUserAdd() { public void testNetUserChangePassword() { USER_INFO_1 userInfo = new USER_INFO_1(); - userInfo.usri1_name = new WString("JNANetapi32TestUser"); - userInfo.usri1_password = new WString("!JNAP$$Wrd0"); + userInfo.usri1_name = "JNANetapi32TestUser"; + userInfo.usri1_password = "!JNAP$$Wrd0"; userInfo.usri1_priv = LMAccess.USER_PRIV_USER; // ignore test if not able to add user (need to be administrator to do this). if (LMErr.NERR_Success != Netapi32.INSTANCE.NetUserAdd(Kernel32Util.getComputerName(), 1, userInfo, null)) { @@ -266,14 +265,14 @@ public void testNetShareAddShareInfo2() throws Exception { File fileShareFolder = createTempFolder(); SHARE_INFO_2 shi = new SHARE_INFO_2(); - shi.shi2_netname = new WString(fileShareFolder.getName()); + shi.shi2_netname = fileShareFolder.getName(); shi.shi2_type = LMShare.STYPE_DISKTREE; - shi.shi2_remark = new WString(""); + shi.shi2_remark = ""; shi.shi2_permissions = LMAccess.ACCESS_ALL; shi.shi2_max_uses = -1; shi.shi2_current_uses = 0; - shi.shi2_path = new WString(fileShareFolder.getAbsolutePath()); - shi.shi2_passwd = new WString(""); + shi.shi2_path = fileShareFolder.getAbsolutePath(); + shi.shi2_passwd = ""; // Write from struct to native memory. shi.write(); @@ -297,13 +296,13 @@ public void testNetShareAddShareInfo502() throws Exception { File fileShareFolder = createTempFolder(); SHARE_INFO_502 shi = new SHARE_INFO_502(); - shi.shi502_netname = new WString(fileShareFolder.getName()); + shi.shi502_netname = fileShareFolder.getName(); shi.shi502_type = LMShare.STYPE_DISKTREE; - shi.shi502_remark = new WString(""); + shi.shi502_remark = ""; shi.shi502_permissions = LMAccess.ACCESS_ALL; shi.shi502_max_uses = -1; shi.shi502_current_uses = 0; - shi.shi502_path = new WString(fileShareFolder.getAbsolutePath()); + shi.shi502_path = fileShareFolder.getAbsolutePath(); shi.shi502_passwd = null; shi.shi502_reserved = 0; shi.shi502_security_descriptor = null; @@ -330,14 +329,14 @@ public void testNetShareDel() throws Exception { File fileShareFolder = createTempFolder(); SHARE_INFO_2 shi = new SHARE_INFO_2(); - shi.shi2_netname = new WString(fileShareFolder.getName()); + shi.shi2_netname = fileShareFolder.getName(); shi.shi2_type = LMShare.STYPE_DISKTREE; - shi.shi2_remark = new WString(""); + shi.shi2_remark = ""; shi.shi2_permissions = LMAccess.ACCESS_ALL; shi.shi2_max_uses = -1; shi.shi2_current_uses = 0; - shi.shi2_path = new WString(fileShareFolder.getAbsolutePath()); - shi.shi2_passwd = new WString(""); + shi.shi2_path = fileShareFolder.getAbsolutePath(); + shi.shi2_passwd = ""; // Write from struct to native memory. shi.write(); From 535518713bc51e6eacefeaeaccc7033ade905a9a Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Sun, 22 Nov 2015 14:36:24 -0500 Subject: [PATCH 09/29] fix mappings to properly work on 32-bit windows (fixes memory faults) --- .../src/com/sun/jna/platform/WindowUtils.java | 412 +++++++++--------- .../com/sun/jna/platform/win32/User32.java | 4 +- .../jna/platform/win32/Win32Exception.java | 6 +- .../jna/platform/win32/WindowUtilsTest.java | 36 +- 4 files changed, 241 insertions(+), 217 deletions(-) diff --git a/contrib/platform/src/com/sun/jna/platform/WindowUtils.java b/contrib/platform/src/com/sun/jna/platform/WindowUtils.java index fc8894dc9f..798de335c6 100644 --- a/contrib/platform/src/com/sun/jna/platform/WindowUtils.java +++ b/contrib/platform/src/com/sun/jna/platform/WindowUtils.java @@ -83,8 +83,11 @@ import com.sun.jna.platform.win32.WinDef.HICON; import com.sun.jna.platform.win32.WinDef.HRGN; import com.sun.jna.platform.win32.WinDef.HWND; +import com.sun.jna.platform.win32.WinDef.LPARAM; +import com.sun.jna.platform.win32.WinDef.LRESULT; import com.sun.jna.platform.win32.WinDef.POINT; import com.sun.jna.platform.win32.WinDef.RECT; +import com.sun.jna.platform.win32.WinDef.WPARAM; import com.sun.jna.platform.win32.WinGDI; import com.sun.jna.platform.win32.WinGDI.BITMAP; import com.sun.jna.platform.win32.WinGDI.BITMAPINFO; @@ -1050,205 +1053,215 @@ public boolean outputRange(int x, int y, int w, int h) { setWindowRegion(w, region); } - @Override - public BufferedImage getWindowIcon(final HWND hwnd) { - // request different kind of icons if any solution fails - final DWORDByReference hIconNumber = new DWORDByReference(); - long result = User32.INSTANCE.SendMessageTimeout(hwnd, - WinUser.WM_GETICON, WinUser.ICON_BIG, 0, - WinUser.SMTO_ABORTIFHUNG, 500, hIconNumber); - if (result == 0) - result = User32.INSTANCE.SendMessageTimeout(hwnd, - WinUser.WM_GETICON, WinUser.ICON_SMALL, 0, - WinUser.SMTO_ABORTIFHUNG, 500, hIconNumber); - if (result == 0) - result = User32.INSTANCE.SendMessageTimeout(hwnd, - WinUser.WM_GETICON, WinUser.ICON_SMALL2, 0, - WinUser.SMTO_ABORTIFHUNG, 500, hIconNumber); - if (result == 0) { - result = User32.INSTANCE.GetClassLongPtr(hwnd, - WinUser.GCLP_HICON); - hIconNumber.getValue().setValue(result); - } - if (result == 0) { - result = User32.INSTANCE.GetClassLongPtr(hwnd, - WinUser.GCLP_HICONSM); - hIconNumber.getValue().setValue(result); - } - if (result == 0) - return null; - - // draw native icon into Java image - final HICON hIcon = new HICON(new Pointer(hIconNumber.getValue() - .longValue())); - final Dimension iconSize = getIconSize(hIcon); - if (iconSize.width == 0 || iconSize.height == 0) - return null; - - final int width = iconSize.width; - final int height = iconSize.height; - final short depth = 24; - - final byte[] lpBitsColor = new byte[width * height * depth / 8]; - final Pointer lpBitsColorPtr = new Memory(lpBitsColor.length); - final byte[] lpBitsMask = new byte[width * height * depth / 8]; - final Pointer lpBitsMaskPtr = new Memory(lpBitsMask.length); - final BITMAPINFO bitmapInfo = new BITMAPINFO(); - final BITMAPINFOHEADER hdr = new BITMAPINFOHEADER(); - - bitmapInfo.bmiHeader = hdr; - hdr.biWidth = width; - hdr.biHeight = height; - hdr.biPlanes = 1; - hdr.biBitCount = depth; - hdr.biCompression = 0; - hdr.write(); - bitmapInfo.write(); - - final HDC hDC = User32.INSTANCE.GetDC(null); - final ICONINFO iconInfo = new ICONINFO(); - User32.INSTANCE.GetIconInfo(hIcon, iconInfo); - iconInfo.read(); - GDI32.INSTANCE.GetDIBits(hDC, iconInfo.hbmColor, 0, height, - lpBitsColorPtr, bitmapInfo, 0); - lpBitsColorPtr.read(0, lpBitsColor, 0, lpBitsColor.length); - GDI32.INSTANCE.GetDIBits(hDC, iconInfo.hbmMask, 0, height, - lpBitsMaskPtr, bitmapInfo, 0); - lpBitsMaskPtr.read(0, lpBitsMask, 0, lpBitsMask.length); - final BufferedImage image = new BufferedImage(width, height, - BufferedImage.TYPE_INT_ARGB); - - int r, g, b, a, argb; - int x = 0, y = height - 1; - for (int i = 0; i < lpBitsColor.length; i = i + 3) { - b = lpBitsColor[i] & 0xFF; - g = lpBitsColor[i + 1] & 0xFF; - r = lpBitsColor[i + 2] & 0xFF; - a = 0xFF - lpBitsMask[i] & 0xFF; - argb = (a << 24) | (r << 16) | (g << 8) | b; - image.setRGB(x, y, argb); - x = (x + 1) % width; - if (x == 0) - y--; - } - - User32.INSTANCE.ReleaseDC(null, hDC); - - return image; - } - - @Override - public Dimension getIconSize(final HICON hIcon) { - final ICONINFO iconInfo = new ICONINFO(); - try { - if (!User32.INSTANCE.GetIconInfo(hIcon, iconInfo)) - return new Dimension(); - iconInfo.read(); - - final BITMAP bmp = new BITMAP(); - if (iconInfo.hbmColor != null - && iconInfo.hbmColor.getPointer() != Pointer.NULL) { - final int nWrittenBytes = GDI32.INSTANCE.GetObject( - iconInfo.hbmColor, bmp.size(), bmp.getPointer()); - bmp.read(); - if (nWrittenBytes > 0) - return new Dimension(bmp.bmWidth.intValue(), - bmp.bmHeight.intValue()); - } else if (iconInfo.hbmMask != null - && iconInfo.hbmMask.getPointer() != Pointer.NULL) { - final int nWrittenBytes = GDI32.INSTANCE.GetObject( - iconInfo.hbmMask, bmp.size(), bmp.getPointer()); - bmp.read(); - if (nWrittenBytes > 0) - return new Dimension(bmp.bmWidth.intValue(), bmp.bmHeight.intValue() / 2); - } - } finally { - if (iconInfo.hbmColor != null - && iconInfo.hbmColor.getPointer() != Pointer.NULL) - GDI32.INSTANCE.DeleteObject(iconInfo.hbmColor); - if (iconInfo.hbmMask != null - && iconInfo.hbmMask.getPointer() != Pointer.NULL) - GDI32.INSTANCE.DeleteObject(iconInfo.hbmMask); - } - - return new Dimension(); - } - - @Override - public List getAllWindows( - final boolean onlyVisibleWindows) { - final List result = new LinkedList(); - - final WNDENUMPROC lpEnumFunc = new WNDENUMPROC() { - @Override - public boolean callback(final HWND hwnd, final Pointer arg1) { - try { - final boolean visible = !onlyVisibleWindows - || User32.INSTANCE.IsWindowVisible(hwnd); - if (visible) { - final String title = getWindowTitle(hwnd); - final String filePath = getProcessFilePath(hwnd); - final Rectangle locAndSize = getWindowLocationAndSize(hwnd); - result.add(new DesktopWindow(hwnd, title, filePath, - locAndSize)); - } - } catch (final Exception e) { - e.printStackTrace(); - } - - return true; - } - }; - - if (!User32.INSTANCE.EnumWindows(lpEnumFunc, null)) - throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); - - return result; - } - - @Override - public String getWindowTitle(final HWND hwnd) { - final int requiredLength = User32.INSTANCE - .GetWindowTextLength(hwnd) + 1; - final char[] title = new char[requiredLength]; - final int length = User32.INSTANCE.GetWindowText(hwnd, title, - title.length); - - return Native.toString(Arrays.copyOfRange(title, 0, length)); - } - - @Override - public String getProcessFilePath(final HWND hwnd) { - final char[] filePath = new char[1025]; - final IntByReference pid = new IntByReference(); - User32.INSTANCE.GetWindowThreadProcessId(hwnd, pid); - - final HANDLE process = Kernel32.INSTANCE.OpenProcess( - WinNT.PROCESS_QUERY_INFORMATION | WinNT.PROCESS_VM_READ, - false, pid.getValue()); - if (process == null - && Kernel32.INSTANCE.GetLastError() != WinNT.ERROR_ACCESS_DENIED) - throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); - - final int length = Psapi.INSTANCE.GetModuleFileNameExW(process, - null, filePath, filePath.length); - if (length == 0 - && Kernel32.INSTANCE.GetLastError() != WinNT.ERROR_INVALID_HANDLE) - throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); - - return Native.toString(filePath).trim(); - } - - @Override - public Rectangle getWindowLocationAndSize(final HWND hwnd) { - final RECT lpRect = new RECT(); - if (!User32.INSTANCE.GetWindowRect(hwnd, lpRect)) - throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); - - return new Rectangle(lpRect.left, lpRect.top, Math.abs(lpRect.right - - lpRect.left), Math.abs(lpRect.bottom - lpRect.top)); - } - } + @Override + public BufferedImage getWindowIcon(final HWND hwnd) { + // request different kind of icons if any solution fails + final DWORDByReference hIconNumber = new DWORDByReference(); + LRESULT result = User32.INSTANCE + .SendMessageTimeout(hwnd, + WinUser.WM_GETICON, + new WPARAM(WinUser.ICON_BIG), + new LPARAM(0), + WinUser.SMTO_ABORTIFHUNG, 500, hIconNumber); + if (result.intValue() == 0) + result = User32.INSTANCE + .SendMessageTimeout(hwnd, + WinUser.WM_GETICON, + new WPARAM(WinUser.ICON_SMALL), + new LPARAM(0), + WinUser.SMTO_ABORTIFHUNG, 500, hIconNumber); + if (result.intValue() == 0) + result = User32.INSTANCE + .SendMessageTimeout(hwnd, + WinUser.WM_GETICON, + new WPARAM(WinUser.ICON_SMALL2), + new LPARAM(0), + WinUser.SMTO_ABORTIFHUNG, 500, hIconNumber); + if (result.intValue() == 0) { + result = new LRESULT(User32.INSTANCE + .GetClassLongPtr(hwnd, + WinUser.GCLP_HICON).intValue()); + hIconNumber.getValue().setValue(result.intValue()); + } + if (result.intValue() == 0) { + result = new LRESULT(User32.INSTANCE + .GetClassLongPtr(hwnd, + WinUser.GCLP_HICONSM).intValue()); + hIconNumber.getValue().setValue(result.intValue()); + } + if (result.intValue() == 0) + return null; + + // draw native icon into Java image + final HICON hIcon = new HICON(new Pointer(hIconNumber.getValue() + .longValue())); + final Dimension iconSize = getIconSize(hIcon); + if (iconSize.width == 0 || iconSize.height == 0) + return null; + + final int width = iconSize.width; + final int height = iconSize.height; + final short depth = 24; + + final byte[] lpBitsColor = new byte[width * height * depth / 8]; + final Pointer lpBitsColorPtr = new Memory(lpBitsColor.length); + final byte[] lpBitsMask = new byte[width * height * depth / 8]; + final Pointer lpBitsMaskPtr = new Memory(lpBitsMask.length); + final BITMAPINFO bitmapInfo = new BITMAPINFO(); + final BITMAPINFOHEADER hdr = new BITMAPINFOHEADER(); + + bitmapInfo.bmiHeader = hdr; + hdr.biWidth = width; + hdr.biHeight = height; + hdr.biPlanes = 1; + hdr.biBitCount = depth; + hdr.biCompression = 0; + hdr.write(); + bitmapInfo.write(); + + final HDC hDC = User32.INSTANCE.GetDC(null); + final ICONINFO iconInfo = new ICONINFO(); + User32.INSTANCE.GetIconInfo(hIcon, iconInfo); + iconInfo.read(); + GDI32.INSTANCE.GetDIBits(hDC, iconInfo.hbmColor, 0, height, + lpBitsColorPtr, bitmapInfo, 0); + lpBitsColorPtr.read(0, lpBitsColor, 0, lpBitsColor.length); + GDI32.INSTANCE.GetDIBits(hDC, iconInfo.hbmMask, 0, height, + lpBitsMaskPtr, bitmapInfo, 0); + lpBitsMaskPtr.read(0, lpBitsMask, 0, lpBitsMask.length); + final BufferedImage image = new BufferedImage(width, height, + BufferedImage.TYPE_INT_ARGB); + + int r, g, b, a, argb; + int x = 0, y = height - 1; + for (int i = 0; i < lpBitsColor.length; i = i + 3) { + b = lpBitsColor[i] & 0xFF; + g = lpBitsColor[i + 1] & 0xFF; + r = lpBitsColor[i + 2] & 0xFF; + a = 0xFF - lpBitsMask[i] & 0xFF; + argb = (a << 24) | (r << 16) | (g << 8) | b; + image.setRGB(x, y, argb); + x = (x + 1) % width; + if (x == 0) + y--; + } + + User32.INSTANCE.ReleaseDC(null, hDC); + + return image; + } + + @Override + public Dimension getIconSize(final HICON hIcon) { + final ICONINFO iconInfo = new ICONINFO(); + try { + if (!User32.INSTANCE.GetIconInfo(hIcon, iconInfo)) + return new Dimension(); + iconInfo.read(); + + final BITMAP bmp = new BITMAP(); + if (iconInfo.hbmColor != null + && iconInfo.hbmColor.getPointer() != Pointer.NULL) { + final int nWrittenBytes = GDI32.INSTANCE.GetObject( + iconInfo.hbmColor, bmp.size(), bmp.getPointer()); + bmp.read(); + if (nWrittenBytes > 0) + return new Dimension(bmp.bmWidth.intValue(), + bmp.bmHeight.intValue()); + } else if (iconInfo.hbmMask != null + && iconInfo.hbmMask.getPointer() != Pointer.NULL) { + final int nWrittenBytes = GDI32.INSTANCE.GetObject( + iconInfo.hbmMask, bmp.size(), bmp.getPointer()); + bmp.read(); + if (nWrittenBytes > 0) + return new Dimension(bmp.bmWidth.intValue(), bmp.bmHeight.intValue() / 2); + } + } finally { + if (iconInfo.hbmColor != null + && iconInfo.hbmColor.getPointer() != Pointer.NULL) + GDI32.INSTANCE.DeleteObject(iconInfo.hbmColor); + if (iconInfo.hbmMask != null + && iconInfo.hbmMask.getPointer() != Pointer.NULL) + GDI32.INSTANCE.DeleteObject(iconInfo.hbmMask); + } + + return new Dimension(); + } + + @Override + public List getAllWindows(final boolean onlyVisibleWindows) { + final List result = new LinkedList(); + + final WNDENUMPROC lpEnumFunc = new WNDENUMPROC() { + @Override + public boolean callback(final HWND hwnd, final Pointer arg1) { + try { + final boolean visible = !onlyVisibleWindows + || User32.INSTANCE.IsWindowVisible(hwnd); + if (visible) { + final String title = getWindowTitle(hwnd); + final String filePath = getProcessFilePath(hwnd); + final Rectangle locAndSize = getWindowLocationAndSize(hwnd); + result.add(new DesktopWindow(hwnd, title, filePath, + locAndSize)); + } + } catch (final Exception e) { + // FIXME properly handle whatever error is raised + e.printStackTrace(); + } + + return true; + } + }; + + if (!User32.INSTANCE.EnumWindows(lpEnumFunc, null)) + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + + return result; + } + + @Override + public String getWindowTitle(final HWND hwnd) { + final int requiredLength = User32.INSTANCE + .GetWindowTextLength(hwnd) + 1; + final char[] title = new char[requiredLength]; + final int length = User32.INSTANCE.GetWindowText(hwnd, title, + title.length); + + return Native.toString(Arrays.copyOfRange(title, 0, length)); + } + + @Override + public String getProcessFilePath(final HWND hwnd) { + final char[] filePath = new char[2048]; + final IntByReference pid = new IntByReference(); + User32.INSTANCE.GetWindowThreadProcessId(hwnd, pid); + + final HANDLE process = Kernel32.INSTANCE.OpenProcess(WinNT.PROCESS_QUERY_INFORMATION | WinNT.PROCESS_VM_READ, + false, pid.getValue()); + if (process == null + && Kernel32.INSTANCE.GetLastError() != WinNT.ERROR_ACCESS_DENIED) { + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + } + final int length = Psapi.INSTANCE.GetModuleFileNameExW(process, + null, filePath, filePath.length); + if (length == 0 + && Kernel32.INSTANCE.GetLastError() != WinNT.ERROR_INVALID_HANDLE) { + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + } + return Native.toString(filePath).trim(); + } + + @Override + public Rectangle getWindowLocationAndSize(final HWND hwnd) { + final RECT lpRect = new RECT(); + if (!User32.INSTANCE.GetWindowRect(hwnd, lpRect)) + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + + return new Rectangle(lpRect.left, lpRect.top, Math.abs(lpRect.right + - lpRect.left), Math.abs(lpRect.bottom - lpRect.top)); + } + } private static class MacWindowUtils extends NativeWindowUtils { public boolean isWindowAlphaSupported() { @@ -1497,6 +1510,7 @@ private static long getVisualID(GraphicsConfiguration config) { return ((Number)o).longValue(); } catch (Exception e) { + // FIXME properly handle this error e.printStackTrace(); return -1; } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/User32.java b/contrib/platform/src/com/sun/jna/platform/win32/User32.java index d92c49a5a1..a1bec435de 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/User32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/User32.java @@ -1980,7 +1980,7 @@ HDEVNOTIFY RegisterDeviceNotification(HANDLE hRecipient, * Windows 2000: If {@link Kernel32#GetLastError()} returns 0, then * the function timed out. */ - long SendMessageTimeout(HWND hWnd, int msg, long wParam, long lParam, + LRESULT SendMessageTimeout(HWND hWnd, int msg, WPARAM wParam, LPARAM lParam, int fuFlags, int uTimeout, DWORDByReference lpdwResult); /** @@ -2006,7 +2006,7 @@ long SendMessageTimeout(HWND hWnd, int msg, long wParam, long lParam, * If the function fails, the return value is zero. To get extended * error information, call {@link Kernel32#GetLastError()}.

    */ - long GetClassLongPtr(HWND hWnd, int nIndex); + ULONG_PTR GetClassLongPtr(HWND hWnd, int nIndex); /** * @param pRawInputDeviceList diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Win32Exception.java b/contrib/platform/src/com/sun/jna/platform/win32/Win32Exception.java index 5886f3f5a2..e87e44dfd0 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Win32Exception.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Win32Exception.java @@ -20,9 +20,9 @@ */ public class Win32Exception extends RuntimeException { - private static final long serialVersionUID = 1L; - - private HRESULT _hr; + private static final long serialVersionUID = 1L; + + private HRESULT _hr; /** * Returns the error code of the error. diff --git a/contrib/platform/test/com/sun/jna/platform/win32/WindowUtilsTest.java b/contrib/platform/test/com/sun/jna/platform/win32/WindowUtilsTest.java index a82c81d425..98c1867afd 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/WindowUtilsTest.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/WindowUtilsTest.java @@ -26,6 +26,9 @@ import com.sun.jna.platform.win32.WinDef.DWORDByReference; import com.sun.jna.platform.win32.WinDef.HICON; import com.sun.jna.platform.win32.WinDef.HWND; +import com.sun.jna.platform.win32.WinDef.LPARAM; +import com.sun.jna.platform.win32.WinDef.LRESULT; +import com.sun.jna.platform.win32.WinDef.WPARAM; import com.sun.jna.platform.win32.WinUser; public class WindowUtilsTest extends TestCase { @@ -36,9 +39,10 @@ public void testGetAllWindows() { final List allVisibleWindows = WindowUtils .getAllWindows(true); - assertTrue(allWindows.size() > 0); - assertTrue(allVisibleWindows.size() > 0); - assertTrue(allWindows.size() > allVisibleWindows.size()); + assertTrue("Found no windows", allWindows.size() > 0); + assertTrue("Found no visible windows", allVisibleWindows.size() > 0); + assertTrue("Expected more non-visible windows than visible windows", + allWindows.size() > allVisibleWindows.size()); DesktopWindow explorerProc = null; for (final DesktopWindow dw : allWindows) { @@ -48,7 +52,8 @@ public void testGetAllWindows() { } } - assertNotNull(explorerProc); + assertNotNull("explorer.exe was not found among all windows", + explorerProc); explorerProc = null; for (final DesktopWindow dw : allVisibleWindows) { @@ -58,7 +63,8 @@ public void testGetAllWindows() { } } - assertNotNull(explorerProc); + assertNotNull("explorer.exe was not found among visible windows", + explorerProc); } public void testGetWindowIcon() throws Exception { @@ -70,8 +76,9 @@ public void testGetWindowIcon() throws Exception { "/res/test_icon.png").getPath()))); w.setIconImage(expectedIcon); w.setVisible(true); - HWND hwnd = new HWND(); - hwnd.setPointer(Native.getComponentPointer(w)); + Pointer p = Native.getComponentPointer(w); + assertNotNull("Couldn't obtain window HANDLE from JFrame", p); + HWND hwnd = new HWND(p); final BufferedImage obtainedIcon = WindowUtils.getWindowIcon(hwnd); @@ -149,15 +156,18 @@ public void testGetIconSize() throws Exception { .read(new FileInputStream(new File(getClass().getResource("/res/test_icon.png").getPath()))); w.setIconImage(expectedIcon); w.setVisible(true); - HWND hwnd = new HWND(); - hwnd.setPointer(Native.getComponentPointer(w)); + Pointer p = Native.getComponentPointer(w); + assertNotNull("Could not obtain native HANDLE for JFrame", p); + HWND hwnd = new HWND(p); final DWORDByReference hIconNumber = new DWORDByReference(); - long result = User32.INSTANCE.SendMessageTimeout(hwnd, - WinUser.WM_GETICON, WinUser.ICON_BIG, 0, - WinUser.SMTO_ABORTIFHUNG, 500, hIconNumber); + LRESULT result = User32.INSTANCE + .SendMessageTimeout(hwnd, WinUser.WM_GETICON, + new WPARAM(WinUser.ICON_BIG), + new LPARAM(0), + WinUser.SMTO_ABORTIFHUNG, 500, hIconNumber); - assertNotEquals(0, result); + assertNotEquals(0, result.intValue()); final HICON hIcon = new HICON(new Pointer(hIconNumber.getValue() .longValue())); From 7771d8af9a3e590ee4f874f31fccba0005008e6d Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Sun, 22 Nov 2015 14:44:07 -0500 Subject: [PATCH 10/29] Ensure COM tests are run as part of w32 platform tests --- build.xml | 2 +- contrib/platform/build.xml | 6 +++--- .../platform/win32/COM/ShellApplicationWindowsTest.java | 8 ++++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/build.xml b/build.xml index 9e7d75086c..7a42361062 100644 --- a/build.xml +++ b/build.xml @@ -975,7 +975,7 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc - + diff --git a/contrib/platform/build.xml b/contrib/platform/build.xml index 26000e2c65..5aa5ece8ba 100644 --- a/contrib/platform/build.xml +++ b/contrib/platform/build.xml @@ -111,13 +111,13 @@ com.sun.jna.platform.wince Saving test results in ${build.test.results.dir.abs} - + - + - + diff --git a/contrib/platform/test/com/sun/jna/platform/win32/COM/ShellApplicationWindowsTest.java b/contrib/platform/test/com/sun/jna/platform/win32/COM/ShellApplicationWindowsTest.java index 1d0bd8687f..9aa53769e8 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/COM/ShellApplicationWindowsTest.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/COM/ShellApplicationWindowsTest.java @@ -29,7 +29,8 @@ public void testWindowsCount() // IE is open, so there should be at least one present. // More may exist if Windows Explorer windows are open. - assertTrue(sa.Windows().Count() > 0); + assertTrue("No shell application windows found", + sa.Windows().Count() > 0); boolean pageFound = false; for (InternetExplorer ie : sa.Windows()) @@ -43,7 +44,7 @@ public void testWindowsCount() } // Finally, did we find our page in the collection? - assertTrue(pageFound); + assertTrue("No IE page was found", pageFound); } @Override @@ -183,4 +184,7 @@ public String getURL() } } + public static void main(String[] args) { + junit.textui.TestRunner.run(ShellApplicationWindowsTest.class); + } } From 800377593e327b0966fc356b7493c83b12772e06 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Sun, 22 Nov 2015 14:57:54 -0500 Subject: [PATCH 11/29] use proper type sizes --- .../jna/platform/win32/COM/TypeLibUtil.java | 2 +- .../sun/jna/platform/win32/User32Test.java | 22 +++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/COM/TypeLibUtil.java b/contrib/platform/src/com/sun/jna/platform/win32/COM/TypeLibUtil.java index 4c3011411b..92c1adf960 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/COM/TypeLibUtil.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/COM/TypeLibUtil.java @@ -520,7 +520,7 @@ public String getDocString() { * * @return the help context */ - public long getHelpContext() { + public int getHelpContext() { return helpContext; } diff --git a/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java index 6e2e43f7bf..e6b24afa0f 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java @@ -35,6 +35,8 @@ import com.sun.jna.platform.win32.WinDef.HICON; import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.win32.WinDef.LPARAM; +import com.sun.jna.platform.win32.WinDef.LRESULT; +import com.sun.jna.platform.win32.WinDef.WPARAM; import com.sun.jna.platform.win32.WinDef.POINT; import com.sun.jna.platform.win32.WinDef.RECT; import com.sun.jna.platform.win32.WinDef.UINT; @@ -45,6 +47,7 @@ import com.sun.jna.platform.win32.WinUser.MONITORENUMPROC; import com.sun.jna.platform.win32.WinUser.MONITORINFO; import com.sun.jna.platform.win32.WinUser.MONITORINFOEX; +import com.sun.jna.platform.win32.BaseTSD.ULONG_PTR; /** * @author dblock[at]dblock[dot]org @@ -281,9 +284,12 @@ public void testSendMessageTimeout() { assertNotNull(explorerProc); final DWORDByReference hIconNumber = new DWORDByReference(); - long result = User32.INSTANCE.SendMessageTimeout( - explorerProc.getHWND(), WinUser.WM_GETICON, WinUser.ICON_BIG, - 0, WinUser.SMTO_ABORTIFHUNG, 500, hIconNumber); + LRESULT result = User32.INSTANCE + .SendMessageTimeout(explorerProc.getHWND(), + WinUser.WM_GETICON, + new WPARAM(WinUser.ICON_BIG), + new LPARAM(0), + WinUser.SMTO_ABORTIFHUNG, 500, hIconNumber); assertNotEquals(0, result); } @@ -292,12 +298,14 @@ public void testSendMessageTimeout() { public void testGetClassLongPtr() { DesktopWindow explorerProc = getWindowByProcessPath("explorer.exe"); - assertNotNull(explorerProc); + assertNotNull("Could not find explorer.exe process", + explorerProc); - long result = User32.INSTANCE.GetClassLongPtr(explorerProc.getHWND(), - WinUser.GCLP_HMODULE); + ULONG_PTR result = User32.INSTANCE + .GetClassLongPtr(explorerProc.getHWND(), + WinUser.GCLP_HMODULE); - assertNotEquals(0, result); + assertNotEquals(0, result.intValue()); } @Test From 74de7e67ab99318cb67d3c99bc5ac5dab9b45b06 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Mon, 23 Nov 2015 00:08:01 -0500 Subject: [PATCH 12/29] Avoid overwriting test results from different platforms --- contrib/platform/build.xml | 17 +- .../sun/jna/platform/win32/Shell32Test.java | 189 +++++++++--------- 2 files changed, 104 insertions(+), 102 deletions(-) diff --git a/contrib/platform/build.xml b/contrib/platform/build.xml index 5aa5ece8ba..65fd1c1586 100644 --- a/contrib/platform/build.xml +++ b/contrib/platform/build.xml @@ -108,9 +108,10 @@ com.sun.jna.platform.wince Running platform tests: ${test.src.dir} - - - Saving test results in ${build.test.results.dir.abs} + + + + Saving test results in ${results.junit} @@ -151,7 +152,7 @@ com.sun.jna.platform.wince - + @@ -161,13 +162,13 @@ com.sun.jna.platform.wince - - + + - + - + One or more tests failed diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Shell32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/Shell32Test.java index 7ba2413428..609166ee59 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/Shell32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Shell32Test.java @@ -36,7 +36,8 @@ */ public class Shell32Test extends TestCase { - private static final int RESIZE_HEIGHT = 500; + // avoid disrupting the screen _too_ much + private static final int RESIZE_DELTA = 10; private static final int WM_USER = 0x0400; public static void main(String[] args) { @@ -46,8 +47,8 @@ public static void main(String[] args) { public void testSHGetFolderPath() { char[] pszPath = new char[WinDef.MAX_PATH]; assertEquals(W32Errors.S_OK, Shell32.INSTANCE.SHGetFolderPath(null, - ShlObj.CSIDL_PROGRAM_FILES, null, ShlObj.SHGFP_TYPE_CURRENT, - pszPath)); + ShlObj.CSIDL_PROGRAM_FILES, null, ShlObj.SHGFP_TYPE_CURRENT, + pszPath)); assertTrue(Native.toString(pszPath).length() > 0); } @@ -98,7 +99,7 @@ public void testResizeDesktopFromBottom() throws InterruptedException { APPBARDATA data = new APPBARDATA.ByReference(); data.uEdge.setValue(ShellAPI.ABE_BOTTOM); - data.rc.top = User32.INSTANCE.GetSystemMetrics(User32.SM_CYFULLSCREEN) - RESIZE_HEIGHT; + data.rc.top = User32.INSTANCE.GetSystemMetrics(User32.SM_CYFULLSCREEN) - RESIZE_DELTA; data.rc.left = 0; data.rc.bottom = User32.INSTANCE.GetSystemMetrics(User32.SM_CYFULLSCREEN); data.rc.right = User32.INSTANCE.GetSystemMetrics(User32.SM_CXFULLSCREEN); @@ -121,7 +122,7 @@ public void testResizeDesktopFromTop() throws InterruptedException { data.uEdge.setValue(ShellAPI.ABE_TOP); data.rc.top = 0; data.rc.left = 0; - data.rc.bottom = RESIZE_HEIGHT; + data.rc.bottom = User32.INSTANCE.GetSystemMetrics(User32.SM_CXFULLSCREEN) - RESIZE_DELTA; data.rc.right = User32.INSTANCE.GetSystemMetrics(User32.SM_CXFULLSCREEN); queryPos(data); @@ -135,93 +136,93 @@ public void testResizeDesktopFromTop() throws InterruptedException { } - public void testSHGetKnownFolderPath() { - int flags = ShlObj.KNOWN_FOLDER_FLAG.NONE.getFlag(); - PointerByReference outPath = new PointerByReference(); - HANDLE token = null; - GUID guid = KnownFolders.FOLDERID_Fonts; - HRESULT hr = Shell32.INSTANCE.SHGetKnownFolderPath(guid, flags, token, outPath); - - Ole32.INSTANCE.CoTaskMemFree(outPath.getValue()); - - assertTrue(W32Errors.SUCCEEDED(hr.intValue())); - } - - public void testSHEmptyRecycleBin() { - File file = new File(System.getProperty("java.io.tmpdir"), System.nanoTime() + ".txt"); - try { - // Create a file and immediately send it to the recycle bin. - try { - fillTempFile(file); - W32FileUtils.getInstance().moveToTrash(new File[] { file }); - } catch (IOException e) { - throw new RuntimeException(e); - } - - int result = Shell32.INSTANCE.SHEmptyRecycleBin(null, null, - Shell32.SHERB_NOCONFIRMATION | Shell32.SHERB_NOPROGRESSUI | Shell32.SHERB_NOSOUND); - // for reasons I can not find documented on MSDN, - // the function returns the following: - // 0 when the recycle bin has items in it - // -2147418113 when the recycle bin has no items in it - assertEquals("Result should have been ERROR_SUCCESS when emptying Recycle Bin - there should have been a file in it.", - W32Errors.ERROR_SUCCESS, result); - } finally { - // if the file wasn't sent to the recycle bin, delete it. - if (file.exists()) { - file.delete(); - } - } - } - - public void testShellExecuteEx() { - File file = new File(System.getProperty("java.io.tmpdir"), System.nanoTime() + ".txt"); - try { - try { - fillTempFile(file); - } catch (IOException e) { - throw new RuntimeException(e); - } - - SHELLEXECUTEINFO lpExecInfo = new SHELLEXECUTEINFO(); - // to avoid opening something and having hProcess come up null - // (meaning we opened something but can't close it) - // we will do a negative test with a bogus action. - lpExecInfo.lpVerb = "0p3n"; - lpExecInfo.nShow = User32.SW_SHOWDEFAULT; - lpExecInfo.fMask = Shell32.SEE_MASK_NOCLOSEPROCESS | Shell32.SEE_MASK_FLAG_NO_UI; - lpExecInfo.lpFile = file.getAbsolutePath(); - - assertFalse("ShellExecuteEx should have returned false - action verb was bogus.", - Shell32.INSTANCE.ShellExecuteEx(lpExecInfo)); - assertEquals("GetLastError() should have been set to ERROR_NO_ASSOCIATION because of bogus action", - W32Errors.ERROR_NO_ASSOCIATION, Native.getLastError()); - } finally { - if (file.exists()) { - file.delete(); - } - } - - } - - /** - * Creates (if needed) and fills the specified file with some content (10 lines of the same text) - * - * @param file - * The file to fill with content - * @throws IOException - * If writing the content fails - */ - private void fillTempFile(File file) throws IOException { - file.createNewFile(); - FileWriter fileWriter = new FileWriter(file); - try { - for (int i = 0; i < 10; i++) { - fileWriter.write("Sample line of text"); - fileWriter.write(System.getProperty("line.separator")); - } - } finally { - fileWriter.close(); - } - } + public void testSHGetKnownFolderPath() { + int flags = ShlObj.KNOWN_FOLDER_FLAG.NONE.getFlag(); + PointerByReference outPath = new PointerByReference(); + HANDLE token = null; + GUID guid = KnownFolders.FOLDERID_Fonts; + HRESULT hr = Shell32.INSTANCE.SHGetKnownFolderPath(guid, flags, token, outPath); + + Ole32.INSTANCE.CoTaskMemFree(outPath.getValue()); + + assertTrue(W32Errors.SUCCEEDED(hr.intValue())); + } + + public void testSHEmptyRecycleBin() { + File file = new File(System.getProperty("java.io.tmpdir"), System.nanoTime() + ".txt"); + try { + // Create a file and immediately send it to the recycle bin. + try { + fillTempFile(file); + W32FileUtils.getInstance().moveToTrash(new File[] { file }); + } catch (IOException e) { + throw new RuntimeException(e); + } + + int result = Shell32.INSTANCE.SHEmptyRecycleBin(null, null, + Shell32.SHERB_NOCONFIRMATION | Shell32.SHERB_NOPROGRESSUI | Shell32.SHERB_NOSOUND); + // for reasons I can not find documented on MSDN, + // the function returns the following: + // 0 when the recycle bin has items in it + // -2147418113 when the recycle bin has no items in it + assertEquals("Result should have been ERROR_SUCCESS when emptying Recycle Bin - there should have been a file in it.", + W32Errors.ERROR_SUCCESS, result); + } finally { + // if the file wasn't sent to the recycle bin, delete it. + if (file.exists()) { + file.delete(); + } + } + } + + public void testShellExecuteEx() { + File file = new File(System.getProperty("java.io.tmpdir"), System.nanoTime() + ".txt"); + try { + try { + fillTempFile(file); + } catch (IOException e) { + throw new RuntimeException(e); + } + + SHELLEXECUTEINFO lpExecInfo = new SHELLEXECUTEINFO(); + // to avoid opening something and having hProcess come up null + // (meaning we opened something but can't close it) + // we will do a negative test with a bogus action. + lpExecInfo.lpVerb = "0p3n"; + lpExecInfo.nShow = User32.SW_SHOWDEFAULT; + lpExecInfo.fMask = Shell32.SEE_MASK_NOCLOSEPROCESS | Shell32.SEE_MASK_FLAG_NO_UI; + lpExecInfo.lpFile = file.getAbsolutePath(); + + assertFalse("ShellExecuteEx should have returned false - action verb was bogus.", + Shell32.INSTANCE.ShellExecuteEx(lpExecInfo)); + assertEquals("GetLastError() should have been set to ERROR_NO_ASSOCIATION because of bogus action", + W32Errors.ERROR_NO_ASSOCIATION, Native.getLastError()); + } finally { + if (file.exists()) { + file.delete(); + } + } + + } + + /** + * Creates (if needed) and fills the specified file with some content (10 lines of the same text) + * + * @param file + * The file to fill with content + * @throws IOException + * If writing the content fails + */ + private void fillTempFile(File file) throws IOException { + file.createNewFile(); + FileWriter fileWriter = new FileWriter(file); + try { + for (int i = 0; i < 10; i++) { + fileWriter.write("Sample line of text"); + fileWriter.write(System.getProperty("line.separator")); + } + } finally { + fileWriter.close(); + } + } } From 48bf0ffcac4aeabb8caf2e2a50cb4bf8ab458223 Mon Sep 17 00:00:00 2001 From: Michael Freeman Date: Mon, 23 Nov 2015 19:33:07 -0500 Subject: [PATCH 13/29] Kernel32.ProcessIdToSessionId and resource extraction functions (Find/Load/LockResource, etc) Updated changelog. --- CHANGES.md | 1 + .../com/sun/jna/platform/win32/Kernel32.java | 548 ++++++++++-- .../sun/jna/platform/win32/Kernel32Util.java | 161 +++- .../com/sun/jna/platform/win32/Tlhelp32.java | 20 +- .../sun/jna/platform/win32/Kernel32Test.java | 815 +++++++++--------- .../jna/platform/win32/Kernel32UtilTest.java | 215 ++--- 6 files changed, 1137 insertions(+), 623 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index f44c9530c3..96ae9d6079 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -16,6 +16,7 @@ Features * [#535](https://github.com/java-native-access/jna/pull/535): Added `BitBlt` to `com.sun.jna.platform.win32.GDI32`, Added `com.sun.jna.platform.win32.GDI32Util` and added `getScreenshot()` to it - [@mlfreeman2](https://github.com/mlfreeman2). * [#535](https://github.com/java-native-access/jna/pull/535): Added `SHEmptyRecycleBin`, `ShellExecuteEx` to `com.sun.jna.platform.win32.Shell32` - [@mlfreeman2](https://github.com/mlfreeman2). * [#535](https://github.com/java-native-access/jna/pull/535): Added `GetDesktopWindow` to `com.sun.jna.platform.win32.User32` - [@mlfreeman2](https://github.com/mlfreeman2). +* [#543](https://github.com/java-native-access/jna/pull/543): Added `ProcessIdToSessionId`, `LoadLibraryEx`, `FreeLibrary` and `Find/Load/Lock/SizeofResource` to `com.sun.jna.platform.win32.Kernel32` - [@mlfreeman2](https://github.com/mlfreeman2). Bug Fixes --------- diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java index 5ee11bd2d5..ee663a264b 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java @@ -14,7 +14,6 @@ import com.sun.jna.Native; import com.sun.jna.Pointer; -import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.PointerByReference; import com.sun.jna.win32.W32APIOptions; @@ -31,6 +30,32 @@ public interface Kernel32 extends StdCallLibrary, WinNT, Wincon { Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class, W32APIOptions.DEFAULT_OPTIONS); + /** + * LOAD_LIBRARY_AS_DATAFILE
    + * 0x00000002
    + * If this value is used, the system maps the file into the calling + * process's virtual address space as if it were a data file.
    + * Nothing is done to execute or prepare to execute the mapped file.
    + * Therefore, you cannot call functions like + * GetModuleFileName + * , + * GetModuleHandle + * or + * GetProcAddress + * with this DLL. Using this value causes writes to read-only memory to + * raise an access violation.
    + * Use this flag when you want to load a DLL only to extract messages or + * resources from it.
    + * This value can be used with + * LOAD_LIBRARY_AS_IMAGE_RESOURCE. For more information, + * see Remarks. + */ + int LOAD_LIBRARY_AS_DATAFILE = 0x2; + + /** * Reads data from the specified file or input/output (I/O) device. Reads * occur at the position specified by the file pointer if supported by the @@ -2438,17 +2463,32 @@ boolean SystemTimeToTzSpecificLocalTime(TIME_ZONE_INFORMATION lpTimeZone, /** * Reads data from an area of memory in a specified process. The entire area * to be read must be accessible or the operation fails. - * @param hProcess A handle to the process with memory that is being read. - * @param lpBaseAddress The base address in the specified process from which - * to read. - * @param lpBuffer A buffer that receives the contents from the address space - * of the specified process. - * @param nSize The number of bytes to be read from the specified process. - * @param lpNumberOfBytesRead A variable that receives the number of bytes - * transferred into the specified buffer. If {@code null} the parameter is ignored. - * @return {@code true} if successful, {@code false} otherwise. - * To get extended error information, call {@link #GetLastError()}. - * @see ReadProcessMemory documentation + * + * @see MSDN {@link https://msdn.microsoft.com/en-us/library/windows/desktop/ms680553(v=vs.85).aspx } + * @param hProcess + * A handle to the process with memory that is being read. The + * handle must have PROCESS_VM_READ access to the process. + * @param lpBaseAddress + * A pointer to the base address in the specified process from + * which to read.
    + * Before any data transfer occurs, the system verifies that all + * data in the base address and memory of the specified size is + * accessible for read access, and if it is not accessible the + * function fails. + * @param lpBuffer + * A pointer to a buffer that receives the contents from the + * address space of the specified process. + * @param nSize + * The number of bytes to be read from the specified process. + * @param lpNumberOfBytesRead + * A pointer to a variable that receives the number of bytes + * transferred into the specified buffer. If lpNumberOfBytesRead + * is NULL, the parameter is ignored. + * @return If the function succeeds, the return value is nonzero.
    + * If the function fails, the return value is 0 (zero). To get + * extended error information, call GetLastError.
    + * The function fails if the requested read operation crosses into + * an area of the process that is inaccessible. */ boolean ReadProcessMemory(HANDLE hProcess, Pointer lpBaseAddress, Pointer lpBuffer, int nSize, IntByReference lpNumberOfBytesRead); @@ -2733,85 +2773,407 @@ boolean GetVolumePathNamesForVolumeName(String lpszVolumeName, boolean FindVolumeClose(HANDLE hFindVolume); /** - * Retrieves the current control settings for a specified communications - * device. - * - * @param hFile - * [in] A handle to the communications device.
    - * The - * {@link com.sun.jna.platform.win32.Kernel32#CreateFile(String, int, int, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, int, int, com.sun.jna.platform.win32.WinNT.HANDLE)} - * function returns this {@link HANDLE}. - * @param lpDCB - * [in, out] A pointer to a {@link WinBase.DCB} structure that - * receives the control settings information. - * - * @return If the function succeeds, the return value is nonzero.
    - * If the function fails, the return value is zero. To get extended - * error information, call {@link Kernel32#GetLastError()}. - * - */ - boolean GetCommState(HANDLE hFile, WinBase.DCB lpDCB); - - /** - * - * Retrieves the time-out parameters for all read and write operations on a - * specified communications device.
    - *
    - * For more information about time-out values for communications devices, - * see the {@link Kernel32#SetCommTimeouts} function. - * - * @param hFile - * [in] A handle to the communications device. The - * {@link com.sun.jna.platform.win32.Kernel32#CreateFile(String, int, int, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, int, int, com.sun.jna.platform.win32.WinNT.HANDLE)} - * function returns this handle. - * - * @param lpCommTimeouts - * [in] A pointer to a {@link WinBase.COMMTIMEOUTS} structure in - * which the time-out information is returned. - * @return If the function succeeds, the return value is nonzero. - * - * If the function fails, the return value is zero. To get extended - * error information, call {@link Kernel32#GetLastError()}. - * - * - * - */ - boolean GetCommTimeouts(HANDLE hFile, WinBase.COMMTIMEOUTS lpCommTimeouts); - - /** - * Configures a communications device according to the specifications in a - * device-control block (a {@link WinBase.DCB} structure). The function - * reinitializes all hardware and control settings, but it does not empty - * output or input queues. - * - * @param hFile - * [in] A handle to the communications device. The - * {@link com.sun.jna.platform.win32.Kernel32#CreateFile(String, int, int, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, int, int, com.sun.jna.platform.win32.WinNT.HANDLE)} - * function returns this handle. - * @param lpDCB - * [in] A pointer to a {@link WinBase.DCB} structure that - * contains the configuration information for the specified - * communications device. - * @return If the function succeeds, the return value is nonzero. If the - * function fails, the return value is zero. To get extended error - * information, call {@link Kernel32#GetLastError()}. - */ - boolean SetCommState(HANDLE hFile, WinBase.DCB lpDCB); - - /** - * Sets the time-out parameters for all read and write operations on a - * specified communications device. - * - * @param hFile - * [in] A handle to the communications device. The - * {@link com.sun.jna.platform.win32.Kernel32#CreateFile(String, int, int, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, int, int, com.sun.jna.platform.win32.WinNT.HANDLE)} - * function returns this handle. - * @param LPCOMMTIMEOUTS - * [in] A pointer to a {@link WinBase.COMMTIMEOUTS} structure - * that contains the new time-out values. - * @return If the function succeeds, the return value is nonzero.
    - * If the function fails, the return value is zero. To get extended - * error information, call {@link Kernel32#GetLastError()}. - */ - boolean SetCommTimeouts(HANDLE hFile, WinBase.COMMTIMEOUTS lpCommTimeouts); + * Retrieves the current control settings for a specified communications + * device. + * + * @param hFile + * [in] A handle to the communications device.
    + * The + * {@link com.sun.jna.platform.win32.Kernel32#CreateFile(String, int, int, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, int, int, com.sun.jna.platform.win32.WinNT.HANDLE)} + * function returns this {@link HANDLE}. + * @param lpDCB + * [in, out] A pointer to a {@link WinBase.DCB} structure that + * receives the control settings information. + * + * @return If the function succeeds, the return value is nonzero.
    + * If the function fails, the return value is zero. To get extended + * error information, call {@link Kernel32#GetLastError()}. + * + */ + boolean GetCommState(HANDLE hFile, WinBase.DCB lpDCB); + + /** + * + * Retrieves the time-out parameters for all read and write operations on a + * specified communications device.
    + *
    + * For more information about time-out values for communications devices, + * see the {@link Kernel32#SetCommTimeouts} function. + * + * @param hFile + * [in] A handle to the communications device. The + * {@link com.sun.jna.platform.win32.Kernel32#CreateFile(String, int, int, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, int, int, com.sun.jna.platform.win32.WinNT.HANDLE)} + * function returns this handle. + * + * @param lpCommTimeouts + * [in] A pointer to a {@link WinBase.COMMTIMEOUTS} structure in + * which the time-out information is returned. + * @return If the function succeeds, the return value is nonzero. + * + * If the function fails, the return value is zero. To get extended + * error information, call {@link Kernel32#GetLastError()}. + * + * + * + */ + boolean GetCommTimeouts(HANDLE hFile, WinBase.COMMTIMEOUTS lpCommTimeouts); + + /** + * Configures a communications device according to the specifications in a + * device-control block (a {@link WinBase.DCB} structure). The function + * reinitializes all hardware and control settings, but it does not empty + * output or input queues. + * + * @param hFile + * [in] A handle to the communications device. The + * {@link com.sun.jna.platform.win32.Kernel32#CreateFile(String, int, int, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, int, int, com.sun.jna.platform.win32.WinNT.HANDLE)} + * function returns this handle. + * @param lpDCB + * [in] A pointer to a {@link WinBase.DCB} structure that + * contains the configuration information for the specified + * communications device. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call {@link Kernel32#GetLastError()}. + */ + boolean SetCommState(HANDLE hFile, WinBase.DCB lpDCB); + + /** + * Sets the time-out parameters for all read and write operations on a + * specified communications device. + * + * @param hFile + * [in] A handle to the communications device. The + * {@link com.sun.jna.platform.win32.Kernel32#CreateFile(String, int, int, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, int, int, com.sun.jna.platform.win32.WinNT.HANDLE)} + * function returns this handle. + * @param LPCOMMTIMEOUTS + * [in] A pointer to a {@link WinBase.COMMTIMEOUTS} structure + * that contains the new time-out values. + * @return If the function succeeds, the return value is nonzero.
    + * If the function fails, the return value is zero. To get extended + * error information, call {@link Kernel32#GetLastError()}. + */ + boolean SetCommTimeouts(HANDLE hFile, WinBase.COMMTIMEOUTS lpCommTimeouts); + + /** + * http://msdn.microsoft.com/en-us/library/aa382990(v=vs.85).aspx
    + *
    + * Retrieves the Remote Desktop Services session associated with a specified + * process.
    + *
    + *
    BOOL ProcessIdToSessionId(_In_ DWORD dwProcessId, _Out_ DWORD *pSessionId);

    + * + * @param dwProcessId + * Specifies a process identifier.
    + * Use the GetCurrentProcessId function to retrieve the process + * identifier for the current process. + * @param pSessionId + * Pointer to a variable that receives the identifier of the + * Remote Desktop Services session under which the specified + * process is running.
    + * To retrieve the identifier of the session currently attached + * to the console, use the WTSGetActiveConsoleSessionId function. + * @return If the function succeeds, the return value is true.
    + * If the function fails, the return value is false. To get extended + * error information, call GetLastError. + */ + boolean ProcessIdToSessionId(int dwProcessId, IntByReference pSessionId); + + /** + * Loads the specified module into the address space of the calling process. + * The specified module may cause other modules to be loaded. + * + *
    +     * 
    +     * HMODULE WINAPI LoadLibraryEx(
    +     *   _In_       LPCTSTR lpFileName,
    +     *   _Reserved_ HANDLE  hFile,
    +     *   _In_       DWORD   dwFlags
    +     * );
    +     * 
    +     * 
    + * + * @param lpFileName + * A string that specifies the file name of the module to load. + * This name is not related to the name stored in a library + * module itself, as specified by the LIBRARY keyword in the + * module-definition (.def) file.
    + * The module can be a library module (a .dll file) or an + * executable module (an .exe file). If the specified module is + * an executable module, static imports are not loaded; instead, + * the module is loaded as if DONT_RESOLVE_DLL_REFERENCES was + * specified. See the dwFlags parameter for more + * information.
    + * If the string specifies a module name without a path and the + * file name extension is omitted, the function appends the + * default library extension .dll to the module name. To prevent + * the function from appending .dll to the module name, include a + * trailing point character (.) in the module name string.
    + * If the string specifies a fully qualified path, the function + * searches only that path for the module. When specifying a + * path, be sure to use backslashes (\), not forward slashes (/). + * For more information about paths, see "Naming Files, Paths, and Namespaces" on MSDN.
    + * If the string specifies a module name without a path and more + * than one loaded module has the same base name and extension, + * the function returns a handle to the module that was loaded + * first.
    + * If the string specifies a module name without a path and a + * module of the same name is not already loaded, or if the + * string specifies a module name with a relative path, the + * function searches for the specified module. The function also + * searches for modules if loading the specified module causes + * the system to load other associated modules (that is, if the + * module has dependencies). The directories that are searched + * and the order in which they are searched depend on the + * specified path and the dwFlags parameter. For more + * information, see Remarks.
    + * If the function cannot find the module or one of its + * dependencies, the function fails. + * @param hFile + * This parameter is reserved for future use. It must be NULL. + * @param flags + * The action to be taken when loading the module.
    + * If no flags are specified, the behavior of this function is + * identical to that of the LoadLibrary function.
    + * This parameter can be one of the following values.
    + *
    + * DONT_RESOLVE_DLL_REFERENCES: 0x00000001
    + * If this value is used, and the executable module is a DLL, the + * system does not call DllMain for process and thread + * initialization and termination. Also, the system does not load + * additional executable modules that are referenced by the + * specified module.
    + * Do not use this value; it is provided only for backward + * compatibility. If you are planning to access only data or + * resources in the DLL, use LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE + * or LOAD_LIBRARY_AS_IMAGE_RESOURCE or both. Otherwise, load the + * library as a DLL or executable module using the LoadLibrary + * function.
    + *
    + * LOAD_IGNORE_CODE_AUTHZ_LEVEL: 0x00000010
    + * If this value is used, the system does not check AppLocker + * rules or apply Software Restriction Policies for the DLL. + * AppLocker was introduced in Windows 7 and Windows Server 2008 + * R2. This action applies only to the DLL being loaded and not + * to its dependencies. This value is recommended for use in + * setup programs that must run extracted DLLs during + * installation.
    + * Windows Server 2008 R2 and Windows 7: On systems with + * KB2532445 installed, the caller must be running as + * "LocalSystem" or "TrustedInstaller"; otherwise the system + * ignores this flag.
    + *
    + * LOAD_LIBRARY_AS_DATAFILE: 0x00000002
    + * If this value is used, the system maps the file into the + * calling process's virtual address space as if it were a data + * file. Nothing is done to execute or prepare to execute the + * mapped file. Therefore, you cannot call functions like + * GetModuleFileName, GetModuleHandle or GetProcAddress with this + * DLL. Using this value causes writes to read-only memory to + * raise an access violation. Use this flag when you want to load + * a DLL only to extract messages or resources from it.
    + * This value can be used with LOAD_LIBRARY_AS_IMAGE_RESOURCE. + * For more information, see Remarks
    + *
    + * LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE: 0x00000040
    + * Similar to LOAD_LIBRARY_AS_DATAFILE, except that the DLL file + * is opened with exclusive write access for the calling process. + * Other processes cannot open the DLL file for write access + * while it is in use. However, the DLL can still be opened by + * other processes.
    + * This value can be used with LOAD_LIBRARY_AS_IMAGE_RESOURCE. + * This value is not supported until Windows Vista.
    + *
    + * LOAD_LIBRARY_AS_IMAGE_RESOURCE: 0x00000020
    + * If this value is used, the system maps the file into the + * process's virtual address space as an image file. However, the + * loader does not load the static imports or perform the other + * usual initialization steps. Use this flag when you want to + * load a DLL only to extract messages or resources from it.
    + * Unless the application depends on the file having the + * in-memory layout of an image, this value should be used with + * either LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE or + * LOAD_LIBRARY_AS_DATAFILE. This value is not supported until + * Windows Vista.
    + *
    + * LOAD_LIBRARY_SEARCH_APPLICATION_DIR: 0x00000200
    + * If this value is used, the application's installation + * directory is searched for the DLL and its dependencies. + * Directories in the standard search path are not searched. This + * value cannot be combined with LOAD_WITH_ALTERED_SEARCH_PATH. + *
    + * Windows 7, Windows Server 2008 R2, Windows Vista, and Windows + * Server 2008: This value requires KB2533623 to be installed. + *
    + *
    + * LOAD_LIBRARY_SEARCH_DEFAULT_DIRS: 0x00001000
    + * This value is a combination of + * LOAD_LIBRARY_SEARCH_APPLICATION_DIR, + * LOAD_LIBRARY_SEARCH_SYSTEM32, and + * LOAD_LIBRARY_SEARCH_USER_DIRS. Directories in the standard + * search path are not searched. This value cannot be combined + * with LOAD_WITH_ALTERED_SEARCH_PATH.
    + * This value represents the recommended maximum number of + * directories an application should include in its DLL search + * path.
    + * Windows 7, Windows Server 2008 R2, Windows Vista, and Windows + * Server 2008: This value requires KB2533623 to be installed. + *
    + *
    + * LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR: 0x00000100
    + * + * If this value is used, the directory that contains the DLL is + * temporarily added to the beginning of the list of directories + * that are searched for the DLL's dependencies. Directories in + * the standard search path are not searched.
    + * The lpFileName parameter must specify a fully qualified path. + * This value cannot be combined with + * LOAD_WITH_ALTERED_SEARCH_PATH.
    + * For example, if Lib2.dll is a dependency of C:\Dir1\Lib1.dll, + * loading Lib1.dll with this value causes the system to search + * for Lib2.dll only in C:\Dir1. To search for Lib2.dll in + * C:\Dir1 and all of the directories in the DLL search path, + * combine this value with LOAD_LIBRARY_DEFAULT_DIRS.
    + * Windows 7, Windows Server 2008 R2, Windows Vista, and Windows + * Server 2008: This value requires KB2533623 to be installed. + *
    + *
    + * LOAD_LIBRARY_SEARCH_SYSTEM32: 0x00000800
    + * If this value is used, %windows%\system32 is searched for the + * DLL and its dependencies. Directories in the standard search + * path are not searched. This value cannot be combined with + * LOAD_WITH_ALTERED_SEARCH_PATH.
    + * Windows 7, Windows Server 2008 R2, Windows Vista, and Windows + * Server 2008: This value requires KB2533623 to be installed. + *
    + *
    + * LOAD_LIBRARY_SEARCH_USER_DIRS: 0x00000400
    + * If this value is used, directories added using the + * AddDllDirectory or the SetDllDirectory function are searched + * for the DLL and its dependencies. If more than one directory + * has been added, the order in which the directories are + * searched is unspecified. Directories in the standard search + * path are not searched. This value cannot be combined with + * LOAD_WITH_ALTERED_SEARCH_PATH.
    + * Windows 7, Windows Server 2008 R2, Windows Vista, and Windows + * Server 2008: This value requires KB2533623 to be installed. + *
    + *
    + * LOAD_WITH_ALTERED_SEARCH_PATH: 0x00000008
    + * If this value is used and lpFileName specifies an + * absolute path, the system uses the alternate file search + * strategy discussed in the Remarks section to find associated + * executable modules that the specified module causes to be + * loaded. If this value is used and lpFileName + * specifies a relative path, the behavior is undefined.
    + * If this value is not used, or if lpFileName does not + * specify a path, the system uses the standard search strategy + * discussed in the Remarks section to find associated executable + * modules that the specified module causes to be loaded.
    + * This value cannot be combined with any LOAD_LIBRARY_SEARCH + * flag. + * @return If the function succeeds, the return value is a handle to the + * loaded module.
    + * If the function fails, the return value is NULL. To get extended + * error information, call GetLastError. + */ + HMODULE LoadLibraryEx(String lpFileName, HANDLE hFile, int flags); + + /** + * Determines the location of a resource with the specified type and name in + * the specified module.
    + * To specify a language, use the FindResourceEx function. + * + * @param hModule + * A handle to the module whose portable executable file or an + * accompanying MUI file contains the resource.
    + * If this parameter is NULL, the function searches the module + * used to create the current process. + * @param name + * The name of the resource.
    + * Alternately, rather than a pointer, this parameter can be + * MAKEINTRESOURCE(ID), where ID is the integer identifier of the + * resource.
    + * For more information, see the Remarks section below. + * @param type + * The resource type.
    + * Alternately, rather than a pointer, this parameter can be + * MAKEINTRESOURCE(ID), where ID is the integer identifier of the + * given resource type.
    + * For standard resource types, see Resource Types. For more + * information, see the Remarks section below. + * @return If the function succeeds, the return value is a handle to the + * specified resource's information block.
    + * To obtain a handle to the resource, pass this handle to the + * LoadResource function.
    + * If the function fails, the return value is NULL.
    + * To get extended error information, call GetLastError. + */ + HRSRC FindResource(HMODULE hModule, Pointer name, Pointer type); + + /** + * Retrieves a handle that can be used to obtain a pointer to the first byte + * of the specified resource in memory. + * + * @param hModule + * A handle to the module whose executable file contains the + * resource.
    + * If hModule is NULL, the system loads the resource from the + * module that was used to create the current process. + * @param hResource + * A handle to the resource to be loaded.
    + * This handle is returned by the FindResource or FindResourceEx + * function. + * @return If the function succeeds, the return value is a handle to the + * data associated with the resource.
    + * If the function fails, the return value is NULL.
    + * To get extended error information, call GetLastError. + */ + HANDLE LoadResource(HMODULE hModule, HRSRC hResource); + + /** + * Retrieves a pointer to the specified resource in memory. + * + * @param hResource + * A handle to the resource to be accessed.
    + * The LoadResource function returns this handle.
    + * Note that this parameter is listed as an HGLOBAL variable only + * for backward compatibility.
    + * Do not pass any value as a parameter other than a successful + * return value from the LoadResource function. + * @return If the loaded resource is available, the return value is a + * pointer to the first byte of the resource; otherwise, it is NULL. + */ + Pointer LockResource(HANDLE hResource); + + /** + * @param hModule + * A handle to the module whose executable file contains the + * resource. + * @param hResource + * A handle to the resource. This handle must be created by using + * the FindResource or FindResourceEx function. + * @return If the function succeeds, the return value is the number of bytes + * in the resource.
    + * If the function fails, the return value is zero. To get extended + * error information, call GetLastError. + */ + int SizeofResource(HMODULE hModule, HANDLE hResource); + + + /** + * Frees the loaded dynamic-link library (DLL) module and, if necessary, + * decrements its reference count. When the reference count reaches zero, + * the module is unloaded from the address space of the calling process and + * the handle is no longer valid. + * + * @param module + * A handle to the loaded library module. The LoadLibrary, + * LoadLibraryEx, GetModuleHandle, or GetModuleHandleEx function + * returns this handle. + * @return If the function succeeds, the return value is nonzero. If the + * function fails, the return value is zero. To get extended error + * information, call the GetLastError function. + */ + boolean FreeLibrary(HMODULE module); } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32Util.java b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32Util.java index f182d559c6..bd59b8f352 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32Util.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32Util.java @@ -1,14 +1,14 @@ /* Copyright (c) 2010, 2013 Daniel Doubrovkine, Markus Karg, All Rights Reserved - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * Lesser General Public License for more details. */ package com.sun.jna.platform.win32; @@ -31,7 +31,7 @@ /** * Kernel32 utility API. - * + * * @author dblock[at]dblock.org * @author markus[at]headcrashing[dot]eu * @author Andreas "PAX" Lück, onkelpax-git[at]yahoo.de @@ -40,7 +40,7 @@ public abstract class Kernel32Util implements WinDef { /** * Get current computer NetBIOS name. - * + * * @return Netbios name. */ public static String getComputerName() { @@ -55,7 +55,7 @@ public static String getComputerName() { /** * Format a message from the value obtained from * {@link Kernel32#GetLastError} or {@link Native#getLastError}. - * + * * @param code * int * @return Formatted message. @@ -78,7 +78,7 @@ public static String formatMessage(int code) { /** * Format a message from an HRESULT. - * + * * @param code * HRESULT * @return Formatted message. @@ -98,7 +98,7 @@ public static String formatMessageFromHR(HRESULT code) { /** * Format a system message from an error code. - * + * * @param code * Error code, typically a result of GetLastError. * @return Formatted message. @@ -107,18 +107,18 @@ public static String formatMessageFromLastErrorCode(int code) { return formatMessageFromHR(W32Errors.HRESULT_FROM_WIN32(code)); } - /** - * @return Obtains the human-readable error message text from the last error - * that occurred by invocating {@code Kernel32.GetLastError()}. - */ - public static String getLastErrorMessage() { - return Kernel32Util.formatMessageFromLastErrorCode(Kernel32.INSTANCE - .GetLastError()); - } + /** + * @return Obtains the human-readable error message text from the last error + * that occurred by invocating {@code Kernel32.GetLastError()}. + */ + public static String getLastErrorMessage() { + return Kernel32Util.formatMessageFromLastErrorCode(Kernel32.INSTANCE + .GetLastError()); + } /** * Return the path designated for temporary files. - * + * * @return Path. */ public static String getTempPath() { @@ -138,7 +138,7 @@ public static void deleteFile(String filename) { /** * Returns valid drives in the system. - * + * * @return A {@link List} of valid drives. */ public static List getLogicalDriveStrings() { @@ -159,7 +159,7 @@ public static List getLogicalDriveStrings() { /** * Retrieves file system attributes for a specified file or directory. - * + * * @param fileName * The name of the file or directory. * @return The attributes of the specified file or directory. @@ -229,7 +229,7 @@ public static int getDriveType(String rootName) { /** * Get the value of an environment variable. - * + * * @param name * Name of the environment variable. * @return Value of an environment variable. @@ -265,7 +265,7 @@ public static Map getEnvironmentVariables() { if (lpszEnvironmentBlock == null) { throw new LastErrorException(Kernel32.INSTANCE.GetLastError()); } - + try { return getEnvironmentVariables(lpszEnvironmentBlock, 0L); } finally { @@ -284,13 +284,13 @@ public static Map getEnvironmentVariables() { * Note: if the environment block is {@code null} then {@code null} * is returned instead of an empty map since we want to distinguish * between the case that the data block is {@code null} and when there are - * no environment variables (as unlikely as it may be) + * no environment variables (as unlikely as it may be) */ public static Map getEnvironmentVariables(Pointer lpszEnvironmentBlock, long offset) { if (lpszEnvironmentBlock == null) { return null; } - + Map vars=new TreeMap(); boolean asWideChars=isWideCharEnvironmentStringBlock(lpszEnvironmentBlock, offset); long stepFactor=asWideChars ? 2L : 1L; @@ -305,13 +305,13 @@ public static Map getEnvironmentVariables(Pointer lpszEnvironment if (pos < 0) { throw new IllegalArgumentException("Missing variable value separator in " + nvp); } - + String name=nvp.substring(0, pos), value=nvp.substring(pos + 1); vars.put(name, value); curOffset += (len + 1 /* skip the ending '\0' */) * stepFactor; } - + return vars; } @@ -333,7 +333,7 @@ public static String readEnvironmentStringBlockEntry(Pointer lpszEnvironmentBloc if (dataLen == 0) { return ""; } - + int charsLen=asWideChars ? (dataLen / 2) : dataLen; char[] chars=new char[charsLen]; long curOffset=offset, stepSize=asWideChars ? 2L : 1L; @@ -351,7 +351,7 @@ public static String readEnvironmentStringBlockEntry(Pointer lpszEnvironmentBloc chars[index] = (char) (b & 0x00FF); } } - + return new String(chars); } @@ -388,10 +388,10 @@ public static long findEnvironmentStringBlockEntryEnd(Pointer lpszEnvironmentBlo * the assumption is that the environment variable name (at * least) is ASCII. * - * + * *
  • * Otherwise (i.e., zero charset indicator), it is assumed to be - * a {@code wchar_t} + * a {@code wchar_t} *
  • * * Note: the code takes into account the {@link ByteOrder} even though @@ -413,7 +413,7 @@ public static boolean isWideCharEnvironmentStringBlock(Pointer lpszEnvironmentBl return isWideCharEnvironmentStringBlock(b0); } } - + private static boolean isWideCharEnvironmentStringBlock(byte charsetIndicator) { // assume wchar_t for environment variables represents ASCII letters if (charsetIndicator != 0) { @@ -426,7 +426,7 @@ private static boolean isWideCharEnvironmentStringBlock(byte charsetIndicator) { /** * Retrieves an integer associated with a key in the specified section of an * initialization file. - * + * * @param appName * The name of the section in the initialization file. * @param keyName @@ -451,7 +451,7 @@ public static final int getPrivateProfileInt(final String appName, /** * Retrieves a string from the specified section in an initialization file. - * + * * @param lpAppName * The name of the section containing the key name. If this * parameter is {@code null}, the @@ -516,7 +516,7 @@ public static final void writePrivateProfileString(final String appName, /** * Convenience method to get the processor information. Takes care of * auto-growing the array. - * + * * @return the array of processor information. */ public static final WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION[] getLogicalProcessorInformation() { @@ -543,7 +543,7 @@ public static final WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION[] getLogicalProce return (WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION[]) firstInformation .toArray(new WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION[returnedStructCount]); } - + /** * Retrieves all the keys and values for the specified section of an initialization file. * @@ -639,7 +639,7 @@ public static final List getVolumePathNamesForVolumeName(String lpszVolu if (hr != WinError.ERROR_MORE_DATA) { throw new Win32Exception(hr); } - + int required = lpcchReturnLength.getValue(); lpszVolumePathNames = new char[required]; // this time we MUST succeed @@ -647,7 +647,7 @@ public static final List getVolumePathNamesForVolumeName(String lpszVolu throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); } } - + int bufSize = lpcchReturnLength.getValue(); return Native.toStringList(lpszVolumePathNames, 0, bufSize); } @@ -660,7 +660,7 @@ public static final List getVolumePathNamesForVolumeName(String lpszVolu * Parses and returns the pure GUID value of a volume name obtained * from {@link Kernel32#FindFirstVolume(char[], int)} or * {@link Kernel32#FindNextVolume} calls - * + * * @param volumeGUIDPath * The volume GUID path as returned by one of the above mentioned calls * @return The pure GUID value after stripping the "\\?\" prefix and @@ -675,7 +675,92 @@ public static final String extractVolumeGUID(String volumeGUIDPath) { || (!volumeGUIDPath.endsWith(VOLUME_GUID_PATH_SUFFIX))) { throw new IllegalArgumentException("Bad volume GUID path format: " + volumeGUIDPath); } - + return volumeGUIDPath.substring(VOLUME_GUID_PATH_PREFIX.length(), volumeGUIDPath.length() - VOLUME_GUID_PATH_SUFFIX.length()); } + + /** + * Gets the specified resource out of the specified executable file + * + * @param path + * The path to the executable file + * @param type + * The type of the resource (either a type name or type ID is + * allowed) + * @param name + * The name or ID of the resource + * @return The resource bytes, or null if no such resource exists. + * @throws IllegalStateException if the call to LockResource fails + */ + public static byte[] getResource(String path, String type, String name) { + HMODULE target = Kernel32.INSTANCE.LoadLibraryEx(path, null, Kernel32.LOAD_LIBRARY_AS_DATAFILE); + + if (target == null) { + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + } + + Win32Exception err = null; + Pointer start = null; + int length = 0; + try { + Pointer t = null; + try { + t = new Pointer(Long.parseLong(type)); + } catch (NumberFormatException e) { + t = new Memory(Native.WCHAR_SIZE * (type.length() + 1)); + t.setWideString(0, type); + } + + Pointer n = null; + try { + n = new Pointer(Long.parseLong(name)); + } catch (NumberFormatException e) { + n = new Memory(Native.WCHAR_SIZE * (name.length() + 1)); + n.setWideString(0, name); + } + + HRSRC hrsrc = Kernel32.INSTANCE.FindResource(target, n, t); + if (hrsrc == null) { + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + } + + // according to MSDN, on 32 bit Windows or newer, calling FreeResource() is not necessary - and in fact does nothing but return false. + HANDLE loaded = Kernel32.INSTANCE.LoadResource(target, hrsrc); + if (loaded == null) { + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + } + + length = Kernel32.INSTANCE.SizeofResource(target, hrsrc); + if (length == 0) { + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + } + + // MSDN: It is not necessary to unlock resources because the system automatically deletes them when the process that created them terminates. + // MSDN does not say that LockResource sets GetLastError + start = Kernel32.INSTANCE.LockResource(loaded); + if (start == null) { + throw new IllegalStateException("LockResource returned null."); + } + } catch (Win32Exception we) { + err = we; + } finally { + // from what I can tell on MSDN, the only thing that needs cleanup on this is the HMODULE from LoadLibrary + if (target != null) { + if (!Kernel32.INSTANCE.FreeLibrary(target)) { + Win32Exception we = new Win32Exception(Kernel32.INSTANCE.GetLastError()); + if (err != null) { + we.addSuppressed(err); + } + throw we; + } + } + } + + if (err != null) { + throw err; + } + + return start.getByteArray(0, length); + } + } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Tlhelp32.java b/contrib/platform/src/com/sun/jna/platform/win32/Tlhelp32.java index 32fac29565..517fef73c6 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Tlhelp32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Tlhelp32.java @@ -38,8 +38,20 @@ public interface Tlhelp32 { WinDef.DWORD TH32CS_SNAPTHREAD = new WinDef.DWORD(0x00000004); /** - * Includes all modules of the process specified in th32ProcessID in the snapshot. To enumerate the modules, see - * Module32First. If the function fails with ERROR_BAD_LENGTH, retry the function until it succeeds. + * + * Used with Kernel32.CreateToolhelp32Snapshot
    + * Includes all modules of the process specified in th32ProcessID in the + * snapshot.
    + * To enumerate the modules, see Module32First.
    + * If the function fails with ERROR_BAD_LENGTH, retry the function until it + * succeeds.
    + * 64-bit Windows: Using this flag in a 32-bit process includes the 32-bit + * modules of the process specified in th32ProcessID, while using it in a + * 64-bit process includes the 64-bit modules.
    + * To include the 32-bit modules of the process specified in th32ProcessID + * from a 64-bit process, use the TH32CS_SNAPMODULE32 flag. + * + * @see MSDN {@link https://msdn.microsoft.com/en-us/library/windows/desktop/ms682489(v=vs.85).aspx } */ WinDef.DWORD TH32CS_SNAPMODULE = new WinDef.DWORD(0x00000008); @@ -61,6 +73,8 @@ public interface Tlhelp32 { */ WinDef.DWORD TH32CS_INHERIT = new WinDef.DWORD(0x80000000); + int MAX_MODULE_NAME32 = 255; + /** * Describes an entry from a list of the processes residing in the system address space when a snapshot was taken. */ @@ -137,7 +151,7 @@ public PROCESSENTRY32(Pointer memory) { * retrieve the full path of the executable file for a 64-bit process. */ public char[] szExeFile = new char[WinDef.MAX_PATH]; - + protected List getFieldOrder() { return Arrays.asList(new String[] { "dwSize", "cntUsage", "th32ProcessID", "th32DefaultHeapID", "th32ModuleID", "cntThreads", "th32ParentProcessID", "pcPriClassBase", "dwFlags", "szExeFile" }); } diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java index 1b4e743859..b0661574ce 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java @@ -36,6 +36,7 @@ import com.sun.jna.platform.win32.WinBase.MEMORYSTATUSEX; import com.sun.jna.platform.win32.WinBase.SYSTEM_INFO; import com.sun.jna.platform.win32.WinDef.DWORD; +import com.sun.jna.platform.win32.WinDef.HMODULE; import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.platform.win32.WinNT.HANDLEByReference; @@ -49,12 +50,12 @@ public class Kernel32Test extends TestCase { public static void main(String[] args) { - OSVERSIONINFO lpVersionInfo = new OSVERSIONINFO(); - assertTrue(Kernel32.INSTANCE.GetVersionEx(lpVersionInfo)); - System.out.println("Operating system: " - + lpVersionInfo.dwMajorVersion.longValue() + "." + lpVersionInfo.dwMinorVersion.longValue() - + " (" + lpVersionInfo.dwBuildNumber + ")" - + " [" + Native.toString(lpVersionInfo.szCSDVersion) + "]"); + OSVERSIONINFO lpVersionInfo = new OSVERSIONINFO(); + assertTrue(Kernel32.INSTANCE.GetVersionEx(lpVersionInfo)); + System.out.println("Operating system: " + + lpVersionInfo.dwMajorVersion.longValue() + "." + lpVersionInfo.dwMinorVersion.longValue() + + " (" + lpVersionInfo.dwBuildNumber + ")" + + " [" + Native.toString(lpVersionInfo.szCSDVersion) + "]"); junit.textui.TestRunner.run(Kernel32Test.class); } @@ -205,289 +206,289 @@ public void testConvertHWND_BROADCAST() { } public void testGetComputerName() { - IntByReference lpnSize = new IntByReference(0); - assertFalse(Kernel32.INSTANCE.GetComputerName(null, lpnSize)); - assertEquals(WinError.ERROR_BUFFER_OVERFLOW, Kernel32.INSTANCE.GetLastError()); - char buffer[] = new char[WinBase.MAX_COMPUTERNAME_LENGTH + 1]; - lpnSize.setValue(buffer.length); - assertTrue(Kernel32.INSTANCE.GetComputerName(buffer, lpnSize)); + IntByReference lpnSize = new IntByReference(0); + assertFalse(Kernel32.INSTANCE.GetComputerName(null, lpnSize)); + assertEquals(WinError.ERROR_BUFFER_OVERFLOW, Kernel32.INSTANCE.GetLastError()); + char buffer[] = new char[WinBase.MAX_COMPUTERNAME_LENGTH + 1]; + lpnSize.setValue(buffer.length); + assertTrue(Kernel32.INSTANCE.GetComputerName(buffer, lpnSize)); } public void testGetComputerNameExSameAsGetComputerName() { - IntByReference lpnSize = new IntByReference(0); - char buffer[] = new char[WinBase.MAX_COMPUTERNAME_LENGTH + 1]; - lpnSize.setValue(buffer.length); - assertTrue("Failed to retrieve expected computer name", Kernel32.INSTANCE.GetComputerName(buffer, lpnSize)); + IntByReference lpnSize = new IntByReference(0); + char buffer[] = new char[WinBase.MAX_COMPUTERNAME_LENGTH + 1]; + lpnSize.setValue(buffer.length); + assertTrue("Failed to retrieve expected computer name", Kernel32.INSTANCE.GetComputerName(buffer, lpnSize)); String expected = Native.toString(buffer); // reset - lpnSize.setValue(buffer.length); + lpnSize.setValue(buffer.length); Arrays.fill(buffer, '\0'); - assertTrue("Failed to retrieve extended computer name", Kernel32.INSTANCE.GetComputerNameEx(WinBase.COMPUTER_NAME_FORMAT.ComputerNameNetBIOS, buffer, lpnSize)); + assertTrue("Failed to retrieve extended computer name", Kernel32.INSTANCE.GetComputerNameEx(WinBase.COMPUTER_NAME_FORMAT.ComputerNameNetBIOS, buffer, lpnSize)); String actual = Native.toString(buffer); assertEquals("Mismatched names", expected, actual); } public void testWaitForSingleObject() { - HANDLE handle = Kernel32.INSTANCE.CreateEvent(null, false, false, null); + HANDLE handle = Kernel32.INSTANCE.CreateEvent(null, false, false, null); - // handle runs into timeout since it is not triggered - // WAIT_TIMEOUT = 0x00000102 - assertEquals(WinError.WAIT_TIMEOUT, Kernel32.INSTANCE.WaitForSingleObject( - handle, 1000)); + // handle runs into timeout since it is not triggered + // WAIT_TIMEOUT = 0x00000102 + assertEquals(WinError.WAIT_TIMEOUT, Kernel32.INSTANCE.WaitForSingleObject( + handle, 1000)); - Kernel32.INSTANCE.CloseHandle(handle); - } + Kernel32.INSTANCE.CloseHandle(handle); + } public void testResetEvent() { - HANDLE handle = Kernel32.INSTANCE.CreateEvent(null, true, false, null); + HANDLE handle = Kernel32.INSTANCE.CreateEvent(null, true, false, null); - // set the event to the signaled state - Kernel32.INSTANCE.SetEvent(handle); + // set the event to the signaled state + Kernel32.INSTANCE.SetEvent(handle); - // This should return successfully - assertEquals(WinBase.WAIT_OBJECT_0, Kernel32.INSTANCE.WaitForSingleObject( - handle, 1000)); + // This should return successfully + assertEquals(WinBase.WAIT_OBJECT_0, Kernel32.INSTANCE.WaitForSingleObject( + handle, 1000)); - // now reset it to not signaled - Kernel32.INSTANCE.ResetEvent(handle); + // now reset it to not signaled + Kernel32.INSTANCE.ResetEvent(handle); - // handle runs into timeout since it is not triggered - // WAIT_TIMEOUT = 0x00000102 - assertEquals(WinError.WAIT_TIMEOUT, Kernel32.INSTANCE.WaitForSingleObject( - handle, 1000)); + // handle runs into timeout since it is not triggered + // WAIT_TIMEOUT = 0x00000102 + assertEquals(WinError.WAIT_TIMEOUT, Kernel32.INSTANCE.WaitForSingleObject( + handle, 1000)); - Kernel32.INSTANCE.CloseHandle(handle); - } + Kernel32.INSTANCE.CloseHandle(handle); + } public void testWaitForMultipleObjects(){ - HANDLE[] handles = new HANDLE[2]; + HANDLE[] handles = new HANDLE[2]; - handles[0] = Kernel32.INSTANCE.CreateEvent(null, false, false, null); - handles[1] = Kernel32.INSTANCE.CreateEvent(null, false, false, null); + handles[0] = Kernel32.INSTANCE.CreateEvent(null, false, false, null); + handles[1] = Kernel32.INSTANCE.CreateEvent(null, false, false, null); - // handle runs into timeout since it is not triggered - // WAIT_TIMEOUT = 0x00000102 - assertEquals(WinError.WAIT_TIMEOUT, Kernel32.INSTANCE.WaitForMultipleObjects( - handles.length, handles, false, 1000)); + // handle runs into timeout since it is not triggered + // WAIT_TIMEOUT = 0x00000102 + assertEquals(WinError.WAIT_TIMEOUT, Kernel32.INSTANCE.WaitForMultipleObjects( + handles.length, handles, false, 1000)); - Kernel32.INSTANCE.CloseHandle(handles[0]); - Kernel32.INSTANCE.CloseHandle(handles[1]); + Kernel32.INSTANCE.CloseHandle(handles[0]); + Kernel32.INSTANCE.CloseHandle(handles[1]); - // invalid Handle - handles[0] = WinBase.INVALID_HANDLE_VALUE; - handles[1] = Kernel32.INSTANCE.CreateEvent(null, false, false, null); + // invalid Handle + handles[0] = WinBase.INVALID_HANDLE_VALUE; + handles[1] = Kernel32.INSTANCE.CreateEvent(null, false, false, null); - // returns WAIT_FAILED since handle is invalid - assertEquals(WinBase.WAIT_FAILED, Kernel32.INSTANCE.WaitForMultipleObjects( - handles.length, handles, false, 5000)); + // returns WAIT_FAILED since handle is invalid + assertEquals(WinBase.WAIT_FAILED, Kernel32.INSTANCE.WaitForMultipleObjects( + handles.length, handles, false, 5000)); - Kernel32.INSTANCE.CloseHandle(handles[1]); + Kernel32.INSTANCE.CloseHandle(handles[1]); } public void testGetCurrentThreadId() { - assertTrue(Kernel32.INSTANCE.GetCurrentThreadId() > 0); + assertTrue(Kernel32.INSTANCE.GetCurrentThreadId() > 0); } public void testGetCurrentThread() { - HANDLE h = Kernel32.INSTANCE.GetCurrentThread(); - assertNotNull(h); - assertFalse(h.equals(0)); - // CloseHandle does not need to be called for a thread handle - assertFalse(Kernel32.INSTANCE.CloseHandle(h)); - assertEquals(WinError.ERROR_INVALID_HANDLE, Kernel32.INSTANCE.GetLastError()); + HANDLE h = Kernel32.INSTANCE.GetCurrentThread(); + assertNotNull(h); + assertFalse(h.equals(0)); + // CloseHandle does not need to be called for a thread handle + assertFalse(Kernel32.INSTANCE.CloseHandle(h)); + assertEquals(WinError.ERROR_INVALID_HANDLE, Kernel32.INSTANCE.GetLastError()); } public void testOpenThread() { - HANDLE h = Kernel32.INSTANCE.OpenThread(WinNT.THREAD_ALL_ACCESS, false, - Kernel32.INSTANCE.GetCurrentThreadId()); - assertNotNull(h); - assertFalse(h.equals(0)); - assertTrue(Kernel32.INSTANCE.CloseHandle(h)); + HANDLE h = Kernel32.INSTANCE.OpenThread(WinNT.THREAD_ALL_ACCESS, false, + Kernel32.INSTANCE.GetCurrentThreadId()); + assertNotNull(h); + assertFalse(h.equals(0)); + assertTrue(Kernel32.INSTANCE.CloseHandle(h)); } public void testGetCurrentProcessId() { - assertTrue(Kernel32.INSTANCE.GetCurrentProcessId() > 0); + assertTrue(Kernel32.INSTANCE.GetCurrentProcessId() > 0); } public void testGetCurrentProcess() { - HANDLE h = Kernel32.INSTANCE.GetCurrentProcess(); - assertNotNull(h); - assertFalse(h.equals(0)); - // CloseHandle does not need to be called for a process handle - assertFalse(Kernel32.INSTANCE.CloseHandle(h)); - assertEquals(WinError.ERROR_INVALID_HANDLE, Kernel32.INSTANCE.GetLastError()); + HANDLE h = Kernel32.INSTANCE.GetCurrentProcess(); + assertNotNull(h); + assertFalse(h.equals(0)); + // CloseHandle does not need to be called for a process handle + assertFalse(Kernel32.INSTANCE.CloseHandle(h)); + assertEquals(WinError.ERROR_INVALID_HANDLE, Kernel32.INSTANCE.GetLastError()); } public void testOpenProcess() { - HANDLE h = Kernel32.INSTANCE.OpenProcess(0, false, - Kernel32.INSTANCE.GetCurrentProcessId()); - assertNull(h); - // opening your own process fails with access denied - assertEquals(WinError.ERROR_ACCESS_DENIED, Kernel32.INSTANCE.GetLastError()); + HANDLE h = Kernel32.INSTANCE.OpenProcess(0, false, + Kernel32.INSTANCE.GetCurrentProcessId()); + assertNull(h); + // opening your own process fails with access denied + assertEquals(WinError.ERROR_ACCESS_DENIED, Kernel32.INSTANCE.GetLastError()); } public void testGetTempPath() { - char[] buffer = new char[WinDef.MAX_PATH]; - assertTrue(Kernel32.INSTANCE.GetTempPath(new DWORD(WinDef.MAX_PATH), buffer).intValue() > 0); + char[] buffer = new char[WinDef.MAX_PATH]; + assertTrue(Kernel32.INSTANCE.GetTempPath(new DWORD(WinDef.MAX_PATH), buffer).intValue() > 0); } - public void testGetTickCount() throws InterruptedException { - // Tick count rolls over every 49.7 days, so to safeguard from - // roll-over, we will get two time spans. At least one should - // yield a positive. - int tick1 = Kernel32.INSTANCE.GetTickCount(); - Thread.sleep(10); - int tick2 = Kernel32.INSTANCE.GetTickCount(); - Thread.sleep(10); - int tick3 = Kernel32.INSTANCE.GetTickCount(); + public void testGetTickCount() throws InterruptedException { + // Tick count rolls over every 49.7 days, so to safeguard from + // roll-over, we will get two time spans. At least one should + // yield a positive. + int tick1 = Kernel32.INSTANCE.GetTickCount(); + Thread.sleep(10); + int tick2 = Kernel32.INSTANCE.GetTickCount(); + Thread.sleep(10); + int tick3 = Kernel32.INSTANCE.GetTickCount(); - assertTrue(tick2 > tick1 || tick3 > tick2); - } + assertTrue(tick2 > tick1 || tick3 > tick2); + } public void testGetVersion() { - DWORD version = Kernel32.INSTANCE.GetVersion(); - assertTrue("Version high should be non-zero: 0x" + Integer.toHexString(version.getHigh().intValue()), version.getHigh().intValue() != 0); - assertTrue("Version low should be >= 0: 0x" + Integer.toHexString(version.getLow().intValue()), version.getLow().intValue() >= 0); + DWORD version = Kernel32.INSTANCE.GetVersion(); + assertTrue("Version high should be non-zero: 0x" + Integer.toHexString(version.getHigh().intValue()), version.getHigh().intValue() != 0); + assertTrue("Version low should be >= 0: 0x" + Integer.toHexString(version.getLow().intValue()), version.getLow().intValue() >= 0); } public void testGetVersionEx_OSVERSIONINFO() { - OSVERSIONINFO lpVersionInfo = new OSVERSIONINFO(); - assertEquals(lpVersionInfo.size(), lpVersionInfo.dwOSVersionInfoSize.longValue()); - assertTrue(Kernel32.INSTANCE.GetVersionEx(lpVersionInfo)); - assertTrue(lpVersionInfo.dwMajorVersion.longValue() > 0); - assertTrue(lpVersionInfo.dwMinorVersion.longValue() >= 0); - assertEquals(lpVersionInfo.size(), lpVersionInfo.dwOSVersionInfoSize.longValue()); - assertTrue(lpVersionInfo.dwPlatformId.longValue() > 0); - assertTrue(lpVersionInfo.dwBuildNumber.longValue() > 0); - assertTrue(Native.toString(lpVersionInfo.szCSDVersion).length() >= 0); + OSVERSIONINFO lpVersionInfo = new OSVERSIONINFO(); + assertEquals(lpVersionInfo.size(), lpVersionInfo.dwOSVersionInfoSize.longValue()); + assertTrue(Kernel32.INSTANCE.GetVersionEx(lpVersionInfo)); + assertTrue(lpVersionInfo.dwMajorVersion.longValue() > 0); + assertTrue(lpVersionInfo.dwMinorVersion.longValue() >= 0); + assertEquals(lpVersionInfo.size(), lpVersionInfo.dwOSVersionInfoSize.longValue()); + assertTrue(lpVersionInfo.dwPlatformId.longValue() > 0); + assertTrue(lpVersionInfo.dwBuildNumber.longValue() > 0); + assertTrue(Native.toString(lpVersionInfo.szCSDVersion).length() >= 0); } public void testGetVersionEx_OSVERSIONINFOEX() { - OSVERSIONINFOEX lpVersionInfo = new OSVERSIONINFOEX(); - assertEquals(lpVersionInfo.size(), lpVersionInfo.dwOSVersionInfoSize.longValue()); - assertTrue(Kernel32.INSTANCE.GetVersionEx(lpVersionInfo)); - assertTrue(lpVersionInfo.dwMajorVersion.longValue() > 0); - assertTrue(lpVersionInfo.dwMinorVersion.longValue() >= 0); - assertEquals(lpVersionInfo.size(), lpVersionInfo.dwOSVersionInfoSize.longValue()); - assertTrue(lpVersionInfo.dwPlatformId.longValue() > 0); - assertTrue(lpVersionInfo.dwBuildNumber.longValue() > 0); - assertTrue(Native.toString(lpVersionInfo.szCSDVersion).length() >= 0); - assertTrue(lpVersionInfo.wProductType >= 0); + OSVERSIONINFOEX lpVersionInfo = new OSVERSIONINFOEX(); + assertEquals(lpVersionInfo.size(), lpVersionInfo.dwOSVersionInfoSize.longValue()); + assertTrue(Kernel32.INSTANCE.GetVersionEx(lpVersionInfo)); + assertTrue(lpVersionInfo.dwMajorVersion.longValue() > 0); + assertTrue(lpVersionInfo.dwMinorVersion.longValue() >= 0); + assertEquals(lpVersionInfo.size(), lpVersionInfo.dwOSVersionInfoSize.longValue()); + assertTrue(lpVersionInfo.dwPlatformId.longValue() > 0); + assertTrue(lpVersionInfo.dwBuildNumber.longValue() > 0); + assertTrue(Native.toString(lpVersionInfo.szCSDVersion).length() >= 0); + assertTrue(lpVersionInfo.wProductType >= 0); } public void testGetSystemInfo() { - SYSTEM_INFO lpSystemInfo = new SYSTEM_INFO(); - Kernel32.INSTANCE.GetSystemInfo(lpSystemInfo); - assertTrue(lpSystemInfo.dwNumberOfProcessors.intValue() > 0); + SYSTEM_INFO lpSystemInfo = new SYSTEM_INFO(); + Kernel32.INSTANCE.GetSystemInfo(lpSystemInfo); + assertTrue(lpSystemInfo.dwNumberOfProcessors.intValue() > 0); } public void testIsWow64Process() { - try { - IntByReference isWow64 = new IntByReference(42); - HANDLE hProcess = Kernel32.INSTANCE.GetCurrentProcess(); - assertTrue(Kernel32.INSTANCE.IsWow64Process(hProcess, isWow64)); - assertTrue(0 == isWow64.getValue() || 1 == isWow64.getValue()); - } catch (UnsatisfiedLinkError e) { - // IsWow64Process is not available on this OS - } + try { + IntByReference isWow64 = new IntByReference(42); + HANDLE hProcess = Kernel32.INSTANCE.GetCurrentProcess(); + assertTrue(Kernel32.INSTANCE.IsWow64Process(hProcess, isWow64)); + assertTrue(0 == isWow64.getValue() || 1 == isWow64.getValue()); + } catch (UnsatisfiedLinkError e) { + // IsWow64Process is not available on this OS + } } public void testGetNativeSystemInfo() { - try { - SYSTEM_INFO lpSystemInfo = new SYSTEM_INFO(); - Kernel32.INSTANCE.GetNativeSystemInfo(lpSystemInfo); - assertTrue(lpSystemInfo.dwNumberOfProcessors.intValue() > 0); - } catch (UnsatisfiedLinkError e) { - // only available under WOW64 - } + try { + SYSTEM_INFO lpSystemInfo = new SYSTEM_INFO(); + Kernel32.INSTANCE.GetNativeSystemInfo(lpSystemInfo); + assertTrue(lpSystemInfo.dwNumberOfProcessors.intValue() > 0); + } catch (UnsatisfiedLinkError e) { + // only available under WOW64 + } } public void testGlobalMemoryStatusEx() { - MEMORYSTATUSEX lpBuffer = new MEMORYSTATUSEX(); - assertTrue(Kernel32.INSTANCE.GlobalMemoryStatusEx(lpBuffer)); - assertTrue(lpBuffer.ullTotalPhys.longValue() > 0); - assertTrue(lpBuffer.dwMemoryLoad.intValue() >= 0 && lpBuffer.dwMemoryLoad.intValue() <= 100); - assertEquals(0, lpBuffer.ullAvailExtendedVirtual.intValue()); + MEMORYSTATUSEX lpBuffer = new MEMORYSTATUSEX(); + assertTrue(Kernel32.INSTANCE.GlobalMemoryStatusEx(lpBuffer)); + assertTrue(lpBuffer.ullTotalPhys.longValue() > 0); + assertTrue(lpBuffer.dwMemoryLoad.intValue() >= 0 && lpBuffer.dwMemoryLoad.intValue() <= 100); + assertEquals(0, lpBuffer.ullAvailExtendedVirtual.intValue()); } public void testDeleteFile() { - String filename = Kernel32Util.getTempPath() + "\\FileDoesNotExist.jna"; - assertFalse(Kernel32.INSTANCE.DeleteFile(filename)); - assertEquals(WinError.ERROR_FILE_NOT_FOUND, Kernel32.INSTANCE.GetLastError()); + String filename = Kernel32Util.getTempPath() + "\\FileDoesNotExist.jna"; + assertFalse(Kernel32.INSTANCE.DeleteFile(filename)); + assertEquals(WinError.ERROR_FILE_NOT_FOUND, Kernel32.INSTANCE.GetLastError()); } public void testReadFile() throws IOException { - String expected = "jna - testReadFile"; - File tmp = File.createTempFile("testReadFile", "jna"); - tmp.deleteOnExit(); - - FileWriter fw = new FileWriter(tmp); - try { - fw.append(expected); - } finally { - fw.close(); - } - - HANDLE hFile = Kernel32.INSTANCE.CreateFile(tmp.getAbsolutePath(), WinNT.GENERIC_READ, WinNT.FILE_SHARE_READ, - new WinBase.SECURITY_ATTRIBUTES(), WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); - assertFalse("Failed to create file handle: " + tmp, WinBase.INVALID_HANDLE_VALUE.equals(hFile)); - - try { + String expected = "jna - testReadFile"; + File tmp = File.createTempFile("testReadFile", "jna"); + tmp.deleteOnExit(); + + FileWriter fw = new FileWriter(tmp); + try { + fw.append(expected); + } finally { + fw.close(); + } + + HANDLE hFile = Kernel32.INSTANCE.CreateFile(tmp.getAbsolutePath(), WinNT.GENERIC_READ, WinNT.FILE_SHARE_READ, + new WinBase.SECURITY_ATTRIBUTES(), WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); + assertFalse("Failed to create file handle: " + tmp, WinBase.INVALID_HANDLE_VALUE.equals(hFile)); + + try { byte[] readBuffer=new byte[expected.length() + Byte.MAX_VALUE]; - IntByReference lpNumberOfBytesRead = new IntByReference(0); - assertTrue("Failed to read from file", Kernel32.INSTANCE.ReadFile(hFile, readBuffer, readBuffer.length, lpNumberOfBytesRead, null)); + IntByReference lpNumberOfBytesRead = new IntByReference(0); + assertTrue("Failed to read from file", Kernel32.INSTANCE.ReadFile(hFile, readBuffer, readBuffer.length, lpNumberOfBytesRead, null)); - int read = lpNumberOfBytesRead.getValue(); - assertEquals("Mismatched read size", expected.length(), read); + int read = lpNumberOfBytesRead.getValue(); + assertEquals("Mismatched read size", expected.length(), read); - assertEquals("Mismatched read content", expected, new String(readBuffer, 0, read)); - } finally { - assertTrue("Failed to close file", Kernel32.INSTANCE.CloseHandle(hFile)); - } + assertEquals("Mismatched read content", expected, new String(readBuffer, 0, read)); + } finally { + assertTrue("Failed to close file", Kernel32.INSTANCE.CloseHandle(hFile)); + } } public void testSetHandleInformation() throws IOException { - File tmp = File.createTempFile("testSetHandleInformation", "jna"); - tmp.deleteOnExit(); + File tmp = File.createTempFile("testSetHandleInformation", "jna"); + tmp.deleteOnExit(); - HANDLE hFile = Kernel32.INSTANCE.CreateFile(tmp.getAbsolutePath(), WinNT.GENERIC_READ, WinNT.FILE_SHARE_READ, - new WinBase.SECURITY_ATTRIBUTES(), WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); - assertFalse(hFile == WinBase.INVALID_HANDLE_VALUE); + HANDLE hFile = Kernel32.INSTANCE.CreateFile(tmp.getAbsolutePath(), WinNT.GENERIC_READ, WinNT.FILE_SHARE_READ, + new WinBase.SECURITY_ATTRIBUTES(), WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); + assertFalse(hFile == WinBase.INVALID_HANDLE_VALUE); - assertTrue(Kernel32.INSTANCE.SetHandleInformation(hFile, WinBase.HANDLE_FLAG_PROTECT_FROM_CLOSE, 0)); - assertTrue(Kernel32.INSTANCE.CloseHandle(hFile)); + assertTrue(Kernel32.INSTANCE.SetHandleInformation(hFile, WinBase.HANDLE_FLAG_PROTECT_FROM_CLOSE, 0)); + assertTrue(Kernel32.INSTANCE.CloseHandle(hFile)); } public void testCreatePipe() { - HANDLEByReference hReadPipe = new HANDLEByReference(); - HANDLEByReference hWritePipe = new HANDLEByReference(); + HANDLEByReference hReadPipe = new HANDLEByReference(); + HANDLEByReference hWritePipe = new HANDLEByReference(); - assertTrue(Kernel32.INSTANCE.CreatePipe(hReadPipe, hWritePipe, null, 0)); - assertTrue(Kernel32.INSTANCE.CloseHandle(hReadPipe.getValue())); - assertTrue(Kernel32.INSTANCE.CloseHandle(hWritePipe.getValue())); + assertTrue(Kernel32.INSTANCE.CreatePipe(hReadPipe, hWritePipe, null, 0)); + assertTrue(Kernel32.INSTANCE.CloseHandle(hReadPipe.getValue())); + assertTrue(Kernel32.INSTANCE.CloseHandle(hWritePipe.getValue())); } public void testGetExitCodeProcess() { - IntByReference lpExitCode = new IntByReference(0); - assertTrue(Kernel32.INSTANCE.GetExitCodeProcess(Kernel32.INSTANCE.GetCurrentProcess(), lpExitCode)); - assertEquals(WinBase.STILL_ACTIVE, lpExitCode.getValue()); + IntByReference lpExitCode = new IntByReference(0); + assertTrue(Kernel32.INSTANCE.GetExitCodeProcess(Kernel32.INSTANCE.GetCurrentProcess(), lpExitCode)); + assertEquals(WinBase.STILL_ACTIVE, lpExitCode.getValue()); } public void testTerminateProcess() throws IOException { - File tmp = File.createTempFile("testTerminateProcess", "jna"); - tmp.deleteOnExit(); - HANDLE hFile = Kernel32.INSTANCE.CreateFile(tmp.getAbsolutePath(), WinNT.GENERIC_READ, WinNT.FILE_SHARE_READ, - new WinBase.SECURITY_ATTRIBUTES(), WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); + File tmp = File.createTempFile("testTerminateProcess", "jna"); + tmp.deleteOnExit(); + HANDLE hFile = Kernel32.INSTANCE.CreateFile(tmp.getAbsolutePath(), WinNT.GENERIC_READ, WinNT.FILE_SHARE_READ, + new WinBase.SECURITY_ATTRIBUTES(), WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); - assertFalse(Kernel32.INSTANCE.TerminateProcess(hFile, 1)); - assertEquals(WinError.ERROR_INVALID_HANDLE, Kernel32.INSTANCE.GetLastError()); - assertTrue(Kernel32.INSTANCE.CloseHandle(hFile)); + assertFalse(Kernel32.INSTANCE.TerminateProcess(hFile, 1)); + assertEquals(WinError.ERROR_INVALID_HANDLE, Kernel32.INSTANCE.GetLastError()); + assertTrue(Kernel32.INSTANCE.CloseHandle(hFile)); } public void testGetFileAttributes() { - assertTrue(WinBase.INVALID_FILE_ATTRIBUTES != Kernel32.INSTANCE.GetFileAttributes(".")); + assertTrue(WinBase.INVALID_FILE_ATTRIBUTES != Kernel32.INSTANCE.GetFileAttributes(".")); } public void testCopyFile() throws IOException { @@ -547,8 +548,8 @@ public void testGetSetFileTime() throws IOException { tmp.deleteOnExit(); HANDLE hFile = Kernel32.INSTANCE.CreateFile(tmp.getAbsolutePath(), WinNT.GENERIC_WRITE, WinNT.FILE_SHARE_WRITE, - new WinBase.SECURITY_ATTRIBUTES(), WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); - assertFalse(hFile == WinBase.INVALID_HANDLE_VALUE); + new WinBase.SECURITY_ATTRIBUTES(), WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); + assertFalse(hFile == WinBase.INVALID_HANDLE_VALUE); WinBase.FILETIME.ByReference creationTime = new WinBase.FILETIME.ByReference(); WinBase.FILETIME.ByReference accessTime = new WinBase.FILETIME.ByReference(); @@ -710,55 +711,55 @@ public final void testWritePrivateProfileSection() throws IOException { } public final void testCreateRemoteThread() throws IOException { - HANDLE hThrd = Kernel32.INSTANCE.CreateRemoteThread(null, null, 0, null, null, null, null); - assertNull(hThrd); - assertEquals(Kernel32.INSTANCE.GetLastError(), WinError.ERROR_INVALID_HANDLE); + HANDLE hThrd = Kernel32.INSTANCE.CreateRemoteThread(null, null, 0, null, null, null, null); + assertNull(hThrd); + assertEquals(Kernel32.INSTANCE.GetLastError(), WinError.ERROR_INVALID_HANDLE); } public void testWriteProcessMemory() { - Kernel32 kernel = Kernel32.INSTANCE; + Kernel32 kernel = Kernel32.INSTANCE; - boolean successWrite = kernel.WriteProcessMemory(null, Pointer.NULL, Pointer.NULL, 1, null); - assertFalse(successWrite); - assertEquals(kernel.GetLastError(), WinError.ERROR_INVALID_HANDLE); + boolean successWrite = kernel.WriteProcessMemory(null, Pointer.NULL, Pointer.NULL, 1, null); + assertFalse(successWrite); + assertEquals(kernel.GetLastError(), WinError.ERROR_INVALID_HANDLE); - ByteBuffer bufDest = ByteBuffer.allocateDirect(4); - bufDest.put(new byte[]{0,1,2,3}); - ByteBuffer bufSrc = ByteBuffer.allocateDirect(4); - bufSrc.put(new byte[]{5,10,15,20}); - Pointer ptrSrc = Native.getDirectBufferPointer(bufSrc); - Pointer ptrDest = Native.getDirectBufferPointer(bufDest); + ByteBuffer bufDest = ByteBuffer.allocateDirect(4); + bufDest.put(new byte[]{0,1,2,3}); + ByteBuffer bufSrc = ByteBuffer.allocateDirect(4); + bufSrc.put(new byte[]{5,10,15,20}); + Pointer ptrSrc = Native.getDirectBufferPointer(bufSrc); + Pointer ptrDest = Native.getDirectBufferPointer(bufDest); - HANDLE selfHandle = kernel.GetCurrentProcess(); - kernel.WriteProcessMemory(selfHandle, ptrDest, ptrSrc, 3, null);//Write only the first three + HANDLE selfHandle = kernel.GetCurrentProcess(); + kernel.WriteProcessMemory(selfHandle, ptrDest, ptrSrc, 3, null);//Write only the first three - assertEquals(bufDest.get(0),5); - assertEquals(bufDest.get(1),10); - assertEquals(bufDest.get(2),15); - assertEquals(bufDest.get(3),3); - } + assertEquals(bufDest.get(0),5); + assertEquals(bufDest.get(1),10); + assertEquals(bufDest.get(2),15); + assertEquals(bufDest.get(3),3); + } public void testReadProcessMemory() { - Kernel32 kernel = Kernel32.INSTANCE; + Kernel32 kernel = Kernel32.INSTANCE; - boolean successRead = kernel.ReadProcessMemory(null, Pointer.NULL, Pointer.NULL, 1, null); - assertFalse(successRead); - assertEquals(kernel.GetLastError(), WinError.ERROR_INVALID_HANDLE); + boolean successRead = kernel.ReadProcessMemory(null, Pointer.NULL, Pointer.NULL, 1, null); + assertFalse(successRead); + assertEquals(kernel.GetLastError(), WinError.ERROR_INVALID_HANDLE); - ByteBuffer bufSrc = ByteBuffer.allocateDirect(4); - bufSrc.put(new byte[]{5,10,15,20}); - ByteBuffer bufDest = ByteBuffer.allocateDirect(4); - bufDest.put(new byte[]{0,1,2,3}); - Pointer ptrSrc = Native.getDirectBufferPointer(bufSrc); - Pointer ptrDest = Native.getDirectBufferPointer(bufDest); + ByteBuffer bufSrc = ByteBuffer.allocateDirect(4); + bufSrc.put(new byte[]{5,10,15,20}); + ByteBuffer bufDest = ByteBuffer.allocateDirect(4); + bufDest.put(new byte[]{0,1,2,3}); + Pointer ptrSrc = Native.getDirectBufferPointer(bufSrc); + Pointer ptrDest = Native.getDirectBufferPointer(bufDest); - HANDLE selfHandle = kernel.GetCurrentProcess(); - kernel.ReadProcessMemory(selfHandle, ptrSrc, ptrDest, 3, null);//Read only the first three + HANDLE selfHandle = kernel.GetCurrentProcess(); + kernel.ReadProcessMemory(selfHandle, ptrSrc, ptrDest, 3, null);//Read only the first three - assertEquals(bufDest.get(0),5); - assertEquals(bufDest.get(1),10); - assertEquals(bufDest.get(2),15); - assertEquals(bufDest.get(3),3); + assertEquals(bufDest.get(0),5); + assertEquals(bufDest.get(1),10); + assertEquals(bufDest.get(2),15); + assertEquals(bufDest.get(3),3); } public void testVirtualQueryEx() { @@ -767,167 +768,205 @@ public void testVirtualQueryEx() { SIZE_T bytesRead = Kernel32.INSTANCE.VirtualQueryEx(selfHandle, Pointer.NULL, mbi, new SIZE_T(mbi.size())); assertTrue(bytesRead.intValue() > 0); } - - public void testGetCommState() { - WinBase.DCB lpDCB = new WinBase.DCB(); - // Here we test a com port that definitely does not exist! - HANDLE handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\comDummy", - WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, - null); - - int lastError = Kernel32.INSTANCE.GetLastError(); - assertEquals(lastError, WinNT.ERROR_FILE_NOT_FOUND); - //try to read the com port state using the invalid handle - assertFalse(Kernel32.INSTANCE.GetCommState(handleSerialPort, lpDCB)); - // Check if we can open a connection to com port1 - // If yes, we try to read the com state - // If no com port exists we have to skip this test - handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\com1", WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, - null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); - lastError = Kernel32.INSTANCE.GetLastError(); - if (WinNT.NO_ERROR == lastError) { - assertFalse(WinNT.INVALID_HANDLE_VALUE.equals(handleSerialPort)); - try { - lpDCB = new WinBase.DCB(); - assertTrue(Kernel32.INSTANCE.GetCommState(handleSerialPort, lpDCB)); - switch (lpDCB.BaudRate.intValue()) { - case WinBase.CBR_110: - case WinBase.CBR_1200: - case WinBase.CBR_128000: - case WinBase.CBR_14400: - case WinBase.CBR_19200: - case WinBase.CBR_2400: - case WinBase.CBR_256000: - case WinBase.CBR_300: - case WinBase.CBR_38400: - case WinBase.CBR_4800: - case WinBase.CBR_56000: - case WinBase.CBR_600: - case WinBase.CBR_9600: - break; - default: - fail("Received value of WinBase.DCB.BaudRate is not valid"); - } - } finally { - Kernel32.INSTANCE.CloseHandle(handleSerialPort); - } - } - } - - public void testSetCommState() { - WinBase.DCB lpDCB = new WinBase.DCB(); - // Here we test a com port that definitely does not exist! - HANDLE handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\comDummy", - WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, - null); - - int lastError = Kernel32.INSTANCE.GetLastError(); - assertEquals(lastError, WinNT.ERROR_FILE_NOT_FOUND); - // try to read the com port state using the invalid handle - assertFalse(Kernel32.INSTANCE.SetCommState(handleSerialPort, lpDCB)); - // Check if we can open a connection to com port1 - // If yes, we try to read the com state - // If no com port exists we have to skip this test - handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\com1", WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, - null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); - lastError = Kernel32.INSTANCE.GetLastError(); - if (WinNT.NO_ERROR == lastError) { - assertFalse(WinNT.INVALID_HANDLE_VALUE.equals(handleSerialPort)); - try { - lpDCB = new WinBase.DCB(); - assertTrue(Kernel32.INSTANCE.GetCommState(handleSerialPort, lpDCB)); - DWORD oldBaudRate = new DWORD(lpDCB.BaudRate.longValue()); - - lpDCB.BaudRate = new DWORD(WinBase.CBR_110); - - assertTrue(Kernel32.INSTANCE.SetCommState(handleSerialPort, lpDCB)); - WinBase.DCB lpNewDCB = new WinBase.DCB(); - assertTrue(Kernel32.INSTANCE.GetCommState(handleSerialPort, lpNewDCB)); - - assertEquals(WinBase.CBR_110, lpNewDCB.BaudRate.intValue()); - - lpDCB.BaudRate = oldBaudRate; - assertTrue(Kernel32.INSTANCE.SetCommState(handleSerialPort, lpDCB)); - - } finally { - Kernel32.INSTANCE.CloseHandle(handleSerialPort); - } - } - } - - public void testGetCommTimeouts() { - WinBase.COMMTIMEOUTS lpCommTimeouts = new WinBase.COMMTIMEOUTS(); - - // Here we test a com port that definitely does not exist! - HANDLE handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\comDummy", - WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, - null); - - int lastError = Kernel32.INSTANCE.GetLastError(); - assertEquals(lastError, WinNT.ERROR_FILE_NOT_FOUND); - // try to read the com port timeouts using the invalid handle - assertFalse(Kernel32.INSTANCE.GetCommTimeouts(handleSerialPort, lpCommTimeouts)); - - // Check if we can open a connection to com port1 - // If yes, we try to read the com state - // If no com port exists we have to skip this test - handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\com1", WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, - null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); - lastError = Kernel32.INSTANCE.GetLastError(); - if (WinNT.NO_ERROR == lastError) { - assertFalse(WinNT.INVALID_HANDLE_VALUE.equals(handleSerialPort)); - try { - lpCommTimeouts = new WinBase.COMMTIMEOUTS(); - assertTrue(Kernel32.INSTANCE.GetCommTimeouts(handleSerialPort, lpCommTimeouts)); - } finally { - Kernel32.INSTANCE.CloseHandle(handleSerialPort); - } - } - } - - public void testSetCommTimeouts() { - WinBase.COMMTIMEOUTS lpCommTimeouts = new WinBase.COMMTIMEOUTS(); - - // Here we test a com port that definitely does not exist! - HANDLE handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\comDummy", - WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, - null); - - int lastError = Kernel32.INSTANCE.GetLastError(); - assertEquals(lastError, WinNT.ERROR_FILE_NOT_FOUND); - // try to store the com port timeouts using the invalid handle - assertFalse(Kernel32.INSTANCE.SetCommTimeouts(handleSerialPort, lpCommTimeouts)); - - // Check if we can open a connection to com port1 - // If yes, we try to store the com timeouts - // If no com port exists we have to skip this test - handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\com1", WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, - null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); - lastError = Kernel32.INSTANCE.GetLastError(); - if (WinNT.NO_ERROR == lastError) { - assertFalse(WinNT.INVALID_HANDLE_VALUE.equals(handleSerialPort)); - try { - lpCommTimeouts = new WinBase.COMMTIMEOUTS(); - assertTrue(Kernel32.INSTANCE.GetCommTimeouts(handleSerialPort, lpCommTimeouts)); - - DWORD oldReadIntervalTimeout = new DWORD(lpCommTimeouts.ReadIntervalTimeout.longValue()); - - lpCommTimeouts.ReadIntervalTimeout = new DWORD(20); - - assertTrue(Kernel32.INSTANCE.SetCommTimeouts(handleSerialPort, lpCommTimeouts)); - - WinBase.COMMTIMEOUTS lpNewCommTimeouts = new WinBase.COMMTIMEOUTS(); - assertTrue(Kernel32.INSTANCE.GetCommTimeouts(handleSerialPort, lpNewCommTimeouts)); - - assertEquals(20, lpNewCommTimeouts.ReadIntervalTimeout.intValue()); - - lpCommTimeouts.ReadIntervalTimeout = oldReadIntervalTimeout; - - assertTrue(Kernel32.INSTANCE.SetCommTimeouts(handleSerialPort, lpCommTimeouts)); - - } finally { - Kernel32.INSTANCE.CloseHandle(handleSerialPort); - } - } - } + + public void testGetCommState() { + WinBase.DCB lpDCB = new WinBase.DCB(); + // Here we test a com port that definitely does not exist! + HANDLE handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\comDummy", + WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, + null); + + int lastError = Kernel32.INSTANCE.GetLastError(); + assertEquals(lastError, WinNT.ERROR_FILE_NOT_FOUND); + //try to read the com port state using the invalid handle + assertFalse(Kernel32.INSTANCE.GetCommState(handleSerialPort, lpDCB)); + // Check if we can open a connection to com port1 + // If yes, we try to read the com state + // If no com port exists we have to skip this test + handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\com1", WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, + null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); + lastError = Kernel32.INSTANCE.GetLastError(); + if (WinNT.NO_ERROR == lastError) { + assertFalse(WinNT.INVALID_HANDLE_VALUE.equals(handleSerialPort)); + try { + lpDCB = new WinBase.DCB(); + assertTrue(Kernel32.INSTANCE.GetCommState(handleSerialPort, lpDCB)); + switch (lpDCB.BaudRate.intValue()) { + case WinBase.CBR_110: + case WinBase.CBR_1200: + case WinBase.CBR_128000: + case WinBase.CBR_14400: + case WinBase.CBR_19200: + case WinBase.CBR_2400: + case WinBase.CBR_256000: + case WinBase.CBR_300: + case WinBase.CBR_38400: + case WinBase.CBR_4800: + case WinBase.CBR_56000: + case WinBase.CBR_600: + case WinBase.CBR_9600: + break; + default: + fail("Received value of WinBase.DCB.BaudRate is not valid"); + } + } finally { + Kernel32.INSTANCE.CloseHandle(handleSerialPort); + } + } + } + + public void testSetCommState() { + WinBase.DCB lpDCB = new WinBase.DCB(); + // Here we test a com port that definitely does not exist! + HANDLE handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\comDummy", + WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, + null); + + int lastError = Kernel32.INSTANCE.GetLastError(); + assertEquals(lastError, WinNT.ERROR_FILE_NOT_FOUND); + // try to read the com port state using the invalid handle + assertFalse(Kernel32.INSTANCE.SetCommState(handleSerialPort, lpDCB)); + // Check if we can open a connection to com port1 + // If yes, we try to read the com state + // If no com port exists we have to skip this test + handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\com1", WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, + null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); + lastError = Kernel32.INSTANCE.GetLastError(); + if (WinNT.NO_ERROR == lastError) { + assertFalse(WinNT.INVALID_HANDLE_VALUE.equals(handleSerialPort)); + try { + lpDCB = new WinBase.DCB(); + assertTrue(Kernel32.INSTANCE.GetCommState(handleSerialPort, lpDCB)); + DWORD oldBaudRate = new DWORD(lpDCB.BaudRate.longValue()); + + lpDCB.BaudRate = new DWORD(WinBase.CBR_110); + + assertTrue(Kernel32.INSTANCE.SetCommState(handleSerialPort, lpDCB)); + WinBase.DCB lpNewDCB = new WinBase.DCB(); + assertTrue(Kernel32.INSTANCE.GetCommState(handleSerialPort, lpNewDCB)); + + assertEquals(WinBase.CBR_110, lpNewDCB.BaudRate.intValue()); + + lpDCB.BaudRate = oldBaudRate; + assertTrue(Kernel32.INSTANCE.SetCommState(handleSerialPort, lpDCB)); + + } finally { + Kernel32.INSTANCE.CloseHandle(handleSerialPort); + } + } + } + + public void testGetCommTimeouts() { + WinBase.COMMTIMEOUTS lpCommTimeouts = new WinBase.COMMTIMEOUTS(); + + // Here we test a com port that definitely does not exist! + HANDLE handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\comDummy", + WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, + null); + + int lastError = Kernel32.INSTANCE.GetLastError(); + assertEquals(lastError, WinNT.ERROR_FILE_NOT_FOUND); + // try to read the com port timeouts using the invalid handle + assertFalse(Kernel32.INSTANCE.GetCommTimeouts(handleSerialPort, lpCommTimeouts)); + + // Check if we can open a connection to com port1 + // If yes, we try to read the com state + // If no com port exists we have to skip this test + handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\com1", WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, + null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); + lastError = Kernel32.INSTANCE.GetLastError(); + if (WinNT.NO_ERROR == lastError) { + assertFalse(WinNT.INVALID_HANDLE_VALUE.equals(handleSerialPort)); + try { + lpCommTimeouts = new WinBase.COMMTIMEOUTS(); + assertTrue(Kernel32.INSTANCE.GetCommTimeouts(handleSerialPort, lpCommTimeouts)); + } finally { + Kernel32.INSTANCE.CloseHandle(handleSerialPort); + } + } + } + + public void testSetCommTimeouts() { + WinBase.COMMTIMEOUTS lpCommTimeouts = new WinBase.COMMTIMEOUTS(); + + // Here we test a com port that definitely does not exist! + HANDLE handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\comDummy", + WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, + null); + + int lastError = Kernel32.INSTANCE.GetLastError(); + assertEquals(lastError, WinNT.ERROR_FILE_NOT_FOUND); + // try to store the com port timeouts using the invalid handle + assertFalse(Kernel32.INSTANCE.SetCommTimeouts(handleSerialPort, lpCommTimeouts)); + + // Check if we can open a connection to com port1 + // If yes, we try to store the com timeouts + // If no com port exists we have to skip this test + handleSerialPort = Kernel32.INSTANCE.CreateFile("\\\\.\\com1", WinNT.GENERIC_READ | WinNT.GENERIC_WRITE, 0, + null, WinNT.OPEN_EXISTING, WinNT.FILE_ATTRIBUTE_NORMAL, null); + lastError = Kernel32.INSTANCE.GetLastError(); + if (WinNT.NO_ERROR == lastError) { + assertFalse(WinNT.INVALID_HANDLE_VALUE.equals(handleSerialPort)); + try { + lpCommTimeouts = new WinBase.COMMTIMEOUTS(); + assertTrue(Kernel32.INSTANCE.GetCommTimeouts(handleSerialPort, lpCommTimeouts)); + + DWORD oldReadIntervalTimeout = new DWORD(lpCommTimeouts.ReadIntervalTimeout.longValue()); + + lpCommTimeouts.ReadIntervalTimeout = new DWORD(20); + + assertTrue(Kernel32.INSTANCE.SetCommTimeouts(handleSerialPort, lpCommTimeouts)); + + WinBase.COMMTIMEOUTS lpNewCommTimeouts = new WinBase.COMMTIMEOUTS(); + assertTrue(Kernel32.INSTANCE.GetCommTimeouts(handleSerialPort, lpNewCommTimeouts)); + + assertEquals(20, lpNewCommTimeouts.ReadIntervalTimeout.intValue()); + + lpCommTimeouts.ReadIntervalTimeout = oldReadIntervalTimeout; + + assertTrue(Kernel32.INSTANCE.SetCommTimeouts(handleSerialPort, lpCommTimeouts)); + + } finally { + Kernel32.INSTANCE.CloseHandle(handleSerialPort); + } + } + } + + public void testProcessIdToSessionId() { + int myProcessID = Kernel32.INSTANCE.GetCurrentProcessId(); + + IntByReference pSessionId = new IntByReference(); + boolean result = Kernel32.INSTANCE.ProcessIdToSessionId(myProcessID, pSessionId); + + // should give us our session ID + assertTrue("ProcessIdToSessionId should return true.", result); + + // on Win Vista and later we'll never be session 0 + // due to service isolation + // anything negative would be a definite error. + assertTrue("Session should be 1 or higher because of service isolation", pSessionId.getValue() > 0); + } + + public void testLoadLibraryEx() { + String winDir = Kernel32Util.getEnvironmentVariable("WINDIR"); + assertNotNull("No WINDIR value returned", winDir); + assertTrue("Specified WINDIR does not exist: " + winDir, new File(winDir).exists()); + + HMODULE hModule = null; + try { + hModule = Kernel32.INSTANCE.LoadLibraryEx(new File(winDir, "explorer.exe").getAbsolutePath(), null, + Kernel32.LOAD_LIBRARY_AS_DATAFILE); + if (hModule == null) { + throw new Win32Exception(Native.getLastError()); + } + assertNotNull("hModule should not be null.", hModule); + } finally { + if (hModule != null) { + if (!Kernel32.INSTANCE.FreeLibrary(hModule)) { + throw new Win32Exception(Native.getLastError()); + } + } + } + } + } diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Kernel32UtilTest.java b/contrib/platform/test/com/sun/jna/platform/win32/Kernel32UtilTest.java index 523d183f2a..49b95cb8c4 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/Kernel32UtilTest.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Kernel32UtilTest.java @@ -1,14 +1,14 @@ /* Copyright (c) 2010, 2013 Daniel Doubrovkine, Markus Karg, All Rights Reserved - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * Lesser General Public License for more details. */ package com.sun.jna.platform.win32; @@ -30,111 +30,111 @@ * @author markus[at]headcrashing[dot]eu */ public class Kernel32UtilTest extends TestCase { - + public static void main(String[] args) throws Exception { System.out.println("Computer name: " + Kernel32Util.getComputerName()); System.out.println("Temp path: " + Kernel32Util.getTempPath()); // logical drives System.out.println("Logical drives: "); - Collection logicalDrives = Kernel32Util.getLogicalDriveStrings(); - for(String logicalDrive : logicalDrives) { - // drive type - System.out.println(" " + logicalDrive + " (" - + Kernel32.INSTANCE.GetDriveType(logicalDrive) + ")"); - // free space - LARGE_INTEGER.ByReference lpFreeBytesAvailable = new LARGE_INTEGER.ByReference(); - LARGE_INTEGER.ByReference lpTotalNumberOfBytes = new LARGE_INTEGER.ByReference(); - LARGE_INTEGER.ByReference lpTotalNumberOfFreeBytes = new LARGE_INTEGER.ByReference(); - if (Kernel32.INSTANCE.GetDiskFreeSpaceEx(logicalDrive, lpFreeBytesAvailable, lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes)) { - System.out.println(" Total: " + formatBytes(lpTotalNumberOfBytes.getValue())); - System.out.println(" Free: " + formatBytes(lpTotalNumberOfFreeBytes.getValue())); - } - } - - junit.textui.TestRunner.run(Kernel32UtilTest.class); + Collection logicalDrives = Kernel32Util.getLogicalDriveStrings(); + for(String logicalDrive : logicalDrives) { + // drive type + System.out.println(" " + logicalDrive + " (" + + Kernel32.INSTANCE.GetDriveType(logicalDrive) + ")"); + // free space + LARGE_INTEGER.ByReference lpFreeBytesAvailable = new LARGE_INTEGER.ByReference(); + LARGE_INTEGER.ByReference lpTotalNumberOfBytes = new LARGE_INTEGER.ByReference(); + LARGE_INTEGER.ByReference lpTotalNumberOfFreeBytes = new LARGE_INTEGER.ByReference(); + if (Kernel32.INSTANCE.GetDiskFreeSpaceEx(logicalDrive, lpFreeBytesAvailable, lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes)) { + System.out.println(" Total: " + formatBytes(lpTotalNumberOfBytes.getValue())); + System.out.println(" Free: " + formatBytes(lpTotalNumberOfFreeBytes.getValue())); + } + } + + junit.textui.TestRunner.run(Kernel32UtilTest.class); } - /** - * Format bytes. - * @param bytes - * Bytes. - * @return - * Rounded string representation of the byte size. - */ + /** + * Format bytes. + * @param bytes + * Bytes. + * @return + * Rounded string representation of the byte size. + */ private static String formatBytes(long bytes) { - if (bytes == 1) { // bytes - return String.format("%d byte", bytes); - } else if (bytes < 1024) { // bytes - return String.format("%d bytes", bytes); - } else if (bytes < 1048576 && bytes % 1024 == 0) { // Kb - return String.format("%.0f KB", (double) bytes / 1024); - } else if (bytes < 1048576) { // Kb - return String.format("%.1f KB", (double) bytes / 1024); - } else if (bytes % 1048576 == 0 && bytes < 1073741824) { // Mb - return String.format("%.0f MB", (double) bytes / 1048576); - } else if (bytes < 1073741824) { // Mb - return String.format("%.1f MB", (double) bytes / 1048576); - } else if (bytes % 1073741824 == 0 && bytes < 1099511627776L) { // GB - return String.format("%.0f GB", (double) bytes / 1073741824); - } else if (bytes < 1099511627776L ) { - return String.format("%.1f GB", (double) bytes / 1073741824); - } else if (bytes % 1099511627776L == 0 && bytes < 1125899906842624L) { // TB - return String.format("%.0f TB", (double) bytes / 1099511627776L); - } else if (bytes < 1125899906842624L ) { - return String.format("%.1f TB", (double) bytes / 1099511627776L); - } else { - return String.format("%d bytes", bytes); - } + if (bytes == 1) { // bytes + return String.format("%d byte", bytes); + } else if (bytes < 1024) { // bytes + return String.format("%d bytes", bytes); + } else if (bytes < 1048576 && bytes % 1024 == 0) { // Kb + return String.format("%.0f KB", (double) bytes / 1024); + } else if (bytes < 1048576) { // Kb + return String.format("%.1f KB", (double) bytes / 1024); + } else if (bytes % 1048576 == 0 && bytes < 1073741824) { // Mb + return String.format("%.0f MB", (double) bytes / 1048576); + } else if (bytes < 1073741824) { // Mb + return String.format("%.1f MB", (double) bytes / 1048576); + } else if (bytes % 1073741824 == 0 && bytes < 1099511627776L) { // GB + return String.format("%.0f GB", (double) bytes / 1073741824); + } else if (bytes < 1099511627776L ) { + return String.format("%.1f GB", (double) bytes / 1073741824); + } else if (bytes % 1099511627776L == 0 && bytes < 1125899906842624L) { // TB + return String.format("%.0f TB", (double) bytes / 1099511627776L); + } else if (bytes < 1125899906842624L ) { + return String.format("%.1f TB", (double) bytes / 1099511627776L); + } else { + return String.format("%d bytes", bytes); + } + } + + public void testGetComputerName() { + assertTrue(Kernel32Util.getComputerName().length() > 0); + } + + public void testFormatMessageFromLastErrorCode() { + assertEquals("The remote server has been paused or is in the process of being started.", + Kernel32Util.formatMessageFromLastErrorCode(W32Errors.ERROR_SHARING_PAUSED)); + } + + public void testFormatMessageFromHR() { + assertEquals("The operation completed successfully.", + Kernel32Util.formatMessage(W32Errors.S_OK)); + } + + public void testGetTempPath() { + assertTrue(Kernel32Util.getTempPath().length() > 0); + } + + public void testGetLogicalDriveStrings() { + Collection logicalDrives = Kernel32Util.getLogicalDriveStrings(); + assertTrue("No logical drives found", logicalDrives.size() > 0); + for(String logicalDrive : logicalDrives) { + assertTrue("Empty logical drive name in list", logicalDrive.length() > 0); + } + } + + public void testDeleteFile() throws IOException { + String filename = Kernel32Util.getTempPath() + "\\FileDoesNotExist.jna"; + File f = new File(filename); + f.createNewFile(); + Kernel32Util.deleteFile(filename); } - - public void testGetComputerName() { - assertTrue(Kernel32Util.getComputerName().length() > 0); - } - - public void testFormatMessageFromLastErrorCode() { - assertEquals("The remote server has been paused or is in the process of being started.", - Kernel32Util.formatMessageFromLastErrorCode(W32Errors.ERROR_SHARING_PAUSED)); - } - - public void testFormatMessageFromHR() { - assertEquals("The operation completed successfully.", - Kernel32Util.formatMessage(W32Errors.S_OK)); - } - - public void testGetTempPath() { - assertTrue(Kernel32Util.getTempPath().length() > 0); - } - - public void testGetLogicalDriveStrings() { - Collection logicalDrives = Kernel32Util.getLogicalDriveStrings(); - assertTrue("No logical drives found", logicalDrives.size() > 0); - for(String logicalDrive : logicalDrives) { - assertTrue("Empty logical drive name in list", logicalDrive.length() > 0); - } - } - - public void testDeleteFile() throws IOException { - String filename = Kernel32Util.getTempPath() + "\\FileDoesNotExist.jna"; - File f = new File(filename); - f.createNewFile(); - Kernel32Util.deleteFile(filename); - } - - public void testGetFileAttributes() throws IOException { - String filename = Kernel32Util.getTempPath(); - int fileAttributes = Kernel32Util.getFileAttributes(filename); - assertEquals(WinNT.FILE_ATTRIBUTE_DIRECTORY, fileAttributes & WinNT.FILE_ATTRIBUTE_DIRECTORY); - File tempFile = File.createTempFile("jna", "tmp"); - tempFile.deleteOnExit(); - int fileAttributes2 = Kernel32Util.getFileAttributes(tempFile.getAbsolutePath()); - tempFile.delete(); - assertEquals(0, fileAttributes2 & WinNT.FILE_ATTRIBUTE_DIRECTORY); - } - + + public void testGetFileAttributes() throws IOException { + String filename = Kernel32Util.getTempPath(); + int fileAttributes = Kernel32Util.getFileAttributes(filename); + assertEquals(WinNT.FILE_ATTRIBUTE_DIRECTORY, fileAttributes & WinNT.FILE_ATTRIBUTE_DIRECTORY); + File tempFile = File.createTempFile("jna", "tmp"); + tempFile.deleteOnExit(); + int fileAttributes2 = Kernel32Util.getFileAttributes(tempFile.getAbsolutePath()); + tempFile.delete(); + assertEquals(0, fileAttributes2 & WinNT.FILE_ATTRIBUTE_DIRECTORY); + } + public void testGetEnvironmentVariable() { - assertEquals(null, Kernel32Util.getEnvironmentVariable("jna-getenvironment-test")); - Kernel32.INSTANCE.SetEnvironmentVariable("jna-getenvironment-test", "42"); - assertEquals("42", Kernel32Util.getEnvironmentVariable("jna-getenvironment-test")); + assertEquals(null, Kernel32Util.getEnvironmentVariable("jna-getenvironment-test")); + Kernel32.INSTANCE.SetEnvironmentVariable("jna-getenvironment-test", "42"); + assertEquals("42", Kernel32Util.getEnvironmentVariable("jna-getenvironment-test")); } public final void testGetPrivateProfileInt() throws IOException { @@ -173,7 +173,7 @@ public final void testWritePrivateProfileString() throws IOException { Kernel32Util.writePrivateProfileString("Section", "existingKey", "DEF", tmp.getCanonicalPath()); Kernel32Util.writePrivateProfileString("Section", "addedKey", "GHI", tmp.getCanonicalPath()); Kernel32Util.writePrivateProfileString("Section", "removedKey", null, tmp.getCanonicalPath()); - + final BufferedReader reader = new BufferedReader(new FileReader(tmp)); assertEquals(reader.readLine(), "[Section]"); assertTrue(reader.readLine().matches("existingKey\\s*=\\s*DEF")); @@ -181,7 +181,7 @@ public final void testWritePrivateProfileString() throws IOException { assertEquals(reader.readLine(), null); reader.close(); } - + public final void testGetPrivateProfileSection() throws IOException { final File tmp = File.createTempFile("testGetPrivateProfileSection", ".ini"); tmp.deleteOnExit(); @@ -251,6 +251,19 @@ public final void testWritePrivateProfileSection() throws IOException { assertEquals(reader.readLine(), "foo=bar"); } finally { reader.close(); - } + } + } + + public void testGetResource() { + String winDir = Kernel32Util.getEnvironmentVariable("WINDIR"); + assertNotNull("No WINDIR value returned", winDir); + assertTrue("Specified WINDIR does not exist: " + winDir, new File(winDir).exists()); + + // On Windows 7, "14" is the type assigned to the "My Computer" icon + // (which is named "ICO_MYCOMPUTER") + byte[] results = Kernel32Util.getResource(new File(winDir, "explorer.exe").getAbsolutePath(), "14", + "ICO_MYCOMPUTER"); + assertNotNull("The 'ICO_MYCOMPUTER' resource in explorer.exe should have some content.", results); + assertTrue("The 'ICO_MYCOMPUTER' resource in explorer.exe should have some content.", results.length > 0); } } From 4b4fc881a8a5d56d9f5b79a784b50ed02a98b734 Mon Sep 17 00:00:00 2001 From: dbwiddis Date: Sun, 29 Nov 2015 15:34:30 -0800 Subject: [PATCH 14/29] Add GetSystemTimes() to Kernel32 --- CHANGES.md | 1 + .../com/sun/jna/platform/win32/Kernel32.java | 26 +++++++++++++++++++ .../sun/jna/platform/win32/Kernel32Test.java | 16 ++++++++++++ 3 files changed, 43 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 96ae9d6079..7ea4ae7b45 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,6 +17,7 @@ Features * [#535](https://github.com/java-native-access/jna/pull/535): Added `SHEmptyRecycleBin`, `ShellExecuteEx` to `com.sun.jna.platform.win32.Shell32` - [@mlfreeman2](https://github.com/mlfreeman2). * [#535](https://github.com/java-native-access/jna/pull/535): Added `GetDesktopWindow` to `com.sun.jna.platform.win32.User32` - [@mlfreeman2](https://github.com/mlfreeman2). * [#543](https://github.com/java-native-access/jna/pull/543): Added `ProcessIdToSessionId`, `LoadLibraryEx`, `FreeLibrary` and `Find/Load/Lock/SizeofResource` to `com.sun.jna.platform.win32.Kernel32` - [@mlfreeman2](https://github.com/mlfreeman2). +* [#547](https://github.com/java-native-access/jna/pull/547): Added `GetSystemTimes` to `com.sun.jna.platform.win32.Kernel32` - [@dbwiddis](https://github.com/dbwiddis). Bug Fixes --------- diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java index ee663a264b..1bb7868359 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java @@ -181,6 +181,32 @@ boolean ReadFile(HANDLE hFile, byte[] lpBuffer, int nNumberOfBytesToRead, */ boolean SetLocalTime(SYSTEMTIME lpSystemTime); + /** + * Retrieves system timing information. On a multiprocessor system, the + * values returned are the sum of the designated times across all + * processors. + * + * @param lpIdleTime + * A pointer to a {@link WinBase.FILETIME} structure that + * receives the amount of time that the system has been idle. + * @param lpKernelTime + * A pointer to a {@link WinBase.FILETIME} structure that + * receives the amount of time that the system has spent + * executing in Kernel mode (including all threads in all + * processes, on all processors). This time value also includes + * the amount of time the system has been idle. + * @param lpUserTime + * A pointer to a {@link WinBase.FILETIME} structure that + * receives the amount of time that the system has spent + * executing in User mode (including all threads in all + * processes, on all processors). + * @return {@code true} if the function succeeds, {@code false} otherwise. + * If the function fails, call {@link #GetLastError()} to get extended error + * information. + * @see GetSystemTimes documentation + */ + boolean GetSystemTimes(WinBase.FILETIME lpIdleTime, WinBase.FILETIME lpKernelTime, WinBase.FILETIME lpUserTime); + /** * The GetTickCount function retrieves the number of milliseconds that have * elapsed since the system was started, up to 49.7 days. diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java index b0661574ce..436a1050b5 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java @@ -384,6 +384,22 @@ public void testGetSystemInfo() { assertTrue(lpSystemInfo.dwNumberOfProcessors.intValue() > 0); } + public void testGetSystemTimes() { + Kernel32 kernel = Kernel32.INSTANCE; + WinBase.FILETIME lpIdleTime = new WinBase.FILETIME(); + WinBase.FILETIME lpKernelTime = new WinBase.FILETIME(); + WinBase.FILETIME lpUserTime = new WinBase.FILETIME(); + boolean succ = kernel.GetSystemTimes(lpIdleTime, lpKernelTime, lpUserTime); + assertTrue(succ); + long idleTime = WinBase.FILETIME.dateToFileTime(lpIdleTime.toDate()); + long kernelTime = WinBase.FILETIME.dateToFileTime(lpKernelTime.toDate()); + long userTime = WinBase.FILETIME.dateToFileTime(lpUserTime.toDate()); + // All should be >= 0. kernel includes idle. + assertTrue(idleTime >= 0); + assertTrue(kernelTime >= idleTime); + assertTrue(userTime >= 0); + } + public void testIsWow64Process() { try { IntByReference isWow64 = new IntByReference(42); From b975cc1be2954febcd8b3e233fa4c2bd05efd085 Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Sun, 29 Nov 2015 22:46:28 -0500 Subject: [PATCH 15/29] fix javadoc errors --- .../com/sun/jna/platform/win32/Advapi32.java | 2 +- .../com/sun/jna/platform/win32/Crypt32.java | 2 +- .../com/sun/jna/platform/win32/Kernel32.java | 6 +- .../com/sun/jna/platform/win32/Tlhelp32.java | 2 +- .../com/sun/jna/platform/win32/WinBase.java | 7 +- .../com/sun/jna/platform/win32/WinCrypt.java | 225 +++++++++--------- 6 files changed, 120 insertions(+), 124 deletions(-) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Advapi32.java b/contrib/platform/src/com/sun/jna/platform/win32/Advapi32.java index 5fc3979628..7820917a74 100755 --- a/contrib/platform/src/com/sun/jna/platform/win32/Advapi32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Advapi32.java @@ -2250,7 +2250,7 @@ BOOL WINAPI CreateProcessWithLogonW( * process is terminated.
    * To get the termination status of a process, call * GetExitCodeProcess. - * @see MSDN {@link http://msdn.microsoft.com/en-us/library/windows/desktop/ms682431%28v=vs.85%29.aspx } + * @see MSDN */ boolean CreateProcessWithLogonW(String lpUsername, String lpDomain, String lpPassword, int dwLogonFlags, String lpApplicationName, String lpCommandLine, int dwCreationFlags, Pointer lpEnvironment, diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Crypt32.java b/contrib/platform/src/com/sun/jna/platform/win32/Crypt32.java index 170029f5b1..25f5d8f826 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Crypt32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Crypt32.java @@ -130,7 +130,7 @@ public boolean CryptUnprotectData(DATA_BLOB pDataIn, PointerByReference szDataDe * Refer to those function topics for their respective error * handling behaviors.
    * For extended error information, call GetLastError. - * @see MSDN {@link http://msdn.microsoft.com/en-us/library/bb736347(v=vs.85).aspx } + * @see MSDN */ boolean CertAddEncodedCertificateToSystemStore(String szCertStoreName, Pointer pbCertEncoded, int cbCertEncoded); } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java index ee663a264b..650e0a3377 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java @@ -2464,7 +2464,7 @@ boolean SystemTimeToTzSpecificLocalTime(TIME_ZONE_INFORMATION lpTimeZone, * Reads data from an area of memory in a specified process. The entire area * to be read must be accessible or the operation fails. * - * @see MSDN {@link https://msdn.microsoft.com/en-us/library/windows/desktop/ms680553(v=vs.85).aspx } + * @see MSDN * @param hProcess * A handle to the process with memory that is being read. The * handle must have PROCESS_VM_READ access to the process. @@ -2780,7 +2780,7 @@ boolean GetVolumePathNamesForVolumeName(String lpszVolumeName, * [in] A handle to the communications device.
    * The * {@link com.sun.jna.platform.win32.Kernel32#CreateFile(String, int, int, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, int, int, com.sun.jna.platform.win32.WinNT.HANDLE)} - * function returns this {@link HANDLE}. + * function returns this {@link WinNT.HANDLE}. * @param lpDCB * [in, out] A pointer to a {@link WinBase.DCB} structure that * receives the control settings information. @@ -2846,7 +2846,7 @@ boolean GetVolumePathNamesForVolumeName(String lpszVolumeName, * [in] A handle to the communications device. The * {@link com.sun.jna.platform.win32.Kernel32#CreateFile(String, int, int, com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES, int, int, com.sun.jna.platform.win32.WinNT.HANDLE)} * function returns this handle. - * @param LPCOMMTIMEOUTS + * @param lpCommTimeouts * [in] A pointer to a {@link WinBase.COMMTIMEOUTS} structure * that contains the new time-out values. * @return If the function succeeds, the return value is nonzero.
    diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Tlhelp32.java b/contrib/platform/src/com/sun/jna/platform/win32/Tlhelp32.java index 517fef73c6..ccd671c487 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Tlhelp32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Tlhelp32.java @@ -51,7 +51,7 @@ public interface Tlhelp32 { * To include the 32-bit modules of the process specified in th32ProcessID * from a 64-bit process, use the TH32CS_SNAPMODULE32 flag. * - * @see MSDN {@link https://msdn.microsoft.com/en-us/library/windows/desktop/ms682489(v=vs.85).aspx } + * @see MSDN */ WinDef.DWORD TH32CS_SNAPMODULE = new WinDef.DWORD(0x00000008); diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java b/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java index d8f30cae81..e54601bb2f 100755 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java @@ -1133,10 +1133,7 @@ public DWORD callback(Pointer pbData, Pointer pvCallbackContext, * * Contains the time-out parameters for a communications device. The * parameters determine the behavior of - * {@link Kernel32#ReadFile(com.sun.jna.platform.win32.WinNT.HANDLE, java.nio.Buffer, int, com.sun.jna.ptr.IntByReference, com.sun.jna.platform.win32.WinBase.OVERLAPPED)} - * , {@link Kernel32#WriteFile(com.sun.jna.platform.win32.WinNT.HANDLE, - * byte[], int, com.sun.jna.ptr.IntByReference, - * com.sun.jna.platform.win32.WinBase.OVERLAPPED))}, ReadFileEx, and + * {@link Kernel32#ReadFile}, {@link Kernel32#WriteFile}, ReadFileEx, and * WriteFileEx operations on the device.
    *
    * @@ -1161,7 +1158,7 @@ public static class COMMTIMEOUTS extends Structure { * The maximum time allowed to elapse before the arrival of the next * byte on the communications line, in milliseconds. If the interval * between the arrival of any two bytes exceeds this amount, the - * {@link Kernel32#ReadFile(com.sun.jna.platform.win32.WinNT.HANDLE, java.nio.Buffer, int, com.sun.jna.ptr.IntByReference, com.sun.jna.platform.win32.WinBase.OVERLAPPED)} + * {@link Kernel32#ReadFile} * operation is completed and any buffered data is returned. A value of * zero indicates that interval time-outs are not used. * diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java b/contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java index cc57161b1f..2f3239086a 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinCrypt.java @@ -172,118 +172,117 @@ protected List getFieldOrder() { */ int CRYPTPROTECT_CRED_REGENERATE = 0x80; - /** - * ASN.1 Certificate encode/decode return value base - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_ERROR = 0x80093100; - - /** - * ASN.1 internal encode or decode error - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_INTERNAL = 0x80093101; - - /** - * ASN.1 unexpected end of data - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_EOD = 0x80093102; - - /** - * ASN.1 corrupted data - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_CORRUPT = 0x80093103; - - /** - * ASN.1 value too large - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_LARGE = 0x80093104; - - /** - * ASN.1 constraint violated - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_CONSTRAINT = 0x80093105; - - /** - * ASN.1 out of memory - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_MEMORY = 0x80093106; - - /** - * ASN.1 buffer overflow - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_OVERFLOW = 0x80093107; - - /** - * ASN.1 function not supported for this PDU - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_BADPDU = 0x80093108; - - /** - * ASN.1 bad arguments to function call - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_BADARGS = 0x80093109; - - /** - * ASN.1 bad real value - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_BADREAL = 0x8009310A; - - /** - * ASN.1 bad tag value met - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_BADTAG = 0x8009310B; - - /** - * ASN.1 bad choice value - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_CHOICE = 0x8009310C; - - /** - * ASN.1 bad encoding rule - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_RULE = 0x8009310D; - - /** - * ASN.1 bad Unicode (UTF8) - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_UTF8 = 0x8009310E; - - /** - * ASN.1 bad PDU type - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_PDU_TYPE = 0x80093133; - - /** - * ASN.1 not yet implemented - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_NYI = 0x80093134; - - /** - * ASN.1 skipped unknown extensions - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_EXTENDED = 0x80093201; - - /** - * ASN.1 end of data expected - * @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa375564(v=vs.85).aspx - */ - int CRYPT_E_ASN1_NOEOD = 0x80093202; + /** + * ASN.1 Certificate encode/decode return value base + * @see MSDN + */ + int CRYPT_E_ASN1_ERROR = 0x80093100; + + /** + * ASN.1 internal encode or decode error + * @see MSDN + */ + int CRYPT_E_ASN1_INTERNAL = 0x80093101; + + /** + * ASN.1 unexpected end of data + * @see MSDN + */ + int CRYPT_E_ASN1_EOD = 0x80093102; + + /** + * ASN.1 corrupted data + * @see MSDN + */ + int CRYPT_E_ASN1_CORRUPT = 0x80093103; + /** + * ASN.1 value too large + * @see MSDN + */ + int CRYPT_E_ASN1_LARGE = 0x80093104; + + /** + * ASN.1 constraint violated + * @see MSDN + */ + int CRYPT_E_ASN1_CONSTRAINT = 0x80093105; + + /** + * ASN.1 out of memory + * @see MSDN + */ + int CRYPT_E_ASN1_MEMORY = 0x80093106; + + /** + * ASN.1 buffer overflow + * @see MSDN + */ + int CRYPT_E_ASN1_OVERFLOW = 0x80093107; + + /** + * ASN.1 function not supported for this PDU + * @see MSDN + */ + int CRYPT_E_ASN1_BADPDU = 0x80093108; + + /** + * ASN.1 bad arguments to function call + * @see MSDN + */ + int CRYPT_E_ASN1_BADARGS = 0x80093109; + + /** + * ASN.1 bad real value + * @see MSDN + */ + int CRYPT_E_ASN1_BADREAL = 0x8009310A; + + /** + * ASN.1 bad tag value met + * @see MSDN + */ + int CRYPT_E_ASN1_BADTAG = 0x8009310B; + + /** + * ASN.1 bad choice value + * @see MSDN + */ + int CRYPT_E_ASN1_CHOICE = 0x8009310C; + + /** + * ASN.1 bad encoding rule + * @see MSDN + */ + int CRYPT_E_ASN1_RULE = 0x8009310D; + + /** + * ASN.1 bad Unicode (UTF8) + * @see MSDN + */ + int CRYPT_E_ASN1_UTF8 = 0x8009310E; + + /** + * ASN.1 bad PDU type + * @see MSDN + */ + int CRYPT_E_ASN1_PDU_TYPE = 0x80093133; + + /** + * ASN.1 not yet implemented + * @see MSDN + */ + int CRYPT_E_ASN1_NYI = 0x80093134; + + /** + * ASN.1 skipped unknown extensions + * @see MSDN + */ + int CRYPT_E_ASN1_EXTENDED = 0x80093201; + + /** + * ASN.1 end of data expected + * @see MSDN + */ + int CRYPT_E_ASN1_NOEOD = 0x80093202; } From b984cf64e912eb3714a24394c2bcb1133111a2de Mon Sep 17 00:00:00 2001 From: Michael Freeman Date: Sun, 29 Nov 2015 14:34:56 -0500 Subject: [PATCH 16/29] Added EnumResourceTypes and EnumResourceNames to Kernel32 --- CHANGES.md | 1 + .../com/sun/jna/platform/win32/Kernel32.java | 67 + .../sun/jna/platform/win32/Kernel32Util.java | 114 +- .../com/sun/jna/platform/win32/WinBase.java | 1410 +++++++++-------- .../sun/jna/platform/win32/Kernel32Test.java | 46 + .../jna/platform/win32/Kernel32UtilTest.java | 17 + 6 files changed, 989 insertions(+), 666 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 7ea4ae7b45..e0620d0f58 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -18,6 +18,7 @@ Features * [#535](https://github.com/java-native-access/jna/pull/535): Added `GetDesktopWindow` to `com.sun.jna.platform.win32.User32` - [@mlfreeman2](https://github.com/mlfreeman2). * [#543](https://github.com/java-native-access/jna/pull/543): Added `ProcessIdToSessionId`, `LoadLibraryEx`, `FreeLibrary` and `Find/Load/Lock/SizeofResource` to `com.sun.jna.platform.win32.Kernel32` - [@mlfreeman2](https://github.com/mlfreeman2). * [#547](https://github.com/java-native-access/jna/pull/547): Added `GetSystemTimes` to `com.sun.jna.platform.win32.Kernel32` - [@dbwiddis](https://github.com/dbwiddis). +* [#545](https://github.com/java-native-access/jna/pull/545): Added `EnumResourceTypes` and `EnumResourceNames` to `com.sun.jna.platform.win32.Kernel32` - [@mlfreeman2](https://github.com/mlfreeman2). Bug Fixes --------- diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java index 37e7ef1593..229c07ad1b 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32.java @@ -3202,4 +3202,71 @@ boolean GetVolumePathNamesForVolumeName(String lpszVolumeName, * information, call the GetLastError function. */ boolean FreeLibrary(HMODULE module); + + /** + * Enumerates resource types within a binary module.
    + * Starting with Windows Vista, this is typically a language-neutral + * Portable Executable (LN file), and the enumeration also includes + * resources from one of the corresponding language-specific resource files + * (.mui files)-if one exists-that contain localizable language resources. + * It is also possible to use hModule to specify a .mui file, in which case + * only that file is searched for resource types.
    + * Alternately, applications can call EnumResourceTypesEx, which provides + * more precise control over which resource files to enumerate. + * + * @param hModule + * A handle to a module to be searched.
    + * This handle must be obtained through LoadLibrary or + * LoadLibraryEx.
    + * See Remarks for more information. If this parameter is NULL, + * that is equivalent to passing in a handle to the module used + * to create the current process. + * @param proc + * A pointer to the callback function to be called for each + * enumerated resource type.
    + * For more information, see the EnumResTypeProc function. + * @param lParam + * An application-defined value passed to the callback function. + * @return Returns TRUE if successful; otherwise, FALSE. To get extended + * error information, call GetLastError. + */ + boolean EnumResourceTypes(HMODULE hModule, WinBase.EnumResTypeProc proc, Pointer lParam); + + /** + * Enumerates resources of a specified type within a binary module.
    + * For Windows Vista and later, this is typically a language-neutral + * Portable Executable (LN file), and the enumeration will also include + * resources from the corresponding language-specific resource files (.mui + * files) that contain localizable language resources.
    + * It is also possible for hModule to specify an .mui file, in which case + * only that file is searched for resources. + * + * @param hModule + * A handle to a module to be searched.
    + * Starting with Windows Vista, if this is an LN file, then + * appropriate .mui files (if any exist) are included in the + * search.
    + * If this parameter is NULL, that is equivalent to passing in a + * handle to the module used to create the current process. + * @param type + * The type of the resource for which the name is being + * enumerated.
    + * Alternately, rather than a pointer, this parameter can be + * MAKEINTRESOURCE(ID), where ID is an integer value representing + * a predefined resource type.
    + * For a list of predefined resource types, see Resource Types. + * For more information, see the Remarks section below. + * @param proc + * A pointer to the callback function to be called for each + * enumerated resource name or ID. For more information, see + * EnumResNameProc. + * @param lParam + * An application-defined value passed to the callback function. + * This parameter can be used in error checking. + * @return The return value is TRUE if the function succeeds or FALSE if the + * function does not find a resource of the type specified, or if + * the function fails for another reason. To get extended error + * information, call GetLastError. + */ + boolean EnumResourceNames(HMODULE hModule, Pointer type, WinBase.EnumResNameProc proc, Pointer lParam); } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32Util.java b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32Util.java index bd59b8f352..8d1b0dd389 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Kernel32Util.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Kernel32Util.java @@ -15,6 +15,8 @@ import java.io.File; import java.io.FileNotFoundException; import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -702,6 +704,7 @@ public static byte[] getResource(String path, String type, String name) { Win32Exception err = null; Pointer start = null; int length = 0; + byte[] results = null; try { Pointer t = null; try { @@ -741,6 +744,8 @@ public static byte[] getResource(String path, String type, String name) { if (start == null) { throw new IllegalStateException("LockResource returned null."); } + // have to capture it into a byte array before you free the library, otherwise bad things happen. + results = start.getByteArray(0, length); } catch (Win32Exception we) { err = we; } finally { @@ -760,7 +765,114 @@ public static byte[] getResource(String path, String type, String name) { throw err; } - return start.getByteArray(0, length); + return results; } + /** + * Gets a list of all resources from the specified executable file + * + * @param path + * The path to the executable file + * @return A map of resource type name/ID => resources.
    + * A map key + a single list item + the path to the executable can + * be handed off to getResource() to actually get the resource. + */ + public static Map> getResourceNames(String path) { + HMODULE target = Kernel32.INSTANCE.LoadLibraryEx(path, null, Kernel32.LOAD_LIBRARY_AS_DATAFILE); + + if (target == null) { + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + } + + final List types = new ArrayList(); + final Map> result = new LinkedHashMap>(); + + WinBase.EnumResTypeProc ertp = new WinBase.EnumResTypeProc() { + + @Override + public boolean invoke(HMODULE module, Pointer type, Pointer lParam) { + // simulate IS_INTRESOURCE macro defined in WinUser.h + // basically that means that if "type" is less than or equal to 65,535 + // it assumes it's an ID. + // otherwise it assumes it's a pointer to a string + if (Pointer.nativeValue(type) <= 65535) { + types.add(Pointer.nativeValue(type) + ""); + } else { + types.add(type.getWideString(0)); + } + return true; + } + }; + + WinBase.EnumResNameProc ernp = new WinBase.EnumResNameProc() { + + @Override + public boolean invoke(HMODULE module, Pointer type, Pointer name, Pointer lParam) { + String typeName = ""; + + if (Pointer.nativeValue(type) <= 65535) { + typeName = Pointer.nativeValue(type) + ""; + } else { + typeName = type.getWideString(0); + } + + if (Pointer.nativeValue(name) < 65535) { + result.get(typeName).add(Pointer.nativeValue(name) + ""); + } else { + result.get(typeName).add(name.getWideString(0)); + } + + return true; + } + }; + + + Win32Exception err = null; + try { + if (!Kernel32.INSTANCE.EnumResourceTypes(target, ertp, null)) { + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + } + + for (final String typeName : types) { + result.put(typeName, new ArrayList()); + + // simulate MAKEINTRESOURCE macro in WinUser.h + // basically, if the value passed in can be parsed as a number then convert it into one and run with that. + // otherwise, assume it's a string and construct a pointer to said string. + Pointer pointer = null; + try { + pointer = new Pointer(Long.parseLong(typeName)); + } catch (NumberFormatException e) { + pointer = new Memory(Native.WCHAR_SIZE * (typeName.length() + 1)); + pointer.setWideString(0, typeName); + } + + boolean callResult = Kernel32.INSTANCE.EnumResourceNames(target, pointer, ernp, null); + + if (!callResult) { + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + } + } + } catch (Win32Exception e) { + err = e; + } finally { + // from what I can tell on MSDN, the only thing that needs cleanup + // on this is the HMODULE from LoadLibrary + if (target != null) { + if (!Kernel32.INSTANCE.FreeLibrary(target)) { + Win32Exception we = new Win32Exception(Kernel32.INSTANCE.GetLastError()); + if (err != null) { + we.addSuppressed(err); + } + throw we; + } + } + } + + if (err != null) { + throw err; + } + return result; + } + } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java b/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java index e54601bb2f..f38e940ad9 100755 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java @@ -304,7 +304,7 @@ public String toString() { * @see SYSTEMTIME structure */ public static class SYSTEMTIME extends Structure { - // The year. The valid values for this member are 1601 through 30827. + // The year. The valid values for this member are 1601 through 30827. public short wYear; // The month. The valid values for this member are 1 through 12. public short wMonth; @@ -504,7 +504,7 @@ protected List getFieldOrder() { public static class SYSTEM_INFO extends Structure { /** Unnamed inner structure. */ - public static class PI extends Structure { + public static class PI extends Structure { public static class ByReference extends PI implements Structure.ByReference { @@ -514,10 +514,10 @@ public static class ByReference extends PI implements Structure.ByReference { * System's processor architecture. * This value can be one of the following values: * - * PROCESSOR_ARCHITECTURE_UNKNOWN - * PROCESSOR_ARCHITECTURE_INTEL - * PROCESSOR_ARCHITECTURE_IA64 - * PROCESSOR_ARCHITECTURE_AMD64 + * PROCESSOR_ARCHITECTURE_UNKNOWN + * PROCESSOR_ARCHITECTURE_INTEL + * PROCESSOR_ARCHITECTURE_IA64 + * PROCESSOR_ARCHITECTURE_AMD64 */ public WORD wProcessorArchitecture; /** @@ -529,7 +529,7 @@ public static class ByReference extends PI implements Structure.ByReference { protected List getFieldOrder() { return Arrays.asList(new String[] { "wProcessorArchitecture", "wReserved" }); } - } + } /** Unnamed inner union. */ public static class UNION extends Union { @@ -579,9 +579,9 @@ public static class ByReference extends UNION implements Structure.ByReference { * An obsolete member that is retained for compatibility with Windows NT 3.5 and Windows Me/98/95. * Use the wProcessorArchitecture, wProcessorLevel, and wProcessorRevision members to determine * the type of processor. - * PROCESSOR_INTEL_386 - * PROCESSOR_INTEL_486 - * PROCESSOR_INTEL_PENTIUM + * PROCESSOR_INTEL_386 + * PROCESSOR_INTEL_486 + * PROCESSOR_INTEL_PENTIUM */ public DWORD dwProcessorType; /** @@ -611,9 +611,9 @@ protected List getFieldOrder() { * extended memory. The GlobalMemoryStatusEx function stores information in this structure. */ public static class MEMORYSTATUSEX extends Structure { - /** - * The size of the structure, in bytes. - */ + /** + * The size of the structure, in bytes. + */ public DWORD dwLength; /** * A number between 0 and 100 that specifies the approximate percentage of physical memory @@ -671,9 +671,9 @@ public MEMORYSTATUSEX() { * {@link Kernel32#CreatePipe}, or {@link Advapi32#RegCreateKeyEx}. */ public static class SECURITY_ATTRIBUTES extends Structure { - /** - * The size of the structure, in bytes. - */ + /** + * The size of the structure, in bytes. + */ public DWORD dwLength; /** @@ -705,11 +705,11 @@ public static class STARTUPINFO extends Structure { /** * The size of the structure, in bytes. */ - public DWORD cb; + public DWORD cb; - /** - * Reserved; must be NULL. - */ + /** + * Reserved; must be NULL. + */ public String lpReserved; /** @@ -881,7 +881,7 @@ public STARTUPINFO() { */ public static class PROCESS_INFORMATION extends Structure { - /** + /** * A handle to the newly created process. The handle is used to specify * the process in all functions that perform operations on the process * object. @@ -994,7 +994,7 @@ public PROCESS_INFORMATION(Pointer memory) { * Represents a thread entry point local to this process, as a Callback. */ public interface THREAD_START_ROUTINE extends StdCallCallback{ - public DWORD apply( LPVOID lpParameter ); + public DWORD apply( LPVOID lpParameter ); } /** @@ -1002,12 +1002,12 @@ public interface THREAD_START_ROUTINE extends StdCallCallback{ * the location has no meaning in the Java process. */ public class FOREIGN_THREAD_START_ROUTINE extends Structure { - LPVOID foreignLocation; + LPVOID foreignLocation; - @Override - protected List getFieldOrder() { + @Override + protected List getFieldOrder() { return Arrays.asList(new String[] { "foreignLocation" }); - } + } } /** @@ -1129,646 +1129,726 @@ public DWORD callback(Pointer pbData, Pointer pvCallbackContext, - /** - * - * Contains the time-out parameters for a communications device. The - * parameters determine the behavior of - * {@link Kernel32#ReadFile}, {@link Kernel32#WriteFile}, ReadFileEx, and - * WriteFileEx operations on the device.
    - *
    - * - * Remarks
    - * If an application sets ReadIntervalTimeout and ReadTotalTimeoutMultiplier - * to MAXDWORD and sets ReadTotalTimeoutConstant to a value greater than - * zero and less than MAXDWORD, one of the following occurs when the - * ReadFile function is called: - *
  • If there are any bytes in the input buffer, ReadFile returns - * immediately with the bytes in the buffer.
  • - *
  • If there are no bytes in the input buffer, ReadFile waits until a - * byte arrives and then returns immediately.
  • - *
  • If no bytes arrive within the time specified by - * ReadTotalTimeoutConstant, ReadFile times out.
  • - * - * @author Markus - * - */ - public static class COMMTIMEOUTS extends Structure { - /** - * - * The maximum time allowed to elapse before the arrival of the next - * byte on the communications line, in milliseconds. If the interval - * between the arrival of any two bytes exceeds this amount, the - * {@link Kernel32#ReadFile} - * operation is completed and any buffered data is returned. A value of - * zero indicates that interval time-outs are not used. - * - * A value of MAXDWORD, combined with zero values for both the - * {@link COMMTIMEOUTS#ReadTotalTimeoutConstant} and - * {@link COMMTIMEOUTS#ReadTotalTimeoutMultiplier} members, specifies - * that the read operation is to return immediately with the bytes that - * have already been received, even if no bytes have been received. - * - */ - public DWORD ReadIntervalTimeout; - - /** - * The multiplier used to calculate the total time-out period for read - * operations, in milliseconds. For each read operation, this value is - * multiplied by the requested number of bytes to be read. - */ - public DWORD ReadTotalTimeoutMultiplier; - - /** - * A constant used to calculate the total time-out period for read - * operations, in milliseconds. For each read operation, this value is - * added to the product of the - * {@link COMMTIMEOUTS#ReadTotalTimeoutMultiplier} member and the - * requested number of bytes. - * - * A value of zero for both the - * {@link COMMTIMEOUTS#ReadTotalTimeoutMultiplier} and - * {@link COMMTIMEOUTS#ReadTotalTimeoutConstant} members indicates that - * total time-outs are not used for read operations. - */ - public DWORD ReadTotalTimeoutConstant; - - /** - * The multiplier used to calculate the total time-out period for write - * operations, in milliseconds. For each write operation, this value is - * multiplied by the number of bytes to be written. - */ - public DWORD WriteTotalTimeoutMultiplier; - - /** - * A constant used to calculate the total time-out period for write - * operations, in milliseconds. For each write operation, this value is - * added to the product of the - * {@link COMMTIMEOUTS#WriteTotalTimeoutMultiplier} member and the - * number of bytes to be written. - * - * A value of zero for both the - * {@link COMMTIMEOUTS#WriteTotalTimeoutMultiplier} and - * {@link COMMTIMEOUTS#WriteTotalTimeoutConstant} members indicates that - * total time-outs are not used for write operations. - * - */ - public DWORD WriteTotalTimeoutConstant; - - @Override + /** + * + * Contains the time-out parameters for a communications device. The + * parameters determine the behavior of + * {@link Kernel32#ReadFile(com.sun.jna.platform.win32.WinNT.HANDLE, java.nio.Buffer, int, com.sun.jna.ptr.IntByReference, com.sun.jna.platform.win32.WinBase.OVERLAPPED)} + * , {@link Kernel32#WriteFile(com.sun.jna.platform.win32.WinNT.HANDLE, + * byte[], int, com.sun.jna.ptr.IntByReference, + * com.sun.jna.platform.win32.WinBase.OVERLAPPED))}, ReadFileEx, and + * WriteFileEx operations on the device.
    + *
    + * + * Remarks
    + * If an application sets ReadIntervalTimeout and ReadTotalTimeoutMultiplier + * to MAXDWORD and sets ReadTotalTimeoutConstant to a value greater than + * zero and less than MAXDWORD, one of the following occurs when the + * ReadFile function is called: + *
  • If there are any bytes in the input buffer, ReadFile returns + * immediately with the bytes in the buffer.
  • + *
  • If there are no bytes in the input buffer, ReadFile waits until a + * byte arrives and then returns immediately.
  • + *
  • If no bytes arrive within the time specified by + * ReadTotalTimeoutConstant, ReadFile times out.
  • + * + * @author Markus + * + */ + public static class COMMTIMEOUTS extends Structure { + /** + * + * The maximum time allowed to elapse before the arrival of the next + * byte on the communications line, in milliseconds. If the interval + * between the arrival of any two bytes exceeds this amount, the + * {@link Kernel32#ReadFile(com.sun.jna.platform.win32.WinNT.HANDLE, java.nio.Buffer, int, com.sun.jna.ptr.IntByReference, com.sun.jna.platform.win32.WinBase.OVERLAPPED)} + * operation is completed and any buffered data is returned. A value of + * zero indicates that interval time-outs are not used. + * + * A value of MAXDWORD, combined with zero values for both the + * {@link COMMTIMEOUTS#ReadTotalTimeoutConstant} and + * {@link COMMTIMEOUTS#ReadTotalTimeoutMultiplier} members, specifies + * that the read operation is to return immediately with the bytes that + * have already been received, even if no bytes have been received. + * + */ + public DWORD ReadIntervalTimeout; + + /** + * The multiplier used to calculate the total time-out period for read + * operations, in milliseconds. For each read operation, this value is + * multiplied by the requested number of bytes to be read. + */ + public DWORD ReadTotalTimeoutMultiplier; + + /** + * A constant used to calculate the total time-out period for read + * operations, in milliseconds. For each read operation, this value is + * added to the product of the + * {@link COMMTIMEOUTS#ReadTotalTimeoutMultiplier} member and the + * requested number of bytes. + * + * A value of zero for both the + * {@link COMMTIMEOUTS#ReadTotalTimeoutMultiplier} and + * {@link COMMTIMEOUTS#ReadTotalTimeoutConstant} members indicates that + * total time-outs are not used for read operations. + */ + public DWORD ReadTotalTimeoutConstant; + + /** + * The multiplier used to calculate the total time-out period for write + * operations, in milliseconds. For each write operation, this value is + * multiplied by the number of bytes to be written. + */ + public DWORD WriteTotalTimeoutMultiplier; + + /** + * A constant used to calculate the total time-out period for write + * operations, in milliseconds. For each write operation, this value is + * added to the product of the + * {@link COMMTIMEOUTS#WriteTotalTimeoutMultiplier} member and the + * number of bytes to be written. + * + * A value of zero for both the + * {@link COMMTIMEOUTS#WriteTotalTimeoutMultiplier} and + * {@link COMMTIMEOUTS#WriteTotalTimeoutConstant} members indicates that + * total time-outs are not used for write operations. + * + */ + public DWORD WriteTotalTimeoutConstant; + + @Override protected List getFieldOrder() { - return Arrays.asList(new String[] { "ReadIntervalTimeout", "ReadTotalTimeoutMultiplier", - "ReadTotalTimeoutConstant", "WriteTotalTimeoutMultiplier", "WriteTotalTimeoutConstant" }); - } - } - - - - /** - * Defines the control setting for a serial communications device. - */ - public static class DCB extends Structure { - - /** - * Type is used to handle the bitfield of the DBC structure. - */ - public static class DCBControllBits extends DWORD { - private static final long serialVersionUID = 8574966619718078579L; - - @Override - public String toString() { - final StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append('<'); - stringBuilder.append("fBinary:1="); - stringBuilder.append(getfBinary() ? '1' : '0'); - stringBuilder.append(", fParity:1="); - stringBuilder.append(getfParity() ? '1' : '0'); - stringBuilder.append(", fOutxCtsFlow:1="); - stringBuilder.append(getfOutxCtsFlow() ? '1' : '0'); - stringBuilder.append(", fOutxDsrFlow:1="); - stringBuilder.append(getfOutxDsrFlow() ? '1' : '0'); - stringBuilder.append(", fDtrControl:2="); - stringBuilder.append(getfDtrControl()); - stringBuilder.append(", fDsrSensitivity:1="); - stringBuilder.append(getfDsrSensitivity() ? '1' : '0'); - stringBuilder.append(", fTXContinueOnXoff:1="); - stringBuilder.append(getfTXContinueOnXoff() ? '1' : '0'); - stringBuilder.append(", fOutX:1="); - stringBuilder.append(getfOutX() ? '1' : '0'); - stringBuilder.append(", fInX:1="); - stringBuilder.append(getfInX() ? '1' : '0'); - stringBuilder.append(", fErrorChar:1="); - stringBuilder.append(getfErrorChar() ? '1' : '0'); - stringBuilder.append(", fNull:1="); - stringBuilder.append(getfNull() ? '1' : '0'); - stringBuilder.append(", fRtsControl:2="); - stringBuilder.append(getfRtsControl()); - stringBuilder.append(", fAbortOnError:1="); - stringBuilder.append(getfAbortOnError() ? '1' : '0'); - stringBuilder.append(", fDummy2:17="); - stringBuilder.append(getfDummy2()); - stringBuilder.append('>'); - return stringBuilder.toString(); - } - - public boolean getfAbortOnError() { - return (this.intValue() & (0x01 << 14)) != 0x00; - } - - public boolean getfBinary() { - return (this.intValue() & 0x01) != 0x00; - } - - public boolean getfDsrSensitivity() { - return (this.intValue() & (0x01 << 6)) != 0x00; - } - - public int getfDtrControl() { - return (this.intValue() >>> 4) & 0x03; - } - - public boolean getfErrorChar() { - return (this.intValue() & (0x01 << 10)) != 0x00; - } - - public boolean getfInX() { - return (this.intValue() & (0x01 << 9)) != 0x00; - } - - public boolean getfNull() { - return (this.intValue() & (0x01 << 11)) != 0x00; - } - - public boolean getfOutX() { - return (this.intValue() & (0x01 << 8)) != 0x00; - } - - public boolean getfOutxCtsFlow() { - return (this.intValue() & (0x01 << 2)) != 0x00; - } - - public boolean getfOutxDsrFlow() { - return (this.intValue() & (0x01 << 3)) != 0x00; - } - - public boolean getfParity() { - return (this.intValue() & (0x01 << 1)) != 0x00; - } - - public int getfRtsControl() { - return (this.intValue() >>> 12) & 0x03; - } - - public int getfDummy2() { - return (this.intValue()>>>15) & 0x1FFFF; - } - - public boolean getfTXContinueOnXoff() { - return (this.intValue() & (0x01 << 7)) != 0x00; - } - - /** - * If this member is TRUE, the driver terminates all read and write - * operations with an error status if an error occurs.
    - * The driver will not accept any further communications operations - * until the application has acknowledged the error by calling the - * ClearCommError function. - * - * @param fAbortOnError - */ - public void setfAbortOnError(boolean fAbortOnError) { - int tmp = leftShiftMask(fAbortOnError ? 1 : 0, (byte)14, 0x01, this.intValue()); - this.setValue(tmp); - } - - /** - * If this member is TRUE, binary mode is enabled.
    - * Windows does not support nonbinary mode transfers, so this member - * must be TRUE. - * - * @param fBinary - */ - public void setfBinary(boolean fBinary) { - int tmp = leftShiftMask(fBinary ? 1 : 0, (byte)0, 0x01, this.intValue()); - this.setValue(tmp); - } - - /** - * If this member is TRUE, the communications driver is sensitive to the - * state of the DSR signal.
    - * The driver ignores any bytes received, unless the DSR modem input - * line is high. - * - * @param fDsrSensitivity - */ - public void setfDsrSensitivity(boolean fDsrSensitivity) { - int tmp = leftShiftMask(fDsrSensitivity ? 1 : 0, (byte)6, 0x01, this.intValue()); - this.setValue(tmp); - } - - /** - * The DTR (data-terminal-ready) flow control. This member can be one of - * the following values. - *
  • {@link WinBase#DTR_CONTROL_DISABLE}
  • - *
  • {@link WinBase#DTR_CONTROL_ENABLE}
  • - *
  • {@link WinBase#DTR_CONTROL_HANDSHAKE}
  • - * - * @param fOutxDsrFlow - * value to set - */ - public void setfDtrControl(int fOutxDsrFlow) { - int tmp = leftShiftMask(fOutxDsrFlow, (byte)4, 0x03, this.intValue()); - this.setValue(tmp); - } - - /** - * Indicates whether bytes received with parity errors are replaced with - * the character specified by the ErrorChar member.
    - * If this member is TRUE and the fParity member is TRUE, replacement - * occurs. - * - * @param fErrorChar - */ - public void setfErrorChar(boolean fErrorChar) { - int tmp = leftShiftMask(fErrorChar ? 1 : 0, (byte)10, 0x01, this.intValue()); - this.setValue(tmp); - } - - /** - * Indicates whether XON/XOFF flow control is used during reception.
    - * If this member is TRUE, the XoffChar character is sent when the input - * buffer comes within XoffLim bytes of being full, and the XonChar - * character is sent when the input buffer comes within XonLim bytes of - * being empty. - * - * @param fInX - */ - public void setfInX(boolean fInX) { - int tmp = leftShiftMask(fInX ? 1 : 0, (byte)9, 0x01, this.intValue()); - this.setValue(tmp); - } - - /** - * If this member is TRUE, null bytes are discarded when received. - * - * @param fNull - */ - public void setfNull(boolean fNull) { - int tmp = leftShiftMask(fNull ? 1 : 0, (byte)11, 0x01, this.intValue()); - this.setValue(tmp); - } - - /** - * Indicates whether XON/XOFF flow control is used during transmission. - *
    - * If this member is TRUE, transmission stops when the XoffChar - * character is received and starts again when the XonChar character is - * received. - * - * @param fOutX - */ - public void setfOutX(boolean fOutX) { - int tmp = leftShiftMask(fOutX ? 1 : 0, (byte)8, 0x01, this.intValue()); - this.setValue(tmp); - } - - /** - * If this member is TRUE, the CTS (clear-to-send) signal is monitored - * for output flow control.
    - * If this member is TRUE and CTS is turned off, output is suspended - * until CTS is sent again. - * - * @param fOutxCtsFlow - */ - public void setfOutxCtsFlow(boolean fOutxCtsFlow) { - int tmp = leftShiftMask(fOutxCtsFlow ? 1 : 0, (byte)2, 0x01, this.intValue()); - this.setValue(tmp); - } - - /** - * If this member is TRUE, the DSR (data-set-ready) signal is monitored - * for output flow control.
    - * If this member is TRUE and DSR is turned off, output is suspended - * until DSR is sent again. - * - * @param fOutxDsrFlow - */ - public void setfOutxDsrFlow(boolean fOutxDsrFlow) { - int tmp = leftShiftMask(fOutxDsrFlow ? 1 : 0, (byte)3, 0x01, this.intValue()); - this.setValue(tmp); - } - - /** - * If this member is TRUE, parity checking is performed and errors are - * reported. - * - * @param fParity - */ - public void setfParity(boolean fParity) { - int tmp = leftShiftMask(fParity ? 1 : 0, (byte)1, 0x01, this.intValue()); - this.setValue(tmp); - } - - /** - * - * The RTS (request-to-send) flow control. This member can be one of the - * following values. - *
  • {@link WinBase#RTS_CONTROL_DISABLE}
  • - *
  • {@link WinBase#RTS_CONTROL_ENABLE}
  • - *
  • {@link WinBase#RTS_CONTROL_HANDSHAKE}
  • - *
  • {@link WinBase#RTS_CONTROL_TOGGLE}
  • - * - * @param fRtsControl - */ - public void setfRtsControl(int fRtsControl) { - int tmp = leftShiftMask(fRtsControl, (byte)12, 0x03, this.intValue()); - this.setValue(tmp); - } - - /** - * If this member is TRUE, transmission continues after the input buffer - * has come within XoffLim bytes of being full and the driver has - * transmitted the XoffChar character to stop receiving bytes.
    - * If this member is FALSE, transmission does not continue until the - * input buffer is within XonLim bytes of being empty and the driver has - * transmitted the XonChar character to resume reception. - * - * @param fTXContinueOnXoff - */ - public void setfTXContinueOnXoff(boolean fTXContinueOnXoff) { - int tmp = leftShiftMask(fTXContinueOnXoff ? 1 : 0, (byte)7, 0x01, this.intValue()); - this.setValue(tmp); - } - - - private static int leftShiftMask(int valuetoset, byte shift, int mask, int storage) { - int tmp = storage; - tmp &= ~(mask << shift); - tmp |= ((valuetoset & mask) << shift); - return tmp; - } - } - /** - * The length of the structure, in bytes. The caller must set this - * member to sizeof(DCB). - */ - public DWORD DCBlength; - - /** - * - * The baud rate at which the communications device operates. This - * member can be an actual baud rate value, or one of the following - * indexes. - *
  • {@link WinBase#CBR_110}
  • - *
  • {@link WinBase#CBR_300}
  • - *
  • {@link WinBase#CBR_600}
  • - *
  • {@link WinBase#CBR_1200}
  • - *
  • {@link WinBase#CBR_2400}
  • - *
  • {@link WinBase#CBR_4800}
  • - *
  • {@link WinBase#CBR_9600}
  • - *
  • {@link WinBase#CBR_14400}
  • - *
  • {@link WinBase#CBR_19200}
  • - *
  • {@link WinBase#CBR_38400}
  • - *
  • {@link WinBase#CBR_56000}
  • - *
  • {@link WinBase#CBR_128000}
  • - *
  • {@link WinBase#CBR_256000}
  • - * - */ - public DWORD BaudRate; - - /** - * Contains all the bit wise setting entries. - */ - public DCBControllBits controllBits; - - /** - * Reserved; must be zero. - */ - public WORD wReserved; - - /** - * The minimum number of bytes in use allowed in the input buffer before - * flow control is activated to allow transmission by the sender. This - * assumes that either XON/XOFF, RTS, or DTR input flow control is - * specified in the fInX, fRtsControl, or fDtrControl members. - */ - public WORD XonLim; - - /** - * The minimum number of free bytes allowed in the input buffer before - * flow control is activated to inhibit the sender. Note that the sender - * may transmit characters after the flow control signal has been - * activated, so this value should never be zero. This assumes that - * either XON/XOFF, RTS, or DTR input flow control is specified in the - * fInX, fRtsControl, or fDtrControl members. The maximum number of - * bytes in use allowed is calculated by subtracting this value from the - * size, in bytes, of the input buffer. - */ - public WORD XoffLim; - - /** - * The number of bits in the bytes transmitted and received. - */ - public BYTE ByteSize; - - /** - * - * The parity scheme to be used. This member can be one of the following - * values. - *
  • {@link WinBase#EVENPARITY}
  • - *
  • {@link WinBase#ODDPARITY}
  • - *
  • {@link WinBase#NOPARITY}
  • - *
  • {@link WinBase#SPACEPARITY}
  • - *
  • {@link WinBase#MARKPARITY}
  • - */ - public BYTE Parity; - - /** - * The number of stop bits to be used. This member can be one of the - * following values. - *
  • {@link WinBase#ONESTOPBIT}
  • - *
  • {@link WinBase#ONE5STOPBITS}
  • - *
  • {@link WinBase#TWOSTOPBITS}
  • - */ - public BYTE StopBits; - - /** - * The value of the XON character for both transmission and reception. - */ - public char XonChar; - - /** - * The value of the XOFF character for both transmission and reception. - */ - public char XoffChar; - - /** - * The value of the character used to replace bytes received with a - * parity error. - */ - public char ErrorChar; - - /** - * The value of the character used to signal the end of data. - */ - public char EofChar; - - /** - * The value of the character used to signal an event. - */ - public char EvtChar; - - /** - * Reserved; do not use. - */ - public WORD wReserved1; - - public DCB() { - DCBlength = new DWORD(size()); - } - - @Override + return Arrays.asList(new String[] { "ReadIntervalTimeout", "ReadTotalTimeoutMultiplier", + "ReadTotalTimeoutConstant", "WriteTotalTimeoutMultiplier", "WriteTotalTimeoutConstant" }); + } + } + + + + /** + * Defines the control setting for a serial communications device. + */ + public static class DCB extends Structure { + + /** + * Type is used to handle the bitfield of the DBC structure. + */ + public static class DCBControllBits extends DWORD { + private static final long serialVersionUID = 8574966619718078579L; + + @Override + public String toString() { + final StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append('<'); + stringBuilder.append("fBinary:1="); + stringBuilder.append(getfBinary() ? '1' : '0'); + stringBuilder.append(", fParity:1="); + stringBuilder.append(getfParity() ? '1' : '0'); + stringBuilder.append(", fOutxCtsFlow:1="); + stringBuilder.append(getfOutxCtsFlow() ? '1' : '0'); + stringBuilder.append(", fOutxDsrFlow:1="); + stringBuilder.append(getfOutxDsrFlow() ? '1' : '0'); + stringBuilder.append(", fDtrControl:2="); + stringBuilder.append(getfDtrControl()); + stringBuilder.append(", fDsrSensitivity:1="); + stringBuilder.append(getfDsrSensitivity() ? '1' : '0'); + stringBuilder.append(", fTXContinueOnXoff:1="); + stringBuilder.append(getfTXContinueOnXoff() ? '1' : '0'); + stringBuilder.append(", fOutX:1="); + stringBuilder.append(getfOutX() ? '1' : '0'); + stringBuilder.append(", fInX:1="); + stringBuilder.append(getfInX() ? '1' : '0'); + stringBuilder.append(", fErrorChar:1="); + stringBuilder.append(getfErrorChar() ? '1' : '0'); + stringBuilder.append(", fNull:1="); + stringBuilder.append(getfNull() ? '1' : '0'); + stringBuilder.append(", fRtsControl:2="); + stringBuilder.append(getfRtsControl()); + stringBuilder.append(", fAbortOnError:1="); + stringBuilder.append(getfAbortOnError() ? '1' : '0'); + stringBuilder.append(", fDummy2:17="); + stringBuilder.append(getfDummy2()); + stringBuilder.append('>'); + return stringBuilder.toString(); + } + + public boolean getfAbortOnError() { + return (this.intValue() & (0x01 << 14)) != 0x00; + } + + public boolean getfBinary() { + return (this.intValue() & 0x01) != 0x00; + } + + public boolean getfDsrSensitivity() { + return (this.intValue() & (0x01 << 6)) != 0x00; + } + + public int getfDtrControl() { + return (this.intValue() >>> 4) & 0x03; + } + + public boolean getfErrorChar() { + return (this.intValue() & (0x01 << 10)) != 0x00; + } + + public boolean getfInX() { + return (this.intValue() & (0x01 << 9)) != 0x00; + } + + public boolean getfNull() { + return (this.intValue() & (0x01 << 11)) != 0x00; + } + + public boolean getfOutX() { + return (this.intValue() & (0x01 << 8)) != 0x00; + } + + public boolean getfOutxCtsFlow() { + return (this.intValue() & (0x01 << 2)) != 0x00; + } + + public boolean getfOutxDsrFlow() { + return (this.intValue() & (0x01 << 3)) != 0x00; + } + + public boolean getfParity() { + return (this.intValue() & (0x01 << 1)) != 0x00; + } + + public int getfRtsControl() { + return (this.intValue() >>> 12) & 0x03; + } + + public int getfDummy2() { + return (this.intValue()>>>15) & 0x1FFFF; + } + + public boolean getfTXContinueOnXoff() { + return (this.intValue() & (0x01 << 7)) != 0x00; + } + + /** + * If this member is TRUE, the driver terminates all read and write + * operations with an error status if an error occurs.
    + * The driver will not accept any further communications operations + * until the application has acknowledged the error by calling the + * ClearCommError function. + * + * @param fAbortOnError + */ + public void setfAbortOnError(boolean fAbortOnError) { + int tmp = leftShiftMask(fAbortOnError ? 1 : 0, (byte)14, 0x01, this.intValue()); + this.setValue(tmp); + } + + /** + * If this member is TRUE, binary mode is enabled.
    + * Windows does not support nonbinary mode transfers, so this member + * must be TRUE. + * + * @param fBinary + */ + public void setfBinary(boolean fBinary) { + int tmp = leftShiftMask(fBinary ? 1 : 0, (byte)0, 0x01, this.intValue()); + this.setValue(tmp); + } + + /** + * If this member is TRUE, the communications driver is sensitive to the + * state of the DSR signal.
    + * The driver ignores any bytes received, unless the DSR modem input + * line is high. + * + * @param fDsrSensitivity + */ + public void setfDsrSensitivity(boolean fDsrSensitivity) { + int tmp = leftShiftMask(fDsrSensitivity ? 1 : 0, (byte)6, 0x01, this.intValue()); + this.setValue(tmp); + } + + /** + * The DTR (data-terminal-ready) flow control. This member can be one of + * the following values. + *
  • {@link WinBase#DTR_CONTROL_DISABLE}
  • + *
  • {@link WinBase#DTR_CONTROL_ENABLE}
  • + *
  • {@link WinBase#DTR_CONTROL_HANDSHAKE}
  • + * + * @param fOutxDsrFlow + * value to set + */ + public void setfDtrControl(int fOutxDsrFlow) { + int tmp = leftShiftMask(fOutxDsrFlow, (byte)4, 0x03, this.intValue()); + this.setValue(tmp); + } + + /** + * Indicates whether bytes received with parity errors are replaced with + * the character specified by the ErrorChar member.
    + * If this member is TRUE and the fParity member is TRUE, replacement + * occurs. + * + * @param fErrorChar + */ + public void setfErrorChar(boolean fErrorChar) { + int tmp = leftShiftMask(fErrorChar ? 1 : 0, (byte)10, 0x01, this.intValue()); + this.setValue(tmp); + } + + /** + * Indicates whether XON/XOFF flow control is used during reception.
    + * If this member is TRUE, the XoffChar character is sent when the input + * buffer comes within XoffLim bytes of being full, and the XonChar + * character is sent when the input buffer comes within XonLim bytes of + * being empty. + * + * @param fInX + */ + public void setfInX(boolean fInX) { + int tmp = leftShiftMask(fInX ? 1 : 0, (byte)9, 0x01, this.intValue()); + this.setValue(tmp); + } + + /** + * If this member is TRUE, null bytes are discarded when received. + * + * @param fNull + */ + public void setfNull(boolean fNull) { + int tmp = leftShiftMask(fNull ? 1 : 0, (byte)11, 0x01, this.intValue()); + this.setValue(tmp); + } + + /** + * Indicates whether XON/XOFF flow control is used during transmission. + *
    + * If this member is TRUE, transmission stops when the XoffChar + * character is received and starts again when the XonChar character is + * received. + * + * @param fOutX + */ + public void setfOutX(boolean fOutX) { + int tmp = leftShiftMask(fOutX ? 1 : 0, (byte)8, 0x01, this.intValue()); + this.setValue(tmp); + } + + /** + * If this member is TRUE, the CTS (clear-to-send) signal is monitored + * for output flow control.
    + * If this member is TRUE and CTS is turned off, output is suspended + * until CTS is sent again. + * + * @param fOutxCtsFlow + */ + public void setfOutxCtsFlow(boolean fOutxCtsFlow) { + int tmp = leftShiftMask(fOutxCtsFlow ? 1 : 0, (byte)2, 0x01, this.intValue()); + this.setValue(tmp); + } + + /** + * If this member is TRUE, the DSR (data-set-ready) signal is monitored + * for output flow control.
    + * If this member is TRUE and DSR is turned off, output is suspended + * until DSR is sent again. + * + * @param fOutxDsrFlow + */ + public void setfOutxDsrFlow(boolean fOutxDsrFlow) { + int tmp = leftShiftMask(fOutxDsrFlow ? 1 : 0, (byte)3, 0x01, this.intValue()); + this.setValue(tmp); + } + + /** + * If this member is TRUE, parity checking is performed and errors are + * reported. + * + * @param fParity + */ + public void setfParity(boolean fParity) { + int tmp = leftShiftMask(fParity ? 1 : 0, (byte)1, 0x01, this.intValue()); + this.setValue(tmp); + } + + /** + * + * The RTS (request-to-send) flow control. This member can be one of the + * following values. + *
  • {@link WinBase#RTS_CONTROL_DISABLE}
  • + *
  • {@link WinBase#RTS_CONTROL_ENABLE}
  • + *
  • {@link WinBase#RTS_CONTROL_HANDSHAKE}
  • + *
  • {@link WinBase#RTS_CONTROL_TOGGLE}
  • + * + * @param fRtsControl + */ + public void setfRtsControl(int fRtsControl) { + int tmp = leftShiftMask(fRtsControl, (byte)12, 0x03, this.intValue()); + this.setValue(tmp); + } + + /** + * If this member is TRUE, transmission continues after the input buffer + * has come within XoffLim bytes of being full and the driver has + * transmitted the XoffChar character to stop receiving bytes.
    + * If this member is FALSE, transmission does not continue until the + * input buffer is within XonLim bytes of being empty and the driver has + * transmitted the XonChar character to resume reception. + * + * @param fTXContinueOnXoff + */ + public void setfTXContinueOnXoff(boolean fTXContinueOnXoff) { + int tmp = leftShiftMask(fTXContinueOnXoff ? 1 : 0, (byte)7, 0x01, this.intValue()); + this.setValue(tmp); + } + + + private static int leftShiftMask(int valuetoset, byte shift, int mask, int storage) { + int tmp = storage; + tmp &= ~(mask << shift); + tmp |= ((valuetoset & mask) << shift); + return tmp; + } + } + /** + * The length of the structure, in bytes. The caller must set this + * member to sizeof(DCB). + */ + public DWORD DCBlength; + + /** + * + * The baud rate at which the communications device operates. This + * member can be an actual baud rate value, or one of the following + * indexes. + *
  • {@link WinBase#CBR_110}
  • + *
  • {@link WinBase#CBR_300}
  • + *
  • {@link WinBase#CBR_600}
  • + *
  • {@link WinBase#CBR_1200}
  • + *
  • {@link WinBase#CBR_2400}
  • + *
  • {@link WinBase#CBR_4800}
  • + *
  • {@link WinBase#CBR_9600}
  • + *
  • {@link WinBase#CBR_14400}
  • + *
  • {@link WinBase#CBR_19200}
  • + *
  • {@link WinBase#CBR_38400}
  • + *
  • {@link WinBase#CBR_56000}
  • + *
  • {@link WinBase#CBR_128000}
  • + *
  • {@link WinBase#CBR_256000}
  • + * + */ + public DWORD BaudRate; + + /** + * Contains all the bit wise setting entries. + */ + public DCBControllBits controllBits; + + /** + * Reserved; must be zero. + */ + public WORD wReserved; + + /** + * The minimum number of bytes in use allowed in the input buffer before + * flow control is activated to allow transmission by the sender. This + * assumes that either XON/XOFF, RTS, or DTR input flow control is + * specified in the fInX, fRtsControl, or fDtrControl members. + */ + public WORD XonLim; + + /** + * The minimum number of free bytes allowed in the input buffer before + * flow control is activated to inhibit the sender. Note that the sender + * may transmit characters after the flow control signal has been + * activated, so this value should never be zero. This assumes that + * either XON/XOFF, RTS, or DTR input flow control is specified in the + * fInX, fRtsControl, or fDtrControl members. The maximum number of + * bytes in use allowed is calculated by subtracting this value from the + * size, in bytes, of the input buffer. + */ + public WORD XoffLim; + + /** + * The number of bits in the bytes transmitted and received. + */ + public BYTE ByteSize; + + /** + * + * The parity scheme to be used. This member can be one of the following + * values. + *
  • {@link WinBase#EVENPARITY}
  • + *
  • {@link WinBase#ODDPARITY}
  • + *
  • {@link WinBase#NOPARITY}
  • + *
  • {@link WinBase#SPACEPARITY}
  • + *
  • {@link WinBase#MARKPARITY}
  • + */ + public BYTE Parity; + + /** + * The number of stop bits to be used. This member can be one of the + * following values. + *
  • {@link WinBase#ONESTOPBIT}
  • + *
  • {@link WinBase#ONE5STOPBITS}
  • + *
  • {@link WinBase#TWOSTOPBITS}
  • + */ + public BYTE StopBits; + + /** + * The value of the XON character for both transmission and reception. + */ + public char XonChar; + + /** + * The value of the XOFF character for both transmission and reception. + */ + public char XoffChar; + + /** + * The value of the character used to replace bytes received with a + * parity error. + */ + public char ErrorChar; + + /** + * The value of the character used to signal the end of data. + */ + public char EofChar; + + /** + * The value of the character used to signal an event. + */ + public char EvtChar; + + /** + * Reserved; do not use. + */ + public WORD wReserved1; + + public DCB() { + DCBlength = new DWORD(size()); + } + + @Override protected List getFieldOrder() { - return Arrays.asList(new String[] { "DCBlength", "BaudRate", "controllBits", "wReserved", "XonLim", - "XoffLim", "ByteSize", "Parity", "StopBits", "XonChar", "XoffChar", "ErrorChar", "EofChar", - "EvtChar", "wReserved1" }); - } - } - - /** - * No parity. - */ - int NOPARITY = 0; - - /** - * Odd parity. - */ - int ODDPARITY = 1; - - /** - * Even parity. - */ - int EVENPARITY = 2; - - /** - * Mark parity. - */ - int MARKPARITY = 3; - - /** - * Space parity. - */ - int SPACEPARITY = 4; - - /** - * 1 stop bit. - */ - int ONESTOPBIT = 0; - - /** - * 1.5 stop bits. - */ - int ONE5STOPBITS = 1; - /** - * 2 stop bits. - */ - int TWOSTOPBITS = 2; - /** - * 110 bps. - */ - int CBR_110 = 110; - /** - * 300 bps. - */ - int CBR_300 = 300; - /** - * 600 bps. - */ - int CBR_600 = 600; - /** - * 1200 bps. - */ - int CBR_1200 = 1200; - /** - * 2400 bps. - */ - int CBR_2400 = 2400; - /** - * 4800 bps. - */ - int CBR_4800 = 4800; - /** - * 9600 bps. - */ - int CBR_9600 = 9600; - /** - * 14400 bps. - */ - int CBR_14400 = 14400; - /** - * 19200 bps. - */ - int CBR_19200 = 19200; - /** - * 38400 bps. - */ - int CBR_38400 = 38400; - /** - * 56000 bps. - */ - int CBR_56000 = 56000; - - /** - * 128000 bps. - */ - int CBR_128000 = 128000; - - /** - * 256000 bps. - */ - int CBR_256000 = 256000; - - /** - * Disables the DTR line when the device is opened and leaves it disabled. - */ - int DTR_CONTROL_DISABLE = 0; - - /** - * Enables the DTR line when the device is opened and leaves it on. - */ - int DTR_CONTROL_ENABLE = 1; - - /** - * Enables DTR handshaking.
    - * If handshaking is enabled, it is an error for the application to adjust - * the line by using the EscapeCommFunction function. - */ - int DTR_CONTROL_HANDSHAKE = 2; - - /** - * Disables the RTS line when the device is opened and leaves it disabled. - */ - int RTS_CONTROL_DISABLE = 0; - - /** - * Enables the RTS line when the device is opened and leaves it on. - */ - int RTS_CONTROL_ENABLE = 1; - - /** - * Enables RTS handshaking.
    - * The driver raises the RTS line when the "type-ahead" (input) buffer is - * less than one-half full and lowers the RTS line when the buffer is more - * than three-quarters full.
    - * If handshaking is enabled, it is an error for the application to adjust - * the line by using the EscapeCommFunction function. - */ - int RTS_CONTROL_HANDSHAKE = 2; - - /** - * Specifies that the RTS line will be high if bytes are available for - * transmission.
    - * After all buffered bytes have been sent, the RTS line will be low. - */ - int RTS_CONTROL_TOGGLE = 3;; + return Arrays.asList(new String[] { "DCBlength", "BaudRate", "controllBits", "wReserved", "XonLim", + "XoffLim", "ByteSize", "Parity", "StopBits", "XonChar", "XoffChar", "ErrorChar", "EofChar", + "EvtChar", "wReserved1" }); + } + } + + /** + * No parity. + */ + int NOPARITY = 0; + + /** + * Odd parity. + */ + int ODDPARITY = 1; + + /** + * Even parity. + */ + int EVENPARITY = 2; + + /** + * Mark parity. + */ + int MARKPARITY = 3; + + /** + * Space parity. + */ + int SPACEPARITY = 4; + + /** + * 1 stop bit. + */ + int ONESTOPBIT = 0; + + /** + * 1.5 stop bits. + */ + int ONE5STOPBITS = 1; + /** + * 2 stop bits. + */ + int TWOSTOPBITS = 2; + /** + * 110 bps. + */ + int CBR_110 = 110; + /** + * 300 bps. + */ + int CBR_300 = 300; + /** + * 600 bps. + */ + int CBR_600 = 600; + /** + * 1200 bps. + */ + int CBR_1200 = 1200; + /** + * 2400 bps. + */ + int CBR_2400 = 2400; + /** + * 4800 bps. + */ + int CBR_4800 = 4800; + /** + * 9600 bps. + */ + int CBR_9600 = 9600; + /** + * 14400 bps. + */ + int CBR_14400 = 14400; + /** + * 19200 bps. + */ + int CBR_19200 = 19200; + /** + * 38400 bps. + */ + int CBR_38400 = 38400; + /** + * 56000 bps. + */ + int CBR_56000 = 56000; + + /** + * 128000 bps. + */ + int CBR_128000 = 128000; + + /** + * 256000 bps. + */ + int CBR_256000 = 256000; + + /** + * Disables the DTR line when the device is opened and leaves it disabled. + */ + int DTR_CONTROL_DISABLE = 0; + + /** + * Enables the DTR line when the device is opened and leaves it on. + */ + int DTR_CONTROL_ENABLE = 1; + + /** + * Enables DTR handshaking.
    + * If handshaking is enabled, it is an error for the application to adjust + * the line by using the EscapeCommFunction function. + */ + int DTR_CONTROL_HANDSHAKE = 2; + + /** + * Disables the RTS line when the device is opened and leaves it disabled. + */ + int RTS_CONTROL_DISABLE = 0; + + /** + * Enables the RTS line when the device is opened and leaves it on. + */ + int RTS_CONTROL_ENABLE = 1; + + /** + * Enables RTS handshaking.
    + * The driver raises the RTS line when the "type-ahead" (input) buffer is + * less than one-half full and lowers the RTS line when the buffer is more + * than three-quarters full.
    + * If handshaking is enabled, it is an error for the application to adjust + * the line by using the EscapeCommFunction function. + */ + int RTS_CONTROL_HANDSHAKE = 2; + + /** + * Specifies that the RTS line will be high if bytes are available for + * transmission.
    + * After all buffered bytes have been sent, the RTS line will be low. + */ + int RTS_CONTROL_TOGGLE = 3;; + + /** + * An application-defined callback function used with the EnumResourceTypes + * and EnumResourceTypesEx functions.
    + * It receives resource types.
    + * The ENUMRESTYPEPROC type defines a pointer to this callback function. + *
    + * EnumResTypeProc is a placeholder for the application-defined function + * name. + */ + interface EnumResTypeProc extends Callback { + /** + * @param module + * A handle to the module whose executable file contains the + * resources for which the types are to be enumerated.
    + * If this parameter is NULL, the function enumerates the + * resource types in the module used to create the current + * process. + * @param type + * The type of resource for which the type is being + * enumerated.
    + * Alternately, rather than a pointer, this parameter can be + * MAKEINTRESOURCE(ID), where ID is the integer identifier of + * the given resource type.
    + * For standard resource types, see Resource Types.
    + * For more information, see the Remarks section below. + * @param lParam + * An application-defined parameter passed to the + * EnumResourceTypes or EnumResourceTypesEx function.
    + * This parameter can be used in error checking. + * @return Returns TRUE to continue enumeration or FALSE to stop + * enumeration. + */ + boolean invoke(HMODULE module, Pointer type, Pointer lParam); + } + /** + * An application-defined callback function used with the EnumResourceNames + * and EnumResourceNamesEx functions.
    + * It receives the type and name of a resource.
    + * The ENUMRESNAMEPROC type defines a pointer to this callback function. + *
    + * EnumResNameProc is a placeholder for the application-defined function + * name. + */ + interface EnumResNameProc extends Callback { + /** + * @param module + * A handle to the module whose executable file contains the + * resources that are being enumerated.
    + * If this parameter is NULL, the function enumerates the + * resource names in the module used to create the current + * process. + * @param type + * The type of resource for which the name is being + * enumerated.
    + * Alternately, rather than a pointer, this parameter can be + * MAKEINTRESOURCE(ID), where ID is an integer + * value representing a predefined resource type.
    + * For standard resource types, see + * Resource Types.
    + * For more information, see the Remarks section below. + * @param name + * The name of a resource of the type being enumerated.
    + * Alternately, rather than a pointer, this parameter can be + * MAKEINTRESOURCE(ID), where ID is the integer + * identifier of the resource.
    + * For more information, see the Remarks section below. + * @param lParam + * An application-defined parameter passed to the + * EnumResourceNames or EnumResourceNamesEx function.
    + * This parameter can be used in error checking. + * @return Returns TRUE to continue enumeration or FALSE to stop + * enumeration. + */ + boolean invoke(HMODULE module, Pointer type, Pointer name, Pointer lParam); + } } diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java index 436a1050b5..c9023bc871 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.TimeZone; +import com.sun.jna.Memory; import com.sun.jna.Native; import com.sun.jna.NativeMappedConverter; import com.sun.jna.Platform; @@ -985,4 +986,49 @@ public void testLoadLibraryEx() { } } + public void testEnumResourceNames() { + // "14" is the type name of the My Computer icon in explorer.exe + Pointer pointer = new Memory(Native.WCHAR_SIZE * 3); + pointer.setWideString(0, "14"); + WinBase.EnumResNameProc ernp = new WinBase.EnumResNameProc() { + + @Override + public boolean invoke(HMODULE module, Pointer type, Pointer name, Pointer lParam) { + + return true; + } + }; + // null HMODULE means use this process / its EXE + // there are no type "14" resources in it. + boolean result = Kernel32.INSTANCE.EnumResourceNames(null, pointer, ernp, null); + assertFalse("EnumResourceNames should have failed.", result); + assertEquals("GetLastError should be set to 1813", WinError.ERROR_RESOURCE_TYPE_NOT_FOUND, Kernel32.INSTANCE.GetLastError()); + } + + + public void testEnumResourceTypes() { + final List types = new ArrayList(); + WinBase.EnumResTypeProc ertp = new WinBase.EnumResTypeProc() { + + @Override + public boolean invoke(HMODULE module, Pointer type, Pointer lParam) { + // simulate IS_INTRESOURCE macro defined in WinUser.h + // basically that means that if "type" is less than or equal to 65,535 + // it assumes it's an ID. + // otherwise it assumes it's a pointer to a string + if (Pointer.nativeValue(type) <= 65535) { + types.add(Pointer.nativeValue(type) + ""); + } else { + types.add(type.getWideString(0)); + } + return true; + } + }; + // null HMODULE means use this process / its EXE + // there are no type "14" resources in it. + boolean result = Kernel32.INSTANCE.EnumResourceTypes(null, ertp, null); + assertTrue("EnumResourceTypes should not have failed.", result); + assertEquals("GetLastError should be set to 0", WinError.ERROR_SUCCESS, Kernel32.INSTANCE.GetLastError()); + assertTrue("EnumResourceTypes should return some resource type names", types.size() > 0); + } } diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Kernel32UtilTest.java b/contrib/platform/test/com/sun/jna/platform/win32/Kernel32UtilTest.java index 49b95cb8c4..525b77a86f 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/Kernel32UtilTest.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Kernel32UtilTest.java @@ -20,6 +20,8 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.Collection; +import java.util.List; +import java.util.Map; import com.sun.jna.platform.win32.WinNT.LARGE_INTEGER; @@ -266,4 +268,19 @@ public void testGetResource() { assertNotNull("The 'ICO_MYCOMPUTER' resource in explorer.exe should have some content.", results); assertTrue("The 'ICO_MYCOMPUTER' resource in explorer.exe should have some content.", results.length > 0); } + + public void testGetResourceNames() { + String winDir = Kernel32Util.getEnvironmentVariable("WINDIR"); + assertNotNull("No WINDIR value returned", winDir); + assertTrue("Specified WINDIR does not exist: " + winDir, new File(winDir).exists()); + + // On Windows 7, "14" is the type assigned to the "My Computer" icon + // (which is named "ICO_MYCOMPUTER") + Map> names = Kernel32Util.getResourceNames(new File(winDir, "explorer.exe").getAbsolutePath()); + + assertNotNull("explorer.exe should contain some resources in it.", names); + assertTrue("explorer.exe should contain some resource types in it.", names.size() > 0); + assertTrue("explorer.exe should contain a resource of type '14' in it.", names.containsKey("14")); + assertTrue("resource type 14 should have a name named ICO_MYCOMPUTER associated with it.", names.get("14").contains("ICO_MYCOMPUTER")); + } } From 40a74d125436071ed0e5cbb3ac0c73cf20270c88 Mon Sep 17 00:00:00 2001 From: dbwiddis Date: Mon, 30 Nov 2015 20:38:44 -0800 Subject: [PATCH 17/29] Return 64-bit unsigned integer from FILETIME --- CHANGES.md | 3 +- .../com/sun/jna/platform/win32/WinBase.java | 34 +++++++++++++++++++ .../sun/jna/platform/win32/Kernel32Test.java | 13 +++---- .../sun/jna/platform/win32/WinBaseTest.java | 12 +++++++ 4 files changed, 55 insertions(+), 7 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index e0620d0f58..4879a27086 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,8 +17,9 @@ Features * [#535](https://github.com/java-native-access/jna/pull/535): Added `SHEmptyRecycleBin`, `ShellExecuteEx` to `com.sun.jna.platform.win32.Shell32` - [@mlfreeman2](https://github.com/mlfreeman2). * [#535](https://github.com/java-native-access/jna/pull/535): Added `GetDesktopWindow` to `com.sun.jna.platform.win32.User32` - [@mlfreeman2](https://github.com/mlfreeman2). * [#543](https://github.com/java-native-access/jna/pull/543): Added `ProcessIdToSessionId`, `LoadLibraryEx`, `FreeLibrary` and `Find/Load/Lock/SizeofResource` to `com.sun.jna.platform.win32.Kernel32` - [@mlfreeman2](https://github.com/mlfreeman2). -* [#547](https://github.com/java-native-access/jna/pull/547): Added `GetSystemTimes` to `com.sun.jna.platform.win32.Kernel32` - [@dbwiddis](https://github.com/dbwiddis). * [#545](https://github.com/java-native-access/jna/pull/545): Added `EnumResourceTypes` and `EnumResourceNames` to `com.sun.jna.platform.win32.Kernel32` - [@mlfreeman2](https://github.com/mlfreeman2). +* [#547](https://github.com/java-native-access/jna/pull/547): Added `GetSystemTimes` to `com.sun.jna.platform.win32.Kernel32` - [@dbwiddis](https://github.com/dbwiddis). +* [#548](https://github.com/java-native-access/jna/pull/548): Return 64-bit unsigned integer from `com.sun.jna.platform.win32.WinBase.FILETIME` - [@dbwiddis](https://github.com/dbwiddis). Bug Fixes --------- diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java b/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java index f38e940ad9..7f569d58e9 100755 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinBase.java @@ -23,6 +23,7 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; import com.sun.jna.Union; +import com.sun.jna.platform.win32.WinDef.DWORDLONG; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.ptr.ByteByReference; import com.sun.jna.win32.StdCallLibrary; @@ -264,13 +265,46 @@ public static long dateToFileTime(final Date date) { return ms_since_16010101 * 1000 * 10; } + /** + *

    Converts this filetime into a {@link Date}

    + * @return The {@link Date} represented by this filetime. + */ public Date toDate() { return filetimeToDate(dwHighDateTime, dwLowDateTime); } + /** + *

    Converts this filetime into a number of milliseconds which have + * passed since January 1, 1970 (UTC).

    + * @return This filetime as a number of milliseconds which have passed + * since January 1, 1970 (UTC) + */ + public long toTime() { + return toDate().getTime(); + } + + /** + *

    Converts this filetime into a number of milliseconds which have + * passed since January 1, 1970 (UTC).

    + * @return This filetime as a number of milliseconds which have passed + * since January 1, 1970 (UTC) + * @deprecated Replaced by {@link #toTime()} + */ + @Deprecated public long toLong() { return toDate().getTime(); } + + /** + *

    Converts the two 32-bit unsigned integer parts of this filetime + * into a 64-bit unsigned integer representing the number of + * 100-nanosecond intervals since January 1, 1601 (UTC).

    + * @return This filetime as a 64-bit unsigned integer number of + * 100-nanosecond intervals since January 1, 1601 (UTC). + */ + public DWORDLONG toDWordLong() { + return new DWORDLONG((long) dwHighDateTime << 32 | dwLowDateTime & 0xffffffffL); + } @Override public String toString() { diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java index c9023bc871..2a47dcad09 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Kernel32Test.java @@ -34,6 +34,7 @@ import com.sun.jna.Platform; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.BaseTSD.SIZE_T; +import com.sun.jna.platform.win32.WinBase.FILETIME; import com.sun.jna.platform.win32.WinBase.MEMORYSTATUSEX; import com.sun.jna.platform.win32.WinBase.SYSTEM_INFO; import com.sun.jna.platform.win32.WinDef.DWORD; @@ -387,14 +388,14 @@ public void testGetSystemInfo() { public void testGetSystemTimes() { Kernel32 kernel = Kernel32.INSTANCE; - WinBase.FILETIME lpIdleTime = new WinBase.FILETIME(); - WinBase.FILETIME lpKernelTime = new WinBase.FILETIME(); - WinBase.FILETIME lpUserTime = new WinBase.FILETIME(); + FILETIME lpIdleTime = new FILETIME(); + FILETIME lpKernelTime = new FILETIME(); + FILETIME lpUserTime = new FILETIME(); boolean succ = kernel.GetSystemTimes(lpIdleTime, lpKernelTime, lpUserTime); assertTrue(succ); - long idleTime = WinBase.FILETIME.dateToFileTime(lpIdleTime.toDate()); - long kernelTime = WinBase.FILETIME.dateToFileTime(lpKernelTime.toDate()); - long userTime = WinBase.FILETIME.dateToFileTime(lpUserTime.toDate()); + long idleTime = lpIdleTime.toDWordLong().longValue(); + long kernelTime = lpKernelTime.toDWordLong().longValue(); + long userTime = lpUserTime.toDWordLong().longValue(); // All should be >= 0. kernel includes idle. assertTrue(idleTime >= 0); assertTrue(kernelTime >= idleTime); diff --git a/contrib/platform/test/com/sun/jna/platform/win32/WinBaseTest.java b/contrib/platform/test/com/sun/jna/platform/win32/WinBaseTest.java index 2e03b14c46..9224a716f4 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/WinBaseTest.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/WinBaseTest.java @@ -13,8 +13,10 @@ package com.sun.jna.platform.win32; import java.util.Calendar; +import java.util.Date; import com.sun.jna.platform.win32.WinBase.DCB; +import com.sun.jna.platform.win32.WinBase.FILETIME; import com.sun.jna.platform.win32.WinBase.SYSTEMTIME; import junit.framework.TestCase; @@ -28,6 +30,16 @@ public WinBaseTest(String name) { super(name); } + public void testFiletime() { + // subtract to convert ms after 1/1/1970 to ms after 1/1/1601 + long epochDiff = 11644473600000L; + // Construct filetimes for ms after 1/1/1601, check for 100-ns after + assertEquals("Mismatched filetime for 2ms", (new FILETIME(new Date(2L - epochDiff))).toDWordLong().longValue(), 2L * 10000); + assertEquals("Mismatched filetime for 2^16ms", (new FILETIME(new Date((1L << 16) - epochDiff))).toDWordLong().longValue(), (1L << 16) * 10000); + assertEquals("Mismatched filetime for 2^32ms", (new FILETIME(new Date((1L << 32) - epochDiff))).toDWordLong().longValue(), (1L << 32) * 10000); + assertEquals("Mismatched filetime for 2^49ms", (new FILETIME(new Date((1L << 49) - epochDiff))).toDWordLong().longValue(), (1L << 49) * 10000); + } + public void testCalendarToSystemTimeConversion() { Calendar expected = Calendar.getInstance(); SYSTEMTIME sysTime = new SYSTEMTIME(); From 21a537fb06fbe28c14eadf2aa2c4820682e99752 Mon Sep 17 00:00:00 2001 From: Lauri W Ahonen Date: Fri, 23 Oct 2015 16:24:52 -0700 Subject: [PATCH 18/29] Make sure the Structure constructors are always chained in, so QueryInterface et al don't crash the whole JVM --- .../src/com/sun/jna/platform/win32/Guid.java | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Guid.java b/contrib/platform/src/com/sun/jna/platform/win32/Guid.java index 7427dfbe39..a948ad3620 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Guid.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Guid.java @@ -38,7 +38,9 @@ public interface Guid { public static class GUID extends Structure { public static class ByValue extends GUID implements Structure.ByValue { - public ByValue() {} + public ByValue() { + super(); + } public ByValue(GUID guid) { super(guid.getPointer()); @@ -64,6 +66,7 @@ public static class ByReference extends GUID implements * Instantiates a new by reference. */ public ByReference() { + super(); } /** @@ -108,6 +111,7 @@ public ByReference(Pointer memory) { * Instantiates a new guid. */ public GUID() { + super(); } /** @@ -117,6 +121,7 @@ public GUID() { * the guid */ public GUID(GUID guid) { + super(); this.Data1 = guid.Data1; this.Data2 = guid.Data2; this.Data3 = guid.Data3; @@ -392,6 +397,7 @@ public static class ByReference extends GUID { * Instantiates a new by reference. */ public ByReference() { + super(); } /** @@ -411,7 +417,7 @@ public ByReference(GUID guid) { * the memory */ public ByReference(Pointer memory) { - + super(memory); } } @@ -419,6 +425,7 @@ public ByReference(Pointer memory) { * Instantiates a new clsid. */ public CLSID() { + super(); } /** @@ -451,7 +458,7 @@ public class REFIID extends IID { * Instantiates a new refiid. */ public REFIID() { - // TODO Auto-generated constructor stub + super(); } /** @@ -462,7 +469,6 @@ public REFIID() { */ public REFIID(Pointer memory) { super(memory); - // TODO Auto-generated constructor stub } /** @@ -473,9 +479,11 @@ public REFIID(Pointer memory) { */ public REFIID(byte[] data) { super(data); - // TODO Auto-generated constructor stub } + public REFIID(GUID guid) { + super(guid); + } } /** @@ -489,7 +497,7 @@ public class IID extends GUID { * Instantiates a new iid. */ public IID() { - // TODO Auto-generated constructor stub + super(); } /** @@ -500,7 +508,6 @@ public IID() { */ public IID(Pointer memory) { super(memory); - // TODO Auto-generated constructor stub } /** @@ -510,7 +517,6 @@ public IID(Pointer memory) { */ public IID(String iid) { super(iid); - // TODO Auto-generated constructor stub } /** @@ -521,7 +527,11 @@ public IID(String iid) { */ public IID(byte[] data) { super(data); - // TODO Auto-generated constructor stub } + + public IID(GUID guid) { + this(guid.toGuidString()); + } + } } \ No newline at end of file From 61b9ae4e85bc13b3051153f744537962797a98bb Mon Sep 17 00:00:00 2001 From: Lauri W Ahonen Date: Fri, 23 Oct 2015 16:25:24 -0700 Subject: [PATCH 19/29] Needed function to get My Computer shell object from Shell32 --- .../src/com/sun/jna/platform/win32/Shell32.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Shell32.java b/contrib/platform/src/com/sun/jna/platform/win32/Shell32.java index 1f98925861..4ff066143f 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Shell32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Shell32.java @@ -321,4 +321,18 @@ INT_PTR ShellExecute(HWND hwnd, String lpOperation, String lpFile, String lpPara */ boolean ShellExecuteEx(ShellAPI.SHELLEXECUTEINFO lpExecInfo); + /* + * SHGetSpecialFolderLocation function for getting PIDL reference to My Computer etc + * + * @param hwndOwner + * Reserved. + * @param nFolder + * A CSIDL value that identifies the folder of interest. + * @param ppidl + * A PIDL specifying the folder's location relative to the root of the namespace (the desktop). It is the responsibility of the calling application to free the returned IDList by using CoTaskMemFree. + * + * @return If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + * + */ + WinNT.HRESULT SHGetSpecialFolderLocation(WinDef.HWND hwndOwner, int nFolder, PointerByReference ppidl); } From 1d3de29dc99b9bda588e7d86c8e843dc0d2661fe Mon Sep 17 00:00:00 2001 From: Lauri W Ahonen Date: Fri, 23 Oct 2015 16:26:31 -0700 Subject: [PATCH 20/29] Shlwapi wrapper --- .../com/sun/jna/platform/win32/Shlwapi.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 contrib/platform/src/com/sun/jna/platform/win32/Shlwapi.java diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Shlwapi.java b/contrib/platform/src/com/sun/jna/platform/win32/Shlwapi.java new file mode 100644 index 0000000000..106f3b2cfd --- /dev/null +++ b/contrib/platform/src/com/sun/jna/platform/win32/Shlwapi.java @@ -0,0 +1,20 @@ +package com.sun.jna.platform.win32; + + +/* + * Copyright (c) 2015 L W Ahonen, All Rights Reserved + * + */ + +import com.sun.jna.Native; +import com.sun.jna.Pointer; +import com.sun.jna.platform.win32.Shell32; +import com.sun.jna.platform.win32.WinNT; +import com.sun.jna.ptr.PointerByReference; +import com.sun.jna.win32.W32APIOptions; + +public interface Shlwapi extends WinNT { + Shlwapi INSTANCE = (Shlwapi) Native.loadLibrary("Shlwapi", Shlwapi.class, W32APIOptions.UNICODE_OPTIONS); + + HRESULT StrRetToStr(PointerByReference pstr, Pointer pidl, PointerByReference ppszName); +} From bacc552e023c6ce1cb37a1983751d1b73646e9ff Mon Sep 17 00:00:00 2001 From: Lauri W Ahonen Date: Fri, 23 Oct 2015 16:40:20 -0700 Subject: [PATCH 21/29] Necessary interfaces for enumerating items in My Computer --- .../jna/platform/win32/COM/IEnumIDList.java | 101 ++++++++++ .../jna/platform/win32/COM/IShellFolder.java | 182 ++++++++++++++++++ 2 files changed, 283 insertions(+) create mode 100644 contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java create mode 100644 contrib/platform/src/com/sun/jna/platform/win32/COM/IShellFolder.java diff --git a/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java b/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java new file mode 100644 index 0000000000..cf024c9111 --- /dev/null +++ b/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java @@ -0,0 +1,101 @@ +package com.sun.jna.platform.win32.COM; + +/* + * Copyright (c) 2015 L W Ahonen, All Rights Reserved + * + * + */ + +import com.sun.jna.Function; +import com.sun.jna.Pointer; +import com.sun.jna.platform.win32.Guid; +import com.sun.jna.platform.win32.Guid.IID; +import com.sun.jna.platform.win32.Guid.REFIID; +import com.sun.jna.platform.win32.WinDef; +import com.sun.jna.platform.win32.WinNT; +import com.sun.jna.platform.win32.WinNT.HRESULT; +import com.sun.jna.ptr.IntByReference; +import com.sun.jna.ptr.PointerByReference; + +public interface IEnumIDList { + + /** + * The Constant IID_IDispatch. + */ + public final static IID IID_IEnumIDList = new IID( + "{000214F2-0000-0000-C000-000000000046}"); + + HRESULT QueryInterface( + Guid.GUID.ByReference riid, + PointerByReference ppvObject); + + int AddRef(); + + int Release(); + + HRESULT Next( + int celt, + PointerByReference rgelt, + IntByReference pceltFetched); + + HRESULT Skip( + int celt); + + HRESULT Reset(); + + HRESULT Clone( + PointerByReference ppenum); + + + public static class Converter { + public static IEnumIDList PointerToIEnumIDList(final PointerByReference ptr) { + final Pointer interfacePointer = ptr.getValue(); + final Pointer vTablePointer = interfacePointer.getPointer(0); + final Pointer[] vTable = new Pointer[7]; + vTablePointer.read(0, vTable, 0, 7); + return new IEnumIDList() { + + @Override + public WinNT.HRESULT QueryInterface(Guid.GUID.ByReference byValue, PointerByReference pointerByReference) { + Function f = Function.getFunction(vTable[0], Function.ALT_CONVENTION); + return new WinNT.HRESULT(f.invokeInt(new Object[]{interfacePointer, byValue, pointerByReference})); + } + + @Override + public int AddRef() { + Function f = Function.getFunction(vTable[1], Function.ALT_CONVENTION); + return f.invokeInt(new Object[]{interfacePointer}); + } + + public int Release() { + Function f = Function.getFunction(vTable[2], Function.ALT_CONVENTION); + return f.invokeInt(new Object[]{interfacePointer}); + } + + @Override + public HRESULT Next(int celt, PointerByReference rgelt, IntByReference pceltFetched) { + Function f = Function.getFunction(vTable[3], Function.ALT_CONVENTION); + return new HRESULT(f.invokeInt(new Object[]{interfacePointer, celt, rgelt, pceltFetched})); + } + + @Override + public HRESULT Skip(int celt) { + Function f = Function.getFunction(vTable[4], Function.ALT_CONVENTION); + return new HRESULT(f.invokeInt(new Object[]{interfacePointer, celt})); + } + + @Override + public HRESULT Reset() { + Function f = Function.getFunction(vTable[5], Function.ALT_CONVENTION); + return new HRESULT(f.invokeInt(new Object[]{interfacePointer})); + } + + @Override + public HRESULT Clone(PointerByReference ppenum) { + Function f = Function.getFunction(vTable[6], Function.ALT_CONVENTION); + return new HRESULT(f.invokeInt(new Object[]{interfacePointer, ppenum})); + } + }; + } + } +} diff --git a/contrib/platform/src/com/sun/jna/platform/win32/COM/IShellFolder.java b/contrib/platform/src/com/sun/jna/platform/win32/COM/IShellFolder.java new file mode 100644 index 0000000000..049f779a97 --- /dev/null +++ b/contrib/platform/src/com/sun/jna/platform/win32/COM/IShellFolder.java @@ -0,0 +1,182 @@ +package com.sun.jna.platform.win32.COM; + +/* + * Copyright (c) 2015 L W Ahonen, All Rights Reserved + * + */ + +import com.sun.jna.Function; +import com.sun.jna.Pointer; +import com.sun.jna.platform.win32.Guid; +import com.sun.jna.platform.win32.Guid.IID; +import com.sun.jna.platform.win32.Guid.REFIID; +import com.sun.jna.platform.win32.WinDef; +import com.sun.jna.platform.win32.WinNT; +import com.sun.jna.platform.win32.WinNT.HRESULT; +import com.sun.jna.ptr.IntByReference; +import com.sun.jna.ptr.PointerByReference; + +public interface IShellFolder { + + /** The Constant IID_IDispatch. */ + public final static IID IID_ISHELLFOLDER = new IID( + "{000214E6-0000-0000-C000-000000000046}"); + + HRESULT QueryInterface( + REFIID riid, + PointerByReference ppvObject); + + int AddRef(); + + int Release(); + + HRESULT ParseDisplayName( + WinDef.HWND hwnd, + Pointer pbc, + String pszDisplayName, + IntByReference pchEaten, + PointerByReference ppidl, + IntByReference pdwAttributes); + + HRESULT EnumObjects( + WinDef.HWND hwnd, + int grfFlags, + PointerByReference ppenumIDList); + + HRESULT BindToObject( + Pointer pidl, + Pointer pbc, + REFIID riid, + PointerByReference ppv); + + HRESULT BindToStorage( + Pointer pidl, + Pointer pbc, + REFIID riid, + PointerByReference ppv); + + HRESULT CompareIDs( + WinDef.LPARAM lParam, + Pointer pidl1, + Pointer pidl2); + + HRESULT CreateViewObject( + WinDef.HWND hwndOwner, + REFIID riid, + PointerByReference ppv); + + HRESULT GetAttributesOf( + int cidl, + Pointer apidl, + IntByReference rgfInOut); + + HRESULT GetUIObjectOf( + WinDef.HWND hwndOwner, + int cidl, + Pointer apidl, + REFIID riid, + IntByReference rgfReserved, + PointerByReference ppv); + + HRESULT GetDisplayNameOf( + Pointer pidl, + int flags, + PointerByReference pName); + + HRESULT SetNameOf( + WinDef.HWND hwnd, + Pointer pidl, + String pszName, + int uFlags, + PointerByReference ppidlOut); + + + + public static class Converter + { + public static IShellFolder PointerToIShellFolder(final PointerByReference ptr) + { + final Pointer interfacePointer = ptr.getValue(); + final Pointer vTablePointer = interfacePointer.getPointer(0); + final Pointer[] vTable = new Pointer[13]; + vTablePointer.read(0, vTable, 0, 13); + return new IShellFolder() { + + @Override + public WinNT.HRESULT QueryInterface(REFIID byValue, PointerByReference pointerByReference) { + Function f = Function.getFunction(vTable[0], Function.ALT_CONVENTION); + return new WinNT.HRESULT(f.invokeInt(new Object[]{interfacePointer, byValue, pointerByReference})); + } + + @Override + public int AddRef() { + Function f = Function.getFunction(vTable[1], Function.ALT_CONVENTION); + return f.invokeInt(new Object[]{interfacePointer}); + } + + public int Release() { + Function f = Function.getFunction(vTable[2], Function.ALT_CONVENTION); + return f.invokeInt(new Object[]{interfacePointer}); + } + + @Override + public WinNT.HRESULT ParseDisplayName(WinDef.HWND hwnd, Pointer pbc, String pszDisplayName, IntByReference pchEaten, PointerByReference ppidl, IntByReference pdwAttributes) { + Function f = Function.getFunction(vTable[3], Function.ALT_CONVENTION); + return new WinNT.HRESULT(f.invokeInt(new Object[]{interfacePointer, hwnd, pbc, pszDisplayName, pchEaten, ppidl, pdwAttributes})); + } + + @Override + public WinNT.HRESULT EnumObjects(WinDef.HWND hwnd, int grfFlags, PointerByReference ppenumIDList) { + Function f = Function.getFunction(vTable[4], Function.ALT_CONVENTION); + return new WinNT.HRESULT( f.invokeInt(new Object[]{interfacePointer, hwnd, grfFlags, ppenumIDList})); + } + + public WinNT.HRESULT BindToObject(Pointer pidl, Pointer pbc, REFIID riid, PointerByReference ppv) { + Function f = Function.getFunction(vTable[5], Function.ALT_CONVENTION); + return new WinNT.HRESULT( f.invokeInt(new Object[]{interfacePointer, pidl, pbc, riid, ppv})); + } + + @Override + public HRESULT BindToStorage(Pointer pidl, Pointer pbc, REFIID riid, PointerByReference ppv) { + Function f = Function.getFunction(vTable[6], Function.ALT_CONVENTION); + return new WinNT.HRESULT( f.invokeInt(new Object[]{interfacePointer, pidl, pbc, riid, ppv})); + } + + @Override + public HRESULT CompareIDs(WinDef.LPARAM lParam, Pointer pidl1, Pointer pidl2) { + Function f = Function.getFunction(vTable[7], Function.ALT_CONVENTION); + return new WinNT.HRESULT( f.invokeInt(new Object[]{interfacePointer, lParam, pidl1, pidl2})); + } + + @Override + public HRESULT CreateViewObject(WinDef.HWND hwndOwner, REFIID riid, PointerByReference ppv) { + Function f = Function.getFunction(vTable[8], Function.ALT_CONVENTION); + return new WinNT.HRESULT( f.invokeInt(new Object[]{interfacePointer, hwndOwner, riid, ppv})); + } + + @Override + public HRESULT GetAttributesOf(int cidl, Pointer apidl, IntByReference rgfInOut) { + Function f = Function.getFunction(vTable[9], Function.ALT_CONVENTION); + return new WinNT.HRESULT( f.invokeInt(new Object[]{interfacePointer, cidl, apidl, rgfInOut})); + } + + @Override + public HRESULT GetUIObjectOf(WinDef.HWND hwndOwner, int cidl, Pointer apidl, REFIID riid, IntByReference rgfReserved, PointerByReference ppv) { + Function f = Function.getFunction(vTable[10], Function.ALT_CONVENTION); + return new WinNT.HRESULT( f.invokeInt(new Object[]{interfacePointer, hwndOwner, cidl, apidl, riid, rgfReserved, ppv})); + } + + public WinNT.HRESULT GetDisplayNameOf(Pointer pidl, int flags, PointerByReference pName){ + Function f = Function.getFunction(vTable[11], Function.ALT_CONVENTION); + return new WinNT.HRESULT( f.invokeInt(new Object[]{interfacePointer, pidl, flags, pName})); + } + + @Override + public HRESULT SetNameOf(WinDef.HWND hwnd, Pointer pidl, String pszName, int uFlags, PointerByReference ppidlOut) { + Function f = Function.getFunction(vTable[12], Function.ALT_CONVENTION); + return new WinNT.HRESULT( f.invokeInt(new Object[]{interfacePointer, hwnd, pidl, pszName, uFlags, ppidlOut})); + } + }; + } + } +} From 49056999129b4ffa6ecc045c16e89877e7156f22 Mon Sep 17 00:00:00 2001 From: Lauri W Ahonen Date: Fri, 23 Oct 2015 16:41:17 -0700 Subject: [PATCH 22/29] An example into how to use the interfaces and functions in this pull request --- CHANGES.md | 1 + .../platform/win32/COM/IShellFolderTest.java | 91 +++++++++++++++++++ 2 files changed, 92 insertions(+) mode change 100755 => 100644 CHANGES.md create mode 100644 contrib/platform/test/com/sun/jna/platform/win32/COM/IShellFolderTest.java diff --git a/CHANGES.md b/CHANGES.md old mode 100755 new mode 100644 index 4879a27086..0630613311 --- a/CHANGES.md +++ b/CHANGES.md @@ -34,6 +34,7 @@ Features * [#512](https://github.com/java-native-access/jna/pull/512): Make loading debug flags mutable [@lwahonen](https://github.com/lwahonen). * [#514](https://github.com/java-native-access/jna/pull/514): Added `host_processor_info` to `com.sun.jna.platform.mac.SystemB` - [@dbwiddis](https://github.com/dbwiddis). * [#519](https://github.com/java-native-access/jna/pull/519): Added JNA functional overview - [@twall](https://github.com/twall). +* [#524](https://github.com/java-native-access/jna/pull/524): IShellFolder interface plus necessary interfaces, and a sample for enumerating objects in My Computer - [@lwahonen](https://github.com/lwahonen). Bug Fixes --------- diff --git a/contrib/platform/test/com/sun/jna/platform/win32/COM/IShellFolderTest.java b/contrib/platform/test/com/sun/jna/platform/win32/COM/IShellFolderTest.java new file mode 100644 index 0000000000..b6b0d691e0 --- /dev/null +++ b/contrib/platform/test/com/sun/jna/platform/win32/COM/IShellFolderTest.java @@ -0,0 +1,91 @@ +package com.sun.jna.platform.win32.COM; + +/* + * Copyright (c) 2015 L W Ahonen, All Rights Reserved + * + */ + + +import com.sun.jna.Pointer; +import com.sun.jna.platform.win32.*; +import com.sun.jna.ptr.PointerByReference; +import junit.framework.TestCase; + +public class IShellFolderTest extends TestCase { + + private IShellFolder psfMyComputer; + + public static WinNT.HRESULT BindToCsidl(int csidl, Guid.REFIID riid, PointerByReference ppv) { + WinNT.HRESULT hr; + PointerByReference pidl = new PointerByReference(); + hr = Shell32.INSTANCE.SHGetSpecialFolderLocation(null, csidl, pidl); + if (COMUtils.SUCCEEDED(hr)) { + PointerByReference psfDesktopPTR = new PointerByReference(); + hr = Shell32.INSTANCE.SHGetDesktopFolder(psfDesktopPTR); + if (COMUtils.SUCCEEDED(hr)) { + IShellFolder psfDesktop = IShellFolder.Converter.PointerToIShellFolder(psfDesktopPTR); + short cb = pidl.getValue().getShort(0); + if (cb != 0) { + hr = psfDesktop.BindToObject(pidl.getValue(), null, riid, ppv); + } else { + hr = psfDesktop.QueryInterface(riid, ppv); + } + psfDesktop.Release(); + } + Ole32.INSTANCE.CoTaskMemFree(pidl.getValue()); + } + return hr; + } + + public void setUp() throws Exception { + Ole32.INSTANCE.CoInitialize(null); + int CSIDL_DRIVES = 0x0011; + WinNT.HRESULT hr = Ole32.INSTANCE.CoInitialize(null); + if (COMUtils.SUCCEEDED(hr)) { + PointerByReference psfMyComputerPTR = new PointerByReference(Pointer.NULL); + hr = BindToCsidl(CSIDL_DRIVES, new Guid.REFIID(IShellFolder.IID_ISHELLFOLDER), psfMyComputerPTR); + if (COMUtils.SUCCEEDED(hr)) { + psfMyComputer = IShellFolder.Converter.PointerToIShellFolder(psfMyComputerPTR); + } + } + if(psfMyComputer == null) + throw new RuntimeException("Unable to create my computer shell object"); + } + + public void tearDown() throws Exception { + psfMyComputer.Release(); + Ole32.INSTANCE.CoUninitialize(); + } + + public void testEnumObjects() throws Exception { + PointerByReference peidlPTR = new PointerByReference(); + int SHCONTF_FOLDERS = 0x20; + int SHCONTF_NONFOLDERS = 0x40; + boolean sawNames=false; + + WinNT.HRESULT hr = psfMyComputer.EnumObjects(null, + SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, peidlPTR); + if (COMUtils.SUCCEEDED(hr)) { + IEnumIDList peidl = IEnumIDList.Converter.PointerToIEnumIDList(peidlPTR); + PointerByReference pidlItem = new PointerByReference(); + while (peidl.Next(1, pidlItem, null).intValue() == COMUtils.S_OK) { + PointerByReference sr = new PointerByReference(); + hr = psfMyComputer.GetDisplayNameOf(pidlItem.getValue(), 0, sr); + if (COMUtils.SUCCEEDED(hr)) { + PointerByReference pszName = new PointerByReference(); + hr = Shlwapi.INSTANCE.StrRetToStr(sr, pidlItem.getValue(), pszName); + if (COMUtils.SUCCEEDED(hr)) { + String wideString = pszName.getValue().getWideString(0); + if (wideString != null && wideString.length() > 0) + sawNames = true; + Ole32.INSTANCE.CoTaskMemFree(pszName.getValue()); + } + Ole32.INSTANCE.CoTaskMemFree(sr.getValue()); + } + Ole32.INSTANCE.CoTaskMemFree(pidlItem.getValue()); + } + peidl.Release(); + } + assertTrue(sawNames); + } +} \ No newline at end of file From fd7a19a92ef23ea0deac68cf8aa26dfa8b74e05d Mon Sep 17 00:00:00 2001 From: Lauri W Ahonen Date: Sat, 24 Oct 2015 13:22:07 -0700 Subject: [PATCH 23/29] Added assertions for COM success status --- .../platform/win32/COM/IShellFolderTest.java | 85 +++++++++---------- 1 file changed, 38 insertions(+), 47 deletions(-) diff --git a/contrib/platform/test/com/sun/jna/platform/win32/COM/IShellFolderTest.java b/contrib/platform/test/com/sun/jna/platform/win32/COM/IShellFolderTest.java index b6b0d691e0..f76876673d 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/COM/IShellFolderTest.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/COM/IShellFolderTest.java @@ -1,10 +1,11 @@ package com.sun.jna.platform.win32.COM; /* - * Copyright (c) 2015 L W Ahonen, All Rights Reserved - * + * @author L W Ahonen, lwahonen@iki.fi */ +import junit.framework.TestCase; + import com.sun.jna.Pointer; import com.sun.jna.platform.win32.*; @@ -19,21 +20,19 @@ public static WinNT.HRESULT BindToCsidl(int csidl, Guid.REFIID riid, PointerByRe WinNT.HRESULT hr; PointerByReference pidl = new PointerByReference(); hr = Shell32.INSTANCE.SHGetSpecialFolderLocation(null, csidl, pidl); - if (COMUtils.SUCCEEDED(hr)) { - PointerByReference psfDesktopPTR = new PointerByReference(); - hr = Shell32.INSTANCE.SHGetDesktopFolder(psfDesktopPTR); - if (COMUtils.SUCCEEDED(hr)) { - IShellFolder psfDesktop = IShellFolder.Converter.PointerToIShellFolder(psfDesktopPTR); - short cb = pidl.getValue().getShort(0); - if (cb != 0) { - hr = psfDesktop.BindToObject(pidl.getValue(), null, riid, ppv); - } else { - hr = psfDesktop.QueryInterface(riid, ppv); - } - psfDesktop.Release(); - } - Ole32.INSTANCE.CoTaskMemFree(pidl.getValue()); + assertTrue(COMUtils.SUCCEEDED(hr)); + PointerByReference psfDesktopPTR = new PointerByReference(); + hr = Shell32.INSTANCE.SHGetDesktopFolder(psfDesktopPTR); + assertTrue(COMUtils.SUCCEEDED(hr)); + IShellFolder psfDesktop = IShellFolder.Converter.PointerToIShellFolder(psfDesktopPTR); + short cb = pidl.getValue().getShort(0); // See http://blogs.msdn.com/b/oldnewthing/archive/2011/08/30/10202076.aspx for explanation about this bit + if (cb != 0) { + hr = psfDesktop.BindToObject(pidl.getValue(), null, riid, ppv); + } else { + hr = psfDesktop.QueryInterface(riid, ppv); } + psfDesktop.Release(); + Ole32.INSTANCE.CoTaskMemFree(pidl.getValue()); return hr; } @@ -41,15 +40,11 @@ public void setUp() throws Exception { Ole32.INSTANCE.CoInitialize(null); int CSIDL_DRIVES = 0x0011; WinNT.HRESULT hr = Ole32.INSTANCE.CoInitialize(null); - if (COMUtils.SUCCEEDED(hr)) { - PointerByReference psfMyComputerPTR = new PointerByReference(Pointer.NULL); - hr = BindToCsidl(CSIDL_DRIVES, new Guid.REFIID(IShellFolder.IID_ISHELLFOLDER), psfMyComputerPTR); - if (COMUtils.SUCCEEDED(hr)) { - psfMyComputer = IShellFolder.Converter.PointerToIShellFolder(psfMyComputerPTR); - } - } - if(psfMyComputer == null) - throw new RuntimeException("Unable to create my computer shell object"); + assertTrue(COMUtils.SUCCEEDED(hr)); + PointerByReference psfMyComputerPTR = new PointerByReference(Pointer.NULL); + hr = BindToCsidl(CSIDL_DRIVES, new Guid.REFIID(IShellFolder.IID_ISHELLFOLDER), psfMyComputerPTR); + assertTrue(COMUtils.SUCCEEDED(hr)); + psfMyComputer = IShellFolder.Converter.PointerToIShellFolder(psfMyComputerPTR); } public void tearDown() throws Exception { @@ -61,31 +56,27 @@ public void testEnumObjects() throws Exception { PointerByReference peidlPTR = new PointerByReference(); int SHCONTF_FOLDERS = 0x20; int SHCONTF_NONFOLDERS = 0x40; - boolean sawNames=false; + boolean sawNames = false; WinNT.HRESULT hr = psfMyComputer.EnumObjects(null, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, peidlPTR); - if (COMUtils.SUCCEEDED(hr)) { - IEnumIDList peidl = IEnumIDList.Converter.PointerToIEnumIDList(peidlPTR); - PointerByReference pidlItem = new PointerByReference(); - while (peidl.Next(1, pidlItem, null).intValue() == COMUtils.S_OK) { - PointerByReference sr = new PointerByReference(); - hr = psfMyComputer.GetDisplayNameOf(pidlItem.getValue(), 0, sr); - if (COMUtils.SUCCEEDED(hr)) { - PointerByReference pszName = new PointerByReference(); - hr = Shlwapi.INSTANCE.StrRetToStr(sr, pidlItem.getValue(), pszName); - if (COMUtils.SUCCEEDED(hr)) { - String wideString = pszName.getValue().getWideString(0); - if (wideString != null && wideString.length() > 0) - sawNames = true; - Ole32.INSTANCE.CoTaskMemFree(pszName.getValue()); - } - Ole32.INSTANCE.CoTaskMemFree(sr.getValue()); - } - Ole32.INSTANCE.CoTaskMemFree(pidlItem.getValue()); - } - peidl.Release(); + assertTrue(COMUtils.SUCCEEDED(hr)); + IEnumIDList peidl = IEnumIDList.Converter.PointerToIEnumIDList(peidlPTR); + PointerByReference pidlItem = new PointerByReference(); + while (peidl.Next(1, pidlItem, null).intValue() == COMUtils.S_OK) { + PointerByReference sr = new PointerByReference(); + hr = psfMyComputer.GetDisplayNameOf(pidlItem.getValue(), 0, sr); + assertTrue(COMUtils.SUCCEEDED(hr)); + PointerByReference pszName = new PointerByReference(); + hr = Shlwapi.INSTANCE.StrRetToStr(sr, pidlItem.getValue(), pszName); + assertTrue(COMUtils.SUCCEEDED(hr)); + String wideString = pszName.getValue().getWideString(0); + if (wideString != null && wideString.length() > 0) + sawNames = true; + Ole32.INSTANCE.CoTaskMemFree(pszName.getValue()); + Ole32.INSTANCE.CoTaskMemFree(pidlItem.getValue()); } - assertTrue(sawNames); + peidl.Release(); + assertTrue(sawNames); // We should see at least one item with a name } } \ No newline at end of file From 84223737156eb10f92c3bc1697ca97f4df5d5494 Mon Sep 17 00:00:00 2001 From: Lauri W Ahonen Date: Sat, 24 Oct 2015 13:22:51 -0700 Subject: [PATCH 24/29] Clarified changes.md --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 0630613311..06e310707c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -34,7 +34,7 @@ Features * [#512](https://github.com/java-native-access/jna/pull/512): Make loading debug flags mutable [@lwahonen](https://github.com/lwahonen). * [#514](https://github.com/java-native-access/jna/pull/514): Added `host_processor_info` to `com.sun.jna.platform.mac.SystemB` - [@dbwiddis](https://github.com/dbwiddis). * [#519](https://github.com/java-native-access/jna/pull/519): Added JNA functional overview - [@twall](https://github.com/twall). -* [#524](https://github.com/java-native-access/jna/pull/524): IShellFolder interface plus necessary interfaces, and a sample for enumerating objects in My Computer - [@lwahonen](https://github.com/lwahonen). +* [#524](https://github.com/java-native-access/jna/pull/524): Added IShellFolder interface plus necessary utility functions to Windows platform, and a sample for enumerating objects in My Computer - [@lwahonen](https://github.com/lwahonen). Bug Fixes --------- From 7e106e403fd79d80219f46a597b638dc387ce45d Mon Sep 17 00:00:00 2001 From: Lauri W Ahonen Date: Sat, 24 Oct 2015 13:23:24 -0700 Subject: [PATCH 25/29] Added documentation --- .../com/sun/jna/platform/win32/Shlwapi.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Shlwapi.java b/contrib/platform/src/com/sun/jna/platform/win32/Shlwapi.java index 106f3b2cfd..b0cbc1ce2b 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/Shlwapi.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Shlwapi.java @@ -1,9 +1,7 @@ package com.sun.jna.platform.win32; - /* - * Copyright (c) 2015 L W Ahonen, All Rights Reserved - * + * @author L W Ahonen, lwahonen@iki.fi */ import com.sun.jna.Native; @@ -13,8 +11,27 @@ import com.sun.jna.ptr.PointerByReference; import com.sun.jna.win32.W32APIOptions; -public interface Shlwapi extends WinNT { +public interface Shlwapi extends WinNT { Shlwapi INSTANCE = (Shlwapi) Native.loadLibrary("Shlwapi", Shlwapi.class, W32APIOptions.UNICODE_OPTIONS); + + /** + * Takes an STRRET structure returned by IShellFolder::GetDisplayNameOf and returns a pointer + * to an allocated string containing the display name. + * + * @param pstr + * A pointer to the STRRET structure. When the function returns, + * this pointer will no longer be valid. + * @param pidl + * A pointer to the item's ITEMIDLIST structure. This value can be NULL. + * + * @param ppszName + * A pointer to an allocated string containing the result. StrRetToStr allocates + * memory for this string with CoTaskMemAlloc. You should free the string + * with CoTaskMemFree when it is no longer needed. + * + * @return If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + */ + HRESULT StrRetToStr(PointerByReference pstr, Pointer pidl, PointerByReference ppszName); } From c701004b767539bd84564f22e1758a473a641277 Mon Sep 17 00:00:00 2001 From: Lauri W Ahonen Date: Sat, 24 Oct 2015 13:24:09 -0700 Subject: [PATCH 26/29] Copyright notice replaced with a author tag --- .../src/com/sun/jna/platform/win32/COM/IEnumIDList.java | 4 +--- .../src/com/sun/jna/platform/win32/COM/IShellFolder.java | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java b/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java index cf024c9111..53b69172bd 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java @@ -1,9 +1,7 @@ package com.sun.jna.platform.win32.COM; /* - * Copyright (c) 2015 L W Ahonen, All Rights Reserved - * - * + * @author L W Ahonen, lwahonen@iki.fi */ import com.sun.jna.Function; diff --git a/contrib/platform/src/com/sun/jna/platform/win32/COM/IShellFolder.java b/contrib/platform/src/com/sun/jna/platform/win32/COM/IShellFolder.java index 049f779a97..eff0dabacd 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/COM/IShellFolder.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/COM/IShellFolder.java @@ -1,8 +1,7 @@ package com.sun.jna.platform.win32.COM; /* - * Copyright (c) 2015 L W Ahonen, All Rights Reserved - * + * @author L W Ahonen, lwahonen@iki.fi */ import com.sun.jna.Function; From cd3ef8d9955ef6eec383db65dd32c577ecbf5484 Mon Sep 17 00:00:00 2001 From: L W Ahonen Date: Thu, 3 Dec 2015 20:57:37 -0800 Subject: [PATCH 27/29] Add documentation to IEnumIDList --- .../jna/platform/win32/COM/IEnumIDList.java | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java b/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java index 53b69172bd..0f83cb09d1 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java @@ -31,20 +31,78 @@ HRESULT QueryInterface( int Release(); + /* + Retrieves the specified number of item identifiers in the enumeration sequence and advances the current position by the number of items retrieved. + * @param celt + * The number of elements in the array referenced by the rgelt parameter. + * @param rgelt + * The address of a pointer to an array of ITEMIDLIST pointers that receive the item identifiers. + * The implementation must allocate these item identifiers using CoTaskMemAlloc. + * The calling application is responsible for freeing the item identifiers using CoTaskMemFree. + * The ITEMIDLIST structures returned in the array are relative to the IShellFolder being enumerated. + * @param pceltFetched + * A pointer to a value that receives a count of the item identifiers actually returned in rgelt. + * The count can be smaller than the value specified in the celt parameter. This parameter can be NULL on entry only if celt = 1, + * because in that case the method can only retrieve one (S_OK) or zero (S_FALSE) items. + * + * @return HRESULT + * Returns S_OK if the method successfully retrieved the requested celt elements. + * This method only returns S_OK if the full count of requested items are successfully retrieved. + * S_FALSE indicates that more items were requested than remained in the enumeration. + * The value pointed to by the pceltFetched parameter specifies the actual number of items retrieved. + * Note that the value will be 0 if there are no more items to retrieve. + * Returns a COM-defined error value otherwise. + * + * If this method returns a Component Object Model (COM) error code (as determined by the COMUtils.FAILED macro), + * then no entries in the rgelt array are valid on exit. If this method returns a success code (such as S_OK or S_FALSE), + * then the ULONG pointed to by the pceltFetched parameter determines how many entries in the rgelt array are valid on exit. + * + * The distinction is important in the case where celt > 1. For example, if you pass celt=10 and there are only 3 elements left, + * *pceltFetched will be 3 and the method will return S_FALSE meaning that you reached the end of the file. + * The three fetched elements will be stored into rgelt and are valid. + */ HRESULT Next( int celt, PointerByReference rgelt, IntByReference pceltFetched); + /** + * Skips the specified number of elements in the enumeration sequence. + * @param celt + * The number of item identifiers to skip. + * @return HRESULT + * Returns S_OK if successful, or a COM-defined error value otherwise. + */ HRESULT Skip( int celt); + /** + * Returns to the beginning of the enumeration sequence. + * @return HRESULT + * Returns S_OK if successful, or a COM-defined error value otherwise. + */ + HRESULT Reset(); + /** + * Creates a new item enumeration object with the same contents and state as the current one. + * @param ppenum + * The address of a pointer to the new enumeration object. The calling application must eventually free the new object by calling its Release member function. + * @return HRESULT + * Returns S_OK if successful, or a COM-defined error value otherwise. + */ HRESULT Clone( PointerByReference ppenum); + /* + Use this like: + + PointerByReference pbr=new PointerByReference(); + HRESULT result=SomeCOMObject.QueryInterface(IID_IEnumIDList, pbr); + if(COMUtils.SUCCEEDED(result)) IENumIDList eil=IEnumIDList.Converter.PointerToIEnumIDList(pbr); + + */ public static class Converter { public static IEnumIDList PointerToIEnumIDList(final PointerByReference ptr) { final Pointer interfacePointer = ptr.getValue(); From a3de8d61c85fb7f86df6d3e1528f8673269db2b2 Mon Sep 17 00:00:00 2001 From: L W Ahonen Date: Thu, 3 Dec 2015 21:08:48 -0800 Subject: [PATCH 28/29] Document the IUnknown methods too --- .../jna/platform/win32/COM/IEnumIDList.java | 74 ++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java b/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java index 0f83cb09d1..7082d17fb1 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java @@ -18,17 +18,89 @@ public interface IEnumIDList { /** - * The Constant IID_IDispatch. + * The interface IID for QueryInterface et al */ public final static IID IID_IEnumIDList = new IID( "{000214F2-0000-0000-C000-000000000046}"); + /** + * + * Retrieves pointers to the supported interfaces on an object. + * This method calls IUnknown::AddRef on the pointer it returns. + * + * @param riid + * The identifier of the interface being requested. + * + * @param ppvObject + * The address of a pointer variable that receives the interface pointer requested in the riid parameter. Upon successful + * return, *ppvObject contains the requested interface pointer to the object. If the object does not support the + * interface, *ppvObject is set to NULL. + * + * @return + * This method returns S_OK if the interface is supported, and E_NOINTERFACE otherwise. If ppvObject is NULL, this method returns E_POINTER. + * For any one object, a specific query for the IUnknown interface on any of the object's interfaces must always return the same pointer value. + * This enables a client to determine whether two pointers point to the same component by calling QueryInterfacewith IID_IUnknown + * and comparing the results. It is specifically not the case that queries for interfaces other than IUnknown (even the same interface + * through the same pointer) must return the same pointer value. + * + * There are four requirements for implementations of QueryInterface (In these cases, "must succeed" means "must succeed barring + * catastrophic failure."): + * The set of interfaces accessible on an object through QueryInterface must be static, not dynamic. This means that if a call + * toQueryInterface for a pointer to a specified interface succeeds the first time, it must succeed again, and if it fails + * the first time, it must fail on all subsequent queries.
 + * + * It must be reflexive: if a client holds a pointer to an interface on an object, and queries for that interface, the call must succeed.
 + * + * It must be symmetric: if a client holding a pointer to one interface queries successfully for another, a query through + * the obtained pointer for the first interface must succeed.
 + * + * It must be transitive: if a client holding a pointer to one interface queries successfully for a second, and through that + * pointer queries successfully for a third interface, a query for the first interface through the pointer for the + * third interface must succeed.
 + * Notes to Implementers + * Implementations of QueryInterface must never check ACLs. The main reason for this rule is that COM requires that an object supporting a + * particular interface always return success when queried for that interface. Another reason is that checking ACLs on QueryInterface + * does not provide any real security because any client who has access to a particular interface can hand it directly to another + * client without any calls back to the server. Also, because COM caches interface pointers, it does not callQueryInterface on + * the server every time a client does a query. + */ HRESULT QueryInterface( Guid.GUID.ByReference riid, PointerByReference ppvObject); + /** + * + * Increments the reference count for an interface on an object. This method should be called for every new copy of a pointer to an interface on an object. + * @return + * The method returns the new reference count. This value is intended to be used only for test purposes. + * + * Objects use a reference counting mechanism to ensure that the lifetime of the object includes the lifetime of references to it. You use AddRef + * to stabilize a copy of an interface pointer. It can also be called when the life of a cloned pointer must extend beyond the + * lifetime of the original pointer. The cloned pointer must be released by calling IUnknown::Release. + * + * The internal reference counter that AddRef maintains should be a 32-bit unsigned integer. + * Notes to Callers + * Call this method for every new copy of an interface pointer that you make. For example, if you are passing a copy of a pointer + * back from a method, you must call AddRef on that pointer. You must also call AddRef on a pointer before passing it as an in-out + * parameter to a method; the method will call IUnknown::Release before copying the out-value on top of it. + */ int AddRef(); + /** + * Decrements the reference count for an interface on an object. + * + * @return + * The method returns the new reference count. This value is intended to be used only for test purposes. + * + * When the reference count on an object reaches zero, Release must cause the interface pointer to free itself. When the released + * pointer is the only existing reference to an object (whether the object supports single or multiple interfaces), the + * implementation must free the object. + * + * Note that aggregation of objects restricts the ability to recover interface pointers. + * Notes to Callers + * Call this method when you no longer need to use an interface pointer. If you are writing a method that takes an in-out + * parameter, call Release on the pointer you are passing in before copying the out-value on top of it. + */ int Release(); /* From a5604efa97808ea3302991228d51b2efebe8e127 Mon Sep 17 00:00:00 2001 From: L W Ahonen Date: Thu, 3 Dec 2015 21:43:06 -0800 Subject: [PATCH 29/29] Documentation for IShellFolder too --- .../jna/platform/win32/COM/IEnumIDList.java | 4 +- .../jna/platform/win32/COM/IShellFolder.java | 341 +++++++++++++++++- 2 files changed, 341 insertions(+), 4 deletions(-) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java b/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java index 7082d17fb1..7887816a35 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/COM/IEnumIDList.java @@ -65,7 +65,7 @@ public interface IEnumIDList { * the server every time a client does a query. */ HRESULT QueryInterface( - Guid.GUID.ByReference riid, + REFIID riid, PointerByReference ppvObject); /** @@ -184,7 +184,7 @@ public static IEnumIDList PointerToIEnumIDList(final PointerByReference ptr) { return new IEnumIDList() { @Override - public WinNT.HRESULT QueryInterface(Guid.GUID.ByReference byValue, PointerByReference pointerByReference) { + public WinNT.HRESULT QueryInterface(REFIID byValue, PointerByReference pointerByReference) { Function f = Function.getFunction(vTable[0], Function.ALT_CONVENTION); return new WinNT.HRESULT(f.invokeInt(new Object[]{interfacePointer, byValue, pointerByReference})); } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/COM/IShellFolder.java b/contrib/platform/src/com/sun/jna/platform/win32/COM/IShellFolder.java index eff0dabacd..4464eaa9de 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/COM/IShellFolder.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/COM/IShellFolder.java @@ -17,18 +17,134 @@ public interface IShellFolder { - /** The Constant IID_IDispatch. */ + + /** + * The interface IID for QueryInterface et al + */ public final static IID IID_ISHELLFOLDER = new IID( "{000214E6-0000-0000-C000-000000000046}"); + /** + * + * Retrieves pointers to the supported interfaces on an object. + * This method calls IUnknown::AddRef on the pointer it returns. + * + * @param riid + * The identifier of the interface being requested. + * + * @param ppvObject + * The address of a pointer variable that receives the interface pointer requested in the riid parameter. Upon successful + * return, *ppvObject contains the requested interface pointer to the object. If the object does not support the + * interface, *ppvObject is set to NULL. + * + * @return + * This method returns S_OK if the interface is supported, and E_NOINTERFACE otherwise. If ppvObject is NULL, this method returns E_POINTER. + * For any one object, a specific query for the IUnknown interface on any of the object's interfaces must always return the same pointer value. + * This enables a client to determine whether two pointers point to the same component by calling QueryInterfacewith IID_IUnknown + * and comparing the results. It is specifically not the case that queries for interfaces other than IUnknown (even the same interface + * through the same pointer) must return the same pointer value. + * + * There are four requirements for implementations of QueryInterface (In these cases, "must succeed" means "must succeed barring + * catastrophic failure."): + * The set of interfaces accessible on an object through QueryInterface must be static, not dynamic. This means that if a call + * toQueryInterface for a pointer to a specified interface succeeds the first time, it must succeed again, and if it fails + * the first time, it must fail on all subsequent queries.
 + * + * It must be reflexive: if a client holds a pointer to an interface on an object, and queries for that interface, the call must succeed.
 + * + * It must be symmetric: if a client holding a pointer to one interface queries successfully for another, a query through + * the obtained pointer for the first interface must succeed.
 + * + * It must be transitive: if a client holding a pointer to one interface queries successfully for a second, and through that + * pointer queries successfully for a third interface, a query for the first interface through the pointer for the + * third interface must succeed.
 + * Notes to Implementers + * Implementations of QueryInterface must never check ACLs. The main reason for this rule is that COM requires that an object supporting a + * particular interface always return success when queried for that interface. Another reason is that checking ACLs on QueryInterface + * does not provide any real security because any client who has access to a particular interface can hand it directly to another + * client without any calls back to the server. Also, because COM caches interface pointers, it does not callQueryInterface on + * the server every time a client does a query. + */ HRESULT QueryInterface( REFIID riid, PointerByReference ppvObject); + /** + * + * Increments the reference count for an interface on an object. This method should be called for every new copy of a pointer to an interface on an object. + * @return + * The method returns the new reference count. This value is intended to be used only for test purposes. + * + * Objects use a reference counting mechanism to ensure that the lifetime of the object includes the lifetime of references to it. You use AddRef + * to stabilize a copy of an interface pointer. It can also be called when the life of a cloned pointer must extend beyond the + * lifetime of the original pointer. The cloned pointer must be released by calling IUnknown::Release. + * + * The internal reference counter that AddRef maintains should be a 32-bit unsigned integer. + * Notes to Callers + * Call this method for every new copy of an interface pointer that you make. For example, if you are passing a copy of a pointer + * back from a method, you must call AddRef on that pointer. You must also call AddRef on a pointer before passing it as an in-out + * parameter to a method; the method will call IUnknown::Release before copying the out-value on top of it. + */ int AddRef(); + /** + * Decrements the reference count for an interface on an object. + * + * @return + * The method returns the new reference count. This value is intended to be used only for test purposes. + * + * When the reference count on an object reaches zero, Release must cause the interface pointer to free itself. When the released + * pointer is the only existing reference to an object (whether the object supports single or multiple interfaces), the + * implementation must free the object. + * + * Note that aggregation of objects restricts the ability to recover interface pointers. + * Notes to Callers + * Call this method when you no longer need to use an interface pointer. If you are writing a method that takes an in-out + * parameter, call Release on the pointer you are passing in before copying the out-value on top of it. + */ int Release(); + /** + * Translates the display name of a file object or a folder into an item identifier list + * + * @param hwnd + * A window handle. The client should provide a window handle if it displays a dialog or message box. Otherwise set hwnd to NULL. + * + * @param pbc + * Optional. A pointer to a bind context used to pass parameters as inputs and outputs to the parsing function. These passed parameters + * are often specific to the data source and are documented by the data source owners. For example, the file system data source accepts + * the name being parsed (as a WIN32_FIND_DATA structure), using the STR_FILE_SYS_BIND_DATA bind context parameter. + * STR_PARSE_PREFER_FOLDER_BROWSING can be passed to indicate that URLs are parsed using the file system data source when possible. + * Construct a bind context object using CreateBindCtx and populate the values using IBindCtx::RegisterObjectParam. See Bind Context + * String Keys for a complete list of these. + * + * If no data is being passed to or received from the parsing function, this value can be NULL. + * + * @param pszDisplayName + * A null-terminated Unicode string with the display name. Because each Shell folder defines its own parsing syntax, the + * form this string can take may vary. The desktop folder, for instance, accepts paths such as "C:\My Docs\My File.txt". + * It also will accept references to items in the namespace that have a GUID associated with them using the "::{GUID}" syntax. + * For example, to retrieve a fully qualified identifier list for the control panel from the desktop folder, you can use the following: + * "::{CLSID for Control Panel}\::{CLSID for printers folder}" + * + * @param pchEaten + * A pointer to a ULONG value that receives the number of characters of the display name that was parsed. If your application + * does not need this information, set pchEaten to NULL, and no value will be returned. + * + * @param ppidl + * When this method returns, contains a pointer to the PIDL for the object. The returned item identifier list specifies the item + * relative to the parsing folder. If the object associated with pszDisplayName is within the parsing folder, the returned item + * identifier list will contain only one SHITEMID structure. If the object is in a subfolder of the parsing folder, the returned + * item identifier list will contain multiple SHITEMID structures. If an error occurs, NULL is returned in this address. + * + * When it is no longer needed, it is the responsibility of the caller to free this resource by calling CoTaskMemFree. + * + * @param pdwAttributes + * The value used to query for file attributes. If not used, it should be set to NULL. To query for one or more attributes, initialize + * this parameter with the SFGAO flags that represent the attributes of interest. On return, those attributes that are true and were requested will be set. + * @return + * If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + */ HRESULT ParseDisplayName( WinDef.HWND hwnd, Pointer pbc, @@ -37,38 +153,212 @@ HRESULT ParseDisplayName( PointerByReference ppidl, IntByReference pdwAttributes); + /** + * Enables a client to determine the contents of a folder by creating an item identifier enumeration object and returning its IEnumIDList interface. + * The methods supported by that interface can then be used to enumerate the folder's contents. + * + * @param hwnd + * If user input is required to perform the enumeration, this window handle should be used by the enumeration object as the parent window + * to take user input. An example would be a dialog box to ask for a password or prompt the user to insert a CD or floppy disk. + * If hwndOwner is set to NULL, the enumerator should not post any messages, and if user input is required, it should silently fail. + * + * @param grfFlags + * Flags indicating which items to include in the enumeration. For a list of possible values, see the SHCONTF enumerated type. + * + * @param ppenumIDList + * The address that receives a pointer to the IEnumIDList interface of the enumeration object created by this method. + * If an error occurs or no suitable subobjects are found, ppenumIDList is set to NULL. + * + * @return + * Returns S_OK if successful, or an error value otherwise. Some implementations may also return S_FALSE, indicating that there + * are no children matching the grfFlags that were passed in. If S_FALSE is returned, ppenumIDList is set to NULL. + * + */ HRESULT EnumObjects( WinDef.HWND hwnd, int grfFlags, PointerByReference ppenumIDList); + /** + * + * Retrieves a handler, typically the Shell folder object that implements IShellFolder for a particular item. Optional + * parameters that control the construction of the handler are passed in the bind context. + * @param pidl + * + * The address of an ITEMIDLIST structure (PIDL) that identifies the subfolder. This value can refer to an item at any level below + * the parent folder in the namespace hierarchy. The structure contains one or more SHITEMID structures, followed by a terminating NULL. + * + * @param pbc + * + * A pointer to an IBindCtx interface on a bind context object that can be used to pass parameters to the construction of the handler. + * If this parameter is not used, set it to NULL. Because support for this parameter is optional for folder object implementations, + * some folders may not support the use of bind contexts. + * Information that can be provided in the bind context includes a BIND_OPTS structure that includes a grfMode member that indicates + * the access mode when binding to a stream handler. Other parameters can be set and discovered using IBindCtx::RegisterObjectParam + * and IBindCtx::GetObjectParam. + * + * @param riid + * The identifier of the interface to return. This may be IID_IShellFolder, IID_IStream, or any other interface that identifies a particular handler. + * + * @param ppv + * When this method returns, contains the address of a pointer to the requested interface. If an error occurs, a NULL pointer is returned at this address. + * + * @return + * If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + * + */ HRESULT BindToObject( Pointer pidl, Pointer pbc, REFIID riid, PointerByReference ppv); + /** + * Requests a pointer to an object's storage interface. + * @param pidl + * The address of an ITEMIDLIST structure that identifies the subfolder relative to its parent folder. The structure must contain exactly one SHITEMID structure followed by a terminating zero. + * + * @param pbc + * The optional address of an IBindCtx interface on a bind context object to be used during this operation. If this parameter is + * not used, set it to NULL. Because support for pbc is optional for folder object implementations, some folders may not support the use of bind contexts. + * + * @param riid + * The IID of the requested storage interface. To retrieve an IStream, IStorage, or IPropertySetStorage interface pointer, set + * riid to IID_IStream, IID_IStorage, or IID_IPropertySetStorage, respectively. + * + * @param ppv + * The address that receives the interface pointer specified by riid. If an error occurs, a NULL pointer is returned in this address. + * + * @return + * If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + * + */ HRESULT BindToStorage( Pointer pidl, Pointer pbc, REFIID riid, PointerByReference ppv); + /** + * Determines the relative order of two file objects or folders, given their item identifier lists. + * @param lParam + * A value that specifies how the comparison should be performed. + * The lower sixteen bits of lParam define the sorting rule. Most applications set the sorting rule to the default value of zero, indicating that the + * two items should be compared by name. The system does not define any other sorting rules. Some folder objects might allow calling applications to + * use the lower sixteen bits of lParam to specify folder-specific sorting rules. The rules and their associated lParam values are defined by the folder. + * + * When the system folder view object calls IShellFolder::CompareIDs, the lower sixteen bits of lParam are used to specify the column to be used for + * the comparison. + * The upper sixteen bits of lParam are used for flags that modify the sorting rule. The system currently defines these modifier flags. + * + * SHCIDS_ALLFIELDS + * Version 5.0. Compare all the information contained in the ITEMIDLIST structure, not just the display names. This flag is valid only for folder objects that support + * the IShellFolder2 interface. For instance, if the two items are files, the folder should compare their names, sizes, file times, attributes, and any other information + * in the structures. If this flag is set, the lower sixteen bits of lParam must be zero. + * + * SHCIDS_CANONICALONLY + * Version 5.0. When comparing by name, compare the system names but not the display names. When this flag is passed, the two items are compared by whatever criteria the + * Shell folder determines are most efficient, as long as it implements a consistent sort function. This flag is useful when comparing for equality or when the results of + * the sort are not displayed to the user. This flag cannot be combined with other flags. + * + * @param pidl1 + * A pointer to the first item's ITEMIDLIST structure. It will be relative to the folder. This ITEMIDLIST structure can contain more than one + * element; therefore, the entire structure must be compared, not just the first element. + * + * @param pidl2 + * A pointer to the second item's ITEMIDLIST structure. It will be relative to the folder. This ITEMIDLIST structure can contain more than one + * element; therefore, the entire structure must be compared, not just the first element. + * + * @return + * If this method is successful, the CODE field of the HRESULT contains one of the following values. For information regarding the extraction of + * the CODE field from the returned HRESULT, see Remarks. If this method is unsuccessful, it returns a COM error code. + * Negative + * A negative return value indicates that the first item should precede the second (pidl1 < pidl2). + * Positive + * A positive return value indicates that the first item should follow the second (pidl1 > pidl2). + * Zero + * A return value of zero indicates that the two items are the same (pidl1 = pidl2). + * Use the HRESULT_CODE macro to extract the CODE field from the HRESULT, then cast the result as a short. + * #define HRESULT_CODE(hr) ((hr) & 0xFFFF) + * + */ HRESULT CompareIDs( WinDef.LPARAM lParam, Pointer pidl1, Pointer pidl2); + + /** + * Requests an object that can be used to obtain information from or interact with a folder object. + * + * @param hwndOwner + * A handle to the owner window. If you have implemented a custom folder view object, your folder view window should be created as a child of hwndOwner. + * + * @param riid + * A reference to the IID of the interface to retrieve through ppv, typically IID_IShellView. + * + * @param ppv + * When this method returns successfully, contains the interface pointer requested in riid. This is typically IShellView. See the Remarks section for more details. + * + * @return + * If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + * + */ HRESULT CreateViewObject( WinDef.HWND hwndOwner, REFIID riid, PointerByReference ppv); + /** + * Gets the attributes of one or more file or folder objects contained in the object represented by IShellFolder. + * + * @param cidl + * The number of items from which to retrieve attributes. + * + * @param apidl + * The address of an array of pointers to ITEMIDLIST structures, each of which uniquely identifies an item relative to the parent folder. + * Each ITEMIDLIST structure must contain exactly one SHITEMID structure followed by a terminating zero. + * + * @param rgfInOut + * Pointer to a single ULONG value that, on entry, contains the bitwise SFGAO attributes that the calling application is requesting. On + * exit, this value contains the requested attributes that are common to all of the specified items. + * + * @return + * If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + * + */ HRESULT GetAttributesOf( int cidl, Pointer apidl, IntByReference rgfInOut); + /** + * If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + * + * @param hwndOwner + * A handle to the owner window that the client should specify if it displays a dialog box or message box. + * + * @param cidl + * The number of file objects or subfolders specified in the apidl parameter. + * + * @param apidl + * The address of an array of pointers to ITEMIDLIST structures, each of which uniquely identifies a file object or subfolder relative to + * the parent folder. Each item identifier list must contain exactly one SHITEMID structure followed by a terminating zero. + * + * @param riid + * A reference to the IID of the interface to retrieve through ppv. This can be any valid interface identifier that can be created for an + * item. The most common identifiers used by the Shell are listed in the comments at the end of this reference. + * + * @param rgfReserved + * Reserved. + * + * @param ppv + * When this method returns successfully, contains the interface pointer requested in riid. + * + * @return + * If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + * + */ HRESULT GetUIObjectOf( WinDef.HWND hwndOwner, int cidl, @@ -77,11 +367,53 @@ HRESULT GetUIObjectOf( IntByReference rgfReserved, PointerByReference ppv); + /** + * Retrieves the display name for the specified file object or subfolder. + * + * @param pidl + * PIDL that uniquely identifies the file object or subfolder relative to the parent folder. + * + * @param flags + * Flags used to request the type of display name to return. For a list of possible values, see the SHGDNF enumerated type. + * + * @param pName + * When this method returns, contains a pointer to a STRRET structure in which to return the display name. The type of name returned in this structure can be the requested type, but the Shell folder might return a different type. + * + * @return + * If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + * It is the caller's responsibility to free resources allocated by this function. + * + */ HRESULT GetDisplayNameOf( Pointer pidl, int flags, PointerByReference pName); + /** + * Sets the display name of a file object or subfolder, changing the item identifier in the process. + * + * @param hwnd + * A handle to the owner window of any dialog or message box that the client displays. + * + * @param pidl + * A pointer to an ITEMIDLIST structure that uniquely identifies the file object or subfolder relative to the parent folder. + * The structure must contain exactly one SHITEMID structure followed by a terminating zero. + * + * @param pszName + * A pointer to a null-terminated string that specifies the new display name. + * + * @param uFlags + * Flags that indicate the type of name specified by the pszName parameter. For a list of possible values and combinations of values, see SHGDNF. + * + * @param ppidlOut + * Optional. If specified, the address of a pointer to an ITEMIDLIST structure that receives the ITEMIDLIST of the renamed item. The + * caller requests this value by passing a non-null ppidlOut. Implementations of IShellFolder::SetNameOf must return a pointer to the + * new ITEMIDLIST in the ppidlOut parameter. + * + * @return + * If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + * + */ HRESULT SetNameOf( WinDef.HWND hwnd, Pointer pidl, @@ -89,7 +421,12 @@ HRESULT SetNameOf( int uFlags, PointerByReference ppidlOut); - + /* + Use this like: + PointerByReference pbr=new PointerByReference(); + HRESULT result=SomeCOMObject.QueryInterface(IID_ISHELLFOLDER, pbr); + if(COMUtils.SUCCEEDED(result)) IShellFolder isf=IShellFolder.Converter.PointerToIShellFolder(pbr); + */ public static class Converter {