NdisIMRegisterLayeredMiniport

NDIS_STATUS

  NdisIMRegisterLayeredMiniport(

    IN NDIS_HANDLE  NdisWrapperHandle,

    IN PNDIS_MINIPORT_CHARACTERISTICS  MiniportCharacteristics,

    IN UINT  CharacteristicsLength,

    OUT PNDIS_HANDLE  DriverHandle

    );

NdisIMRegisterLayeredMiniport ÇÔ¼ö´Â µå¶óÀ̹ö°¡ ÃʱâÈ­ÇÒ ¶§ NDIS ¶óÀ̺귯¸®¿¡°Ô ÀÎÅ͹̵ð¾ù µå¶óÀ̹öÀÇ MiniportXxx ¿£Æ®¸® Æ÷ÀÎÆ®µé°ú À̸§À» µî·ÏÇÑ´Ù.

¸Å°³º¯¼ö

NdisWrapperHandle
NdisMInitializeWrapper ÇÔ¼ö¿¡ ÀÇÇØ ¸®ÅÏµÈ ÇÚµéÀ» ¸®ÅÏÇÑ´Ù.

MiniportCharacteristics
È£ÃâÀÚ¿¡ ÀÇÇØ ¼³Á¤µÈ NDIS_XX_MINIPORT_CHARACTERISTICS ±¸Á¶Ã¼¸¦ °¡¸®Å²´Ù. MiniportCharacteristics ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾú´Ù.

typedef struct _NDIS_MINIPORT_CHARACTERISTICS

{

   UCHAR MajorNdisVersion;

   UCHAR MinorNdisVersion;

   UINT Reserved;

   W_CHECK_FOR_HANG_HANDLER CheckForHangHandler;

   W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;

   W_ENABLE_INTERRUPT_HANDLER  EnableInterruptHandler;

   W_HALT_HANDLER HaltHandler;

   W_HANDLE_INTERRUPT_HANDLER  HandleInterruptHandler;

   W_INITIALIZE_HANDLER InitializeHandler;

   W_ISR_HANDLER ISRHandler;

   W_QUERY_INFORMATION_HANDLER QueryInformationHandler;

   W_RECONFIGURE_HANDLER ReconfigureHandler;

   W_RESET_HANDLER ResetHandler;

   W_SEND_HANDLER SendHandler;

   W_SET_INFORMATION_HANDLER SetInformationHandler;

   W_TRANSFER_DATA_HANDLER TransferDataHandler;

   //

   // Version used is V4.0 or V5.0

   // with following members

   //

   W_RETURN_PACKET_HANDLER ReturnPacketHandler;

   W_SEND_PACKETS_HANDLER SendPacketsHandler;

   W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;

   //

   // Version used is V5.0 with the following members

   //

   W_CO_CREATE_VC_HANDLER CoCreateVcHandler;

   W_CO_DELETE_VC_HANDLER CoDeleteVcHandler;

   W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler;

   W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler;

   W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler;

   W_CO_REQUEST_HANDLER CoRequestHandler;

} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;

NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö´Â ´ÙÀ½°ú °°Àº ¸â¹öµéÀÇ ¾î¶² °ÍÀ» ¼³Á¤Çϱâ Àü¿¡ 0À¸·Î ÀÌ ±¸Á¶Ã¼¸¦ ÃʱâÈ­ÇØ¾ß ÇÑ´Ù.

MajorNdisVersion
µå¶óÀ̹ö°¡ »ç¿ëÇÏ´Â NDIS ¶óÀ̺귯¸®ÀÇ ¸ÞÀÌÀú ¹öÀüÀ» ÁöÁ¤ÇÑ´Ù. Çö °ªÀº 0x05ÀÌ´Ù. ºñ·Ï NDIS ¶óÀ̺귯¸®´Â NDIS V4.0À» À§ÇØ °³¹ßµÈ Á¸ÀçÇÏ´Â ¹Ì´ÏÆ÷Æ®µéÀ» °è¼ÓÇØ¼­ Áö¿øÇÑ´Ù.

MininorNdisVersion
µå¶óÀ̹ö´Â »ç¿ëÇÏ´Â NDIS ¶óÀ̺귯¸®ÀÇ ¸¶ÀÌ³Ê ¹öÀüÀ» ÁöÁ¤ÇÑ´Ù. Çö °ªÀº 0x00ÀÌ´Ù. ºñ·Ï NDIS ¶óÀ̺귯¸®´Â Á¸ÀçÇÏ´Â µå¶óÀ̹öµéÀ» °è¼ÓÇØ¼­ Áö¿øÇÑ´Ù.

