The windows kernel memory allocation, use the function list


ExAllocatePool (pageType, nAllocSize);

ExFreePool(address);

ExAllocatePoolWithTag(pageType, nAllocSize, tag);

ExFreePoolWithTag(address, tag);

 

NPAGED_LOOKASIDE_LIST lookaside;

ExInitializeNPagedLookasideList(&lookaside, NULL, NULL, 0, nAllocSize, tag, 0);

ExAllocateFromNPagedLookasideList(&lookaside);

ExFreeToNPagedLookasideList(&lookaside, address);

ExDeleteNPagedLookasideList(&lookaside);

LIST_ENTRY listEntry;

InitializeListHead(&listEntry);

IsListEmpty(&listEntry);

InsertTailList(&listEntry, &newEntry);

InsertHeadList(&listEntry, &newEntry);

/*
Calling RemoveHeadList Or RemoveTailList with an empty list can cause a system failure. Callers of
RemoveHeadList or RemoveTailList should first call IsListEmpty to determine if the list has any entries.
*/
RemoveTailList(&listEntry);

RemoveHeadList(&listEntry);

RemoveEntryList(&entryItem);


SPIN_LOCK spinLock;

KeInitializeSpinLock(&spinLock);

ExInterLockedInsertHeadList(&listEntry, &newEntry, &spinLock);

ExInterLockedInsertTailList(&listEntry, &newEntry, &spinLock);

/*
If the list is empty, a NULL pointer is returned. Otherwise, a pointer to the dequeued entry is returned.
*/
ExInterLockedRemoveHeadList(&listEntry, &spinLock);


SLIST_EHADER sListHead;
ExInitializeSListHead(&sListHead);
ExInterLockedPushEntrySList(&sListHead, sListEntry, lock);

/*
ExInterlockedPopEntrySList returns a pointer to the first entry in the list. If the list was empty,
it returns NULL.
*/
ExInterLockedPopEntrySList(&sListHead, lock)


/*
ExQueryDepthSList returns the current number of entries in the S-List.
*/
ExQueryDepthSList(&sListHead);

 

Guess you like

Origin www.cnblogs.com/endenvor/p/11510816.html