3 N D I S
3 N D I S N D I S N D I S N D I D D K C p a c k e t. c o p e n c l o s. c r e a d. c w r i t e. c p a c k e t. r c p a c k e t. s y s p a c k e t. i n f C a n a l y z e. c c h i l d w i n. c p a c k e t 32. c t e s t a p p. c t e s t a p p. e x e p a c k e t. s y s p a c k e t. i n f t e s t a p p. e x e 3.1 NDIS 3.1.1 Wi n d o w s Microsoft Windows 2000 I S O 7 I S O O S I 1978 Windows 2000 4 4 1) O S I Windows 2000 N I C 2) O S I I E E E L L C ( ) M A C ) L L C L L L L C M A C 48
3 N D I S Windows 2000 L L C M A N I C N I C N I C Windows 2000 N I C N I C 3) 4) Windows 2000 NetBEUI O S I L L C L L C T C P / I P I P N W L i n k I P X 3.1.2 NDIS Windows 2000 transport driver Wi n d o w s 2000 T C P / I P I P X / S P X N e t B E U I N D I S N D I N D I S M i c r o s o f t N D I S N D I S N E T B I N D N D I S 5. 1 Windows 2000 N D I S 5. 0 5. 0 N D I S ( N D I S. s y s ) N I C M i c r o s o f t N D I S N I C N T N D I S N I C N D I S 1. NDIS N D I S N I C N I C N I C 49
Windows N I C N D I S N I C N D I S N d i s X X X M i n i p o r t X x x N D I S N I C N D I S N D I S N d i s X x x N D I S N d i s X x x N d i s X x x N I C N I C N D I S N I C N D I S M i n i p o r t X x x N I C N I C N d i s X x x N D I S N I C F D D I N D I S M i n i p o r t X x x M i n i p o r t X x x N I C AT M I S D N M i n i p o r t N D I S N D I N D I (Universal Serial Bus U S B ) IEEE 1394 F i r e w i r e / I / O I R P N D I S N D I N D I S WA N WAN NIC 2. NDIS P r o t o c o l X x x N D I S M i n i p o r t X x x N D I S M i n i p o r t X x x N I C 50
3 N D I S N I C AT M AT M N I C N I C 3. NDIS N D I S T C P / I P I P X / S P X N I C N d i s X x x P r o t o c o l X x x N D I S 3-1 3.1.3 NDIS T C P / I P T C P / I T C P / I P N D I S N D I S N D I S 51
Windows TDI LAN LAN NDIS NDIS NDIS 3-1 NDIS 3.2 NDIS 3.2.1 1. NDIS N D I S N D I 3-1 N D I S 52
3 N D I S N D I S N D I S 2. W D M N D I S D r i v e r E n t r y D r i v e r E n t r N D I S D r i v e r E n t r y D r i v e r E n t r y N d i s R e g i s t e r P r o t o c o l D r i v e r E n t r y N d i s D e r e g i s t e r P r o t o c o l P r o t o c o l B i n d A d a p t e r N I C P r o t o c o l B i n d A d a p t e r P r o t o c o l B i n d A d a p t e r D r i v e r E n t r y N d i s O p e n A d a p t e r P r o t o c o l U n b i n d A d a p t e r P r o t o c o l B i n d A d a p t e r P r o t o c o l U n b i n d A d a p t e r N d i s C l o s e A d a p t e r N d i s O p e n A d a p t e r P r o t o c o l O p e n A d a p t e r C o m p l e t e N d i s O p e n A d a p t e r N D I S _ S TAT U S _ P E N D I N G P r o t o c o l O p e n A d a p t e r C o m p l e t e P r o t o c o l C l o s e A d a p t e r C o m p l e t e N d i s C l o s e A d a p t e r N D I S _ S TAT U S _ P E N D I N G P r o t o c o l C l o s e A d a p t e r C o m p l e t e ProtocolReceive N I C P r o t o c o l R e c e i v e N d i s M X x x I n d i c a t e R e c e i v e N I C 53
Windows H e a d e r B u ff e r L o o k a h e a d B u ff e r L o o k a h e a d B u ff e r N d i s Tr a n s f e r D a t a P r o t o c o l R e c e i v e C o m p l e t e N I C P r o t o c o l R e c e i v P r o t o c o l R e c e i v e C o m p l e t e P r o t o c o l Tr a n s f e r D a t a C o m p l e t e N d i s M I n d i c a t e R e c e i v e P a c k e t N I C N d i s Tr a n s f e r D a t a N D I S _ S TAT U S _ P E N D I N G P r o t o c o l Tr a n s f e r D a t a C o m p l e t e P r o t o c o l R e c e i v e P a c k e t N I C N D I S N d i s M I n d i c a t e R e c e i v e P a c k e t P r o t o c o l R e c e i v e P a c k e t N I C P r o t o c o l R e c e i v e P a c k e t N d i s M I n d i c a t e R e c e i v e P a c k e t P r o t o c o l S e n d C o m p l e t e N d i s S e n d N D I S _ S TAT U S _ P E N D I N G P r o t o c o l S e n d C o m p l e t e N d i s S e n d P a c k e t s P r o t o c o l S e n d C o m p l e t e P r o t o c o l R e s e t C o m p l e t e N d i s R e s e t N D I S _ S TAT U S _ P E N D I N G P r o t o c o l R e s e t C o m p l e t e P r o t o c o l R e q u e s t C o m p l e t e N d i s R e q u e s t N D I S _ S TAT U S _ P E N D I N G P r o t o c o l R e q u e s t C o m p l e t e P r o t o c o l S t a t u s P r o t o c o l S t a t u s N I C P r o t o c o l S t a t u s C o m p l e t e P r o t o c o l S t a t u s C o m p l e t N D I S P r o t o c o l S t a t u s N D I S N I C P r o t o c o l P n P E v e n t N D I S P r o t o c o l P n P E v e n t P r o t o c o l U n l o a d N D I S ProtocolUnbindAdapter P r o t o c o l U n l o a d D r i v e r O b j e c t 54
3 N D I S M a j o r F u n c t i o n Win32 API I R P _ M J _ C R E AT E P a c k e t O p e n C r e a t e F i l e P a c k e t O p e n I R P _ M J _ D E V I C E _ C O N T R O L P a c k e t I o C o n t r o l D e v i c e I o C o n t r o l P a c k e t I o C o n t r o l Win32 API 3-1 3-1 Wi n 32 A P I Win32 API I R P _ M J _ C R E AT E C r e a t e F i l e P a c k e t O p e n I R P _ M J _ C L O S E C l o s e H a n d l e P a c k e t C l o s e I R P _ M J _ R E A D R e a d F i l e P a c k e t R e a d I R P _ M J _ W R I T E Wr i t e F i l e P a c k e t Wr i t e I R P _ M J _ C L E A N U P I / O C l o s e H a n d l e P a c k e t C l e a n u p I R P _ M J _ D E V I C E _ C O N T R O L D e v i c e I o C o n t r o l P a c k e t I o C o n t r o l 3. N D I S 1) N I C N d i s A l l o c a t e P a c k e t P o o l 2) N d i s A l l o c a t e P a c k e t P o o l N d i s C h a i n B u ff e r A t B a c k N d i s C h a i n B u ff e r A t F r o n t N d i s A l l o c a t e M e m o r y N I C N d i s A l l o c a t e B u ff e r P o o l N d i s A l l o c a t e M e m o r y N d i s A l l o c a t e B u ff e r 55
Windows N d i s A l l o c a t e M e m o r y N d i s A l l o c a t e M e m o r y N d i s A l l o c a t e B u ff e r 3.2.2 NDIS 1. I R P I R P N I C N D I S I R P I R 2. N I C N I C N D I S N I C 3.2.3 NDIS 1. P a c k e t B i n d A d a p t e r NIC Driver 1) D e v i c e N a m e 2) I o C r e a t e D e v i c e D e v i c e O b j e c t 56
3 N D I S 3) d e v i c e o b j e c t d e v i c e E x t e n t i o n O p e n _ I n s t a n c e 4) S y m b o l _ L i n k 5) N d i s A l l o c a t e P a c k e t P o o l 6) O p e n _ I n s t a n c e o p e n 7) N d i s O p e n A d a p t e r 8) O p e n _ I n s t a n c e 9) G l o b a l s. A d a p t e r L i s t 2. I/O P a c k e t I o C o n t r o l D e v i c e O b j e c t G l o b a l C o n t r o l D e v i c e O b j e c t I R P I R P i r p S p P a r a m e t e r s. D e v i c e I o C o n t r o l. I o C o n t r o l C o d e 5 I / O N D I S N D I S 1 O I D2 O I (1) P a c k e t G e t A d a p t e r L i s t P a c k e t I o C o n t r o l 1) G l o b a l C o n t r o l D e v i c e O b j e c t 2 ) P a c k e t G e t A d a p t e r L i s t I r p A s s o c i a t e d I r p. S y s t e m B u ff e r 3 ) I R P P a c k e t G e t A d a p t e r L i s t G l o b a l s. A d a p t e r L i s t 57
Windows ( 2 ) S t a r t 1 ) open = DeviceObject D e v i c e E x t e n s i o n 2 ) S t a r t 3 ) I R P ( 3 ) (2) b u f s i z e 1 ) open = DeviceObject D e v i c e E x t e n s i o n 2 ) b u f s i z e I r p A s s o c i a t e d I r p. S y s t e m B u ff e r o p e n b u f s i z e 3 ) I R P ( 4 ) N d i s R e s e t R e s e t I r p L i s t P a c k e t R e s e t C o m p l e t e I R P R e s e t I / O 1 ) N d i s R e s e t 2 ) N d i s R e s e t R e s e t P a c k e t I o C o n t r o l 3 ) N D I S R e s e t P a c k e t R e s e t C o m p l e t e I R P N D I S R e s e t I R P I R R e s e t I R P P a c k e t I o C o n t r o l P a c k e t R e s e t C o m p l e t e I R P I R P R e s e t I r p L i s t P a c k e t I o C o n t r o l I R P R e s e t I r p L i s t N d i s R e s e t R e s e N D I S P a c k e t R e s e t C o m p l e t e R e s e t I r p L i s t I R P I R R e s e t N d i s R e s e N d i s R e s e t s t a t u s N D I S _ S TAT U S _ P E N D I N G N D I S P a c k e t R e s e t C o m p l e t e P a c k e t R e s e t C o m p l e t e ( 5 ) N D I S N D I S O I D O I D N d i s R e q u e s t 1 O I D O i d D a t a = I r p A s s o c i a t e d I r p. S y s t e m B u ff e r 2 p R e q u e s t I R P R e q u e s t O I D 3 O I D 4 O I D O I D 5 N d i s R e q u e s t 6 7 R e s e t N d i s R e q u e s t s t a t u s N D I S _ S TAT U S _ P E N D I N G P a c k e t R e q u e s t C o m p l e t e I R P I / O 58
3 N D I S 3. N I C P a c k e t X x x P r o t o c o l X x x N I C N D I S p r o t o c o l C h a r N D I S P a c k e t R e c e i v e I n d i c a t e P a c k e t R e c e i v e P a c k e t N I C P a c k e t R e c e i v e I n d i c a t e P r o t o c o l R e c e i v e P a c k e t R e c e i v e P a c k e t P r o t o c o l R e c e i v e P a c k e t N I C P r o t o c o l R e c e i v e P a c k e t P a c k e t R e c e i v e I n d i c a t e P r o t o c o l B i n d i n g C o n t e x t o p e n N d i s O p e n A d a p t e r o p e n I o C r e a t e D e v i c e s i z e o f ( O P E N _ I N S TA N C E ) I o I n c r e m e n t N I C N d i s A l l o c a t e P a c k e t P a c k e t P o o l P a c k e t P o o l P a c k e t B i n d A d a p t e r N d i s A l l o c a t e P a c k e t P o o l P r o t o c o l R e s e r v e d PA C K E T _ R E S E RV E D L I S T _ E N T RY PA C K E T _ R E S E RV E D N d i s A l l o c a t e P a c k e t P o o l P r o t o c o l R e s e r v e d L e n g t h s i z e o f ( PA C K E T _ R E S E RV E D ) N d i s A l l o c a t e P a c k e t g o t o E R R O R b u ffer descriptor H e a d e r B u ff e r S i z e P a c k e t S i z e N d i s A l l o c a t e M e m o r y N d i s A l l o c a t e B u ff e r N d i s A l l o c a t e M e m o r y N I C N d i s M o v e M a p p e d M e m o r y N d i s Tr a n s f e r D a t a N d i s Tr a n s f e r D a t N d i s Tr a n s f e r D a t a s t a t u s N D I S _ S TAT U S _ P E N D I N G N D I S P a c k e t Tr a n s f e r D a t a C o m p l e t e P a c k e t R e c e i v e I n d i c a t P a c k e t Tr a n s f e r D a t a C o m p l e t e P a c k e t Tr a n s f e r D a t a C o m p l e t e 59
Windows P a c k e t Tr a n s f e r D a t a C o m p l e t e N d i s Tr a n s f e r D a t a I o D e c r e m e n t I o I n c r e m e n t I o D e c r e m e n t P a c k e t R e c e i v e P a c k e t P a c k e t R e c e i v e I n d i c a t e P a c k e t Tr a n s f e r D a t a C o m p l e t e N I C P a c k e t R e c e i v e P a c k e t N D I S P a c k e t R e c e i v e P a c k e t P a c k e t R e c e i v e I n d i c a t e N D I S N d i s C o p y F r o m P a c k e t To P a c k e t N I C N D I S P a c k e t R e c e i v e I n d i c a t e P a c k e t R e c e i v e P a c k e t I / O I / O I R P I R P R e a d F i l e n N u m b e r O f B y t e s To R e a d I / O P a r a m e t e r s. R e a d. L e n g t h G l o b a l s. D r i v e r O b j e c t F l a g s D O _ D I R E C T _ I O I R P M d l A d d r e s s l p B u ff e r F l a g s D O _ B U F F E R E D _ I O I R P A s s o c i a t e d I r p. S y s t e m B u ff e r I / O D r i v e r O b j e c t M a j o r F u n c t i o n [ I R P _ M J _ R E A D ] P a c k e t R e a d R e a d F i l e I / O P a c k e t R e a d P a c k e t R e a d R e a d F i l e N I C I / O I / O P a c k e t R e a d P a c k e t R e a d D e v i c e O b j e c t D e v i c e E x t e n s i o n o p e I o I n c r e m e n t P a c k e t B i n d A d a p t e r N I C I r p M d l A d d r e s s p R e s e r v e d P a c k e t E x I n t e r l o c k e d R e m o v e H e a d L i s t p R e s e r v e d P a c k e t I r p I o S t a t u s S t a t u s I n f o r m a t i o n 60
3 N D I S R e a d F i l e l p N u m b e r O f B y t e s R e a d s t a t u s S TAT U S _ S U C C E S S I n f o r m a t i o n I o I n c r e m e n t I o D e c r e m e n t N I C N D I S N D I S P a c k e t R e c e i v e I n d i c a t e P a c k e t R e c e i v e P a c k e t N I C R e a d F i l e P a c k e t R e a d 3.3 3. 2 3.3.1 I R P _ M J _ C R E AT E I R P _ M J _ C L O S E I R P _ M J _ R E A D I R P _ M J _ W R I T E I R P _ M J _ D E V I C E _ C O N T R O L Win32 API C r e a t e F i l e C l o s e H a n d l e R e a d F i l e Wr i t e F i l e D e v i c e I o C o n t r o l 5 Win32 API Wi n d o w s A P I C r e a t e F i l e C l o s e H a n d l e R e a d F i l e Wr i t e F i l e D e v i c e I o C o n t r o l DWORD dwiocontrolcode LPVOID lpinbuff e r LPVOID lpoutbuff e r d w I o C o n t r o l C o d e 6 3. 2. 3 P a c k e t I o C o n t r o l 5 6 R e q u e s t Q u e r y S e 3.3.2 1. T C P / I P 61
Windows 3-2 3-2 (1) f r a m e 3-3 CRC 6 6 2 46 1500 4 3-3 62
3 N D I S I P 0800A R P 0806R A R P 8035 A R P R A R P 28 18 N D I S C R C N D I S (2) I P I P 3-4 0 15 16 31 4 4 8 TOS 16 16 3 13 8 TTL 8 16 20 32 IP 32 IP 3-4 IP A R P R A R P I P I I I C M P I n t e r n e t I G M P I n t e r n e t I P I P 10 I C M P I G M P (3) T C P U D P U D P 3-5 T C P 3-6 63
Windows 0 15 16 31 16 16 UDP 16 16 UDP 8 3-5 UDP 0 15 16 31 16 16 32 32 4 6 16 16 16 2. 3-6 TCP a n a l y z e. c P r o Type[ ] 13 1 4 64
3 N D I S A R P I P A R P I A R P 60 I P I C M P I G M P U D T C I P 10 I C M P 0 1 I G M P 0 2 T C P 0 6 U D P 17 I P Ty p e T C P U D P S o u P o r t D e s P o r t 13 1 4 886 F 3.3.3 1. 2 S e t Ti m e r W M _ T I M E R R e a d F i l e A A R P I P B A B B 2. l P a c k e t M e m l P a c k e t B u ff e r l P a c k e t M e m A B WndProc DlgProc B u f S e t H a n d l e C o m m a n d s W M _ C O M M A N D Wi n M a i n W n d P r o c C h i l d W n d P r o c c h i l d w i n. c C r e a t e Wi n d o w S h o w Wi n d o w U p d a t e Wi n d o w Wi n d o w s 65
Windows Wi n M a i n W n d P r o c W M _ C O M M A N D H a n d l e C o m m a n d s W M _ C L O S E A d a p t e r. O p e n I n s t a n c e N U L L D e f Wi n d o w P r o c W M _ T I M E R I D M _ R E A D W M _ C O M M A N D W M _ L B U T TO N D O W N c h i l d w i n. c W M _ D U M P C H A N G E W M _ C R E AT E A d a p t e r l PA c k e t B u ff e r P a c k e t S t a r t D r i v e r ( T E X T (" PA C K E T ")) p a c k e t 32. c W M _ K E Y D O W N 0 W M _ PA I N T B e g i n P a i n t E n d P a i n t W M _ D E S T R O Y P a c k e t S t o p D r i v e r ( T E X T ( " PA C K E T " ) ) P a c k e t S t a r t D r i v e r P o s t Q u i t M e s s a g e ( 0 ) H a n d l e C o m m a n d s H a n d l e C o m m a n d s w P a r a m p a c k e t 32. c M e s s a g e B o x I D M _ O P E N E n u m A d a p t e r s D e v i c e I o C o n t r o l I O C T L _ E N U M _ A D A P T E R S A d a p t e r s I n f o A d a p t e r N a m e S y m b o l i c L i n k I D D _ D I A L O G P a c k e t O p e n A d a p t e r C r e a t e F i l e I D D _ B U F S E T D e v i c e I o C o n t r o l I D M _ C L O S E A d a p t e r. O p e n I n s t a n c e N U L L P a c k e t C l o s e A d a p t e r I D M _ N O _ F I LT E R 6 P a c k e t S e t F i l t e r O i d D a t a D a t a O i d D a t a P a c k e t R e q u e s t D e v i c e I o C o n t r o l I O C T L _ P R O TO C O L _ S E T _ O I D O i d D a t a I D M _ R E S E T P a c k e t R e s e t A d a p t e r I O C T L _ P R O TO C O L _ R E S E T I D M _ R E A D R E A D I D M _ R E A D 66
3 N D I S P a c k e t R e c e i v e P a c k e t R e a d F i l e P a c k e t B u ff e r a n a l y z e. c A n a l y z e l P a c k e t B u ff e r I D M _ S TA RT P a c k e t S t a r t R e a d D e v i c e I o C o n t r o l I O C T L _ S TA RT _ R E C W M _ T I M E R I D M _ R E A D W M _ C O M M A N D I D M _ S TO P P a c k e t S t o p R e a d I O C T L _ S TO P _ R E C I D M _ S E N D A d a p t e r l p M e m P a c k e t S e n d P a c k e t Wr i t e F i l e 3.4 N D I S N D I Wi n d o w s 3-7 3-7 TestApp I/O CreateFile ReadFile DeviceIoControl PacketRead PacketReceiveIndicate NIC PacketReceivePacket 3-7 67