Download - USB. Praktyczne programowanie z Windows API w C++

Transcript
Page 1: USB. Praktyczne programowanie z Windows API w C++

USB. Praktyczne programowanie z Windows API w C++Autor: Andrzej DanilukISBN: 978-83-246-2032-6Format: 158x235, stron: 280

Dowiedz siê wiêcej o dzia³aniu USB i poznaj metody programowania transmisji danych

• W jaki sposób odbywa siê transfer danych?• Jak odblokowaæ urz¹dzenia do transmisji?• Na czym polega programowanie obiektowe transmisji USB?

USB (skrót od ang. Universal Serial Bus — uniwersalna magistrala szeregowa) to rodzaj bardzo praktycznego portu komunikacyjnego, dziêki któremu mo¿liwe jest pod³¹czanie do komputera wielu ró¿nych urz¹dzeñ, takich jak mysz, kamera, aparat fotograficzny, telefon komórkowy, modem, skaner, przenoœna pamiêæ. Pod³¹czone w ten sposób urz¹dzenia s¹ od razu wykrywane i rozpoznawane przez system, dziêki czemu instalacja sterowników i konfiguracja sprzêtu odbywaj¹ siê zwykle automatycznie.

Ksi¹¿ka „USB. Praktyczne programowanie z Windows API w C++” w zwiêz³y sposób przedstawia wszelkie zagadnienia, dotycz¹ce u¿ytkowania i programowania transmisji USB. Korzystaj¹c z tego podrêcznika, poznasz nie tylko teoretyczne podstawy dzia³ania USB, ale tak¿e zdobêdziesz praktyczne umiejêtnoœci w tym zakresie. Ksi¹¿ka zawiera bowiem zarówno konkretne przyk³ady, jak i æwiczenia do samodzielnego wykonania dla wszystkich, którzy chc¹ zyskaæ wiedzê na zaawansowanym poziomie. Dowiesz siê miêdzy innymi, jakie s¹ rodzaje transferów danych i transakcji USB, za co odpowiadaj¹ komponenty i jak wykorzystaæ wzorce projektowe. Zrozumiesz tak¿e metody projektowania obiektowego oraz implementacji oprogramowania steruj¹cego ³¹czem USB.

• œrodowisko fizyczne i sygna³owe USB• Klasy instalacji urz¹dzeñ• Rejestr systemowy• Transmisja danych• Struktura systemu USB• Detekcja i identyfikacja urz¹dzeñ • Odczyt i zapis danych w formie raportu• Programowanie obiektowe transmisji USB• Wewnêtrzne struktury danych• Programy wielow¹tkowe• Konwertery USB

Tu znajdziesz wszystko o dzia³aniu USB i mo¿liwoœciach jego wykorzystania!

Page 2: USB. Praktyczne programowanie z Windows API w C++

������������ ������������ �� ���������������������������������������������������������������������������������������������� !"�#$ %&'%()# #!&*(+,��)#-./#00000000000000000000000000000000000000000000000000000000000000000000000000001-./#234#00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000567+8" # #8 "���+8" #0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000553�+(!$)�&#�+(&'9#000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000553�+(!+"':)#-./#000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005;<+" )=&#�+(&'9#0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005><��!?8��+( )#00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005@�� �����A��B�C��D�EFG���H��I �G���EJ�����������������������������������������������������������������K�)(=&$ "+=��&#?�%L�%)( +#000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005MK�)(=&$ "+=��&#!N�%O=?#000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005PK�)(=&$ "+=��&#"�8N+=&Q R(�S' #000000000000000000000000000000000000000000000000000000000000000000000000000000005P2')(+# #!)R)"':+#N+" )=T�#!=)���( "T�#00000000000000000000000000000000000000000000000000000000000000000005PUR+!&# (!=+R+': #?�%L�%)V#0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005PW)()�X)�#?�%L�%)V#000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000517):)!=�#!&!=)8��&#0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Y6UR?'%#=)8+=&'%(&#ZU[\]2_ ]W _ZKa[#00000000000000000000000000000000000000000000000000000YY<��"R?'%#=)8+=&'%(&#b_R+!!#0000000000000000000000000000000000000000000000000000000000000000000000000000000000000Y;<��"R?'%#N��"R?'%+#=)8+=&'%()*�#b_R+!!#0000000000000000000000000000000000000000000000000000000000000000Y>K�)(=&$ "+=��&#4-Kc#000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Y@<R " #0 ($#00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Yd<��!?8��+( )#0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000YM�� �����e��fg�hi� ������gD�gF�� ��jEJ�������������������������������������������������������������Ak.=�?"=?�+#!&!=)8?#-./#00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Y1l+�!=�+#$?("':�(+R(+#0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Y1l+�!=�+#$ %&'%(+#00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;6l+�!=�+#R�* '%(+#00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;5<�=�" #�+(&'9#00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;Y-�%L�%)( +# #�)!"�&N=��&#?�%L�%)V#-./#000000000000000000000000000000000000000000000000000000000000000000000000;>U�($ *?�+':)# #�)!"�&N=��&#"�($ *?�+': #0000000000000000000000000000000000000000000000000000000000000000000000000;MK(=)�$):!&# #�)!"�&N=��&# (=)�$):!T�#?�%L�%)V#-./#00000000000000000000000000000000000000000000000000000000;1K(=)�$):!#K.�$=Z �-./c)m ')#00000000000000000000000000000000000000000000000000000000000000000000000000000000000>5<?("=&#"�V'��)# #�)!"�&N=��&#N?("=?#"�V'��)*�#00000000000000000000000000000000000000000000000000000000>YU�8?( "+':+#N��*�+8?#?X&="��( "+#%#?�%L�%)( )8#00000000000000000000000000000000000000000000000000000>;c)!"�&N=��#�+N��=?#0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>d<�%&':)#_�RR)'= �(# #[(�#_�RR)'= �(#0000000000000000000000000000000000000000000000000000000000000000000000000>M7��%+:)#�+N��=T�#00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>P

Page 3: USB. Praktyczne programowanie z Windows API w C++

