阅读:1598回复:1
请教一个NdisMapFile函数的问题
最近在完善一个NDIS驱动,在Miniport初始化的时候,希望载入一个配置文件,读取其中的内容。
现在已经参照此坛上某篇帖子,写好了NdisOpenFile和NdisMapFile,两个函数执行后均能返回NDIS_STATUS_SUCCESS。 但是问题出现在NdisMapFile后面,该函数把文件内容装载到filebuffer中,但是一读取filebuffer,就会蓝屏,提示BAD_POOL_CALLER。文件的长度只有23字节。 请教各位高手,如何才能读取文件的内容并处理呢??已经实验了好多办法,百思不得其解啊! 多谢各位了! NDIS_STATUS filestatus; //状态代码 NDIS_HANDLE filehandle; //文件句柄 UINT filelength; //文件长度 NDIS_STRING filename; //文件名 NDIS_PHYSICAL_ADDRESS MinusOne = NDIS_PHYSICAL_ADDRESS_CONST(-1,-1); char *filebuffer; //这里用PUCHAR类型也尝试过了,没有改观。 NdisInitializeString(&filename, "Filter.txt"); filebuffer=NULL; NdisOpenFile(&filestatus,&filehandle,&filelength,&filename, MinusOne); //打开文件 if (filestatus == NDIS_STATUS_SUCCESS) //如果文件打开成功 { DbgPrint("NdisOpenFile Success!..."); filestatus=NdisAllocateMemoryWithTag(&filebuffer, 2000, 'NAMW'); //分配内存 if (filestatus!=NDIS_STATUS_SUCCESS) { DbgPrint("Allocate Memory Fail!"); } if (filebuffer == NULL) { DbgPrint("filestatus==NULL"); } NdisZeroMemory(filebuffer, 2000); //零初始化内存 NdisMapFile(&filestatus, (PVOID *)filebuffer, filehandle); //将打开文件映射到内存 if (filestatus == NDIS_STATUS_SUCCESS && filebuffer != NULL) //映射成功 { DbgPrint("NdisMapFile Success!..."); //在这里无法读取filebuffer NdisUnmapFile(filehandle); //取消文件映射 } else { DbgPrint("NdisMapFile Fail!..."); } NdisFreeMemory(filebuffer, 2000, 0); NdisCloseFile(filehandle); } else { DbgPrint("NdisOpenFile Fail!..."); } |
|
沙发#
发布于:2008-06-15 22:08
已经解决鸟。。。
filebuffer用PUCHAR类型。不用分配和零初始化内存。 下面这么写: NdisMapFile(&filestatus, &filebuffer, filehandle); //将打开文件映射到内存 |
|