Reserved
ÀÌ ¸â¹ö´Â ½Ã½ºÅÛ »ç¿ëÀ» À§ÇØ ¿¹¾àµÇ¾ú´Ù.

CheckForHangHandler
È£ÃâÀÚÀÇ MiniportCheckForHang ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÑ´Ù. ȤÀº NULLÀÌ µÈ´Ù.

DisableInterruptHandler
NULLÀ» ÁöÁ¤ÇÑ´Ù.

EnableInterruptHandler
NULLÀ» ÁöÁ¤ÇÑ´Ù.

HaltHandler
È£ÃâÀÚÀÇ MiniportHalt ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÑ´Ù.

HandleInterruptHandler
NULLÀ» ÁöÁ¤ÇÑ´Ù.

InitializeHandler
È£ÃâÀÚÀÇ MiniportInitialize ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÑ´Ù.

ISRHandler
NULLÀ» ÁöÁ¤ÇÑ´Ù.

QueryInformationHandler
È£ÃâÀÚÀÇ MiniportQueryInformation ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÑ´Ù.

ReconfigureHandler
NULLÀ» ÁöÁ¤ÇÑ´Ù.

ResetHandler
È£ÃâÀÚÀÇ MiniportReset ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÑ´Ù.

SendHandler
È£ÃâÀÚÀÇ MiniportSend ÇÔ¼ö, MiniportWanSend ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÑ´Ù. È£ÃâÀÚ°¡ MIniportSendPackets ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù¸éÀº NULLÀÌ´Ù.

¸¸¾à µå¶óÀ̹ö°¡ ¸ÖƼ ÆÐŶ º¸³»±âµé ȤÀº ¹Ìµð¾î ƯÁ¤ Á¤º¸¸¦ Á¦°øÇÑ´Ù¸éÀº, ±× ´ë½Å¿¡ SendPacketsHandler ¸â¹ö¸¦ ¼³Á¤Çϰí ÀÌ ¸â¹ö´Â NULLÀ» ¼³Á¤ÇÑ´Ù.

SetInformationHandler
È£ÃâÀÚÀÇ MiniportSetInformation ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÑ´Ù.

TransferDataHandler
ÀÖÀ¸¸éÀº È£ÃâÀÚÀÇ MiniportTransferData ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤Çϰųª ¾Æ´Ï¸éÀº NULLÀÌ´Ù. ÀÌ·¯ÇÑ ¹Ì´ÏÆ÷Æ® ÇÔ¼ö´Â ¸¸¾à È£ÃâÀÚ°¡ WAN NICÀÇ µå¶óÀ̹ö°¡ ¾Æ´Ï°Å³ª È£ÃâÀÚ°¡ ¸ÖƼ ÆÐŶ ¼ö½ÅµéÀ» Á¦°øÇؼ­ ReturnPacketHandler¿¡ MiniportReturnPacket ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ Á¦°øÇÏÁö ¾Ê´Â´Ù¸éÀº ÇÊ¿äµÈ´Ù.

ReturnPacketHandler
ÀÖÀ¸¸éÀº È£ÃâÀÚÀÇ MiniportReturnPacket ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÏ°í ¾Æ´Ï¸éÀº NULLÀÌ´Ù.

SendPacketsHandler
ÀÖÀ¸¸éÀº È£ÃâÀÚÀÇ MiniportSendPackets ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÏ°í ¾Æ´Ï¸éÀº NULLÀÌ´Ù.

AllocateCompleteHandler
NULLÀ» ÁöÁ¤ÇÑ´Ù.

CoCreateVcHandler
NULLÀ» ÁöÁ¤ÇÑ´Ù.

CoDeleteVcHandler
NULLÀ» ÁöÁ¤ÇÑ´Ù.

CoActivateVcHandler
NULLÀ» ÁöÁ¤ÇÑ´Ù.

CoDeactivateVcHandler
NULLÀ» ÁöÁ¤ÇÑ´Ù.

CoSendPacketsHandler
NULLÀ» ÁöÁ¤ÇÑ´Ù.

CoRequestHandler
NULLÀ» ÁöÁ¤ÇÑ´Ù.

