¹Ì´ÏÆ÷Æ® µå¶óÀ̹öÀÇ DriverEntry
NDIS_STATUS
DriverEntry(
IN PVOID Argument1,
IN PVOID Argument2
);
|
DriverEntry´Â ½Ã½ºÅÛÀÌ ¾î¶² NDIS µå¶óÀ̹ö¿¡¼ óÀ½ È£ÃâÇÏ´Â ÇÊ¿äÇÑ ÇÔ¼öÀÌ´Ù.
¸Å°³º¯¼ö
- Argument1
- ½Ã½ºÅÛ Á¦°ø ¸Å°³º¯¼ö¸¦ °¡¸®Å²´Ù. À©µµ¿ìÁî NT µå¶óÀ̹öµé¿¡¼, À̰ÍÀº ´ÜÁö MiniportXxx ÇÔ¼öµé¿¡°Ô
ÀͽºÆ÷Æ®ÇÏ´Â ¾î¶² NDIS µå¶óÀ̹ö¿¡ ºÒÅõ¸íÇÑ(opaque) µå¶óÀ̹ö °´Ã¼¸¦ °¡¸®Å²´Ù.
- Argement2
- µÎ¹øÂ° ½Ã½ºÅÛ Á¦°ø ¸Å°³º¯¼ö¸¦ °¡¸®Å²´Ù. À©µµ¿ìÁî NT µå¶óÀ̹öµé¿¡¼, À̰ÍÀº ´ÜÁö MiniportXxx ÇÔ¼öµé¿¡°Ô
ÀͽºÆ÷Æ®ÇÏ´Â ¾î¶² NDIS µå¶óÀ̹ö¿¡ ºÒÅõ¸íÇÑ ·¹Áö½ºÆ®¸® °æ·Î¸íÀ» °¡¸®Å²´Ù.
¸®Åϰª
DriverEntry´Â NdisMRegisterMiniport ȤÀº NdisIMRegisterLayeredMiniport¿¡ ÀÇÇØ ¸®ÅÏµÈ °ªÀ» ¸®ÅÏÇÑ´Ù.
ÁÖ¼®
NDIS miniports¿Í intermediate µå¶óÀ̹öµéÀº DriverEntry ÇÔ¼öµé¿¡¼ µÎ°¡Áö ±âº»ÀûÀÎ ÀϵéÀ» ½ÇÇàÇÑ´Ù:
- µå¶óÀ̹ö´Â ¹Ì´ÏÆ÷Æ®·Î¼ ¸· µî·ÏÇÏ·Á°í ÇÒ ¶§ NDIS ¶óÀ̺귯¸®¿¡°Ô ¾Ë¸®±â À§ÇØ(notify) NdisMInitializeWrapper¸¦ È£ÃâÇÑ´Ù.
NDIS´Â µå¶óÀ̹ö¸¦ ÃßÀû(track)Çϴµ¥ ÇÊ¿äÇÑ »óŸ¦ ¼³Á¤ÇÏ°í µå¶óÀ̹ö°¡ NdisXxx ±¸¼º°ú ÃʱâÈ
ÇÔ¼öµé¿¡ ´ëÇÑ °è¼ÓÀûÀΠȣÃâÀ» À§ÇØ ÀúÀåÇÑ NdisWrapperHandle¸¦ ¸®ÅÏÇÑ´Ù.
- Àû´çÇÑ ¹öÀü ³Ñ¹ö¿Í µå¶óÀ̹ö Á¦°ø MiniportXxx ÇÔ¼öµéÀ» À§ÇÑ ¿£Æ®¸® Æ÷ÀÎÆ®µéÀ» °¡Áø
NDIS_MINIPORT_CHARACTERISTICS ±¸Á¶Ã¼¸¦ ä¿ì°í ³ª¼ NdisMRegisterMiniport ȤÀº
NdisIMRegisterLayeredMiniport¸¦ È£ÃâÇÑ´Ù.
Ç×»ó, NIC µå¶óÀ̹öµéÀº NdisMRegisterMiniport¸¦ È£ÃâÇÑ´Ù. intermediate µå¶óÀ̹öµéÀº ´ÜÁö
MiniportXxx ÇÔ¼öµéÀ» ÀͽºÆ÷Æ®ÇÑ´Ù.
Ç×»ó, NDIS intermediate µå¶óÀ̹öµéÀº µå¶óÀ̹ö°¡ ProtocolBindAdapter ÇÔ¼ö·ÎºÎÅÍ
NdisIMInitializeDeviceInstance ÇÔ¼ö¸¦ È£ÃâÇÒ¶§±îÁö È¿À²ÀûÀ¸·Î µå¶óÀ̹ö °¡»ó NICÀÇ Ãʱâȸ¦
Áö¿¬ÇÏ´Â NdisIMRegisterLayeredMiniport¸¦ È£ÃâÇÑ´Ù.
DriverEntry´Â NDIS ¶óÀ̺귯¸®°¡ ÀÚ½ÅÀÇ ÀúÀå °ø°£¿¡ °ü·ÃµÈ Á¤º¸¸¦ º¹»çÇÒ ¶§ ½ºÅÿ¡
NDISXXX_MINIPORT_CHARACTERISTICS ±¸Á¶Ã¼¸¦ ÇÒ´çÇÒ ¼ö ÀÖ´Ù.
DriverEntry´Â ¸â¹öµé¿¡ ¾î¶² µå¶óÀ̹ö Á¦°ø °ªµéÀ» ¼³Á¤Çϱâ Àü¿¡ ÀÌ ±¸Á¶Ã¼¿¡ ´ëÇÑ
¸Þ¸ð¸®¸¦ NdisZeroMemory¸¦ »ç¿ëÇØ¼ Ŭ¸®¾îÇØ¾ß ÇÑ´Ù.
Çö MajorNdisVersionÀº 0x04¿Í Çö MinorNdisVersionÀº 0x00ÀÌ´Ù.
Ư¼º ±¸Á¶Ã¼ ³»¿¡ °¢ XxxHandler ¸â¹ö³»¿¡¼ DriverEntry´Â µå¶óÀ̹ö Á¦°ø MiniportXxx ÇÔ¼öÀÇ
À̸§À» ¼³Á¤ÇØ¾ß ÇÏ°í ¾Æ´Ï¸éÀº ¸â¹ö¸¦ NULL·Î ¼³Á¤ÇØ¾ß ÇÑ´Ù.
NdisMRegisterMiniport¸¦ È£ÃâÇÏ´Â °ÍÀº NdisMRegisterMiniportÀÇ ÄÁÅØ½ºÆ®³»¿¡¼ ½ÇÇàÇÏ´Â
µå¶óÀ̹öÀÇ MiniportInitialize ÇÔ¼ö¸¦ ¾ß±â½ÃŲ´Ù.
NdisIMRegisterLayeredMiniport¸¦ È£ÃâÇÏ´Â °ÍÀº µå¶óÀ̹ö°¡ NdisIMInitializeDeviceInstance¸¦ È£ÃâÇÒ
¶§±îÁö MiniportInitialize¿¡ ´ëÇÑ È£ÃâÀ» Áö¿¬ÇÑ´Ù.
NdisMRegisterMiniportÀ» È£ÃâÇÏ´Â µå¶óÀ̹öµéÀº MiniportInitialize ÇÔ¼öµé¿¡ ´ëÇÑ ¹Ù·Î(immediate) È£ÃâÀ»
À§ÇØ ÁغñµÇ¾îÁ®¾ß ÇÑ´Ù.
±×·¯ÇÑ µå¶óÀ̹ö´Â ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÈ, ȤÀº ¾î¶² NIC ƯÁ¤ ÀÚ¿øµéÀ» ¼³Á¤Çϱâ À§ÇØ NdisXxx ¹ö½ºÅ¸ÀÔ
ƯÁ¤ ±¸¼º ÇÔ¼ö¿¡ ´ëÇÑ È£Ãâ·ÎºÎÅÍ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ ¼³Ä¡¿Í ±¸¼º Á¤º¸¸¦ °¡Á®¾ß ÇÏ°í µå¶óÀ̹ö°¡
³×Æ®¿öÅ© I/O ¿¬»êµéÀ» ½ÇÇàÇϴµ¥ ÇÊ¿äÇÏ´Ù.
NdisIMRegisterLayeredMiniport¸¦ È£ÃâÇÏ´Â µå¶óÀ̹öµéÀº NdisIMInitializeDeviceInstance¿¡ ´ëÇÑ È£ÃâÀ»
ÇÏ´Â ¶Ç ÇϳªÀÇ µå¶óÀ̹ö Á¦°ø ÇÔ¼ö¿¡ ´ëÇÑ MiniportInitialize ÇÔ¼öµé¿¡ ´ëÇÑ È£ÃâÀ» Áö¿¬ÇÑ´Ù.
NDIS intermediate µå¶óÀ̹öµéÀº Ç×»ó ProtocolBindAdapter ÇÔ¼öÀ» µî·ÏÇϰí NdisIMRegisterLayeredMiniport
¸¦ È£ÃâÇÑ´Ù. ±×·¡¼ NDIS´Â ¸ðµç ¾Æ·§°èÃþ NIC µå¶óÀ̹öµéÀÌ ÃʱâÈµÈ ÈÄ ProtocolBindAdapter ÇÔ¼ö¸¦
È£ÃâÇÒ °ÍÀÌ´Ù.
ÀÌ·¯ÇÑ Àü·«Àº ProtocolBindAdapter ÇÔ¼ö·ÎºÎÅÍ NdisIMInitialzieDeviceInstance¿¡ ´ëÇÑ È£ÃâÀ» ÇÏ´Â
NDIS intermediate µå¶óÀ̹ö¿¡°Ô ´ÙÀ½°ú °°Àº °ÍÀ» Á¦°øÇÑ´Ù.
MiniportInitialize ÇÔ¼ö°¡ °¡Áö´Â ÀåÁ¡Àº intermediate ÀÌ ÀÌ¹Ì ¹ÙÀεåµÈ ¾Æ·§ °èÃþ NIC µå¶óÀ̹öÀÇ
ƯÁ¤¿¡ ´ëÇØ intermediateÀÇ °¡»ó NICÀ» À§ÇÑ µå¶óÀ̹ö ÇÒ´ç ÀÚ¿øµéÀ» ±¸¼ºÇÑ´Ù.
¸¸¾à NdisMRegisterMiniport ȤÀº NdisIMRegisterLayeredMiniport°¡ NDIS_STATUS_SUCCESS¸¦
¸®ÅÏÇÏÁö ¾Ê´Â´Ù¸éÀº, DriverEntry´Â NdisWrapperHandle¸¦ À¯ÁöÇϱâ À§ÇÑ ¸Þ¸ð¸®¿Í °°Àº ÇÒ´çµÈ
¾î¶² ÀÚ¿øµéÀ» ÇØÁ¦ÇØ¾ß Çϰí Á¦¾î¸¦ ¸®ÅÏÇϱâ Àü¿¡ NdisTerminateWrapper ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.
µå¶óÀ̹ö´Â ¸¸¾à À̰ÍÀÌ ¹ß»ýÇÑ´Ù¸éÀº ·ÎµåµÇÁö ¾ÊÀ» °ÍÀÌ´Ù.
µðÆúÆ®·Î DriverEntry´Â ½Ã½ºÅÛ ¾²·¹µå ÄÁÅØ½ºÆ®¿¡¼ IRQL PASSIVE_LEVEL¿¡¼ ½ÇÇàÇÑ´Ù.
|