Přidělení prostředků sdílené paměti
Pokud chcete přidělit sdílené paměťové prostředky pro frontu virtuálních počítačů, ovladač miniportu volá funkci NdisAllocateSharedMemory. Například ovladač miniportu přiděluje sdílenou paměť, když obdrží identifikátor OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID. Ovladač miniportu může také přidělit sdílenou paměť pro výchozí frontu během inicializace síťového adaptéru. Další informace o přidělování front najdete v tématu Přidělení fronty virtuálních počítačů.
Ovladač miniportu může přidělit více paměti pro frontu až do doby, kdy bude fronta uvolněna. Další informace o uvolnění fronty virtuálního počítače najdete v tématu Uvolnění fronty virtuálního počítače.
Struktura NDIS_SHARED_MEMORY_PARAMETERS určuje parametry sdílené paměti pro požadavek na přidělení sdílené paměti. Ovladače miniportu předávají tuto strukturu funkci NdisAllocateSharedMemory. NDIS předá tuto strukturu funkcí NetAllocateSharedMemory (což je vstupní bod ALLOCATE_SHARED_MEMORY_HANDLER).
Když ovladač miniportu přidělí sdílenou paměť, určuje následující:
Identifikátor fronty.
Délka sdílené paměti.
Způsob použití sdílené paměti Například ovladač miniportu určuje NdisSharedMemoryUsageReceive, pokud má být sdílená paměť použita pro příjemové vyrovnávací paměti.
Pokud není příznak NDIS_SHARED_MEM_PARAMETERS_CONTIGOUS nastaven v členu příznaků, lze sdílenou paměť zadat ve scatter-gather seznamu, který je obsažen v nesouvislé paměti.
Výčet NDIS_SHARED_MEMORY_USAGE určuje, jak se používá sdílená paměť. Výčet NDIS_SHARED_MEMORY_USAGE se používá ve strukturách NDIS_SHARED_MEMORY_PARAMETERS a NDIS_SCATTER_GATHER_LIST_PARAMETERS. Informace o parametrech sdílené paměti ve vyrovnávacích pamětech VMQ pro příjem dat naleznete v tématu Sdílená paměť ve vyrovnávacích pamětech pro příjem.
Funkce NdisAllocateSharedMemory volajícímu poskytuje následující:
Virtuální adresa přidělené paměti.
Seznam bodového shromáždění
Držák sdílené paměti – pro přijímání indikací
Identifikátor přidělení – slouží k pozdější identifikaci paměti.
Ovladače miniportu volají funkci NdisFreeSharedMemory k uvolnění sdílené paměti pro frontu. Pokud ovladač miniportu přidělil sdílenou paměť pro nedefaultní frontu, uvolní tuto sdílenou paměť v rámci kontextu OID_RECEIVE_FILTER_FREE_QUEUE OID, zatímco uvolňuje frontu. Ovladače miniportu uvolňují sdílenou paměť, kterou přidělili výchozí frontě v kontextu funkce MiniportHaltEx.