CharacteristicsLength
È£ÃâÀÚ Á¦°ø Ư¼º ¹öÆÛÀÇ ¹ÙÀÌÆ® ±æÀ̸¦ ÁöÁ¤ÇÑ´Ù. MajorNdisVersionÀÇ °ª¿¡ ÀÇÁ¸Çϸ鼭, ÀÌ ¸Å°³º¯¼ö´Â ¸¸¾à µå¶óÀ̹ö°¡ NDIS50_MINIPORT_CHARACTERISTICS ±¸Á¶Ã¼¸¦ Á¦°øÇÑ´Ù¸éÀº sizeof(NDIS50_MINIPORT_CHARACTERISTICS)¸¦ Á¦°øÇϰųª ¸¸¾à µå¶óÀ̹ö°¡ NDIS40_MINIPORT_CHARACTERISTICS ±¸Á¶Ã¼¸¦ Á¦°øÇÑ´Ù¸éÀº sizeof(NDIS40_MINIPORT_CHARACTERISTICS)¸¦ Á¦°øÇÑ´Ù.

¸¸¾à µå¶óÀ̹ö°¡ sources ÆÄÀϳ»¿¡ ºôµå ¸í·É¾î NDIS50_MINIPORT (ȤÀº NDIS40_MINIPORT)¸¦ Æ÷ÇÔÇϰųª µå¶óÀ̹ö °³¹ßÀÚ°¡ -NDIS50_MINIPORT(ȤÀº ..40..) ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÑ´Ù¸éÀº, ÀÌ ¸Å°³º¯¼ö´Â µå¶óÀ̹ö°¡ ºôµåµÉ ¶§ ¼³Á¤µÈ´Ù.

DriverHandle
¸¸¾à È£ÃâÀÌ ¼º°øÀûÀ̶ó¸éÀº NdisIMRegisterLayeredMiniport ÇÔ¼ö´Â È£ÃâÀÚ°¡ ÀúÀåÇØ¾ß ÇÏ´Â ÇÚµéÀ» ¸®ÅÏÇÏ´Â º¯¼ö¸¦ °¡¸®Å²´Ù. È£ÃâÀÚ´Â °è¼ÓÇØ¼­ ÀÌ ÇÚµéÀ» ProtocolBindAdapter ÇÔ¼ö·ÎºÎÅÍ Ç×»ó NdisIMInitializeDeviceInstance ÇÔ¼ö¿¡ ´ëÇØ ÀÌ ÇÚµéÀ» Àü´ÞÇØ¾ß ÇÑ´Ù.

¸®Åϰª

NdisIMRegisterLayeredMiniport ÇÔ¼ö´Â ¸¸¾à ¹Ì´ÏÆ÷Æ®·Î¼­ È£Ãâ°¡¸¦ µî·ÏÇÑ´Ù¸éÀº NDIS_STATUS_SUCCESS ¸®ÅÏÇϰųª ´ÙÀ½°ú °°Àº »óÅ °ªµé Áß¿¡ Çϳª¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ´Ù.

NDIS_STATUS_BAD_CHARACTERISTICS
CharacteristicsLength´Â MiniportCharacteristics¿¡ ¹öÆÛ³»¿¡ ÁöÁ¤µÈ MajorNdisVersionÀ» À§ÇØ ³Ê¹« ÀÛ´Ù.

NDIS_STATIS_BAD_VERSION
characteristics ±¸Á¶Ã¼³»¿¡ ÁöÁ¤µÈ MajorNdisVersion ȤÀº MinorNdisVersionÀº À¯È¿ÇÏÁö ¾Ê´Ù.

NDIS_STATUS_RESOURCES
°¡´ÉÇÑÇÑ ¸Þ¸ð¸®¿Í °°Àº ÀÚ¿øµéÀº ºÎÁ·Àº NDIS ¶óÀ̺귯¸®°¡ ¹Ì´ÏÆ÷Æ®·Î¼­ È£ÃâÀÚ¸¦ µî·ÏÇÏ´Â °ÍÀ» ¸·´Â´Ù.

NDIS_STATUS_FAILURE
ÀÌ °ªÀº ¼±Çà ¿¡·¯µéÀÇ ¾Æ¹«°Íµµ µî·ÏÀ» ½ÇÆÐ·Î ÇÏÁö ¾Ê¾ÒÀ» ¶§ µðÆúÆ® ¿¡·¯ »óÅÂÀÌ´Ù. ¿¹¸¦ µé¾î, ¸¸¾à NDIS ¶óÀ̺귯¸®°¡ µå¶óÀ̹öÀÇ À̹ÌÁö¸¦ ·ÎµåÇÒ ¼ö ¾ø°í ½Ã½ºÅÛ ¸Þ¸ð¸®¿¡ lockµÉ ¼ö ¾ø´Ù¸éÀº, ÀÌ ¿¡·¯¸¦ ¸®ÅÏÇÑ´Ù.

ÁÖ¼®

