MiniportInitialize

NDIS_STATUS 

  MiniportInitialize(

    OUT PNDIS_STATUS  OpenErrorStatus,

    OUT PUINT  SelectedMediumIndex,

    IN PNDIS_MEDIUM  MediumArray,

    IN UINT  MediumArraySize,

    IN NDIS_HANDLE  MiniportAdapterHandle,

    IN NDIS_HANDLE  WrapperConfigurationContext

    );

MiniportInitialize´Â ³×Æ®¿öÅ© I/O ¿¬»êµéÀ» À§ÇÑ NIC(ȤÀº °¡»ó NIC)À» ¼³Á¤ÇÏ°í ·¹Áö½ºÆ®¸®¿¡ NIC¿¡ ÇÊ¿äÇÑ ¸ðµç Çϵå¿þ¾î ÀÚ¿øµéÀ» ¿ä±¸ÇÏ°í µå¶óÀ̹ö°¡ ³×Å©¿öÆ® I/O ¿¬»êµéÀ» ½ÇÇàÇÏ´Â µ¥ ÇÊ¿äÇÑ ÀÚ¿øµéÀ» ÇÒ´çÇϴµ¥ ÇÊ¿äÇÑ ÇÔ¼öÀÌ´Ù.

¸Å°³º¯¼ö

OpenErrorStatus
¸¸¾à MiniportInitialize°¡ NDIS_STATUS_OPEN_ERRORÀ» ¸®ÅÏÇÑ´Ù¸éÀº ¿¡·¯¿¡ ´ëÇÑ ´õ Ãß°¡Àû Á¤º¸À» ÁöÁ¤ÇÏ´Â NDIS_STATUS_XXX Äڵ带 ¼³Á¤ÇÏ´Â º¯¼ö¸¦ °¡¸®Å²´Ù.

SelectedMediumIndex
MiniportInitialize´Â µå¶óÀ̹ö³ª NICÀÌ »ç¿ëÇÏ´Â ¹Ìµð¾ö ŸÀÔÀ» ÁöÁ¤ÇÏ´Â MediumArray ¿ä¼ÒÀÇ À妽º¸¦ ¼³Á¤ÇÏ´Â º¯¼ö¸¦ °¡¸®Å²´Ù.

MediumArraySize
MediumArray¿¡¼­ ¿ä¼Ò ¼ö¸¦ ÁöÁ¤ÇÑ´Ù.

MiniportAdapterHandle
NDIS ¶óÀ̺귯¸®¿¡ ÀÇÇØ ÇÒ´çµÇ´Â ¹Ì´ÏÆ÷Æ® NICÀ» ÁöÁ¤ÇÏ´Â ÇÚµéÀ» ÁöÁ¤ÇÑ´Ù. MiniportInitialize´Â ÀÌ ÇÚµéÀ» ÀúÀåÇØ¾ß ÇÑ´Ù. NdisXxx ÇÔ¼öµéÀÇ °è¼ÓÀûÀΠȣÃâ¿¡¼­ ¿ä±¸µÇ´Â ¸Å°³º¯¼öÀÌ´Ù.

WrapperConfigurationContext
NdisXxx ±¸¼º°ú ÃʱâÈ­ ÇÔ¼öµé¿¡ ´ëÇÑ È£ÃâÀ» À§ÇØ ÃʱâÈ­ÇÏ´Â µ¿¾È ´ÜÁö »ç¿ëµÈ ÇÚµéÀ» ÁöÁ¤ÇÑ´Ù. ¿¹¸¦ µé¾î, ÀÌ ÇÚµéÀº NdisOpenConfiguration°ú NdisImmediateReadXxx¿Í NdisImmediateReadXxx¿Í NdisImmediateWriteXxx ÇÔ¼öµé¿¡ ´ëÇØ ÇÊ¿äÇÑ ¸Å°³º¯¼öÀÌ´Ù.

¸®Åϰª

MiniportInitialize´Â ´ÙÀ½°ú °°Àº °ªÁß¿¡ Çϳª¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ´Ù.

