Windowsカーネルのメモリ割り当て、機能のリストを使用


ExAllocatePool(ページタイプ、nAllocSize)。

ExFreePool(アドレス);

ExAllocatePoolWithTag(ページタイプ、nAllocSize、タグ)。

ExFreePoolWithTag(アドレス、タグ)。

 

NPAGED_LOOKASIDE_LIST索引;

ExInitializeNPagedLookasideList(&索引、NULL、NULL、0、nAllocSize、タグ、0);

ExAllocateFromNPagedLookasideList(&ルックアサイド)。

ExFreeToNPagedLookasideList(&ルックアサイド、アドレス);

ExDeleteNPagedLookasideList(&ルックアサイド)。

LIST_ENTRY listEntry;

InitializeListHead(&listEntry)。

IsListEmpty(&listEntry)。

InsertTailList(&listEntry、&newEntry)。

InsertHeadList(&listEntry、&newEntry)。

/ *
空のリストでRemoveHeadListまたはRemoveTailListを呼び出すと、システム障害を引き起こす可能性があります。呼び出し側
RemoveHeadListまたはRemoveTailListは、最初のリストにエントリがあるかどうかを判断するためにIsListEmptyを呼び出す必要があります。
* /
RemoveTailList(&listEntry)。

RemoveHeadList(&listEntry)。

RemoveEntryList(&entryItem)。


SPIN_LOCKスピンロック;

KeInitializeSpinLock(&スピンロック)。

ExInterLockedInsertHeadList(&listEntry、&newEntry、&スピンロック)。

ExInterLockedInsertTailList(&listEntry、&newEntry、&スピンロック)。

/ *
リストが空の場合、NULLポインタが返されます。それ以外の場合は、デキューエントリへのポインタが返されます。
* /
ExInterLockedRemoveHeadList(&listEntry、&スピンロック)。


SLIST_EHADER sListHead;
ExInitializeSListHead(&sListHead)。
ExInterLockedPushEntrySList(&sListHead、sListEntry、ロック)。

/ *
ExInterlockedPopEntrySListは、リストの最初のエントリへのポインタを返します。リストが空だった場合、
それはNULLを返します。
* /
ExInterLockedPopEntrySList(&sListHead、ロック)


/ *
ExQueryDepthSListはS-リスト内のエントリの現在の数を返します。
* /
ExQueryDepthSList(&sListHead)。

 

おすすめ

転載: www.cnblogs.com/endenvor/p/11510816.html