SetupDiGetDeviceProperty (setupapi)
Last changed: -109.42.113.142

.
Summary
The SetupDiGetDeviceProperty function retrieves a device instance property.

Vista and Windows 7 only. DEVPROPKEY

C# Signature:

    [DllImport("setupapi.dll", SetLastError = true)]
    static extern unsafe bool SetupDiGetDevicePropertyW(
        IntPtr deviceInfoSet,
        ref SP_DEVINFO_DATA DeviceInfoData,
        ref DEVPROPKEY propertyKey,
        out UInt64 propertyType, // or Uint32 ?
        IntPtr propertyBuffer, // or byte[]
        Int32 propertyBufferSize,
        out int requiredSize, // <----
        UInt32 flags);

    [DllImport("setupapi.dll", SetLastError = true)]
    static extern unsafe bool SetupDiGetDevicePropertyW(
        IntPtr deviceInfoSet,
        ref SP_DEVINFO_DATA DeviceInfoData,
        ref DEVPROPKEY propertyKey,
        out UInt64 propertyType, // or Uint32 ?
        IntPtr propertyBuffer, // or byte[]
        Int32 propertyBufferSize,
        int* requiredSize, <----
        UInt32 flags);

    static void DEFINE_DEVPROPKEY(out DEVPROPKEY key, UInt32 l, UInt16 w1, UInt16 w2, Byte b1, Byte b2, Byte b3, Byte b4, Byte b5, Byte b6, Byte b7, Byte b8, DEVPROPID pid)
    {
        key.fmtid = new Guid(l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8);
        key.pid = pid;
    }

VB Signature:

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

User-Defined Types:

    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct DEVPROPKEY
    {
        public DEVPROPGUID fmtid;
        public DEVPROPID pid;
    }

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Property Keys are defined in devpkey.h (https://github.com/tpn/winsdk-10/blob/master/Include/10.0.16299.0/shared/devpkey.h)

Sample Code:

http://stackoverflow.com/questions/4097000/how-do-i-disable-a-system-device-programatically

Documentation