� ���������� ����������������� ���������������������� !"#$% �&" !'�%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()*+" ,�!%-�./01%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((23��4 56/%�� !"#07%-�./01%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((2385-."6!47%,7� %((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((239"-6!��"�5%:;.40<5%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((23+;.40<5% "-=7./%>7-?@ABBCD%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((2E+;.40<5% "-=7./%>7-9@ABBCD%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((2*F7GH7"!54�%>I?(?JJ%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((KKL! ;4!; �%MNF%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((KO+;.40<�%M6GF;7H-P5!?560 7&!" N5Q;56!CD%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*29"-6;,"��.75%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*2R� � ��S����T���U���������V���U��W� X� �Y���SX� ����Z�����������[����������\]9"-6!��"�5%=�6"G/%6/6!5,"�5%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*O+;.40<�%L5!;&?7P5!H�66?5_6CD%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*O+;.40<�%L5!;&?7.;,?5_705I.!5 :�056CD%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((O3L! ;4!; �%L9@? aIb+c@?ded%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((O3L! ;4!; �%L9@? aI @IbeN+d @?ded%((((((((((((((((((((((((((((((((((((((((((((((((((((((((OEL! ;4!; �%L9@? aI @IbeN+d @? edIJ@?ded%((((((((((((((((((((((((((((((((((((((((Of+;.40<�%L5!;&?7P5!?5_705I.!5 :�05?5!�7HCD%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Of+;.40<�%L5!;&?7?56! "/?5_705I.:"J76!CD%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Og?5!540<�%7.!5 :5<6'�%; =h-=5i%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((O)�H70=�.75%7.!5 :5<6'�%; =h-=5i%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((O*+;.40<�%L5!;&?7P5!?5_705N5j76! /9 "&5 !/CD%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((E33L! ;4!; /%-�./01%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((E3)k"-;l%;6G7"-5:(1%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((E3*F7GH7"!54�%65!;&�&7(-HH%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((EE39"�7�-�,7�.75%"%-"lh0=�.7;%7%"-lh0=�.7;%; =h-=5i%(((((((((((((((((((((((((((((((((((((((((((((((((((((EEg9"-6;,"��.75%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((EE*R� � ��S�m��n�o[��������W� X� ���������������U���n�� ���� ����������Z��������ppqc-GH"4"��.75%; =h-=5.7�%-"%! �.6,76<7%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((EEO+;.40<�% 5�!5+7H5CD%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((EEO+;.40<�%H"65>�.-H5CD%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Eff9 =/4l�-"�/%& "j �,%# "-"�764�%!546!"�5j"%((((((((((((((((((((((((((((((((((((((((((((((((((((((Effc-0=/!%-�./01%�%:" ,75% �&" !;%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((EfK+;.40<�%N5�-+7H5CD%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((EfKc-0=/!%-l;j"#07%G;:" �%-�./01%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Egf+;.40<�%>7-?@P5!I.&;!N5&" !CD%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Egrc-0=/!%�l�6."#07%& =/0764'�%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((EgKc-0=/!%�l�6."#07%�� !"#07%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((E)fd&H74�0<�%# "-"�764�%j �:70=.5j"%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((E)K��&76%-�./01%�%:" ,75% �&" !;%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((E2f+;.40<�%s 7!5+7H5CD%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((E2g+;.40<5%>7-?@L5!c;!&;!N5&" !CD%" �=%>7-?@L5!+5�!; 5CD%(((((((((((((((((((((((((((((((((((E2)L! ;4!; �%ca NJd99?%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((E22+;.40<5%BBBB%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((E2*L! ;4!; �%ckkeIk cMeL%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ErE+;.40<5%P5!",,e7,5";!6CD%7%L5!",,e7,5";!6CD%(((((((((((((((((((((((((((((((((((((((((((Erf+;.40<�%?5_705I"".! "HCD%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ErgN"=4�=/%=%,"-;l;%17-0H�66(1%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ErON"=4�=/%=%,"-;l;%;6G7"0!H(1%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((EKg9"-6;,"��.75%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((EKg

Page 4: USB. Praktyczne programowanie z Windows API w C++

���������� �� � ���������������������������������������������������������������������������������������� !"#$%&%'()*****************************************************************************************************************+,-./%01")20%3"#$%&")*******************************************************************************************************+456!78"9$%7)****************************************************************************************************************+4:;7$"0<"3=>)***********************************************************************************************************************+44?9!1/@7!")%A&%B@C)A%)!7$"0<"3=D)*****************************************************************************+E-;A"7$><!#@$%0)!7$"0<"3=D)*******************************************************************************************+EFG%H2%7"7$>)*****************************************************************************************************************5I:J%A=DH%&@7!")**************************************************************************************************************5I,K&!1/"7!@)*********************************************************************************************************************5I,�� � �������L���M�� ������N��N�O����OP��������������������������������������������������������Q�J0%80@H)20%1"AD0@97>)**************************************************************************************************5+FJ0%80@H)% !"#$%&>)******************************************************************************************************55:R29!#@13@)'0%A%&!=#@)80@<!1/7"8%)********************************************************************************5:IJ%A=DH%&@7!")**************************************************************************************************************5SIK&!1/"7!@)*********************************************************************************************************************5SI�� � ����T���������O����U��V���������������������������������������������������������������������QWX.Y$#!)!)20%1"=>)*************************************************************************************************************5S:ZD7#13")[0"@$"\]0"@A_)************************************************************************************************5SSG9@=@)\\]0"@A)**************************************************************************************************************5-:J%A=DH%&@7!")**************************************************************************************************************5F+K&!1/"7!@)*********************************************************************************************************************5F+�� � ������a��������O��������������������������������������������������������������������������������Q�XG%7&"0$"0>)b6cde6)5:5[)*******************************************************************************************5F:.B@'1!&%'1!)2%0$D)#%7&"0$"0@)*******************************************************************************5FSG%7&"0$"0>)b6cd;fffgS44)*****************************************************************************************5FFJ%A=DH%&@7!")**************************************************************************************************************5F,h������N����������������������������������������������������������������������������������������Q��������� �������������������������������������������������������������������������������������Q��

Page 5: USB. Praktyczne programowanie z Windows API w C++

