internal static T GetObjectPropertyInfo <T>( IntPtr driverStoreHandle, string objectName, DevPropKey propertyKey, DriverStoreObjectType objectType = DriverStoreObjectType.DriverPackage) { const int bufferSize = 2048; IntPtr propertyBufferPtr = Marshal.AllocHGlobal(bufferSize); if (NativeMethods.DriverStoreGetObjectProperty( driverStoreHandle, objectType, objectName, ref propertyKey, out DevPropType propertyType, propertyBufferPtr, bufferSize, out uint propertySize, DriverStoreSetObjectPropertyFlags.None)) { if (propertySize > 0) { return(DeviceHelper.ConvertPropToType <T>(propertyBufferPtr, propertyType)); } } Marshal.FreeHGlobal(propertyBufferPtr); return(default);
internal static extern bool DriverStoreEnumObjects( IntPtr hDriverStore, DriverStoreObjectType objectType, DRIVERSTORE_LOCK_LEVEL flags, EnumObjectsDelegate callbackRoutine, IntPtr lParam );
internal static extern bool DriverStoreSetObjectProperty( IntPtr driverStoreHandle, DriverStoreObjectType objectType, string objectName, ref DevPropKey propertyKey, DevPropType propertyType, ref uint propertyBuffer, int propertySize, DriverStoreSetObjectPropertyFlags flag);
internal static bool EnumDeviceObjects( IntPtr hDriverStore, DriverStoreObjectType ObjectType, string ObjectName, IntPtr lParam) { var devicesInfo = (List <DeviceDriverInfo>)GCHandle.FromIntPtr(lParam).Target; devicesInfo.Add(new DeviceDriverInfo( GetObjectPropertyInfo <string>(hDriverStore, ObjectName, DeviceHelper.DEVPKEY_Device_DriverDesc, ObjectType), GetObjectPropertyInfo <string>(hDriverStore, ObjectName, DeviceHelper.DEVPKEY_Device_DriverInfPath, ObjectType), GetObjectPropertyInfo <DateTime>(hDriverStore, ObjectName, DeviceHelper.DEVPKEY_Device_DriverDate, ObjectType), Version.Parse(GetObjectPropertyInfo <string>(hDriverStore, ObjectName, DeviceHelper.DEVPKEY_Device_DriverVersion, ObjectType)), GetObjectPropertyInfo <bool?>(hDriverStore, ObjectName, DeviceHelper.DEVPKEY_Device_IsPresent, ObjectType))); return(true); }