NdisRegisterProtocol

VOID

  NdisRegisterProtocol(

    OUT PNDIS_STATUS  Status,

    OUT PNDIS_HANDLE  NdisProtocolHandle,

    IN PNDIS_PROTOCOL_CHARACTERISTICS  ProtocolCharacteristics,

    IN UINT  CharacteristicsLength

    );

NdisRegisterProtocolÀº NDIS µå¶óÀ̹öÀÇ ProtocolXxx ¿£Æ®¸® Æ÷ÀÎÆ®µé°ú µå¶óÀ̹ö¸¦ ÃʱâÈ­ÇÒ ¶§ NDIS ¶óÀ̺귯¸®¿¡ À̸§À» µî·ÏÇÑ´Ù.

¸Å°³º¯¼ö

Status
ÀÌ ÇÔ¼ö°¡ ¸®ÅÏÇÒ ¶§ ´ÙÀ½°ú °°Àº °ª Áß Çϳª°¡ µÉ ¼ö Àִ ȣÃâÀÚ Á¦°ø º¯¼ö¸¦ °¡¸®Å²´Ù.

NDIS_STATUS_SUCCESS
NDIS ¶óÀ̺귯¸®´Â ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö·Î¼­ È£ÃâÀÚ¸¦ µî·ÏÇÑ´Ù.

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

NDIS_STATUS_BAD_VERSION
ProtocolCharacteristics ¹öÆÛ³»¿¡ ÁöÁ¤µÈ MajorNdisVersionÀÌ À¯È¿ÇÏÁö ¾Ê´Ù.

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

NdisProtocolHandle
ÀÌ ÇÔ¼ö°¡ µî·ÏµÈ µå¶óÀ̹ö¸¦ Ç¥½ÃÇÏ´Â ÇÚµéÀ» ¸®ÅÏÇϴ ȣÃâÀÚ Á¦°ø º¯¼ö¸¦ °¡¸®Å²´Ù.

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

typedef struct _NDIS_PROTOCOL_CHARACTERISTICS

{

    UCHAR MajorNdisVersion;

    UCHAR MinorNdisVersion;

    UINT Reserved;

    OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;

    CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;

    SEND_COMPLETE_HANDLER SendCompleteHandler;

    TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;

    RESET_COMPLETE_HANDLER ResetCompleteHandler;

    REQUEST_COMPLETE_HANDLER RequestCompleteHandler;

    RECEIVE_HANDLER ReceiveHandler;

    RECEIVE_COMPLETE_HANDLER ReceiveCompletehandler;

    STATUS_HANDLER StatusHandler;

    STATUS_COMPLETE_HANDLER StatusCompleteHandler;

    NDIS_STRING Name;

//

//  MajorNdisVersion must be set to 0x04

//  with any of the following members

//

    RECEIVE_PACKET_HANDLER ReceivePacketHandler;

    BIND_HANDLER BindAdapterHandler;

    UNBIND_HANDLER UnbindAdapterHandler;

    TRANSLATE_HANDLER TranslateHandler;

    UNLOAD_PROTOCOL_HANDLER UnloadHandler;

} NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;

µå¶óÀ̹ö´Â ´ÙÀ½°ú °°Àº ¸â¹ö¸¦ ¼³Á¤Çϱâ Àü¿¡ ÀÌ ±¸Á¶Ã¼¸¦ 0À¸·Î ÃʱâÈ­ÇØ¾ß ÇÑ´Ù.

MajorNdisVersion
µå¶óÀ̹ö°¡ »ç¿ëÇÏ´Â NDIS ¶óÀ̺귯¸®ÀÇ ¸ÞÀÌÀú ¹öÀüÀ» ÁöÁ¤ÇÑ´Ù. ºñ·Ï NDIS ¶óÀ̺귯¸®°¡ NDIS V3.0À» À§ÇØ °³¹ßµÈ Á¸ÀçÇÏ´Â µå¶óÀ̹öµéÀ» °è¼ÓÇØ¼­ Áö¿øÇÏÁö¸¸Àº, ÇöÀç °ªÀº 0x04ÀÌ´Ù. ÀÌ ¸â¹ö´Â È£ÃâÀڴ ȣÃâÀÚ°¡ NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö³ª È£ÃâÀÚ°¡ Name ´ÙÀ½¿¡ ¾î¶² ¸â¹öµé ³»¿¡ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÑ´Ù¸éÀº 0x04·Î ¼³Á¤µÇ¾îÁ®¾ß ÇÑ´Ù.