������������� �������������� ����������������������������� �!���"��#$%&'()*(+,-./&01/2)/.3456.478(,-+/97:'79.,+/;'(+(/2724+6/5;+'.87<,7/;5/-8=/;5*>?)8(+,-3/-/9?)8(+,-3/(.2-@.,-.A/B-+*7/9/2724+6-+/;5<.9-/2-C/,597/2;'(C4D/.:47959.,+2)/;'58+*3'7/<+E5/*+4+:8<-/-/-*+,47F-:.8<-/A/G+2;H?/4+E5/47;3/5;+'.8<-/8(C245/5:'+I@.,7<+24/<.:5/+,36+'.8<./J.,EA/KLMNOPLQORSTUVPWA/X5(;58(C8-+/;'58+23/+,36+'.8<-/;595>*3<+/;'(+<I8-+/3'()*(+,-./6-C*(7/8(4+'+6./;5*24.95976-/24.,.6-D/<.:/45/;5:.(.,5,./'723,:3/YAZAG./;5I'+*,-849+6/:-@:3,.243/8(7,,5I8-D/(/:4H'78=/,.<9.[,-+<2(+/(524.?7/;'(+*24.9-5,+;5,-[+<D/2724+6/5;+'.87<,7/97:5,3<+/+,36+'.8<C/3'()*(+,-./9/'.6.8=/;52(8(+EH@,78=24.,H9A\]&[74:59,-:/;'(7?)8(./3'()*(+,-+/*5/;5'43/&01/=524./J6.8-+'(724+E5:56;34+'.W/@3/=3./J:5,8+,4'.45'.W/_/3'()*(+,-+/;5(524.<+/9/24.,-+;'(7?)8(+,-./J.,EA/STTSaObNMTSTOWA\]c5/5*@5:59.,-3/@-,--/(.2-@.<)8+</3'()*(+,-+/;'(+8=5*(-/9/24.,/(.2-@.,-.J.,EA/dVeORObNMTSTOWA\]c5/2;'.9*(+,-3/24.,3/@-,--/(.2-@.<)878=/5;'5E'.659.,-+/=524./;'(724C;3<+*5/:5,F-E3'59.,-./,59+E5/2;'(C43A\]f3/;5;'(+(/4+2459.,-+/24.,3/@-,--/27E,.?5978=/2;'.9*(.D/(/<.:)/;'C*:5I8-);'(+27?3/*.,78=/3'()*(+,-+/65[+/;'.859.gA/h,F5'6.8<./(524.<+/;'(+:.(.,.*5/=524./9/5*;59-+*(-/,./972?.,7/;'(+(/,-+E5/'5(:.(/ijklmnoklpkqkrsA\]B-+*7/,59+/3'()*(+,-+/(524.<+/'5(;5(,.,+D/:5,4'5@+'/=524./9727?./*5/=3.'5(:.(/pjklmnokltjqkrojA/c5'4/(524.<+/('+2+459.,7/J;'(+(/Zu/62/@-,-+/vw5'.(/vx/;5(524.<)/9/,-2:-6/24.,-+/@5E-8(,76WA

Page 6: USB. Praktyczne programowanie z Windows API w C++

