zoukankan      html  css  js  c++  java
  • win32-SetupDiSetClassInstallParamsW的使用

    SetupDiSetClassInstallParams函数一般是用来禁用/启用某个设备

    比如我们可以禁用网络适配器

    /* for Devpkey */
    #define INITGUID
    
    /* dependencies */
    #pragma comment (lib, "SetupAPI")
    #include <windows.h>
    #include <SetupAPI.h>
    #include <Devpkey.h>
    #include <iostream>
    #include <stdio.h>
    #include <devguid.h>
    
    using namespace std;
    
    VOID SetDeviceState(LPCWSTR lpszHardwareId, DWORD dwState)
    {
        HDEVINFO devInfo;
    
        if (devInfo = SetupDiGetClassDevsW(NULL, NULL, NULL, DIGCF_ALLCLASSES))
        {
            DWORD dwBuffersize;
            SP_DEVINFO_DATA devData;
            DEVPROPTYPE devProptype;
            LPWSTR devBuffer;
    
            devData.cbSize = sizeof(SP_DEVINFO_DATA);
            for (int i = 0; ; i++)
            {
                SetupDiEnumDeviceInfo(devInfo, i, &devData);
                if (GetLastError() == ERROR_NO_MORE_ITEMS) break;
    
                /* calculate buffer size */
                SetupDiGetDevicePropertyW(devInfo, &devData, &DEVPKEY_Device_HardwareIds, &devProptype, NULL, 0, &dwBuffersize, 0);
    
                /* real call */
                if (devBuffer = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwBuffersize))
                {
                    SetupDiGetDevicePropertyW(devInfo, &devData, &DEVPKEY_Device_HardwareIds, &devProptype, (PBYTE)devBuffer, dwBuffersize, NULL, 0);
    //                cout << devBuffer << endl;
    //                printf("%s
    ", devBuffer);
                    if (lstrcmpW(devBuffer, lpszHardwareId) == 0)
                    {
                        /* matched */
                        SP_CLASSINSTALL_HEADER ciHeader;
                        ciHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
                        ciHeader.InstallFunction = DIF_PROPERTYCHANGE;
    
                        SP_PROPCHANGE_PARAMS pcParams;
                        pcParams.ClassInstallHeader = ciHeader;
                        pcParams.StateChange = dwState;
                        pcParams.Scope = DICS_FLAG_GLOBAL;
                        pcParams.HwProfile = 0;
    
                        BOOL FLAG = SetupDiSetClassInstallParamsW(devInfo, &devData, (PSP_CLASSINSTALL_HEADER)&pcParams, sizeof(SP_PROPCHANGE_PARAMS));
                        SetupDiChangeState(devInfo, &devData);
                    }
                    HeapFree(GetProcessHeap(), 0, devBuffer);
                }
            }
            SetupDiDestroyDeviceInfoList(devInfo);
        }
    }
    
    
    int main()
    {
        SetDeviceState(L"PCI\VEN_8086&DEV_15E3&SUBSYS_07A11028&REV_00", DICS_DISABLE); 

    return 0;
    }

     我们可以从设备管理器中查看硬件的ID

  • 相关阅读:
    taro clock组件
    创建taro项目
    ts声明各种变量类型
    ts的数组/元组/type/interface
    使用styled-components初始化css
    Oracle profile含义、修改、新增
    JDK bin指令
    Nginx 设置忽略favicon.ico文件的错误日志
    nginx: [error] CreateFile() "D: ginx-1.14.2/logs/nginx.pid" failed 解决办法
    Nginx Windows详细安装部署教程
  • 原文地址:https://www.cnblogs.com/strive-sun/p/12893190.html
Copyright © 2011-2022 走看看