NDIS_STATUS_SUCCESS
MiniportInitializeÀº NICÀ» ±¸¼ºÇÏ°í ¼³Á¤ÇÏ°í µå¶óÀ̹ö°¡ ³×Æ®¿öÅ© I/O ¿¬»êµéÀ» ½ÇÇàÇÏ´Â µ¥ ÇÊ¿äÇÑ ¸ðµç ÀÚ¿øµéÀ» ÇÒ´çÇÑ´Ù.

NDIS_STATUS_FAILURE
MiniportInitialize´Â ¿¬»êÀûÀÎ »óÅ¿¡ ´ëÇØ NICÀÌ ¼³Á¤ÇÒ ¼ö ¾ø°í ȤÀº ÇÊ¿äÇÑ ÀÚ¿øµéµµ ÇÒ´çÇÒ ¼ö ¾ø´Ù. MiniportInitialize´Â ±¸¼º°ú ÀÚ¿ø ÇÒ´ç¿¡ ´ëÇÑ ½ÇÆÐÀ» ÁöÁ¤ÇÏ´Â ¸Å°³º¯¼ö¸¦ °¡Áö°í NdisWriteErrorLogEntryÀ» È£ÃâÇÑ´Ù.

NDIS_STATUS_FAILURE¿¡ ´ëÇÑ ´ë¿ëÀ¸·Î MiniportInitialize´Â ´ÙÀ½°ú °°Àº °ªµéÁß Àû´çÇÑ °ªÀ» ÃʱâÈ­°¡ ½ÇÆÐÇÒ ¶§ ¸®ÅÏÇÑ´Ù:

NDIS_STATUS_UNSUPPORTED_MEDIA
MediumArrayÀÇ °ªµéÀÌ µå¶óÀ̹ö°¡(ȤÀº NICÀÌ) Áö¿øÇÒ ¼ö ÀÖ´Â ¹Ìµð¾öÀ» Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù.

NDIS_STATUS_ADAPTER_NOT_FOUND
MiniportInitialize°¡ NdisOpenConfiguration°ú NdisReadConfigurationÀ» »ç¿ëÇÏ¿© ȤÀº ƯÁ¤ I/O ¹ö½º·Î NICÀ» °¨ÁöÇÔÀ¸·Î½á NdisImmediateXxx ȤÀº ¹ö½º ŸÀÔ Æ¯Á¤ NdisXxx ±¸¼º ÇÔ¼öµéÀ» »ç¿ëÇÔÀ¸·Î½á ·¹Áö½ºÆ®¸®³»¿¡¼­ µð½ºÅ©¸³¼ÇÀ¸·ÎºÎÅÍ NICÀ» ÀÎÁöÇÏÁö ¸øÇÑ´Ù. ÀÌ ¸®ÅÏÀº NdisOpenConfiguration°ú °°Àº ¹Ì´ÏÆ÷Æ®ÀÇ ¾î¶² ƯÁ¤ NdisXxx ÇÔ¼öµé¿¡ ´ëÇÑ È£Ãâ·ÎºÎÅÍ Àü´ÞµÇ¾îÁú ¼ö ÀÖ´Ù.

NDIS_STATUS_OPEN_ERROR
MiniportInitialize°¡ NICÀ» ¼³Á¤ÇÏ·Á°í ½ÃµµÇßÁö¸¸Àº ¼º°øÇÏÁö ¸øÇß´Ù.

NDIS_STATUS_NOT_ACCEPTED
MiniportInitialize´Â NICÀÌ ·¹Áö½ºÆ®·ÎºÎÅÍ È¤Àº ¹ö½º ŸÀÔ Æ¯Á¤ NdisXxx ±¸¼º ÇÔ¼ö·ÎºÎÅÍ ¾ò´Â ±¸¼º ¸Å°³º¯¼öµéÀ» Çã¶ô ¹ÞÁö ¸øÇÒ ¼ö ÀÖ´Ù.

