NdisAllocateBuffer

VOID

  NdisAllocateBuffer(

    OUT PNDIS_STATUS  Status,

    OUT PNDIS_BUFFER  *Buffer,

    IN NDIS_HANDLE  PoolHandle,

    IN PVOID  VirtualAddress,

    IN UINT  Length

    );

NdisAllocateBufferÀº ÀÌ¹Ì ÇÒ´çµÈ, ºñ ÆäÀÌÁöÈ­µÈ ¸Þ¸ð¸® ºí·°³»¿¡ ƯÁ¤ °¡»ó ¹üÀ§(range, ¿µ¿ª)¿Í ¸ÊÇÎÇÏ´Â ¹öÆÛ µð½ºÅ©¸³Å͸¦ ¸¸µç´Ù.

¸Å°³º¯¼ö

Status
ÀÌ ÇÔ¼ö´Â ¹öÆÛ ÇÒ´çÀÇ ¸¶Áö¸· »óŸ¦ ¸®ÅÏÇϴ ȣÃâÀÚ Á¦°ø º¯¼ö¸¦ °¡¸®Å²´Ù. ¸¸¾à Buffer¿¡ À¯È¿ÇÑ ¹öÆÛ µð½ºÅ©¸³ÅÍ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù¸éÀº NDIS_STATUS_SUCCESS°¡ µÉ °ÍÀÌ°í ±×·¸Áö ¾Ê´Â´Ù¸éÀº NDIS_STATUS_FAILURE°¡ µÉ °ÍÀÌ´Ù.

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

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

VirtualAddress
¸®ÅÏµÈ ¹öÆÛ µð½ºÅ©¸³Åͳ»¿¡ ¸ÊÇÎµÈ Àü¿¡ ÇÒ´çµÈ ½Ã½ºÅÛ °ø°£ ¸Þ¸ð¸®ÀÇ ±âº» °¡»ó ÁÖ¼Ò(base virtual address)¸¦ °¡¸®Å²´Ù.

Length
¸ÊµÉ ¹ÙÀÌÆ® ¼ö¸¦ ÁöÁ¤ÇÑ´Ù.

ÁÖ¼®

NdisAllocateBufferÀº ÆÐŶ Çì´õ ȤÀº NIC ¸®½Ãºê ¹öÆÛ¸¦ À§ÇØ »ç¿ëµÈ ¸Þ¸ð¸®¿Í °°Àº Àü¿¡ ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ Æ¯Á¤ ¿µ¿ª(¹üÀ§, range)À» ¸ÊÇϱâ À§ÇØ ¹öÆÛ µð½ºÅ©¸³Å͸¦ ÃʱâÈ­ÇÏ°í ±×¸®°í ÀúÀå °ø°£À» ÇÒ´çÇÑ´Ù.

¹öÆÛ µð½ºÅ©¸³ÅÍ ÇÒ´çÀº NdisAllocateBufferPool·Î ¸¸µç ¹öÆÛ Ç®(pool)¿¡ µå·Î¿ìÇÑ´Ù.(draws) µå¶óÀ̹ö´Â ¸¸¾à ÃʱâÈ­ÇÏ´Â µ¿¾È NdisAllocateBufferPoolÀÌ È£ÃâµÇ¾îÁø´Ù¸éÀº ÇÊ¿äÇÑ ¸¸Å­ ¹öÆÛ µð½ºÅ©¸³Å͵éÀ» ÇÒ´çÇϱâ À§ÇØ ÇÊ¿äÇÑ ¸¸Å­ ¿©·¯¹ø NdisAllocateBuffer¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.

¸ðµç ÇÏÀ§ ·¹º§ NDIS µå¶óÀ̹öµéÀº ¹öÆÛ Ç®(pool)·ÎºÎÅÍ ÆÐŶµéÀ» ¿¬°áÇÑ ¸ðµç ¹öÆÛ µð½ºÅ©¸³Å͵éÀ» ÇÒ´çÇØ¾ß ÇÑ´Ù. ´ÜÁö °¡Àå »óÀ§ ·¹º§ ÇÁ·ÎÅäÄÝ µå¶óÀ̹öµéÀº °¡»ó ¸Þ¸ð¸® ¿µ¿ªµé¿¡(ranges)¿¡ ¸ÊÇÎµÈ OS Á¾¼Ó µð½ºÅ©¸³Å͵鿡 Á¦°øµÇ¾îÁú ¼ö ÀÖ´Ù. ¸¸¾à ÀÌ·¯ÇÑ ¸Þ¸ð¸® µð½ºÅ©¸³Å͵éÀÌ NDIS ¹öÆÛ µð½ºÅ©¸³Å͵é°ú µ¿µîÇÏ´Ù¸éÀº(equivalent), °¡Àå »óÀ§ ·¹º§ ÇÁ·ÎÅäÄÝÀº ±×·¯ÇÑ µð½ºÅ©¸³Å͵éÀ» ¸Å°³º¯¼ö·Î¼­ NdisXxx ÇÔ¼öµé¿¡ Àü´ÞÇÒ ¼ö ÀÖ´Ù.

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