Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

SetupDiSetClassInstallParam (setupapi)
 
.
Summary
The SetupDiSetClassInstallParams function sets or clears class install parameters for a device information set or a particular device information element.

C# Signature:

[DllImport("setupapi.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool SetupDiSetClassInstallParams(IntPtr DeviceInfoSet, ref SP_DEVINFO_DATA DeviceInfoData, IntPtr ClassInstallParams, int ClassInstallParamsSize);

VB Signature:

Declare Function SetupDiSetClassInstallParams Lib "setupapi.dll" (TODO) As TODO

User-Defined Types:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct SP_DEVINFO_DATA
{
    public int cbSize;
    public Guid ClassGuid;
    public uint DevInst;
    public IntPtr Reserved;
}

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

    //
    // http://www.codeproject.com/KB/cs/HardwareHelper.aspx
    //
    //Name:     ChangeIt
    //Inputs:   pointer to hdev, SP_DEV_INFO, bool
    //Outputs:  bool
    //Errors:   This method may throw the following exceptions.
    //      Unable to change device state!
    //Remarks:  Attempts to enable or disable a device driver.  
    //      IMPORTANT NOTE!!!   This code currently does not check the reboot flag.
    //      =================   Some devices require you reboot the OS for the change
    //                  to take affect.  If this describes your device, you
    //                  will need to look at the SDK call:
    //                  SetupDiGetDeviceInstallParams.  You can call it
    //                  directly after ChangeIt to see whether or not you need
    //                  to reboot the OS for you change to go into effect.
    private bool ChangeIt(IntPtr hDevInfo, Native.SP_DEVINFO_DATA devInfoData, bool bEnable)
    {
        try
        {
        //Marshalling vars
        int szOfPcp;
        IntPtr ptrToPcp;
        int szDevInfoData;
        IntPtr ptrToDevInfoData;

        Native.SP_PROPCHANGE_PARAMS pcp = new Native.SP_PROPCHANGE_PARAMS();
        if (bEnable)
        {
            pcp.ClassInstallHeader.cbSize = Marshal.SizeOf(typeof(Native.SP_CLASSINSTALL_HEADER));
            pcp.ClassInstallHeader.InstallFunction = Native.DIF_PROPERTYCHANGE;
            pcp.StateChange = Native.DICS_ENABLE;
            pcp.Scope = Native.DICS_FLAG_GLOBAL;
            pcp.HwProfile = 0;

            //Marshal the params
            szOfPcp = Marshal.SizeOf(pcp);
            ptrToPcp = Marshal.AllocHGlobal(szOfPcp);
            Marshal.StructureToPtr(pcp, ptrToPcp, true);
            szDevInfoData = Marshal.SizeOf(devInfoData);
            ptrToDevInfoData = Marshal.AllocHGlobal(szDevInfoData);

            if (Native.SetupDiSetClassInstallParams(hDevInfo, ptrToDevInfoData, ptrToPcp, Marshal.SizeOf(typeof(Native.SP_PROPCHANGE_PARAMS))))
            {
            Native.SetupDiCallClassInstaller(Native.DIF_PROPERTYCHANGE, hDevInfo, ptrToDevInfoData);
            }
            pcp.ClassInstallHeader.cbSize = Marshal.SizeOf(typeof(Native.SP_CLASSINSTALL_HEADER));
            pcp.ClassInstallHeader.InstallFunction = Native.DIF_PROPERTYCHANGE;
            pcp.StateChange = Native.DICS_ENABLE;
            pcp.Scope = Native.DICS_FLAG_CONFIGSPECIFIC;
            pcp.HwProfile = 0;
        }
        else
        {
            pcp.ClassInstallHeader.cbSize = Marshal.SizeOf(typeof(Native.SP_CLASSINSTALL_HEADER));
            pcp.ClassInstallHeader.InstallFunction = Native.DIF_PROPERTYCHANGE;
            pcp.StateChange = Native.DICS_DISABLE;
            pcp.Scope = Native.DICS_FLAG_CONFIGSPECIFIC;
            pcp.HwProfile = 0;
        }
        //Marshal the params
        szOfPcp = Marshal.SizeOf(pcp);
        ptrToPcp = Marshal.AllocHGlobal(szOfPcp);
        Marshal.StructureToPtr(pcp, ptrToPcp, true);
        szDevInfoData = Marshal.SizeOf(devInfoData);
        ptrToDevInfoData = Marshal.AllocHGlobal(szDevInfoData);
        Marshal.StructureToPtr(devInfoData, ptrToDevInfoData,true);

        bool rslt1 = Native.SetupDiSetClassInstallParams(hDevInfo, ptrToDevInfoData, ptrToPcp, Marshal.SizeOf(typeof(Native.SP_PROPCHANGE_PARAMS)));
        bool rstl2 = Native.SetupDiCallClassInstaller(Native.DIF_PROPERTYCHANGE, hDevInfo, ptrToDevInfoData);
        if ((!rslt1) || (!rstl2))
        {
            throw new Exception("Unable to change device state!");
            return false;
        }
        else
        {
            return true;
        }
        }
        catch (Exception ex)
        {
        return false;
        }
    }

Documentation

Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

 
Access PInvoke.net directly from VS:
Terms of Use
Edit This Page
Find References
Show Printable Version
Revisions