MinorNdisVersion
minor NDIS ¹öÀüÀ» ÁöÁ¤ÇÑ´Ù. ºñ·Ï NDIS°¡ °è¼ÓÇØ¼­ Á¸ÀçÇÏ´Â µå¶óÀ̹öµéÀ» Áö¿øÇÏÁö ¸¸Àº ÇöÀç °ªÀº 0x00ÀÌ´Ù.

Reserved
ÀÌ °ªÀº ½Ã½ºÅÛ »ç¿ëÀ¸·Î ¿¹¾àµÇ¾ú´Ù.

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

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

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

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

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

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

ReceiveHandler
È£ÃâÀÚÀÇ ProtocolReceive ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÅ͸¦ ÁöÁ¤ÇÑ´Ù.

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

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

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

Name
µå¶óÀ̹ö¸¦ À̸§Áö¿ì´Â ½Ã½ºÅÛ µðÆúÆ® ¹®ÀÚ ¼¼Æ®·Î ¹öÆÛÈ­µÈ È£ÃâÀÚ ÃʱâÈ­ Ä«¿îƮȭµÈ ¹®ÀÚ¿­ÀÇ Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÑ´Ù. À©µµ¿ìÁî NT µå¶óÀ̹ö¿¡ ´ëÇÏ¿©, ÀÌ ¹®ÀÚ¿­Àº À¯´ÏÄÚµå ¹®ÀÚµéÀ» Æ÷ÇÔÇÑ´Ù.

NdisRegisterProtocolÀº Á¦°øµÈ ¹®ÀÚ¿­À» ´ë¹®ÀÚ·Î °íÄ¡°í, ±×¸®°í ³ª¼­ ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö ÀÛ¼ºÀÚ´Â ÀÌ¹Ì µî·ÏµÈ ÇÁ·ÎÅäÄÝ À̸§ÀÇ ÄÉÀ̽º¸¦ º¯ÇÏ´Â °ÍÀÌ µå¶óÀ̹ö¸¦ À§ÇØ À¯ÀÏÇÑ À̸§À» ¸¸µå´Â °ÍÀ» ÃßÃøÇÒ ¼ö ¾ø´Ù.

ReceivePacketHandler
È£ÃâÀÚÀÇ ProtocolReceivePacket ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÑ´Ù. ¾î¶² °ªÀ̵ç NULL °ªÀÌ´Ù. ¸ÖƼ ÆÐŶ ÀεðÄÉÀ̼ǵéÀ» Áö¿øÇÏ´Â ¾î¶² µå¶óÀ̹ö¿Í ¹ÙÀεåÇÑ ÇÁ·ÎÅäÄݵéÀº ±×µéÀÇ ÆÛÆ÷¸Õ½º¸¦ Çâ»ó½Ã۱â À§ÇØ ProtocolReceivePacket ÇÔ¼ö¸¦ Á¦°øÇØ¾ß ÇÑ´Ù.

BindAdapterHandler
È£ÃâÀÚÀÇ ProtocolBindAdapter ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÑ´Ù. ¾î¶² °ªÀ̵ç NULLÀÌ´Ù. NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹öµéÀº Ç×»ó ProtocolBindAdapter ÇÔ¼ö¸¦ Á¦°øÇϰí, ¾çÂÊÀº ±×µéÀÌ PnP-ready·Î ¸¸µé°í ÀÎÅ͹̵ð¾ùÀÌ NdisIMRegisterLayeredMiniport¸¦ È£ÃâÇϵµ·Ï Çã¶ôÇÏ°í ¾Æ·¡ °èÃþ NIC µå¶óÀ̹öµéÀÌ ÃʱâÈ­µÇ¾úÀ» ¶§±îÁö Ç® µå¶óÀ̹ö ÃʱâÈ­¸¦ Áö¿¬½ÃŰ°Ô ÇÑ´Ù.

UnbindAdapterHandler
È£ÃâÀÚÀÇ ProtocolUnbindAdapter ÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÑ´Ù. ¾î¶² °ªÀ̵çÁö NULLÀÌ´Ù. ProtocolBindAdapter ÇÔ¼ö¸¦ Á¦°øÇϸéÀº NDIS µå¶óÀ̹öµéÀ» ¶ÇÇÑ ProtocolUnbindAdapter ÇÔ¼ö¸¦ Á¦°øÇØ¾ß ÇÑ´Ù.

