private string GetPropertString(UInt32 deviceInstance, ConfigManagerAPI.DeviceInfo devPropInfo) { string property = ""; UInt32 propertyType = 0; IntPtr buf = new IntPtr(); UInt32 bufSize = 0; uint result = ConfigManagerAPI.CM_Get_DevNode_PropertyW(deviceInstance, ref devPropInfo, ref propertyType, buf, ref bufSize, 0); if (result == SMALL_BAFFER && propertyType == STRING_TYPE) { buf = Marshal.AllocHGlobal((int)bufSize * 2); result = ConfigManagerAPI.CM_Get_DevNode_PropertyW(deviceInstance, ref devPropInfo, ref propertyType, buf, ref bufSize, 0); if (result == 0) { property = ReadNullTerminatedStringFromBuffer(buf, bufSize); } Marshal.FreeHGlobal(buf); } return(property); }
private List <string> GetPropertStringList(UInt32 deviceInstance, ConfigManagerAPI.DeviceInfo devPropInfo) { List <string> property = new List <string>(); UInt32 propertyType = 0; IntPtr buf = new IntPtr(); UInt32 bufSize = 0; uint result = ConfigManagerAPI.CM_Get_DevNode_PropertyW(deviceInstance, ref devPropInfo, ref propertyType, buf, ref bufSize, 0); if (result == SMALL_BAFFER && propertyType == (STRING_TYPE + LIST_TYPE)) { buf = Marshal.AllocHGlobal((int)bufSize * 2); result = ConfigManagerAPI.CM_Get_DevNode_PropertyW(deviceInstance, ref devPropInfo, ref propertyType, buf, ref bufSize, 0); if (result == 0) { IntPtr pointer = buf; while (bufSize > 0) { string element = ReadNullTerminatedStringFromBuffer(pointer, bufSize); if (String.IsNullOrEmpty(element)) { break; } int offset = element.Length + 1; offset *= 2; property.Add(element); pointer = IntPtr.Add(pointer, offset); } } Marshal.FreeHGlobal(buf); } return(property); }