MiniportXxx ÇÔ¼öµé°ú ProtocolXxx ÇÔ¼öµéÀ» ÀͽºÆ÷Æ®ÇÏ´Â ¾î¶² NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö´Â Ư¼º ±¸Á¶Ã¼¸¦ ¼³Á¤Çϰí DriverEntry ÇÔ¼ö°¡ NdisMInitializeWrapper ÇÔ¼ö¸¦ È£ÃâÇÑ ÈÄ DriverEntry ÇÔ¼ö·ÎºÎÅÍ NdisIMRegisterLayeredMiniport ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÌ ±¸Á¶Ã¼´Â NDIS ¶óÀ̺귯¸®ÀÇ ³»ºÎ ÀúÀå °ø°£¿¡ NdisIMRegisterLayeredMiniport ÇÔ¼ö ¿ä±¸¿¡ º¹»çµÇ¾îÁø´Ù. ±×·¯¹Ç·Î, ÀÏ´Ü µî·ÏµÈ´Ù¸éÀº, ±×·¯ÇÑ µå¶óÀ̹ö´Â Çڵ鷯 ÇÔ¼öµéÀ» º¯È­ÇÒ ¼ö ¾ø´Ù.

±×·¯ÇÑ NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö°¡ ¼º°øÀûÀ¸·Î NdisIMRegisterLayeredMiniport ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù¸éÀº, NDIS ¶óÀ̺귯¸®·Î ProtocolXxx ÇÔ¼öµéÀ» µî·ÏÇϱâ À§ÇØ NdisRegisterProtocol ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ±×·¯ÇÑ µå¶óÀ̹ö´Â Ç×»ó ProtocolBindAdapter ÇÔ¼ö¿Í ProtocolUnbindAdapter ÇÔ¼öµéÀ» °¡Áø´Ù. ProtocolBindAdapter ÇÔ¼ö´Â ¾Æ·¡ NIC µå¶óÀ̹ö°¡ ¼º°øÀûÀ¸·Î ÃʱâÈ­µÇ¾îÁú ¶§, ´ÙÀ½ È£ÃâµÇ¾îÁú °ÍÀÌ´Ù. ProtocolBindAdapter ÇÔ¼ö´Â ±×¸®°í³ª¼­ NdisOpenAdapter ÇÔ¼ö·Î ±×·¯ÇÑ NIC µå¶óÀ̹ö¿¡ ´ëÇÑ ¹ÙÀεùÀ» ¸¸µé ¼ö ÀÖ´Ù.

NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö´Â ¸¸¾à ¾Æ·¡ NIC µå¶óÀ̹ö°¡ ¸ÖƼ ÆÐŶ º¸³»±âµéÀ» Áö¿øÇØ¾ß Çϰųª ȤÀº »óÀ§ ·¹º§ ÇÁ·ÎÅäÄÝ¿¡¼­ ÆÐŶ ¹è¿­·Î º¸³»¾îÁú ¶§ ÆÐŶ ¿ì¼±±Ç°ú °°Àº ¹Ìµð¾î ƯÁ¤ Á¤º¸¸¦ ¼ÒºñÇÑ´Ù¸éÀº(consume) MiniportSendPackets ÇÔ¼ö¸¦ °¡Á®¾ß ÇÑ´Ù. NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö´Â ¸¸¾à ¾Æ·¡ NIC µå¶óÀ̹ö°¡ ¸ÖƼ ÆÐŶ ¼ö½Å ÀεðÄÉÀÌ¼Ç Áö¿øÇѴٰųª ȤÀº ¹Ìµð¾î ƯÁ¤ Á¤º¸¸¦ Æ÷ÇÔÇÏ´Â ÆÐŶ ¹è¿­µéÀ» ÀεðÄÉÀÌÆ®ÇÑ´Ù¸éÀº MiniportReturnPacket ÇÔ¼ö¸¦ °¡Á®¾ß ÇÑ´Ù. NDIS ¶óÀ̺귯¸®´Â ¾Æ·¡ NIC µå¶óÀ̹ö¿Í ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö¸¦ À§ÇØ ÇϳªÀÇ ÆÐŶ Àü¼ÛµéÀ» Áö¿øÇÏ´Â »óÀ§ ·¹º§ ÇÁ·ÎÅäÄÝ »çÀÌ¿¡ Àü¼ÛµÈ ÆÐŶ ¹è¿­µéÀ» ´Ù·é´Ù.

NdisIMRegisterLayeredMiniport ÇÔ¼öÀÇ È£ÃâÀÚµéÀº IRQL PASSIVE_LEVEL¿¡¼­ ½ÇÇàÇÑ´Ù.