动态申请和释放
-
ExFree**后,需要对指针置NULL,这样再释放之前可以判断是否为NULL来防止重复释放,否则重复释放会蓝屏
-
若调用了RtlAnsiStringToUnicodeString,需要使用RtlFreeUnicodeString释放
-
若为一段指针动态申请了一段内存,不要再直接让它指向常量,而应该使用RtlStringCbCopy类函数进行复制。否则后期对常量指针释放会导致蓝屏。
-
特别注意在申请和释放之间,若存在break或return需要特别注意是不是会跳过释放语句。若会跳过,则应增加释放语句。如
do{
UNICODE_STRING uni_string;
ExAllocatePoolWithTag(&uni_string,1024,TAG);/*申请内存*/
if(**)
{
//若进入这个语句,则会跳出循环而未内存释放,因此应在这里加入
//ExFreePoolWithTag(&uni_string,TAG);
break