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·Î ½ÇÇàÇÑ´Ù.
|