robur
驱动牛犊
驱动牛犊
  • 注册日期2007-12-03
  • 最后登录2009-03-05
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1599回复:1

请教一个NdisMapFile函数的问题

楼主#
更多 发布于:2008-06-14 19:32
最近在完善一个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!...");
}
robur
驱动牛犊
驱动牛犊
  • 注册日期2007-12-03
  • 最后登录2009-03-05
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-06-15 22:08
已经解决鸟。。。
filebuffer用PUCHAR类型。不用分配和零初始化内存。
下面这么写:
NdisMapFile(&filestatus, &filebuffer, filehandle); //将打开文件映射到内存
游客

返回顶部