NDIS_STATUS_RESOURCES
MiniportInitialize°¡ ³×Æ®¿öÅ© I/O ¿¬»êµéÀ» ½ÇÇàÇϱâ À§ÇÑ ÃæºÐÇÑ ÀÚ¿øµéÀ» ÇÒ´ç¹ÞÁö ¸øÇϰí NICÀ» À§ÇØ ·¹Áö½ºÆ®¸®³»¿¡ ¹ö½º °ü·Ã Çϵå¿þ¾î ÀÚ¿øµéÀ» ¿ä±¸ÇÏ´À ½Ãµµ°¡ ½ÇÆÐÇß´Ù. ÀÌ·¯ÇÑ ¸®ÅÏÀº NdisXxx ÇÔ¼ö¿¡ ´ëÇÑ ¹Ì´ÏÆ÷Æ®ÀÇ È£Ãâ·ÎºÎÅÍ Àü´Þ µÇ¾îÁú ¼ö ÀÖ´Ù.

¸¸¾à ¶Ç ÇϳªÀÇ ÀåÄ¡°¡ ÀÌ¹Ì NICÀÌ ÇÊ¿äÇÑ ·¹Áö½ºÆ®¸®³»¿¡ ÀÚ¿øÀ» ¿ä±¸ÇÑ´Ù¸éÀº MiniportInitialize´Â ¶ÇÇÑ Æ¯Á¤ ÀÚ¿ø Ãæµ¹(I/O Æ÷Æ® ¹üÀ§, ÀÎÅÍ·´Æ® º¤ÅÍ, ÀåÄ¡ ¸Þ¸ð¸® ¹üÀ§, µîµî)¸¦ ±â·ÏÇϱâ À§ÇØ NdisWriteErrorLogEntry¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ¿¡·¯ ·Î±× ±â·ÏÀ» Á¦°øÇÏ´Â °ÍÀº »ç¿ëÀÚ¿Í È¤Àº ½Ã½ºÅÛ °ü¸®ÀÚ¿¡°Ô ±×·¯ÇÑ Çϵå¿þ¾î ÀÚ¿ø Ãæµ¹µéÀ» ÇÇÇϱâ À§ÇØ ±â°è¸¦ À籸¼ºÇϵµ·Ï ÇÒ ¼ö ÀÖ´Â Á¤º¸¸¦ Á¦°øÇÑ´Ù.

ÁÖ¼®

NDIS´Â ÃʱâÈ­°¡ ¿Ï¼ºµÉ ¶§±îÁö µå¶óÀ̹ö¿¡ ´ëÇÑ ¾î¶°ÇÑ ¿ä±¸µµ ÇÏÁö ¾Ê´Â´Ù.

DriverEntry ÇÔ¼öµé·ÎºÎÅÍ NdisMRegisterMiniport¸¦ È£ÃâÇÏ´Â NICÀ̳ª ÀÎÅ͹̵ð¾ù µå¶óÀ̹öµé¿¡¼­ NDIS´Â NdisMRegisterMiniport ÇÔ¼öÀÇ ÄÁÅØ½ºÆ®¿¡¼­ MiniportInitializeÀ» È£ÃâÇÑ´Ù. ÇÏÀ§ ·¹º§ µå¶óÀ̹ö´Â ±×·¯ÇÑ ÀåÄ¡¿¡ ÀÇÁ¸ÇÏ´Â ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö°¡ NdisMRegisterMiniport¸¦ È£ÃâÇϱâ Àü¿¡ ÃʱâÈ­¸¦ ÇØ¾ß ÇÑ´Ù.

ProtocolXxx ÇÔ¼ö¿Í MiniportXxx ÇÔ¼öµéÀ» ÀͽºÆ÷Æ®Çϰí DriverEntry ÇÔ¼öµé¿¡¼­ NdisImRegisterLayeredMiniport¸¦ È£ÃâÇÏ´Â NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹öµéÀ» À§Çؼ­ NDIS´Â NdisIMInitializeDeviceInstance ÄÁÅØ½ºÆ®³»¿¡¼­ MiniportInitializeÀ» È£ÃâÇÑ´Ù. ±×·¯ÇÑ µå¶óÀ̹öÀÇ ProtocolBindAdapter ÇÔ¼ö´Â Ç×»ó NdisIMInitializeDeviceInstance¿¡ ´ëÇÑ È£ÃâÀ» ÇÑ´Ù.

