jeosph
驱动中牛
驱动中牛
  • 注册日期2001-04-19
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:3039回复:4

NdisOpenFile的用法?

楼主#
更多 发布于:2002-01-25 15:14
我的程序中要用到NdisOpenFile
用法如下:
 unicode_string FilePathName=
           NDIS_STRING_CONSTANT(\"\\\\??\\\\c:\\\\Code.bin\");
NdisOpenFile(&Status,
             &FileHandle,
             &FileLength,
             &FilePathName
             ....);

每次都是status=file_not_found 实在不知道是为什么?
哪位高人用过,指点一二,不胜感激!!!


jzzyj
驱动牛犊
驱动牛犊
  • 注册日期2001-12-15
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于: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);//关闭文件


 

孤狼
jzzyj
驱动牛犊
驱动牛犊
  • 注册日期2001-12-15
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于: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);//关闭文件
         }

 

孤狼
jeosph
驱动中牛
驱动中牛
  • 注册日期2001-04-19
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-01-25 19:54
谢谢你的答复。
按照你的说法,我将code.bin事先拷贝到winnt\\system32\\drivers\\
下,因为2000下的驱动程序也将在这个目录下。
可是我试验的结果仍旧是:file_not_found

我彻底晕了!!
dazzy
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-08-12
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望10点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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\")相连。
游客

返回顶部