NdisAllocatePacket

VOID

  NdisAllocatePacket(

    OUT PNDIS_STATUS  Status,

    OUT PNDIS_PACKET  *Packet,

    IN NDIS_HANDLE  PoolHandle

    );

NdisAllocatePacketÀº ÆÐŶ µð½ºÅ©¸³ÅÍÀ» ÇÒ´çÇϰí ÃʱâÈ­ÇÑ´Ù.

¸Å°³º¯¼ö

Status
ÀÌ ÇÔ¼ö´Â ¿ä±¸¿¡ ´ëÇÑ ¸¶Áö¸· »óŸ¦ ¸®ÅÏÇϴ ȣÃâÀÚ Á¦°ø º¯¼ö¸¦ °¡¸®Å²´Ù. ´ÙÀ½°ú °°Àº °ªÀÌ ¿Ã ¼ö ÀÖ´Ù.

NDIS_STATUS_SUCCESS
È£ÃâÀÚ´Â Packet¿¡ ¸®ÅÏµÈ ÆÐŶ µð½ºÅ©¸³Å͸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

NDIS_STATUS_RESOURCES
ÇöÀç ÆÐŶ Ç®(pool)¸¦ À§ÇÑ ÇÁ¸® ¸®½ºÆ®(free list)°¡ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ¿£Æ®¸® ¸®½ºÆ®µéÀÌ ¾ø´Ù. ´ÙÀ½ÀÇ NdisFreePacket¿¡ ´ëÇÑ È£ÃâÀº ÇÁ¸® ¸®½ºÆ®(free list)¿¡ ´ëÇÑ Á¦°øµÈ ¿£Æ®¸®¸¦ ¸®ÅÏÇÒ °ÍÀÌ´Ù.

Packet
ÀÌ ÇÔ¼ö´Â ÇÒ´çµÈ ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇϴ ȣÃâÀÚ Á¦°ø º¯¼ö¸¦ °¡¸®Å²´Ù.

PoolHandle
NdisAllocatePacketPool¿¡ ´ëÇÑ ¾Õ¼±(preceding) È£Ãâ¿¡ ÀÇÇØ ¸®ÅÏµÈ ÇÚµéÀ» ÁöÁ¤ÇÑ´Ù.

ÁÖ¼®

NDIS µå¶óÀ̹öµéÀº ÆÐŶ Ç®(pool)·ÎºÎÅÍ ÆÐŶ µð½ºÅ©¸³Å͵éÀ» ÇÒ´çÇØ¾ß ÇÑ´Ù. ÇÁ·ÎÅäÄÝ µå¶óÀ̹öµéÀº NdisSendȤÀº NdissendPackets¿¡ ´ëÇÑ ³ªÁß È£Ã⸦ À§ÇØ ÇѹøÀ̳ª ¿©·¯¹ø NdisAllocatePacketÀ» È£ÃâÇÑ´Ù. ¹Ì´ÏÆ÷Æ®µéÀº NdisMIndicateReceivePacket¿¡ ´ëÇÑ ³ªºØ È£ÃâÀ» À§ÇØ Çѹø ȤÀº ¿©·¯¹ø NdisAllocatePacketÀ» È£ÃâÇÑ´Ù. NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹öµéÀº µé¾î¿À´Â Àü¼Û(transfer) ¿ä±¸µéÀ» ´Ù¸¥ NDIS µå¶óÀ̹öµé¿¡°Ô Àü´ÞÇϱâ(passing) Àü¿¡ Ç÷¹½¬(fresh) ÆÐŶ µð½ºÅ©¸³ÅÍµé ³»¿¡ º¸³»±âµé(sends) ȤÀº ¸®½Ãºê(receive) ÀεðÄÉÀ̼ǵé(indications)À» ´Ù½Ã ÆÐŰÁöÈ­(repackage)Çϱâ À§ÇØ NdisAllocatePacketÀ» È£ÃâÇØ¾ß ÇÑ´Ù.

°¢ ÆÐŶ µð½ºÅ©¸³ÅÍ´Â °á°úÀûÀ¸·Î ±×°Í°ú ¿¬°áµÈ(chained) Çϳª³ª ±× ÀÌ»óÀÇ ¹öÆÛ µð½ºÅ©¸³Å͵éÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. NdisAllocatePacketÀº ÆÐŶ µð½ºÅ©¸³ÅÍÀ» 0À¸·Î ÃʱâÈ­ÇÏ°í ¹öÆÛ üÀÎ Æ÷ÀÎÅ͸¦ NULL·Î ¼³Á¤ÇÑ´Ù. È£ÃâÀÚ´Â º¸³»°Å³ª ÀεðÄÉÀÌÆ®Çϱâ Àü¿¡ ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ´ëÇÑ ÆÐŶ µ¥ÀÌÅÍ¿Í ¸ÊÇÎÇÏ´Â ¹öÆÛ µð½ºÅ©¸³Å͵éÀ» ¿¬°áÇØ¾ß ÇÑ´Ù. ´ëºÎºÐ NDIS µå¶óÀ̹öµéÀº NdisAllocateBuffer·Î ¹öÆÛ µð½ºÅ©¸³Å͵éÀ» ÇÒ´çÇÑ´Ù.

µå¶óÀ̹öµéÀº NDIS_GET/SET_PACKET_XXX ¸ÅÅ©·Îµé ȤÀº NDIS_OOB_DATA_FROM_PACKET¸¦ »ç¿ëÇÏ¿© ÆÐŶ µð½ºÅ©¸³Å͵é°ú °ü·ÃµÈ ¾î¶² ¾Æ¿ô¿Àºê¹êµå Á¤º¸¿¡ Á¢±ÙÇϰųª ¼³Á¤ÇÑ´Ù.

NdisAllocatePacketÀÇ È£ÃâÀÚ´Â IRQL <= DISPATCH_LEVEL·Î ½ÇÇàÇÑ´Ù.