Chapter 4 NDIS µå¶óÀ̹ö Lower-Edge ÇÔ¼öµé
À̰ÍÀº NDIS Upper-Edge(MiniportXxx)ÇÔ¼öµéÀ» ÀͽºÆ÷Æ®ÇÏ´Â ¾î¶² µå¶óÀ̹ö À§¿¡
ÀÖ´Â NDIS µå¶óÀ̹ö ³»¿¡¼ ½ÇÇàµÇ´Â ½Ã½ºÅÛ-Á¤ÀÇ ÇÔ¼öµéÀÌ´Ù.
µÎ°¡Áö ŸÀÔÀÇ NDIS µå¶óÀ̹öµéÀº ¿©±â¿¡ ¼³¸íµÈ ÇÔ¼öµéÀ» °¡Áø´Ù:
- ¿©±â¿¡ ¼³¸íµÈ ProtocolXxxÇÔ¼öµéÀ» ÀͽºÆ÷Æ®Çϰí ÈÄ¿¡ ¼³¸íµÉ TDI ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ Ŭ¶óÀÌ¾ðÆ®µé°ú Åë½ÅÇÏ´Â NDIS Àü¼Û °èÃþ ÇÁ·ÎÅäÄÝ
- MiniportXxxÇÔ¼öµé°ú ¿©±â¿¡ ¼³¸íµÉ ProtocolXxxÇÔ¼öµéÀ» ÀͽºÆ÷Æ®ÇÏ´Â NDIS
Intermediate µå¶óÀ̹öµé
Intermediate NDIS µå¶óÀ̹öµéÀº NIC ¹Ì´ÏÆ÷Æ®¿¡°Ô´Â ¹ÙÀεùÀ» ¸¸µêÀ¸·Î½á ±×·¯ÇÑ
Intermediate µå¶óÀ̹ö À§ÇØ ±×µé ÀÚ½ÅÀÌ ³õ¿© ÀÖ´Â »óÀ§ ·¹º§ NDIS µå¶óÀ̹öµé·Î º¸ÀδÙ.
Intermediate NDIS µå¶óÀ̹öµéÀº NIC µå¶óÀ̹ö¸¦ Æ÷ÇÔÇØ¼ ±×°Íµé º¸´Ù ³·°Ô NDIS
µå¶óÀ̹ö¿¡°Ô ÇÁ·ÎÅäÄÝ·Î ³ªÅ¸³¯ °ÍÀÌ´Ù.
NDIS ¶óÀ̺귯¸®¿¡ ´ëÇØ ±×·¯ÇÑ Intermediate µå¶óÀ̹ö´Â ÇÁ·ÎÅäÄݰú ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö·Î
³ªÅ¸³¯ °ÍÀÌ´Ù.
Driver Function Names
Á¢µÎ»ç°¡ ProtocolÀÎ(¾Õ¿¡ Protocol·Î ½ÃÀÛÇÏ´Â) ¸ðµç NDIS µå¶óÀ̹ö ÇÔ¼öµéÀº
´ÙÀ½¿¡ ³ª¿À´Â ÂüÁ¶µé¿¡¼ ±âº»ÀûÀÎ ±â´ÉÀ» ¼³¸íÇÏ´Â ¸ÞŸ À̸§µéÀÌ ÁÖ¾îÁø´Ù.
DriverEntry ÇÔ¼ö¸¦ Á¦¿ÜÇÑ, NDISÁ¤ÀÇ µå¶óÀ̹ö ÇÔ¼öµéÀº µå¶óÀ̹ö ÀÛ¼ºÀÚ°¡ ¼±ÅÃÇÑ
À̸§À» °¡Áú ¼ö ÀÖ´Ù.
½¬¿î µð¹ö±ëÀ» À§ÇØ ´ëºÎºÐÀÇ ½Ã½ºÅÛ Á¦°ø ÇÁ·ÎÅäÄݵéÀº °£´ÜÈ÷ ÀÌ ¹®¼¿¡¼ »ç¿ëµÈ
Á¢µÎ»ç°¡ Protocol·Î µå¶óÀ̹ö ƯÁ¤ Á¢µÎ»ç·Î ´ëÄ¡µÈ´Ù.
À©µµ¿ì NT Ä¿³Î ¸ðµå µå¶óÀ̹öÀÇ Ãʱ⠿£Æ®¸® Æ÷ÀÎÆ®´Â ½Ã½ºÅÛ¿¡ ÀÇÇØ ÀÚµ¿ÀûÀ¸·Î
·ÎµåµÇ±â À§ÇØ DriverEntry À̸§À» °¡Áø´Ù.
Windows NT DriverEntry ·çƾµéÀÇ ±â´É°ú ÀϹÝÀûÀÎ ¿ä±¸ »çÇ׿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸¸¦
À§Çؼ´Â Kernel-Mode Driver Design Guide¸¦ º¸¶ó.
Calling NdisXxx Functions at Approriate IRQLs
NDIS Lower-Edge Driver Functions µðÆúÆ®·Î ´ÙÀ½ÀÇ IRQLÁß¿¡ ÇϳªÀÌ´Ù.
´ÙÀ½Àº Áõ°¡ÇÏ´Â ¿ì¼±±Ç ¼øÀ§·Î º¸¿©ÁØ´Ù:
PASSIVE_LEVEL < DISPATCH_LEVEL
IRQL PASSIVE_LEVEL¿¡¼ ½ÇÇàÇÏ´Â ¾î¶² µå¶óÀ̹ö ÇÔ¼ö´Â »óÀ§ ¿ì¼± ¼øÀ§ IRQL¿¡¼ ½ÇÇàÇÏ´Â ½ÇÇà ¾²·¹µå¿¡ ÀÇÇØ ¼±Á¡ ´çÇÒ ¼ö ÀÖ´Ù.
Áï ¸ðµç ProtocolXxxÇÔ¼ö´Â ÀÎÅÍ·´Æ®°¡ ¹ßÇàÇßÀ» ¶§ DIRQL¿¡ ½ÇÇàÇÏ´Â ÀåÄ¡ µå¶óÀ̹öÀÇ
ISRÀ̳ª ½Ã½ºÅÛ Å¬·° ÀÎÅÍ·´Æ®¿¡ ÀÇÇØ ¼±Á¡ ´çÇÒ ¼ö ÀÖ´Ù.
°¢°¢ÀÇ ´ÙÀ½¿¡ ³ª¿À´Â DriverEntry¿Í ProtocolXxx ÇÔ¼öµéÀÇ Ç¥Çö(Descriptions)µéÀº
±×·¯ÇÑ ÇÔ¼öµéÀÌ ½ÇÇàÇÏ´Â µðÆúÆ® IRQLÀ» ÁöÁ¤ÇÑ´Ù.(specific)
¾î¶² ProtocolXxx ÇÔ¼öµéÀÇ µðÆúÆ® IRQL µéÀº È¿À²ÀûÀ¸·Î ÀÌ·¯ÇÑ ProtocolXxx°¡ È£ÃâÇÒ
¼ö ÀÖ´Â NdisXxxÇÔ¼öµéÀ» Á¦ÇÑÇÑ´Ù.
¿¹·Î IRQL DISPATCH_LEVEL¿¡¼ ½ÇÇàÇÏ´Â ProtocolXxxÇÔ¼ö·ÎºÎÅÍÀÇ NdisCopyBuffer¿¡
´ëÇÑ È£Ãâ ProtocolXxx°¡ ½ºÇɶôÀ» À¯ÁöÇÏ´Â µ¿¾È Ä¡¸íÀûÀÎ ÆäÀÌÁö ÆúÆ®¸¦ ¾ß±âÇÒ ¼ö
ÀÖ´Ù.
´ÜÁö ÃʱâÈ¿Í ÆäÀÌÁöºí µå¶óÀ̹ö ÄÚµå
NDIS ÇÁ·ÎÅäÄݵéÀº NDIS_INIT_FUNCTION ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ¿©, ´ÜÁö Ãʱâȷμ¸¸ DriverEntryÇÔ¼öµéÀ» Ç¥½ÃÇÑ´Ù.
´Ù¸¥ µå¶óÀ̹ö ÇÔ¼öµéÀº NDIS_PAGEABLE_FUNCTION ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ¿© ÆäÀÌÀúºí ÄÚµå·Î Ç¥½ÃÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª µå¶óÀ̹ö ÇÔ¼öµéÀº
if and only if it never runs at IRQL >= DISPATCH_LEVEL¿¡¼ ÆäÀÌÀúºí ÄÚµå·Î µÉ ¼ö ÀÖ´Ù.
ÀÌ·¯ÇÑ Á¦ÇÑÀº ´ÙÀ½À» ¾Ï½ÃÇÑ´Ù:
- ÆäÀÌÀúºí ¸¶Å©µÈ ÇÔ¼ö´Â ½ºÇɶôÀ» ¾òÀ» ¼ö ¾ø°í ±×·¸°Ô µÈ(that do)
´ÙÀ½ ÇÔ¼öµéÀ» È£Ãâ ÇÏÁö ¸øÇÑ´Ù.(should not)
- ÆäÀÌÀúºí·Î ¸¶Å©µÈ ÇÔ¼ö´Â ±× È£ÃâÀÌ ÀϾ ¶§ ½ºÇɶôÀ» À¯ÁöÇÏ´Â ¾î¶² ÇÔ¼ö¿¡
ÀÇÇØ È£Ã⠵ǾîÁú ¼ö ¾ø´Ù.
- ÆäÀÌÀúºí·Î ¸¶Å©µÈ ÇÔ¼ö´Â »ó½ÂµÈ(raised) IRQL¿¡¼ ½ÇÇàÇÒ ¼ö ¾ø´Ù.
ProtocolBindAdapter, ProtocolOpenAdapterComplete, ProtocolUnbindAdapter, and
ProtocolCloseAdapterCompleteÀ» Á¦¿ÜÇÑ ¿©±â¿¡ ¼³¸íµÈ ´ëºÎºÐÀÇ ProtocolXxx ÇÔ¼öµéÀº
µðÆúÆ®·Î IRQL DISPATCH_LEVEL·Î ½ÇÇàÇÑ´Ù.
|