FilterConfig* pFilterConfig = NULL; //定义并初始化结构体指针
//分配内存空间
pFilterConfig = ExAllocatePool2(POOL_FLAG_NON_PAGED, sizeof(FilterConfig), 'pFC');
//结构体内的data成员分配内存空间
pFilterConfig->data = ExAllocatePool2(POOL_FLAG_NON_PAGED, InputBufferLength, 'pFCD');
//拷贝数据
RtlCopyMemory(pFilterConfig->data, InputBuffer, InputBufferLength);
//FilterConfig *pFilterConfig = NULL;
/*
本人小白,刚刚接触驱动编程。
这样给结构体及结构体成员分配内存并把输入的的数据拷贝到相应的内存后,再把该结构体插入到双链表中。
调试没有出现问题,但把驱动安装后会出现无法使用的情况。
把分割线以上的代码注释掉能正常运行。
代码的位置是在DriverDeviceIoControl函数,自定义的外部接口中。
*/
//--------------------------------------------------------------
FILTER_ACQUIRE_LOCK(&filterConfigLock, bFalse);
InsertHeadList(&filterConfig, &pFilterConfig->listEntry);
FILTER_RELEASE_LOCK(&filterConfigLock, bFalse);
写驱动程序,原则性需要很高的!驱动里你内存申请是否成功,就应该判断后再访问!它并不像用户层可执行程序,系统碰到不能访问的内存会给你异常提示,内核驱动是直接蓝屏的!