15
USB. Praktyczne programowanie z Windows API w C++ Autor: Andrzej Daniluk ISBN: 978-83-246-2032-6 Format: 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!

USB. Praktyczne programowanie z Windows API w C++

Embed Size (px)

DESCRIPTION

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 USBTu znajdziesz wszystko o działaniu USB i możliwościach jego wykorzystania!

Citation preview

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�����¡������� �����������Ê���������¡�������¤�������������������ÏÐÑ������¡��������È������������� ���