阅读:1217回复:0
USB过滤驱动安装问题
无意中 获得 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 查看,发现没有 安装成功的 符号连接 请大侠们 针对如此问题,帮忙看下问题的所在,给给建议!不胜感激! 希望给出详细解答! |
|