如何实现禁用usb口啊?

解决方案 »

  1.   

    给你一个思路:编写一过滤型驱动,拦截USB相关的IRP即可。
      

  2.   

    USB过滤驱动程序比较可靠一点
    我也在研究这些方面的问题,学习学习顶一下,不要沉底了~
      

  3.   

    设备管理器里面直接禁用,方便有简单,不过如果是有USB鼠标或键盘的话就不好办了。如果要用写代码的方法来时间的话,我看到过USB设备有I/O,只读,只写,可读可写4个属性不过不知道怎么用
      

  4.   

    其实最简单的方法就是在程序里占用USBSTORE的驱动文件,U盘插进去以后,系统就会找不到驱动。
      

  5.   

    在网上看到的一个禁用usb的程序,我已经改了一下,但是Link还有问题,大家一起帮忙看看!// 必要的头文件和要链接的LIB文件#include<windows.h>
    #include<tchar.h>
    #include<objbase.h>
    #include <initguid.h>
    #include<setupapi.h>
    #include<shlwapi.h>#pragma comment(lib, "setupapi.lib")
    #pragma comment(lib, "shlwapi.lib")
    //#pragma comment(lib, "hid.lib")// device information set(我把它译为设备信息集)
    HDEVINFO hDevInfo = NULL;
    /*typedef struct _SP_PROPCHANGE_PARAMS {
    SP_CLASSINSTALL_HEADER ClassInstallHeader;
    DWORD StateChange;
    DWORD Scope;
    DWORD HwProfile;
    } SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS;//*///出错信息void FormatMSG(DWORD dwError,LPTSTR *lpszMsg)
    {
    BOOL bOK=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|
    FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,dwError,
    MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),
    (LPTSTR)lpszMsg,0,NULL);
    if(!bOK)
    {
    HMODULE hDll=LoadLibraryEx(_T("netmsg.dll"),NULL,DONT_RESOLVE_DLL_REFERENCES);
    if(hDll=NULL)
    {
    FormatMessage(FORMAT_MESSAGE_FROM_HMODULE|
    FORMAT_MESSAGE_FROM_SYSTEM,hDll,dwError,
    MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),
    (LPTSTR)lpszMsg,0,NULL);
    FreeLibrary(hDll);
    }
    }
    }BOOL ChangeStatus(DWORD NewStatus,DWORD SelectedItem,HDEVINFO hDevInfo)
    {
    LPTSTR lpszMsg=NULL;
    HCURSOR hCursor=NULL;
    try
    {
    SP_PROPCHANGE_PARAMS PropChangeParams={sizeof(SP_CLASSINSTALL_HEADER)};
    SP_DEVINFO_DATA DeviceInfoData={sizeof(SP_DEVINFO_DATA)};
    hCursor=SetCursor(LoadCursor(NULL,IDC_WAIT));
    //GET A handle to the selected item
    if (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }//set the PropChangeParams structure
    PropChangeParams.ClassInstallHeader.InstallFunction=DIF_PROPERTYCHANGE;
    PropChangeParams.Scope=DICS_FLAG_GLOBAL;
    PropChangeParams.StateChange=NewStatus;
    if(!SetupDiSetClassInstallParams(hDevInfo,&DeviceInfoData,
    (SP_CLASSINSTALL_HEADER*)&PropChangeParams,
    sizeof(PropChangeParams)))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    //call the ClassInstaller and perform the change
    if(!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&DeviceInfoData))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    SetCursor(hCursor);
    return TRUE;
    }
    catch(TCHAR *pszError)
    {
    SetCursor(hCursor);
    ::MessageBox(NULL,pszError,_T("提示"),MB_OK);
    if(lpszMsg!=NULL)
    {
    LocalFree((HLOCAL)lpszMsg);
    }
    return FALSE;
    }
    }
    // 这些设备的启用和禁用主要有此函数实现
    // 参数说明,nStatus 可取3个值,-1 :啥也不做
    // 0 禁用设备,1启用设备。
    // nIndex用于控制是对光驱,软驱还是对USB启用或禁用
    // 也是可取3个值,0 代表软驱,1 代表光驱
    // 2 代表USB
    // 譬如要对光驱实现禁用,可以这样调用此函数
    // ControlDisk(0, 1);BOOL ControlDisk(int nStatus,int nIndex)
    {
    if(nStatus==-1)
    {
    return FALSE;
    }
    LPTSTR lpszMsg=NULL;
    try
    {
    TCHAR *GUIDString=NULL;
    GUID guid;
    ZeroMemory(&guid,sizeof(GUID));
    switch(nIndex)
    {
    case 0://0代表软驱
    GUIDString=_T("4D36E980-E325-11CE-BFC1-08002BE10318");
    UuidFromString((unsigned char *)GUIDString,&guid);
    break;
    case 1://1代表光驱
    GUIDString=_T("4D36E965-E325-11CE-BFC1-08002BE10318");
    UuidFromString((unsigned char *)GUIDString,&guid);
    break;
    case 2://2代表USB
    GUIDString=_T("36FC9E60-C465-11CF-8056-444553540000");
    UuidFromString((unsigned char *)GUIDString,&guid);
    break;
    }
    hDevInfo=SetupDiGetClassDevs(&guid,NULL,NULL,DIGCF_PRESENT);
    if(INVALID_HANDLE_VALUE==hDevInfo)
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    DWORD i;SP_DEVINFO_DATA DeviceInfoData;
    ZeroMemory(&DeviceInfoData,sizeof(SP_DEVINFO_DATA));
    DeviceInfoData.cbSize=sizeof(SP_DEVINFO_DATA);for(i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);++i)
    {
    if(nStatus==1)
    {
    ChangeStatus(DICS_ENABLE,i,hDevInfo);
    }
    else if(nStatus==0)
    {
    ChangeStatus(DICS_DISABLE,i,hDevInfo);
    }
    }
    //释放device information set
    return SetupDiDestroyDeviceInfoList(hDevInfo);
    }
    catch(TCHAR *pszError)
    {
    ::MessageBox(NULL,pszError,_T("提示"),MB_OK);
    if(lpszMsg!=NULL)
    {
    LocalFree((HLOCAL)lpszMsg);
    }
    return FALSE;
    }
    return FALSE;
    }void main()
    {
    ControlDisk(0,2);
    }
      

  6.   

    http://www.yeahware.com/download/eject.zip 这个是DELPHI的代码 自己看看吧