tosiz
驱动牛犊
驱动牛犊
  • 注册日期2007-03-03
  • 最后登录2010-07-10
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望21点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1230回复:0

USB过滤驱动安装问题

楼主#
更多 发布于:2007-03-27 20:09
无意中 获得 USB 过滤驱动一份
有禁止,启用,只读USB的功能

我如何在我的程序中使用这个第三方过滤驱动?

目前个人解决办法:
1.参照了 武安河 大侠的过滤驱动开发,里面有介绍如何使用第三方过滤驱动的
我依样画瓢,可是再 StartService时候却总是失败
代码如下:

   // 获取驱动驱动程序ProcDrv.sys的完整目录
   // 注意,您应该将ProcDrv工程编译产生的ProcDrv.sys文件复制到当前工程目录下
   char szDriverPath[256];
   char szLinkName[] = "UsbCtrl";
//    char* p;
//    ::GetFullPathName("usbfilter.sys", 256, szDriverPath, &p);
   //
//    ::GetWindowsDirectory(szDriverPath,256);
  
//    PathAppend(szDriverPath,"SYSTEM32\\Drivers");
//    PathAppend(szDriverPath,"usbfilt.sys");
   typedef void (*_Install)();
   HINSTANCE hLib=LoadLibrary("USBCtrlDll.dll");

   _Install Install=(_Install)GetProcAddress(hLib,"Install");

  

   Install();
   FreeLibrary(hLib);


   // 打开SCM管理器
   m_hSCM = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
   if(m_hSCM == NULL)
   {
       printf(" 打开服务控制管理器失败,可能是因为您不拥有Administrator权限\n");
       ::CloseServiceHandle(m_hSCM);
       return;
   }

   // 创建或打开服务
   m_hService = ::CreateService(m_hSCM, szLinkName, szLinkName, SERVICE_ALL_ACCESS,
               SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
               szDriverPath, NULL, 0, NULL, NULL, NULL);
   if(m_hService == NULL)
   {
       int nError = ::GetLastError();
       if(nError == ERROR_SERVICE_EXISTS || nError == ERROR_SERVICE_MARKED_FOR_DELETE)
       {
           m_hService = ::OpenService(m_hSCM, szLinkName, SERVICE_ALL_ACCESS);
       }
   }
   if(m_hService == NULL)
   {
       printf(" 创建服务出错!\n");
       ::DeleteService(m_hService);
       ::CloseServiceHandle(m_hService);
       ::CloseServiceHandle(m_hSCM);

       return;
   }
   // 启动服务
   if(!::StartService(m_hService, 0, NULL)) // 这里调用DriverEntry例程
   {
       int nError = ::GetLastError();
       if(nError != ERROR_SERVICE_ALREADY_RUNNING)
       {    
           printf(" 启动服务出错!%d \n", nError);
           ::DeleteService(m_hService);
           ::CloseServiceHandle(m_hService);
           ::CloseServiceHandle(m_hSCM);
           return;
       }
   }


   // 打开到驱动程序所控制设备的句柄
   char sz[256] = "";
   wsprintf(sz, "\\\\.\\%s", szLinkName);
   m_hDriver = ::CreateFile(sz,
       GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
   if(m_hDriver == INVALID_HANDLE_VALUE)
   {    
       printf(" 打开设备失败! \n");
       ::DeleteService(m_hService);
       ::CloseServiceHandle(m_hService);
       ::CloseServiceHandle(m_hSCM);
       return;
   }

这是,我用来安装驱动的代码!其中的USBCtrlDll.dll是 我根据 ds32生成的WDM 过滤驱动而
得来,用来安装 过滤驱动使用的Dll!武安河 大侠 那本书,也是如此安装第三方驱动的


2.使用ddk改写的 Inf文件安装,发现效果没有,用 Symbolic Link Viewer 查看,发现没有
安装成功的 符号连接



请大侠们 针对如此问题,帮忙看下问题的所在,给给建议!不胜感激!
希望给出详细解答!
游客

返回顶部