阅读:3039回复:4
NdisOpenFile的用法?
我的程序中要用到NdisOpenFile
用法如下: unicode_string FilePathName= NDIS_STRING_CONSTANT(\"\\\\??\\\\c:\\\\Code.bin\"); NdisOpenFile(&Status, &FileHandle, &FileLength, &FilePathName ....); 每次都是status=file_not_found 实在不知道是为什么? 哪位高人用过,指点一二,不胜感激!!! |
|
沙发#
发布于:2002-01-25 16:21
jeosph
你好! 我正在做的项目也用到了NdisOpenFile 函数,我们正好可以交流交流;我试过好像只有将要打开文件的和驱动程序一起拷贝到\\windows\\system目录下才能打开文件,但我在使用NdismapFile时出了问题,我估计是我使用指针有问题,最初的情况是读出的东西不对,后来我参考了别人的用法,编译通过,但装到win98下,每次开机总是死机,请你和各位高手指点一二.. 代码如下: 变量声明 char *setting; int j,K; NDIS_STRING filename=NDIS_STRING_CONST(\"fp.sys\"); //指定要打开的文件 NDIS_STATUS filestatus; NDIS_HANDLE filehandle; NDIS_PHYSICAL_ADDRESS MinusOne = NDIS_PHYSICAL_ADDRESS_CONST(-1,-1); UINT filelength; setting=NULL; NdisOpenFile(&filestatus,&filehandle,&filelength,&filename, MinusOne);//打开文件 if ( filestatus == NDIS_STATUS_SUCCESS) //打开文件成功 { NdisMapFile(&filestatus,(PVOID *)setting,filehandle);//将打开文件映射到内存,内存基地值给setting if ( filestatus == NDIS_STATUS_SUCCESS) //映射文件成功 { for (i=0;i<filelength;i++) //只要小于文件长度,循环 { if((*setting)&0x80)//如果当前字节最高位为1 { //处理数据 } setting++;//指向下一个字节 } NdisUnmapFile(filehandle);//取消文件映射 NdisCloseFile(filehandle);//关闭文件 |
|
|
板凳#
发布于:2002-01-25 16:22
jeosph
你好! 我正在做的项目也用到了NdisOpenFile 函数,我们正好可以交流交流;我试过好像只有将要打开文件的和驱动程序一起拷贝到\\windows\\system目录下才能打开文件,但我在使用NdismapFile时出了问题,我估计是我使用指针有问题,最初的情况是读出的东西不对,后来我参考了别人的用法,编译通过,但装到win98下,每次开机总是死机,请你和各位高手指点一二.. 代码如下: 变量声明 char *setting; int j,K; NDIS_STRING filename=NDIS_STRING_CONST(\"fp.sys\"); //指定要打开的文件 NDIS_STATUS filestatus; NDIS_HANDLE filehandle; NDIS_PHYSICAL_ADDRESS MinusOne = NDIS_PHYSICAL_ADDRESS_CONST(-1,-1); UINT filelength; setting=NULL; NdisOpenFile(&filestatus,&filehandle,&filelength,&filename, MinusOne);//打开文件 if ( filestatus == NDIS_STATUS_SUCCESS) //打开文件成功 { NdisMapFile(&filestatus,(PVOID *)setting,filehandle);//将打开文件映射到内存,内存基地值给setting if ( filestatus == NDIS_STATUS_SUCCESS) //映射文件成功 { for (i=0;i<filelength;i++) //只要小于文件长度,循环 { if((*setting)&0x80)//如果当前字节最高位为1 { //处理数据 } setting++;//指向下一个字节 } NdisUnmapFile(filehandle);//取消文件映射 NdisCloseFile(filehandle);//关闭文件 } |
|
|
地板#
发布于:2002-01-25 19:54
谢谢你的答复。
按照你的说法,我将code.bin事先拷贝到winnt\\system32\\drivers\\ 下,因为2000下的驱动程序也将在这个目录下。 可是我试验的结果仍旧是:file_not_found 我彻底晕了!! |
|
地下室#
发布于:2002-01-26 12:20
NdisOpenFile()函数的底层调用了ZwCreateFile(), ZwQueryInformationFile(),在调用ZwCreateFile()前,会将NdisOpenFile()传递的文件名加上一个路径前缀为:\\SystemRoot\\system32\\drivers\\.
这样,你就知道文件应该放在那儿了, 在使用中,你只需定义unicode_string FilePathName= NDIS_STRING_CONSTANT(\"Code.bin\"); 不需要加上\\\\??\\\\c:\\\\, 当然,你可以在drivers下建立一个目录(比如myndis),将此文件拷贝在myndis目录下,那么,文件名为(\"myndis\\\\Code.bin\")。 NdisOpenFile()调用了RtlAppendUnicodeStringToString()将NDIS_STRING_CONST(”\\SystemRoot\\system32\\drivers\\“)和 NDIS_STRING_CONST(\"Code.bin\")相连。 |
|