NIC µå¶óÀ̹ö¿¡ ´ëÇÏ¿©, NDIS´Â Àû¾îµµ NICÀÇ I/O ¹ö½º ÀÎÅÍÆäÀ̽º ŸÀÔÀ» ¹ß°ßÇØ¾ß Çϰí, ¸¸¾à ISA ¹ö½º°¡ ¾Æ´Ï¸éÀº ¹ö½º ³Ñ¹ö´Â ÀÌ¹Ì µå¶óÀ̹öÀÇ ÀνºÅç ½ºÅ©¸³Æ®¿¡ ÀÇÇØ¼­ ·¹Áö½ºÆ®¸®³»¿¡ ¼³Ä¡µÈ´Ù. À©µµ¿ìÁî 2000 µå¶óÀ̹öÀ» ÀνºÅçÇÏ´Â °Í¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸´Â Driver Writer's GuideÀ» ºÁ¶ó.

NIC µå¶óÀ̹ö´Â NdisOpenConfiguration°ú NdisReadConfigurationÀ» È£ÃâÇÔÀ¸·Î½á NICÀ» À§ÇÑ ±¸¼º Á¤º¸¸¦ ¾ò´Â´Ù. NIC µå¶óÀ̹ö´Â Àû´çÇÑ ¹ö½º ƯÁ¤ ÇÔ¼öÀ» È£ÃâÇÔÀ¸·Î½á ¹ö½º ƯÁ¤ Á¤º¸¸¦ ¾ò´Â´Ù:

¹ö½º ¹ö½º ƯÁ¤ Á¤º¸¸¦ ¾ò±âÀ§ÇÑ ÇÔ¼ö
EISA NdisReadEisaSlotInformation or
NdisReadEisaSlotInformationEx
PCI NdisReadPciSlotInformation
PC Card NdisReadPcmciaAttributeMemory

EISA NIC¿¡ ´ëÇÑ NIC µå¶óÀ̹ö´Â NdisReadEisaSlotInformation¿Í NdisReadEisaSlotInformationExÀ» È£ÃâÇÔÀ¸·Î½á NICÀ» À§ÇÑ Çϵå¿þ¾î ÀÚ¿ø¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò´Â´Ù. PCI NIC°ú PC Card NICµéÀ» À§ÇÑ NIC µå¶óÀ̹öµéÀº NdisMQueryAdapterResourcesÀ» È£ÃâÇÔÀ¸·Î½á ±×·¯ÇÑ Á¤º¸¸¦ ¾ò´Â´Ù.

MiniportInitializeÀ» È£ÃâÇÒ ¶§, NDIS ¶óÀ̺귯¸®´Â ½Ã½ºÅÛ Á¤ÀÇ NdisMediumXxx °ªµé·Î¼­ ÁöÁ¤µÈ Áö¿øµÇ´Â ¹Ìµð¾î ŸÀÔµéÀÇ ¹è¿­À» Á¦°øÇÑ´Ù. MiniportInitializeÀº ¹è¿­ ¿ä¼ÒµéÀ» Àаí NDIS°¡ NICÀ» À§ÇØ µå¶óÀ̹ö°¡ »ç¿ëÇØ¾ß Çϴ¹̵ð¾ö ŸÀÔÀÇ À妽º¸¦ Á¦°øÇÑ´Ù. ¸¸¾à ¹Ì´ÏÆ÷Æ®°¡ ¹Ìµð¾ö ŸÀÔÀ» ¿¡¹Ä·¹ÀÌÆ®ÇÑ´Ù¸éÀº ¿¡¹Ä·¹À̼ÇÀº NDIS¿¡°Ô´Â Åõ¸íÇØ¾ß ÇÑ´Ù.