TranslateHandler
È£ÃâÀÚÀÇ ProtocolTranslateÇÔ¼öÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÑ´Ù. ¸¸¾à ¾î¶² °ªÀ̵ç NULLÀÌ´Ù. ±×·¯ÇÑ ÇÔ¼ö´Â ÇöÀç È£ÃâµÇÁö ¾Ê°í ÀÌ ¸â¹ö´Â PnP-aware(ÀνÄ) ÇÁ·ÎÅäÄݵ鿡 ÀÇÇØ ¹Ì·¡ »ç¿ëÀ» À§ÇØ ¿¹¾àµÇ¾ú´Ù.

UnloadHandler
À©µµ¿ìÁî NT ÇÁ·ÎÅäÄÝ µå¶óÀ̹öµéÀ» À§ÇØ NULL·Î ¼³Á¤µÈ´Ù.

CharacteristicsLength
ProtocolCharacteristics¿¡¼­ ±¸Á¶Ã¼ÀÇ ¹ÙÀÌÆ® Å©±â¸¦ ÁöÁ¤ÇÑ´Ù. ¸¸¾à ºôµå µð·ºÆ¼ºê(Áö½ÃÀÚ)°¡ NDIS40ÀÌ #include ndis.h ¾Õ¿¡ ¼Ò½ºÆÄÀϵ鿡 ÁöÁ¤µÈ´Ù¸éÀº ÀÌ °ªÀº ÀÚµ¿ÀûÀ¸·Î Á¦°øµÈ´Ù.

ÁÖ¼®

CharacteristicsLength¿¡ Á¦°øµÈ °ªÀº ÀÌ ±¸Á¶Ã¼¿¡¼­ Á¦°øµÈ MajorNdisVersion¿¡ ÀÇÇØ ÁöÁ¤µÈ Àû¾îµµ sizeof(NDISXX_PROTOCOL_CHARACTERISTICS)°¡ µÉ°ÍÀÌ´Ù.

ÃÖ´ëÀÇ °¡´ÉÇÑ ÆÛÆ÷¸Õ½º¸¦ À§ÇÏ¿©, ¸ÖƼ ÆÐŶ ¸®½ººêµéÀ» Á¦°øÇÏ´Â NIC µå¶óÀ̹ö À§¿¡ À§Ä¡ÇÏ´Â ¾î¶² ÇÁ·ÎÅäÄÝÀº ProtocolReceivePacket ÇÔ¼ö¸¦ Á¦°øÇØ¾ß ÇÑ´Ù. ¸ÖƼ ÆÐŶ º¸³»±âµéÀ» Á¦°øÇÏ´Â ¾î¶² NIC µå¶óÀ̹ö´Â ¸ÖƼ ÆÐŶ ¸®½ººêµéÀ» ÀεðÄÉÀÌÆ®Çϱ⠶ÇÇÑ ½±´Ù.

ProtocolReceivePacket ÇÔ¼ö¸¦ Á¦°øÇÏ´Â µå¶óÀ̹ö´Â ProtocolReceive ÇÔ¼ö¸¦ ¶ÇÇÑ Á¦°øÇØ¾ß ÇÑ´Ù. NdisRegisterProtocol¿¡ ´ëÇÑ ¼º°øÀûÀΠȣÃâÈÄ, µå¶óÀ̹ö´Â Á¦°øµÈ ProtocolXxx ÇÔ¼öµéÀÇ ¼³Á¤À» ¹Ù²Ü ¼ö ¾ø´Ù.

¼º°øÀûÀ¸·Î µî·ÏµÈ µå¶óÀ̹ö´Â NdisProtocolHandle¿¡ ¸®ÅÏµÈ ÇÚµéÀ» ÀúÀåÇØ¾ß ÇÑ´Ù. ±×°ÍÀº µå¶óÀ̹ö°¡ °è¼ÓÇØ¼­ È£ÃâÇÏ´Â ´Ù¸¥ NdisXxx ÇÔ¼öµé¿¡ ´ëÇÑ ¸Å°³º¯¼ö¿¡ ÇÊ¿äÇÏ´Ù.

NdisRegisterProtocolÀÇ È£ÃâÀÚ´Â IRQL PASSIVE_LEVEL ½ÇÇàÇÑ´Ù.