�� ���������� ����������������� ��������������������������� ��!"#$%&'"'()$%&*+),-./#.(*0&)')%-&120()(*,3(-&24056789:;<;=>?@A;<=B<AB8C?DE<=?FBG?@D<H8=AB?DG=@EDEE=IJ=E=IK=L8AB=A9:?C>;?M=N;OG:;P>;<DE<=9:?NGQPN<=;=9<RDP=A;OSF8TNEP=9:;<AORG=>?DONL=U8V<=9:?N8C?W=B<V;=A;OSF8TNEP=COA8FPX5678D8CDE<=COAOR?QPN=:8;F?;=YZ[\]_[\[a[bcM=L8AB=A9:?C>;?M=N;O=G:;P>;<DE<98;8AB?Q<=C=AB?DE<=d($(%X=e<V<@E=DE<M=GBC8:;8DO=;8AB?Q<=98B8F=;<:8CO9:;<;D?N;8DO=>8=N<@fC=F8DgEHG:?NQE=G:;P>;<DE?X=h:;P>;<DEG=9:;O9EA?DO;8AB?Q<=>8UOT@DO=?>:<A=iijM=98=N;OU=9:;<NL8>;E=8D8=>8=AB?DG=>8UOT@D<H8k?DHX=#(l&,m%)$%&%(nX56o8AB=COAOR?=:8;F?;=YZ[\pZcq_rs[_M=?SO=8B:;OU?W=EDg8:U?NQ<=8=U?FAOU?@DOU:8;UE?:;<=9?FE<BG=>?DONLM=FBf:O=U8V<=SOW=B:?DAUEB8C?DO=98B8FE<U=>8UOT@DOUXt8;F?;=B<D=FE<:8C?DO=Q<AB=>8=;<:8C<H8=9GDFBG=F8uN8C<H8=v]i=G:;P>;<DE?Xw9:8H:?U8C?DE<=L8AB?=U8V<=E><DBOgEF8C?W=C=>?DOU=N;?AE<=BO@F8=Q<>D8G:;P>;<DE<M=;?B<U=BO@F8=Q<>D8=G:;P>;<DE<=C=>?DOU=N;?AE<=U8V<=98;8AB?C?W;=?>:<A<U=iijX56x=D?ABy9D<Q=F8@<QD8TNE=;?=98T:<>DENBC<U=:8;F?;G=Z[\z{{_Zcc=G:;P>;<DEG9:;O9EAOC?DO=Q<AB=GDEF?B8CO=?>:<A=|=G:;P>;<DE<=9:;<NL8>;E=>8=AB?DG?>:<A8C?DE?=k?DHX=&##-($$(#)$%&%(nX=}8CO=?>:<A=98;8AB?Q<=?FBG?@DOM>89fFE=G:;P>;<DE<=9:;ORPN;8D<=Q<AB=>8=98:BG=h~�X=x=U8U<DNE<=8>RPN;<DE?G:;P>;<DE?=98:B=Q<AB=:<A<B8C?DOX56x=>?@A;<Q=F8@<QD8TNE=;?=98T:<>DENBC<U=D?=D8C8=?>:<A8C?D<H8=:8;F?;GYZ[\pZcq_rs[_=89:8H:?U8C?DE<=L8AB?=98SE<:?=F8U9@<BD<=><AF:O9B8:OG:;P>;<DE?=k;8SX=:OAGD<F=�X�nX

Page 7: USB. Praktyczne programowanie z Windows API w C++

��������������� �������������� ������������������������������������������� � !"#$%$&'()*+,-.%&/012)3*$245%.2(6&(/,-+7%$32$82+9$5+,-/%:$0*+%5)0(.1.;/&<+%.2(6&(/,-+%,+;</3-/;%3+0.;6')%0*/2$5,-1%-%(+3-0.;/%0*$0$5+,/%-,=$29+';/>?/,&$2%@A7%#2$&.'*%@A7%BBBC%5%3<-1.%DEFGB!"H*/2$5,-1%.2(6&(/,-+%5)0)I+%2$(1+(%JKLMNOPQRSTUVLROP%5%'/<.%$0*+*/'(,/8$01$,=-8.2$5+,-+%,$5/8$%032(W*.B%X&%*/8$%9$9/,*.%.2(6&(/,-/%3$($0*+;/5%0*+,-/%01$,=-8.2$5+,-+%>+,8B%YZFGE[\]_abcbCdBefghijkfklmnjhfopmhphilqfklr$93-<+*$2%stt%5%9$&.</%ab\ucuEDv%.&$0*W3,-+%0(/2/8%.w)*/'(,)':%=.,1';-%-%0*2.1*.271*42/%5%(,+1$9-*)%03$04x%.9$w<-5-+;6%0+9$&(-/<,/%32(/32$5+&(/,-/%&/*/1';-%-%-&/,*)y=-1+';-%z'-/w/1%&$0*W3.%&$%-,*/2=/;045%.2(6&(/{%+1*.+<,-/%&$I6'($,)':%&$%9+8-0*2+<-%|H}B~%*)9%3$&2$(&(-+</%($0*+I)%32(/&0*+5-$,/%,+;5+w,-/;0(/%(%,-':B��� ������������������������.,1';+%(52+'+%-&/,*)=-1+*$2%1<+0)%3$&I6'($,)':%.2(6&(/{7%1*42)':%<-0*+%-%$3-0%1$,y=-8.2+';-%(,+;&.;/%0-W%5%2/;/0*2(/%0)0*/9$5)9%5%1<.'(.%����M��N��M��N����%>($xB2$(&(-+I%�CB����������JKLT��R�KLN�V���K������������������N�V���TR������ �������������N J ¡���PT¢KUVLOU����� �������������£����¤¥P��VUKPL����� �������������£�¡�����VS�����¦§#+2+9/*2%N�V���TR�%501+(.;/%0*2.1*.2W%|@A%1<+0)%.2(6&(/{B%|w)'-/%*/8$%3+2+9/*2.;/0*%$3';$,+<,/B%©3<-1+';/%.w)*1$5,-1+%9$86%3$x-/2+ª%+&2/0%-&/,*)=-1+*$2+%|@A%&<+1<+0)%.2(6&(/{%«@A%(+%3$9$'6%=.,1';-%�R��M�KL�R��TR��¦B%~01+¬,-1%�PT¢KUVLOU%501+y(.;/%I+{'.':%(,+145%>(+1${'($,)%(/2$5)9%$82+,-'(,-1-/9C%32(/':$5.;6')%&+,/1$,12/*,)':%.2(6&(/{%>($xB%2$(&(-+I%�7%2)0B%�B­CB%|w)'-/%*/8$%3+2+9/*2.%5%32$82+9-/;/0*%$3';$,+<,/B%®/w/<-%501+¬,-1$5-%32()3-0(/9)%5+2*$zª%����7%=.,1';+%(524'-%<-0*W.2(6&(/{%*)3.%#,#%>+,8B%°\[cF_ °c±CB%X3';$,+<,-/%5)1$2()0*)5+,)%-&/,*)=-1+*$2¤¥P��VUKPL%501+(.;/%$1,$%$&3$5-/&(-+<,/%(+%-,*/2+1';W%(%$*2()9+,)9%(/0*+5/9.2(6&(/{B%²,+'(,-1%��VS�%32();9.;/%3$0*+ª%x-*$5/;%+<*/2,+*)5)%5)x2+,/8$%(/0*+5.,+0*W3.;6')':%0*+I)':%0)9x$<-'(,)':³���N�M���N��JJ�J% %$12/z<+%<-0*W%50()0*1-':%(+-,0*+<$5+,)':%5%0)0*/9-/%.2(6&(/{µ���N�M����N��� �¡��N�%%$12/z<+%<-0*W%(+-,0*+<$5+,)':%.2(6&(/{%(%&+,)9%-,*/2=/;0/9µ���N�M������ % %(52+'+%<-0*W%.2(6&(/{%(%&$9)z<,)9%-,*/2=/;0/9µ%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%d®/w/<-%5%*2+1'-/%*2+,09-0;-%.2(6&(/,-/%32(/(%¶%90%,-/%5)12)5+%(,+'(,-1+%3$'(6*1.%2+91-%&+,)':%HX�732(/':$&(-%&$%0*+,.%(+5-/0(/,-/%>+,8B%a\auF__abcbCB

Page 8: USB. Praktyczne programowanie z Windows API w C++

�� ��������� ������������������������������������� !"#$%&'&()*+*,-./012*3.4564/782*2-932178/*6,:9;<7/*=*:>:9/?8/@�� !"#$%A"�B&*+*,-./012*18:9;*3.4564/C*D;65E>EF*E4;0E85*2-93217/G,*4/:92=3*:<.4;H9,=/G,IJ/K/18*=>-,7278/*L37-EM8*78/*<,=8/648/*:8;N*4=.2E272*M/:9*=2.9,0O*�(PQB��#RQ(�B&#PQBS&IT,6*/=/793217/G,*DU;63*?,K72*4682G7,4,=2O*42*<,?,E5*L37-EM8* VWBXYW&ZZ[Z\]I_� ����_�a�b�_�a�c� ������d ��efg37-EM2*=>:43-3M/*879/.L/M:>*3.4564/C*86/79>L8-,=27>EF*<.4/4*=:-2h78-*�VijkV�lm['VW4=.2E27>*<.4/4*L37-EM;*'VWno�j VW!pXYY�ViY\]Iq�('&)S$Q$�rsAABrq�(Q$�rr'VWno�j&lnt�VijkV�lWVZmXkVY\rrrr�(rR�&P�("Arr�VijkV�lm['VWurrrr�(r$'$#�&P�("A#�Q)Qrr�VijkV�lm[�XWXurrA$)�A(QBrrrr�(rB$ S��rr�lWVZmXkV!pXYY njvurrrr�(r�qA%�rrwVtxVZ�lvVyurrrrAS)r$'$#�&P�!&#�()&%"Q!&#�Q)Qrr�VijkV�lWVZmXkV�XWXrrrr]z{:-2h78-*�VijkV�lm[�XWX*=:-243M/*:9.3-93.;*'$#�&P�("A#�Q)Q*|4,DI*92D/12*}I~�N*3?,KH18=82M5E*,G.278E4/78/*<.4/:43-8=2C*8:978/M5E>EF*3.4564/CI*�<EM,72178/*L37-EM8*?,K72<.4/-242O*=:-2h78-*<3:9>I*{*92-8?*=><26-3*L37-EM;*721/K>*=>=,U>=2O*E>-18E478/N92-*2D>*<.4/:43-2U2*=:4>:9-8/*879/.L/M:>*627/G,*3.4564/782I*{:-2h78-*�lWVZmXkV!pXYY njv=:-243M/*:9.3-93.;* S��I*�2.2?/9.*=/M0E8,=>*wVtxVZ�lvVy�M/:9*73?/./?*,6<>9>=27/G,879/.L/M:3I*J/G,*=2.9,0E8*42E4>72M5*:8;*,6*�*|4/.,=>*876/-:*<8/.=:4/G,*879/.L/M:3�IJ/K/18*L37-EM2*=>=,U>=272*M/:9*=*<;918*E>-18E478/N*<.4>*-2K6>?*=>=,U2783*721/K>,6<,=8/678,*4=8;-:4>O*=2.9,0O*wVtxVZ�lvVyI*J/K/18*'VWno�j&lnt�VijkV�lWVZmXkVY\]4=.�E8*=2.9,0O*"QB'&*,.24*L37-EM2* VWBQYW&ZZ[Z\]*4=.�E8*&%%A%#(A#wA%&#�)&w'N*,472HE42*9,N*K/*78/*4721/48,7,*879/.L/M:3*,*<,627>?*876/-:8/I*{:-2h78-*�VijkV�lWVZmXkV�XWX=:-243M/*:9.3-93.;*'$#�&P�!&#�()&%"Q!&#�Q)Q*|4,DI*.,46482U*��N*-9�./M*.,4?82.*721/K>=<8:2O*=*<,13*kx'j�V�vVijkV�lWVZmXkV�XWX�kx'j�Vr�rYj�V[m\'$#�&P�!&#�()&%"Q!&#�Q)Q]z���_�_�����ab�����a���{*<,12EF*:9.3-93.>*<.4/EF,=>=27/*:5*87L,.?2EM/*72*9/?29*/G4/?<12.42*3.4564/782721/K5E/G,*6,*-12:>*3.4564/C*���I*{*92D/18*}I~*42?8/:4E4,7,*M/M*,<8:I����������������������� ¡¢£�¡£¢��¤�¥¦§ ©ª«¬­¦§®®��� b����������_�_�� °� ������qA%� ±kx'j�V ²,4?82.*:9.3-93.>*=*D2M92EFI S�� ±!pXYY njv ³6/79>L8-29,.*�³µ*-12:>*3.4564/CI�qA%� ±�Vi�lYW ³6/79>L8-29,.*=/=7;9.47/M*:9.3-93.>*,<8:3M5E/M*3.4564/78/=*:>:9/?8/ISBA( #$)% ±%VYVZiVv ¶2./4/.=,=27/I

Page 9: USB. Praktyczne programowanie z Windows API w C++

��������������� �������������� ������������������������������������������� � !"#$%&'())*('+,-.+-,/(+/($01"#"-20(23.%4567898:;<5=>?5;@AB@CDEFGHI@CJKJ;L;;CMINC;;?OAPQ8R;;STFC;;UVW<<S>P9R;;CMINC;;C8XFY<5R;;TZIGS@BKN;;N8<8=X89R[;AB@CDEFGHI@CJKJ\;]BAB@CDEFGHI@CJKJR)01"#"23(+3(+&%,_($&3(#%&0('a%&3(.b-_%&0(AB@CDEFGHI@CJKJ(c'+,-.+-,3d("(AB@CDEFGHI@eCJKJ(c&'.3f#".($%('+,-.+-,dghijklmnopqrstjuoA85>7CPvwxyzoi{u|}m~lo��pik�ipuoAB@CDEFGHI@CJKJom}kqo�}p}�n�pizo}i��q�}�ulsjtno��p}|rs}m~o�q�p}|jq��oqkpn��njt}omnmopqs�t}pi�o�k�i}�juopqs�t}po��pik��ipuoj}�n{uoqkpn��t�os}o�q�ql~oq�np}�qp}o<PQ8�:xyoto|�t�}�orqo�q�}o?OAPQ8�o�n{n�tpqs�t}po��pik�ipuojtnosq��}jtnoqkpn��qjuo|oq���no�i�osq��}jtnoqkpn��qjuojtn�p}|t�r�q|qzo�qo|o�psu�}rkioi{ult}o��pik�ipuom}kqo�}p}�n�pio|nm�ltq|n�qoFGosq��}jtn|u�njnpq|}juo��~roDNNIN@FGEJZFC@BJNJ�DKDNzoj}�q�t}��o�qrls}�oi{u|}jt}o��pik�ipum}kqo�}p}�n�pio|um�ltq|n�qoITKosq��}jtno|u�njnpq|}juo��~rooDNNIN@FGEJZFC@TADN@�THHDN����� ����������������������������3'%�('+,-.+-,(AB@CDEFUD@FGKDNHJUD@CJKJ(_3�,0_0#+%&3#0(&(+3�0b"(�g�(�,_0 %&-2¡$3#0("#+0,102'-(#3b0¢¡0£%($%(.b3'(-,_¡$_0¤(¥¦§g�������©ª«¬­®°±²³®³ªµ¶·²¶·ª«¹º»¼½¾¿¼º¾ÀÁ¼ÂÃÄ¿¼º»ÄÁÄ��Å ������������ ���� Æ��������CMINC Ç?OAPQ8 È%_É"3,('+,-.+-,(&(�32+3 gSTFC ÇFY58=:W?8UVW<<S>P9 Ê$0#+1".3+%,(Ë¥Ê)("#+0,102'-(.b3'(-,_¡$_0¤gCMINC ÇHVWÌ<;Ç �#3_#"."("#+0,102'-g(!3,+%ÍÎ(ABFGK@JUKFED(%_#3_3Ï(¢0("#+0,102'20'+(3.+-3b#"0($%'+/�#g(!3,+%ÍÎ(ABFGK@CDHJTZK(%_#3_3($%ÉÍb#"#+0,102'($b3(.b3'(-,_¡$_0¤g(!3,+%ÍÎ(ABFGK@ND�IEDC(%.,0Íb3-'-#"/+("#+0,102'gTZIGS@BKN ÇN8<8=X89 Ð3,3É0+,(_3,0_0,&%&3#("(3.+-3b#"0(#"0-¢&3#g!"#$%&'())*('+,-.+-,/(+/($01"#"-20(23.%4567898:;<5=>?5;@AB@CDEFUD@FGKDNHJUD@CJKJ;L;;CMINC;?OAPQ8R;;STFC;;FY58=:W?8UVW<<S>P9R;;CMINC;HVWÌ<R;;TZIGS@BKN;;N8<8=X89R[;AB@CDEFUD@FGKDNHJUD@CJKJ\;]BAB@CDEFUD@FGKDNHJUD@CJKJR)01"#"23(+3(+&%,_($&3(#%&0('a%&3(.b-_%&0(AB@CDEFUD@FGKDNHJUD@CJKJ(c'+,-.+-,3d"(BAB@CDEFUD@FGKDNHJUD@CJKJ(c&'.3f#".($%('+,-.+-,dg

Page 10: USB. Praktyczne programowanie z Windows API w C++

�� ��������� ������������������������������������� !"#$%&'$() )*+, $%+%-*'�.$%/0123435678%�9:+,#;"%<=>�!=�>:%?@ABCDEFCAEGHCIJKFCABKHK#,!*%L,>,-$=>�8%,�=*-,=:"& )$%<L>,+'&,#;%L*L>,+ *MN%*!>$M.$ ),%#$#%>*&-),>�OP!=�,. :%>*&-),>%<=>�!=�>:% ,.$9:%*!>$M.)N%&,%L*-*";%*L$>,=*>,%QRSTUVWX%)%+L)<,N'*%L*.,%YZ?RSTO%[$9$.)%>*&-),>%<=>�!=�>:% )$%&*<=, )$%*!>$M.* :%+%*\].$%.�%&*<=,_ )$%*!>$M.* :% )$L>,+)'*+*8%<:<=$-%+:\$ $>�#$%;'%CIIaIAEGDKbEBAc?CIAdcJJCIO���e�e����fghi��hf�jkhlm��hfghk��nfg�k�opqrsprqtu?@ABCDEFCAEGHCIJKFCABCHKEbABKHKuvtwxyqtuxz{|q}t~�yu|u�|�pt~xu�~xy�sxu�|��p��ru�|uxzpyq{y��ruw��qtzy�|urqv��vyzxtu�o��u�upt�y�xu���u�qvy��ptwx|z|uvzt~vyzxy�|�v~vy���z�~�u���upy�u�pqrsprq��k���������������� ¡�¢¡�£¤¥¦ ¤¦¥���§©ª«¬­ª¬®ª°±²­ª©ª²¬³©²²k�� h����������e�e�� � �����BµaIB ¶YZ?RST ·|v}xtqu�pqrsprq�uwu�t�pt~��HFKI ¶BT¹RYT@º»¼½KG¾?E¿CÀAKIIK¾Á ÂtÃ~r~�uvzts�wuvts|Ã~v|z�uvyq|w�}u|�qtzx~vzxsxy}uÄpvw�uGcbbÅu¤�¥Æ�Ç¡¤�È�£¤¥�ÇÉÊuvtwxyqt��~�u�yËz�uztvw�u��}�|�x~vz�rqv��vyzxtuÄ�~xy�s�u�|�p��ru�|uxzpyq{y��rÊ�uÌtqt}ypqupyzw�s|qv��p�wtz�u�y�pu�qvyvu{rzs~��uFÍTº»TJRÎTWX��xz�|w�uÏÏÐu�pqrsprq�up�u�y{xzxr�yu�ts|Ñ»ÒÓTÔTVÕQ»ÍÖY»ÕA?@ABCDEFCAEGHCIJKFCABCHKEbABKHKÕ×ÕÕBµaIBÕÕYZ?RSTØÕÕHFKIÕÕBT¹RYT@º»¼½KG¾?E¿CAKIIK¾ÁØÙÕ?@ABCDEFCAEGHCIJKFCABCHKEbABKHKÚÕÛ@?@ABCDEFCAEGHCIJKFCABCHKEbABKHKØÏy{xzx~�tuptupw|qv�u�wtuz|wyu�Ë|wtus�r~v|wyu?@ABCDEFCAEGHCIJKFCABCHKEbABKHKÄ�pqrsprqtÊuxu@?@ABCDEFCAEGHCIJKFCABCHKEbABKHKuÄw�stÜzxsu�|u�pqrsprq�Ê�Ý)$!)$':%M")$9!Þ%'*<=ÞL�%'*%) =$>($#<�%�>&;'&$ ),%�=*9<,-),%<)Þ%&%#$\*% ,&+;%<:-_*.)"& ;8%!=]>;%-*9 ,%*'"&:=,N%&%>$#$<=>�%<:<=$-*+$\*%ß&*O%>*&'&O%àáO%âã*"),9%=$'+,%,ä"�"ã:%& ,!]+%-,#;%,>'&*%L*'* ;%L*<=,N8%=*%#$' ,!%-*\;%>]9 )N%<)Þ'�\*M");8%'.,=$\*%+%L>*\>,-,"ã%$&L)$"& $#%#$<=%L*<�\)+,N%<)Þ%!*-L.$= :-)%',_ :-)%&,L)<, :-)%+%L*.�%BT¹RYT@º»¼%<=>�!=�>:%?@ABCDEFCAEGHCIJKFCABCHKEbABKHKOme� å����e�g�æ��g�ç� ������è �g����éêërzs~�tuvwqt~tu�v~vy��Ë|wyuxz{|q}t~�yuztupy}tpuxzpyq{y��rurqv��vyzxt�µEG?CHc@K@EÕdaabÕµEGK@EÕÕ?T»ÖÓBRìT»BT¹RYTEí»TÍVºYTBT»ºRÎWÕÕÕÕEGÕBCDEGJaÕÕBT¹RYTEíVU?T»ÚÕÕÕÕEGÕ@?@ABCDEFCAEGHCIJKFCABKHKÕÕBT¹RYTEí»TÍVºYTBº»ºÚÕÕÕÕacHÕ@?@ABCDEFCAEGHCIJKFCABCHKEbABKHKÕÕBT¹RYTEí»TÍVºYTBT»ºRÎBº»ºÚÕa@HEaGKbÕÕÕÕEGÕBµaIBÕÕBT¹RYTEí»TÍVºYTBT»ºRÎBº»º?RSTÚÕÕÕÕacHÕ@BµaIBÕÕITîÖRÍTÔ?RSTÚÕÕa@HEaGKbÕÕÕÕacHÕ@?@ABCDEGJaABKHKÕÕBT¹RYTEíVUBº»ºÕÕa@HEaGKbÕÕÕÕXØ

Page 11: USB. Praktyczne programowanie z Windows API w C++

��������������� �������������� ������������������������������������������� � !"#$%&'#()*+,-*./012*3(456$7$&8(9:";(<64:4(=>&#79?(2*3@A),B*3CDEFF)*+FGHI(J$6$KL:;6()*+,-*./3*M0E-*)E3E(5"#$4>9:(";6>#;>6?(2NO)PQ.CPO.RSPTUVCPO)VSVI(!"#$%&'#)*+,-*./3*M0E-*)*3E,D)E3E(5"#$4>9:(";6>#;>6?(2NO)PQ.CPO.RSPTUVCPO)PSV.WO)VSV(X4YZI6Y4[4'$\(]_(Y<79Y&$&':(4$L'$";(&':aY([Y(=>&#79'(LYb:(Z8c(<64:#$4$&$(5$6;Ydc(ReWWI!(<648<$[#>(9$5&:aY(5"#$4$&'$(";6>#;>68(2NO)PQ.CPO.RSPTUVCPO)PSV.WO)VSV(5"#$%K&'#(<Y5'&':&(Z8c(<Y<6$5&':(4$'&'79Y5$&8f($(9:9(<Y:(-g2,h*(L>"'(Z8c(<6$5'[\Y5YY#6:dY&:I(!(<64:7'5&8L(6$4':(#YL<'$;Y6(4a\Y"'(Z\?[8(&$6>"4:&'$(<$L'?7'f(5("<Y"iZ<Y[YZ&8([Y(;87j(<Y#$4$&87j(&$(68">&#$7j(kIl('(kI]I������ ��m�nopqrstuvwxysztr{t|z}~zrq�trszy{ut�zqo���rxtzsz~���tsy��r�w�t�sz�trq�rw�uv��vu���������������������������������6a>L:&;()*+,-*./3*M0E-*)*3E,D)E3E2,h*(=>&#79'(2*3@A),B*3)*+,-*./3*M0E-*)*3E,DGHL$(5$6;Ydc(4:6Y5�f(9:b:'()*+,-*./3*M0E-*)*3E,D)E3E�ReWW_(5(<64:7'5&8L(6$4':(Y#6:d$6Y4L'$6(Z>=Y6$�(G100F*310G2NO)PQ.CPO.RSPTUVCPO)PSV.WO)VSV��)*+,-*NE3�H���F,h*10�GSC�VTHHI(J$6$L:;6(T* @,M*¡2,h*�9:";(5"#$%&'#':L([Y([$&:9(;8<>()¢£T)f(#;i6:9(<648K<'">9:("'?(b�[$&8(6Y4L'$6(Z>=Y6$(5"#$485$&:aY(<64:4()*+,-*./3*M0E-*)*3E,D)E3EIJ$6$L:;6()*+,-*./01)E3E�9:";(5"#$%&'#':L([Y(Z>=Y6$([$&87j(<64:7jY5>9�7:aY('&K=Y6L$79:(&$(;:L$;('&;:6=:9">(>64�[4:&'$I(¤:b:'(5"#$%&'#Y5'(&':(<648<'"$&Y(5$6;Yd7'ReWWf(6Y4L'$6([$&87j(<Y5'&':&(4Y";$c(Y#6:dY&8(4$(<YLY7�(Y<:6$;Y6$(F,h*10GH�()*+,-*�./01)E3E¥-g2,h*�F,h*10G2NO)PQ.RU£O)VSVHI¦�� ��������§�����������©���ª���«¬­>&#79$(>">5$(5"48";#':(4$$Y#Y5$&:(4$"YZ8(4$5':6$9�7:('&=Y6L$79:(Y(>64�[4:&'>'(45$&'$(<648[4':Y&�('L(<$L'?cI(®Y:9&:(>64�[4:&'$(<Y[\�74$&:([Y("8";:L>(LYa�#Y648";$c(4:(45Y&'Y&87j(4$"YZi5I

Page 12: USB. Praktyczne programowanie z Windows API w C++

�� ��������� �������������������������������������������� ��!"#$%&'()*+,&-'%.'/-01-%$2'%&-,.('3-$"434%45(,624&,74%.42'%189-+,%3*5':&-5'%$4%*;()5;)(<9=>?@ABC@>BDE@FGHC@>?@EHBI>?HEHJKLMNOPQRQKSTUUVSJKLRQKSSMWXYZ[\[W]X_[Wa\bWKcd_V\]XeSSSSKLSf[NgKLhUSS[Wa\bWKcd_MWXSSSSijklmnopqmr[Wa\bWKcd_MWXrstunvnpwrxylzr{usysr|}pmvx~rMWXYZ[\�WX���]][Wa]ei�rkr{usw�{n�m}r{untq���ty��rst��pqypqnrsnl���tr|}pmvxnrstunvnrtnuz���rO�PN�rtr{usyvqtpw�unsqyrtnuz���rhRVMN�r���rtwlz�{qypqnr��~�}rstunvnpwrxylzr{usysr|}pmvx~r�WXV�]XN _ei����� �����������������������nruwl}pm}r���rtr{�lznvqr�qn�un�}rvswpp��vqr{usy�lzntq�p�r����p�rlqy�r�sqn�n��rsn{���v�rmz�uwv�r���pnr{u��un��t�rln���sqy�pqyrtwm�pn�r{u�vy�}u~r�yzymvxqr}us���sy�rm�nlwr�� rnmz}n�pqyr{����vs�pwv�r��rlwlzy�}�rv�rtry|ymvqyr{�tqpp�rlm}zm�tn���swlmnpqy�r.,"&<1¡rpnstrlw����qvspwv�r¢{y�pwv�r�vqy�ymr��lz~{}r��rqpzyu|yxl�t£}us��sy�rsn{qlnpwv�rtr{��}r[Wa\bWQ�X¤rlzu}mz}uwrMQ¥[NgK�N¥KLON�hR�N¥[NORKV¥[ROR�kr{qyutlsyxrm��yxp��vqrpn�y�wr��vswzn�r{�lzn�rq�ypzw|qmnz�unr¦§� rqpzyu|yxl}rm�nlw}us��sy�rtwlz~{}x�vwv�rtrlwlzy�qy�rklmnopqmrWa\bWKcd_MWXrtlmn�yr�npyrsntqyun�x�vyrqp|�u�nvxyrpnrzy�nzrtlswlzmqv�rsnqplzn��tnpwv�rqrnmz}n�pqyr��lz~{pwv�r¢{usw���vs�pwv�£r}us��sy�r�npyxrm�nlw�r�nlz~{pqyrtwls}mqtnpyrl�rqpzyu|yxlwr{�lsvsy���pwv�}us��sy��r©�{usysr��vswznpqyrsntnuz��vqr{��nr[Wa\bWQ�X¤rlzu}mz}uwrMQ¥[NgK�N¥KLON�hR�N¥[NORKV¥[RORrtw���wtnpnrxylzr{y�pnr�vqy�mnr��lz~{}r��rqpzyu|yxl}rqlzpqyx�vy��r}us���sypqn�r�nrm�pqyvr��zwv�vsnlr}�wtnpyr{usysr{u��un�rsnl��wrl�rstn�pqnpy�

Page 13: USB. Praktyczne programowanie z Windows API w C++

��������������� �������������� ������������������������������������������� � ������ ���!"#$%&'()*"+*,-.&%%/0-)'($*'/12+*-3)45671%23'2%8,2+*-3)8+.9(.2:';$*5&'<=>?@ABCDECFGHAIJKAL@MCNDLOLPFPAQPRAMPRHSHATUPVNQEHAWXRYONGPAHDLOLNGZSP[CPFYACM\TBNMNFE@OVYARC@GU@MHALAU]DHFQHAIJIJ��������_�/(',/(8a8'85bcdecfg-11A3*;/'1+.&;a*('.*1+/"+*,/4*%)*'45671%23'2%8,2+*-3)'8+.9(.2:%*'1/(56*4)2')(2%6&h);*6/+*'ij=>';$*5&'8+.9(.2:klmnopqrstulmqvuwxklmnopqrstwrypz{zlxklmnopqrst{wwr|yxklmnopqrstlvwy|r{}xpwlm~sm{}rwz{nrswyq��vlqsqlwzo{��||v|�nvmwysn�{|�s}w~��ssnvpystts}w~sttsrmqo�ssw�wyr}����������ssr�ly�����������������������������������������������������������������yr}zo{yrstno{wws�xlmolmrs�vlqs|ror{wr�r}v|���s����ss{wwr|y��s��s������ssqroryrs��ss�s�s���������������������������������������������������������������������sno{ww�plq�

Page 14: USB. Praktyczne programowanie z Windows API w C++

�� ��������� ������������������������������������� !"#$%&�'(#')*!+ ,!%-./01'203(%4502.-%636)3780(39%:%;*!+ ,!%(3<'=380>37?@=3!3>@'4!@>@A'B3*!+ ,!%73C/'73(A'B3*�!$D8EF %(3<'=380?5A3>*AGH!$D8I$H8EJ$,FKI$H!KJK%(3<'=380>37?@=3!@>@*GAGH!$D8I$H8EJ$,FKI$H!$JK8#H!KJK%(3<'=380>37?@=3!3>@'4!@>@%:%E"##*'0>%6@'0LMN%%<5'(%LHH1>(=@44%.�'(!HO3>�'(O/'(ML "J%#GO"8!%�'(O/'(M*%%&�'(#')%:%#5@(#')7@7PLQIRSS+'0(5T1SS1P1>36UVSS�8!W!##QM*%%'?%LX&�'(#')M%%%%('1Y4@P$7757LQZ[\(%(5[\=B30'@%)')4'5>3]'%�8!W!##WQM*%%-.L<5'(%HH1>([email protected],G, IM%�'(!HO3>�'(O/'(%:%O3>G75=K((7311L&�'(#')_%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Q�'(!HO3>�'(O/'(QM*%%%'?%LX�'(!HO3>�'(O/'(MN%%%%%%F733#')7@7PL&�'(#')M*%%%%%%('1Y4@P$7757LQE'3%B0@43B'505%'(30>P?']@>57@%O"8!QM*%%%%%%�'(!HO3>�'(O/'(L=4@11O/'(M*%%%(3<'=380?5A3>%:%A3>/Y!'O3>I4@11!3<1L=4@11O/'(_%E"##_%E"##_%%%%%%%%%%%%%%%%%%%!8OIFHG,$A$EJ%a%!8OIFH8EJ$,FKI$!$D8I$M*%%%'?%L(3<'=380?5A3>%::%8EDK#8!H�KE!#$HDK#"$M%%%%%%('1Y4@P$7757LQE'3%B'(30>P?']5T@05%Y5([\=B50P=&%/7B\(B3bWS0QM*%%%(3<'=380>37?@=3!@>@W=)A'B3%:%1'B35?LAGH!$D8I$H8EJ$,FKI$H!KJKM*%%%T&'43LA3>/Y!'$0/6!3<'=380>37?@=31L(3<'=380?5A3>_%E"##_%=4@11O/'(_%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%636)3780(39_%(3<'=380>37?@=3!@>@MMN%%%%%%%636)3780(39cc*%--defghihejklmkneoihgondejhgphmqo%%%%%%%A3>/Y!'O3>!3<'=380>37?@=3!3>@'4L(3<'=380?5A3>_%(3<'=380>37?@=3!@>@_%%%%%%%%%%%%%%%%%%%%%%%%%%%%%E"##_%;_%(3<'=380>37?@=3!3>@'4!@>@A'B3_%E"##M*%%%%%%%(3<'=380>37?@=3!3>@'4!@>@%:%LGAGH!$D8I$H8EJ$,FKI$H!$JK8#H!KJKM%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%03T%!+ ,!r(3<'=380>37?@=3!3>@'4!@>@A'B3s*%%%%%%%(3<'=380>37?@=3!3>@'4!@>@tu=)A'B3:1'B35?LAGH!$D8I$H8EJ$,FKI$H!$JK8#H!KJKM*%%%%%%%'?%LXA3>/Y!'O3>!3<'=380>37?@=3!3>@'4L(3<'=380?5A3>_%(3<'=380>37?@=3!@>@_%%%%%%%%%%%%%%%%%%%%%%%(3<'=380>37?@=3!3>@'4!@>@_%(3<'=380>37?@=3!3>@'4!@>@A'B3_%%%%%%%%%%%%%%%%%%%%%%%73C/'73(A'B3_%E"##MMN%%%%%%%%%%%7343@13�3657PL(3<'=380>37?@=3!3>@'4!@>@M*%%%%%%%%%%%--A3>/Y!'!31>75P!3<'=380?5#'1>L(3<'=380?5A3>M*%%%%%%%%%%%--('1Y4@P$7757LQE'3%65v0@%Y5)7@w%'0?576@=x'%5%'0>37?3x1'3WS0QM*%%%%%%%%%%%%%%=5/>%yy%(3<'=380>37?@=3!3>@'4!@>@tu!3<'=3G@>&%yy%30(4*%%%%%%%7343@13�3657PL(3<'=380>37?@=3!3>@'4!@>@M*%%%%*--fzedhln{|d}h

Page 15: USB. Praktyczne programowanie z Windows API w C++

��������������� �������������� ������������������������������������������� � !!!"#$%&'('#)$*+,'#-(.#/01+2()$34#-(.#/01+"#$56!!!7*##2(8*9*,3:;(42(856!!!.+%$!<<!#04=6!!!),)$#>3?@AB"C?56!!!*#$%*0!D6EFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHIJKLMNOPQRKSMTUVRWKQVRMONMXYKVZ[QM7A\@\]M_OLXQKQNTRKLMUMTMPNOYaLMbcdefghijkMlQKYVUQLM7A\@\]MKRaLJSM_RUmnQoMTUVRWKQVQLPMNpIaKSPM-+(4qjMkQKONTUMrstMuvwUmNUY[LMVNKTLKZ[xMyy)$4.9==zMZNM_RnLTKQRzMJLMXYKVZ[RM_NUmRKQLMTSTN{RKRM_pNOKQL_MTSPNpRPQMUSUmLPYMNnL|RZS[KLpNjM}_KRZ_RMmNzMJLMTMXYKVZ[QMTSTN{Y[ZL[MaQZ_~RQMmSnMR|pYPLKmITMPYU_M~SoMnNn|RTKLjM�YKVZ[LMQMmSnSMORKSZ�MOLXQKQNTRKLMTM_R�UN~RZ�MsstMuvwMZ_xUmNMnNU{YpY[MUQxMKRUmxnY[ZSPQMPRV|NOLXQKQZ[RPQ��4#1(0#!''�A@/!yy)$4.9==aY~�4#1(0#!''�A@/y@�\!yy)$4.9==qkMmLpNMmSnYMVNKTLKZ[RZ�MOLVaR|RZ[RMTUVRWKQVRMONMXYKVZ[QMPNJLM_NUmRoM_RnQURKRKRM[LOLKM_MOTIZ�MUnNUN~IT�-+(4!3''�A@/!q;(4'y�#$;(4�%(453]B�!2@�B/'!;(4�%(456aY~-+(4!3''�A@/y@�\!;(4'y�#$;(4�%(453]B�!2@�B/'!;(4�%(456���������������������������������������������� ���¡����������¢��£������������������¤��� ����¡�¥�����¦���§������������� �������� ��������������������¦����©����������ª�¢«������� ��¬�­®°±²³²µ®¶· ¹º»¼½¾�¿µÀ¶²±³°ÁµÂð²Ä²Å°²Æ���������Ç���¥�������È��������������¦¡���É������Ê���¦���������Ë��¡����ÌÍÎ� ���©�§���������������Ê�������*#9$#7(=#35�����¡������� �����������Ê���������¡�������¤�������������������ÏÐÑ������¡��������È������������� ���