NIC µå¶óÀ̹öÀÇ MiniportInitialize ÇÔ¼ö´Â NICÀ» À§ÇØ ·¹Áö½ºÆ®¸®³»¿¡ Çϵå¿þ¾î ÀÚ¿øµéÀ» ¿ä±¸ÇÏ´Â NdisRegisterIoPortRange ȤÀº NdisMMapIoSpace¿Í °°Àº ¾î¶² NdisXxx ÇÔ¼öÀ» È£ÃâÇϱâ Àü¿¡ NdisMSetAttributes ȤÀº NdisMSetAttributesExÀ» È£ÃâÇØ¾ß ÇÑ´Ù. MiniportInitialize´Â DMA ¿¬»êµéÀ» À§ÇÑ ÀÚ¿øµé¿¡ ´ëÇÑ ÇÒ´çÀ» ½ÃµµÇϱâ Àü¿¡ NdisMSetAttributes(Ex)¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ¸¸¾à NICÀÌ ¹ö½º¸¶½ºÅÍÀ̸éÀº MiniportInitialize´Â NdisMSetAttributesEx È£ÃâÇÑ ´ÙÀ½ NdisMAllocateSharedMemory È£ÃâÇϱâ Àü¿¡ NdisMAllocateMapRegisters¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ¸¸¾à NICÀÌ ½½·¹À̺ê¸éÀº(slave), MiniportInitialize´Â NdisMRegisterDmaChannelÀ» È£ÃâÇϱâ Àü¿¡ NdisMSetAttributes(Ex)¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.

ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö MiniportInitialize ÇÔ¼öµéÀº AttributeFlags ¸Å°³º¯¼ö¸¦ NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER·Î ¼³Á¤Çؼ­ NdisMSetAttributesEx¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ÀÌ Ç÷¡±×¸¦ ¼³Á¤ÇÏ´Â °ÍÀº NDIS°¡ ¸ðµç ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö¸¦ full-duplex·Î ´Ù·çµµ·Ï ÇÑ´Ù. ±×·¡¼­ µå¹°Áö¸¸Àº µ¿½Ã¿¡ º¸³»°í ¹Þ´Â À̺¥Æ®°¡ ÀϾ ¶§ intermittant µ¥µå¶ôµéÀ» ¸·¾ÆÁØ´Ù. °á°úÀûÀ¸·Î ¸ðµç ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö´Â µ¿½Ã¿¡ º¸³»°í ¹Þ±â¸¦ ´Ù·ê ¼ö ÀÖ´Â ´É·ÂÀ» °¡Áø full-duplex µå¶óÀ̹ö·Î¼­ ¾²¿©Áø´Ù.

¸¸¾à NDIS ¶óÀ̺귯¸®ÀÇ µðÆúÆ®ÀÇ µÎµå·¯Áø º¸³»±â ¿ä±¸¿¡ ´ëÇÑ 4ÃÊÀÇ Å¸ÀӾƿô ½Ã°£ °£°ÝÀº µå¶óÀ̹öÀÇ NIC¿¡°Ô´Â ³Ê¹« ª´Ù¸éÀº MiniportInitialize´Â ½Ã°£°£°ÝÀ» È®ÀåÇϱâ À§ÇØ NdisMSetAttributesEx¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. ¸ðµç ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö´Â ¶ÇÇÑ NDIS°¡ ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö¿¡ Å¥·Î ÀúÀåµÇ¾î¼­ À¯ÁöÇϰí ÀÖ´Â º¸³»±â¿Í ¿ä±¸µéÀÌ Å¸ÀÓ ¾Æ¿ôÀ» ½ÃµµÇÏÁö ¾Êµµ·Ï AttributeFlags¿¡ NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT°ú NDIS_ATTRIBUTE_IGNORE_TIMEOUT À¸·Î ¼³Á¤Çؼ­ NdisMSetAttributesEx¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.

NdisMSetAttributes ȤÀº NdisMSetAttributesEx ¿¡ ´ëÇÑ È£ÃâÀº ¹Ì´ÏÆ÷Æ®°¡ ½ÇÇà ½Ã°£ »óÅ Á¤º¸¸¦ À¯ÁöÇÏ´Â Á¡¿¡¼­ µå¶óÀ̹ö ÇÒ´ç ÄÁÅØ½ºÆ® Áö¿ª¿¡ ´ëÇÑ MiniportAdapterContext¸¦ Æ÷ÇÔÇÑ´Ù. NDIS °è¼ÓÇØ¼­ ´Ù¸¥ MiniportXxx ÇÔ¼öµé¿¡ ´ëÇÑ ÀÔ·Â ¸Å°³º¯¼ö·Î¼­ Á¦°øµÈ MiniportAdapterContext ÇÚµéÀ» Àü´ÞÇÑ´Ù.

