Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Áttekintés
A Windows 10 2004-es verziójának kiadásához a Microsoft új készlet nullázási API-kat vezetett be, amelyek alapértelmezés szerint nullára vannak állítva: ExAllocatePool2 és ExAllocatePool3.
A wdk-deprecated-apiCodeQL lekérdezés megkeresi az összes elavult API-példányt, amelyet az illesztőprogram nem hívhat meg. Az elavult API-k a következők:
A Windows 10-nél későbbi, 2004-es verziójú Windows-verziók illesztőprogram-frissítései
Ha olyan illesztőprogramot készít, amely a Windows 10 2004-es és újabb verzióit célozza meg, használja helyette az ExAllocatePool2 és az ExAllocatePool3 helyettesítő API-kat.
| Régi API | Új API |
|---|---|
| ExAllocatePool | ExAllocatePool2 |
| ExAllocatePoolWithTag | ExAllocatePool2 |
| ExAllocatePoolWithQuota | ExAllocatePool2 |
| ExAllocatePoolWithQuotaTag | ExAllocatePool2 |
| ExAllocatePoolWithTagPriority | ExAllocatePool3 |
Az új API-k alapértelmezés szerint nullára állítják a memóriakészletek foglalását, hogy elkerüljék a memória feltárásának esetleges hibáit.
ExAllocatePoolWithTag
// Old code
PVOID Allocation = ExAllocatePoolWithTag(PagedPool, 100, 'abcd');
RtlZeroMemory(Allocation, 100);
// New code
PVOID Allocation = ExAllocatePool2(POOL_FLAG_PAGED, 100, 'abcd');
A régi készletfoglalási API-k elfogadnak egy POOL_TYPE argumentumot, de az új foglalási API-k elfogadnak egy POOL_FLAGS argumentumot. Frissítse a társított kódot az új POOL_FLAGS argumentum használatára.
ExAllocatePoolWithQuota/ExAllocatePoolWithQuotaTag
Az új függvény alapértelmezés szerint NULL értéket ad vissza a foglalási hiba esetén. Ahhoz, hogy a kiosztó hiba esetén kivételt dobhasson, az ExAllocatePool2-ben ismertetett módon a POOL_FLAG_RAISE_ON_FAILURE jelzőt át kell adni.
// Old code
PVOID Allocation = ExAllocatePoolWithQuotaTag(PagedPool | POOL_QUOTA_FAIL_INSTEAD_OF_RAISE, 100, 'abcd');
RtlZeroMemory(Allocation, 100);
// New code
PVOID Allocation = ExAllocatePool2(POOL_FLAG_PAGED | POOL_FLAG_USE_QUOTA, 100, 'abcd');
ExAllocatePoolWithTagPriority
// Old code
PVOID Allocation = ExAllocatePoolWithTagPriority(PagedPool, 100, 'abcd', HighPoolPriority);
RtlZeroMemory(Allocation, 100);
// New code
POOL_EXTENDED_PARAMETER params = {0};
params.Type = PoolExtendedParameterPriority;
params.Priority = HighPoolPriority;
PVOID Allocation = ExAllocatePool3(POOL_FLAG_PAGED, 100, 'abcd', ¶ms, 1);
A Windows 10-nél korábbi, 2004-es verziójú Windows-verziók illesztőprogram-frissítései
Ha olyan illesztőprogramot hoz létre, amely a Windows 10 2004-es verziója előtti Windows-verziót célozza meg, az alábbi kényszerítő beágyazott burkolófüggvényeket kell használnia.
A driver inicializálása során, a készlet foglalási függvények meghívása előtt, meg kell határoznia a #define POOL_ZERO_DOWN_LEVEL_SUPPORT és meg kell hívnia az ExInitializeDriverRuntime-t.
Helyileg definiált beágyazott függvények
PVOID
NTAPI
ExAllocatePoolZero (
_In_ __drv_strictTypeMatch(__drv_typeExpr) POOL_TYPE PoolType,
_In_ SIZE_T NumberOfBytes,
_In_ ULONG Tag
)
PVOID
NTAPI
ExAllocatePoolQuotaZero (
_In_ __drv_strictTypeMatch(__drv_typeExpr) POOL_TYPE PoolType,
_In_ SIZE_T NumberOfBytes,
_In_ ULONG Tag
)
PVOID
NTAPI
ExAllocatePoolPriorityZero (
_In_ __drv_strictTypeMatch(__drv_typeExpr) POOL_TYPE PoolType,
_In_ SIZE_T NumberOfBytes,
_In_ ULONG Tag,
_In_ EX_POOL_PRIORITY Priority
)
Tekintse meg a legújabb wdm.h fejlécet a kódburkolók implementációs kódjának megtekintéséhez. Ez például az ExAllocatePoolPriorityZero implementációja, amely az RtlZeroMemory használatát mutatja.
{
PVOID Allocation;
Allocation = ExAllocatePoolWithTagPriority((POOL_TYPE) (PoolType | POOL_ZERO_ALLOCATION),
NumberOfBytes,
Tag,
Priority);
#if defined(POOL_ZERO_DOWN_LEVEL_SUPPORT)
if ((!ExPoolZeroingNativelySupported) && (Allocation != NULL)) {
RtlZeroMemory(Allocation, NumberOfBytes);
}
#endif
return Allocation;
}
Régi API-k leképezése új API-khoz
| Régi API | Új API |
|---|---|
| ExAllocatePool | ExAllocatePoolZero |
| ExAllocatePoolWithTag | ExAllocatePoolZero |
| ExAllocatePoolWithQuota | ExAllocatePoolQuotaZero |
| ExAllocatePoolWithQuotaTag | ExAllocatePoolQuotaZero |
| ExAllocatePoolWithTagPriority | ExAllocatePoolPriorityZero |
példa
// Old code
PVOID Allocation = ExAllocatePoolWithTag(PagedPool, 100, 'abcd');
// New code
// Before headers are pulled in (or compiler defined)
#define POOL_ZERO_DOWN_LEVEL_SUPPORT
// Once during driver initialization
// Argument can be any value
ExInitializeDriverRuntime(0);
// Replacement for each pool allocation
PVOID Allocation = ExAllocatePoolZero(PagedPool, 100, 'abcd');
További részletek
Ez a lekérdezés a Microsoft GitHub CodeQL-adattárban található. A CodeQL és a Static Tools emblématesztelési oldalán részletesen tájékozódhat arról, hogy a Windows-illesztőprogram-fejlesztők hogyan tölthetik le és futtathatják a CodeQL-t.