°á°úÀûÀ¸·Î ÀÎÅ͹̵ð¾ù µå¶óÀ̹öÀÇ MiniportInitialize ÇÔ¼ö´Â °¡»ó NIC ´ç µå¶óÀ̹ö ÇÒ´ç ÄÁÅØ½ºÆ® Áö¿ªÀ» À§ÇÑ MiniportAdapterContextÀ» ¼³Á¤Çϱâ À§ÇÑ NdisMSetAttributesEx¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, NDIS´Â ÀÎÅ͹̵ð¾ù µå¶óÀ̹öÀÇ ´Ù¸¥ MiniportXxx ÇÔ¼öµé¿¡ ´ëÇÑ °è¼ÓÀûÀΠȣÃâ¿¡¼­ NULL MiniportAdapterContext ÇÚµéÀ» Àü´ÞÇØ¾ß ÇÑ´Ù.

NdisMRegisterIoPortRange¿¡ ´ëÇÑ È£Ãâ ÈÄ, ¹Ì´ÏÆ÷Æ®´Â NIC°ú Åë½ÅÇϱâ À§ÇØ NdisMRegisterIoPortRange¿¡ ÀÇÇØ ¸®ÅÏµÈ PortOffset °ªÀ¸·Î NdisRawXxx ÇÔ¼öµéÀ» È£ÃâÇØ¾ß ÇÑ´Ù. NIC µå¶óÀ̹ö´Â ´õÀÌ»ó NdisImmediateRead/WritePortXxx ÇÔ¼öµéÀ» È£ÃâÇÒ ¼ö ¾ø´Ù. À¯»çÇϰÔ,

NdisMMapIoSpace¿¡ ´ëÇÑ È£Ãâ ÈÄ¿¡ NIC µå¶óÀ̹ö´Â ´õÀÌ»ó NdisImmediateRead/WriteSharedMemoryÀ» È£ÃâÇÒ ¼ö ¾ø´Ù. ·¹Áö½ºÆ®¸®³»¿¡ NICÀ» À§ÇØ ¾î¶² ¹ö½º °ü·Ã Çϵå¿þ¾î ÀÚ¿øµéÀ» ¿ä±¸ÇÑ ÈÄ¿¡, ¹Ì´ÏÆ÷Æ®´Â ´õÀÌ»ó ¹ö½º ŸÀÔ Æ¯Á¤ NdisReadXxx ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ¾ø´Ù.

MiniportInitialize ÇÔ¼ö´Â NdisMRegisterInterrupt ÇÔ¼ö È£Ãâ ÈÄ¿¡, µå¶óÀ̹öÀÇ MiniportISR ÇÔ¼ö´Â ¸¸¾à µå¶óÀ̹öÀÇ NICÀÌ ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇϰųª ȤÀº NICÀÌ ¾î¶² ´Ù¸¥ ÀåÄ¡¿Í ÇÔ°è IRQ ÀÎÅÍ·´Æ®µéÀ» °øÀ¯ÇÑ´Ù¸éÀº È£ÃâµÇ¾îÁø´Ù. NDIS´Â ¸¸¾à ÃʱâÈ­ÇÏ´Â µ¿¾È µå¶óÀ̹ö°¡ ±×µéÀ» Á¦°øÇÑ´Ù¸éÀº NICÀÌ ¹ß»ýÇÑ ¾î¶² ÀÎÅÍ·´Æ®¸¦ ÀÎÁöÇϰųª Ŭ¸®¾î½ÃŰ´Â °Í¿¡ ´ëÇÑ ¹Ì´ÏÆ÷Æ®ÀÇ Ã¥ÀÓÀ» À§ÇØ MiniportDisableInterrupt¿Í MiniportEnableInterrupt ÇÔ¼öµéÀ» È£ÃâÇÏÁö ¾Ê´Â´Ù. ¸¸¾à NICÀÌ IRQÀ» °øÀ¯ÇÑ´Ù¸éÀº, µå¶óÀ̹ö´Â óÀ½ NICÀÌ ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÒ °ÍÀÎÁö °áÁ¤ÇØ¾ß ÇÏ°í ±×·¸Áö ¾Ê´Â´Ù¸éÀº ¹Ì´ÏÆ÷Æ®´Â °¡´ÉÇÑ ÇÑ »¡¸® FALSE¸¦ ¸®ÅÏÇØ¾ß ÇÑ´Ù. ¹Ì´ÏÆ÷Æ®´Â NdisMRegisterInterrupt¸¦ È£ÃâÇÏÀÚ ¸¶ÀÚ ÀÎÅÍ·´Æ®À» ¾òÀ» ¼ö ÀÖ°í NdisMDeregisterInterrupt¿¡ ´ëÇÑ È£ÃâÀÌ ¸®ÅÏÇÒ ¶§±îÁö ¾òÀº ÀÎÅÍ·´Æ®µéÀ» À¯ÁöÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÁÖÀÇÇ϶ó.

¸¸¾à NICÀÌ ÀÎÅÍ·´Æ®µéÀ» ¹ß»ýÇÏÁö ¾Ê´Â´Ù¸éÀº, MiniportInitialize´Â µå¶óÀ̹ö Á¦°ø Æú¸µ MiniportTimer ÇÔ¼ö¿Í ŸÀÌ¸Ó °´Ã¼¸¦ À§ÇÑ µå¶óÀ̹ö ÇÒ´ç ¸Þ¸ð¸®¿¡ ´ëÇÑ Æ÷ÀÎÅÍ·Î NdisMInitializeTimer¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ÀÎÅÍ·´Æ®¸¦ ¹æ»ýÇÏ´Â NIC µå¶óÀ̹öµé°ú ÀÎÅ͹̵ð¾ù µå¶óÀ̹öµéÀº ¶ÇÇÑ °¢°¢ ÀÚ½ÅÀÇ Å¸ÀÌ¸Ó °´Ã¼¸¦ °¡Áö´Â Çϳª³ª ±× ÀÌ»óÀÇ MiniportTimerÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. MiniportInitialize´Â Ç×»ó NdisMSetPeriodicTimer¸¦ È£ÃâÇØ¼­ Æú¸µ MiniportTimer ÇÔ¼ö¸¦ Àο¡ºíÇÑ´Ù. µå¶óÀ̹ö´Â µå¶óÀ̹öÀÇ ºñÆú¸µ MiniportTimer ÇÔ¼ö°¡ ½ÇÇàÇØ¾ß Çϱâ À§ÇØ Á¶°ÇµéÀÌ ÀϾ ¶§ °è¼ÓÇØ¼­ NdisMSetTimer ¸¦ È£ÃâÇÑ´Ù.

¸¸¾à µå¶óÀ̹ö°¡ °è¼ÓÇØ¼­ NdisMIndicateReceivePacket·Î ¼ö½ÅµéÀ» ÀεðÄÉÀÌÆ®ÇÑ´Ù¸éÀº, MiniportInitialize ÇÔ¼ö´Â ÀÌ·¯ÇÑ NDIS ÇÔ¼öµé¿¡ ÀÇÇØ ¸®ÅÏµÈ ÇØµéÀ» ÀúÀåÇϱâ À§ÇØ NdisAllocateBufferPool°ú NdisAllocatePacketPoolÀ» È£ÃâÇØ¾ß ÇÑ´Ù. µå¶óÀ̹ö°¡ °è¼ÓÇØ¼­ NdisMIndicateReceivePacket·Î ÀεðÄÉÀÌÆ®ÇÑ ÆÐŶµéÀº NdisAllocatePacket°ú NdisAllocateBuffer·Î ÇÒ´çµÈ µð½ºÅ©¸³Å͵éÀ» ÂüÁ¶ÇØ¾ß ÇÑ´Ù.

MiniportISR°ú MiniportDisableInterrupt¿Í ´Ù¸¥ µå¶óÀ̹ö ÇÔ¼öµéÀÌ ÀÚ¿øµéÀ» °øÀ¯ÇÑ´Ù¸éÀº, MiniportInitialize ÇÔ¼ö´Â ±×·¯ÇÑ °øÀ¯ ÀÚ¿øµé¿¡ ´ëÇÑ Æ¯È÷, Ç® µàÇ®·º½º µå¶óÀ̹ö³»¿¡¼­ ȤÀº ISRº¸´Ù´Â Æú¸µ MiniportTimer ÇÔ¼ö¸¦ °¡Áø µå¶óÀ̹ö¿¡¼­ Á¢±ÙÀ» µ¿±âÈ­È÷±â À§ÇØ ÇÊ¿äÇÑ ½ºÇÉ ¶ôÀ» ¼³Á¤Çϱâ À§ÇØ NdisAllocateSpinLockÀ» È£ÃâÇØ¾ß ÇÑ´Ù. NIC ·¹Áö½ºÅÍ¿Í °°Àº MiniportISR ȤÀº MiniportDisableInterrupt¿Í ÇÔ²² ´Ù¸¥ µå¶óÀ̹ö ÇÔ¼öµé¿¡ ÀÇÇØ °øÀ¯µÈ ÀÚ¿øµéÀº MiniportInitialize°¡ NdisMRegisterInterrupt ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ¼³Á¤µÈ ÀÎÅÍ·´Æ® °³Ã¼¿¡ ÀÇÇØ º¸È£µÇ¾îÁö°í °è¼ÓÇØ¼­ NdisMSynchronizeWithInterrupt¸¦ È£ÃâÇÔÀ¸·Î½á Á¢±ÙµÇ¾îÁø´Ù.

¾î¶² NIC µå¶óÀ̹öÀÇ MiniportInitialize ÇÔ¼ö´Â Çϵå¿þ¾î°¡ °è¼ÓÀûÀÎ ³×Æ®¿öÅ© I/O ¿¬»êµéÀ» ½ÇÇàÇϱâ À§ÇØ ¿Ã¹Ù·Î ±¸¼ºµÇ¾îÁ³´ÂÁö¸¦ È®½ÇÈ÷ Çϱâ À§ÇØ Å×½ºÆ® ÇØ¾ß ÇÑ´Ù. ¸¸¾à Çϵå¿þ¾î¿¡¼­ »óÅ º¯È­°¡ ÀϾ´Â °ÍÀ» ±â´Ù·Á¾ß ÇÑ´Ù¸éÀº MiniportInitialize ÇÔ¼ö´Â µå¶óÀ̹ö ÃʱâÈ­µÈ À̺¥Æ® °´Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ °¡Áö°í NdisWaitEvent¸¦ È£ÃâÇÒ ¼ö ÀÖ°í ȤÀº NdisMSleep¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.

¸¸¾à NICÀÇ MiniportInitialize ÇÔ¼ö°¡ ¿¡·¯ »óŸ¦ ¸®ÅÏÇÏÁö ¾Ê´Â´Ù¸éÀº µå¶óÀ̹ö Á¦°ø MiniportShutdown ÇÔ¼ö·Î NdisMRegisterAdapterShutdownHandler¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.

¸¸¾à MiniportInitialize°¡ ÃʱâÈ­°¡ ½ÇÆÐÇÑ´Ù¸éÀº, Á¦¾î¸¦ ¸®ÅÏÇϱâ Àü¿¡ ÀÌ¹Ì ÇÒ´çµÈ ¸ðµç ÀÚ¿øÀ» ÇØÁ¦ÇØ¾ß ÇÑ´Ù.

¸¸¾à MiniportInitialize°¡ NDIS_STATUS_OPEN_ERRORÀ» ¸®ÅÏÇÑ´Ù¸éÀº, NDIS´Â ¿¡·¯¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸¸¦ ¾ò±â À§ÇØ OpenErrorStatus·Î ¸®ÅÏµÈ °ªÀ» Á¶»çÇÒ ¼ö ÀÖ´Ù.

MiniportInitialize°¡ NDIS_STATUS_SUCCESS¸£¸®ÅÏÇÒ ¶§, NDIS ¶óÀ̺귯¸®´Â µå¶óÀ̹öÀÇ MiniportQueryInformation ÇÔ¼ö¸¦ ´ÙÀ½¿¡ È£ÃâÇÑ´Ù.

µðÆúÆ®·Î MiniportInitialize´Â IRQL PASSIVE_LEVEL·Î ½ÇÇàÇÑ´Ù. ±×¸®°í ½Ã½ºÅÛ ÄÁÅØ½ºÆ®³»¿¡¼­ ½ÇÇàÇÑ´Ù.