public static string DeviceAudit() { string text = ""; FileStream fileStream = new FileStream("DeviceAudit.txt", FileMode.Create, FileAccess.Write); StreamWriter streamWriter = new StreamWriter(fileStream); int num = 0; uint num2 = 0u; int num3 = Marshal.SizeOf(typeof(Rawinputdevicelist)); if (Win32.GetRawInputDeviceList(IntPtr.Zero, ref num2, (uint)num3) == 0u) { IntPtr intPtr = Marshal.AllocHGlobal((int)((long)num3 * (long)((ulong)num2))); Win32.GetRawInputDeviceList(intPtr, ref num2, (uint)num3); int num4 = 0; while ((long)num4 < (long)((ulong)num2)) { uint num5 = 0u; Rawinputdevicelist rawinputdevicelist = (Rawinputdevicelist)Marshal.PtrToStructure(new IntPtr(intPtr.ToInt64() + (long)(num3 * num4)), typeof(Rawinputdevicelist)); Win32.GetRawInputDeviceInfo(rawinputdevicelist.hDevice, RawInputDeviceInfo.RIDI_DEVICENAME, IntPtr.Zero, ref num5); if (num5 <= 0u) { streamWriter.WriteLine("pcbSize: " + num5); streamWriter.WriteLine(Marshal.GetLastWin32Error().ToString()); streamWriter.Flush(); streamWriter.Close(); fileStream.Close(); return(text); } uint num6 = (uint)Marshal.SizeOf(typeof(DeviceInfo)); DeviceInfo deviceInfo = new DeviceInfo { Size = Marshal.SizeOf(typeof(DeviceInfo)) }; if (Win32.GetRawInputDeviceInfo(rawinputdevicelist.hDevice, 536870923u, ref deviceInfo, ref num6) <= 0u) { streamWriter.WriteLine(Marshal.GetLastWin32Error()); streamWriter.Flush(); streamWriter.Close(); fileStream.Close(); return(text); } IntPtr intPtr2 = Marshal.AllocHGlobal((int)num5); Win32.GetRawInputDeviceInfo(rawinputdevicelist.hDevice, RawInputDeviceInfo.RIDI_DEVICENAME, intPtr2, ref num5); string device = Marshal.PtrToStringAnsi(intPtr2); if (rawinputdevicelist.dwType == 1u || rawinputdevicelist.dwType == 2u) { string deviceDescription = Win32.GetDeviceDescription(device); RawInputEvent rawInputEvent = new RawInputEvent { DeviceName = Marshal.PtrToStringAnsi(intPtr2), DeviceHandle = rawinputdevicelist.hDevice, DeviceType = Win32.GetDeviceType(rawinputdevicelist.dwType), Name = deviceDescription, Source = num++.ToString(CultureInfo.InvariantCulture) }; streamWriter.WriteLine(rawInputEvent.ToString()); streamWriter.WriteLine(deviceInfo.ToString()); streamWriter.WriteLine(deviceInfo.KeyboardInfo.ToString()); streamWriter.WriteLine(deviceInfo.HIDInfo.ToString()); streamWriter.WriteLine("========================================================================================================="); text += string.Format("{0}\r\n", rawInputEvent.ToString()); text += string.Format("{0}\r\n", deviceInfo.ToString()); text += string.Format("{0}\r\n", deviceInfo.KeyboardInfo.ToString()); text += string.Format("{0}\r\n", deviceInfo.HIDInfo.ToString()); text += "=========================================================================================================\r\n"; } Marshal.FreeHGlobal(intPtr2); num4++; } Marshal.FreeHGlobal(intPtr); streamWriter.Flush(); streamWriter.Close(); fileStream.Close(); return(text); } throw new Win32Exception(Marshal.GetLastWin32Error()); }
public static void DeviceAudit() { var file = new FileStream("DeviceAudit.txt", FileMode.Create, FileAccess.Write); var sw = new StreamWriter(file); var keyboardNumber = 0; uint deviceCount = 0; var dwSize = (Marshal.SizeOf(typeof(Rawinputdevicelist))); if (GetRawInputDeviceList(IntPtr.Zero, ref deviceCount, (uint)dwSize) == 0) { var pRawInputDeviceList = Marshal.AllocHGlobal((int)(dwSize * deviceCount)); GetRawInputDeviceList(pRawInputDeviceList, ref deviceCount, (uint)dwSize); for (var i = 0; i < deviceCount; i++) { uint pcbSize = 0; // On Window 8 64bit when compiling against .Net > 3.5 using .ToInt32 you will generate an arithmetic overflow. Leave as it is for 32bit/64bit applications var rid = (Rawinputdevicelist)Marshal.PtrToStructure(new IntPtr((pRawInputDeviceList.ToInt64() + (dwSize * i))), typeof(Rawinputdevicelist)); GetRawInputDeviceInfo(rid.hDevice, RawInputDeviceInfo.RIDI_DEVICENAME, IntPtr.Zero, ref pcbSize); if (pcbSize <= 0) { sw.WriteLine("pcbSize: " + pcbSize); sw.WriteLine(Marshal.GetLastWin32Error()); return; } var size = (uint)Marshal.SizeOf(typeof(DeviceInfo)); var di = new DeviceInfo {Size = Marshal.SizeOf(typeof (DeviceInfo))}; if (GetRawInputDeviceInfo(rid.hDevice, (uint) RawInputDeviceInfo.RIDI_DEVICEINFO, ref di, ref size) <= 0) { sw.WriteLine(Marshal.GetLastWin32Error()); return; } var pData = Marshal.AllocHGlobal((int)pcbSize); GetRawInputDeviceInfo(rid.hDevice, RawInputDeviceInfo.RIDI_DEVICENAME, pData, ref pcbSize); var deviceName = Marshal.PtrToStringAnsi(pData); if (rid.dwType == DeviceType.RimTypekeyboard || rid.dwType == DeviceType.RimTypeHid) { var deviceDesc = GetDeviceDescription(deviceName); var dInfo = new KeyPressEvent { DeviceName = Marshal.PtrToStringAnsi(pData), DeviceHandle = rid.hDevice, DeviceType = GetDeviceType(rid.dwType), Name = deviceDesc, Source = keyboardNumber++.ToString(CultureInfo.InvariantCulture) }; sw.WriteLine(dInfo.ToString()); sw.WriteLine(di.ToString()); sw.WriteLine(di.KeyboardInfo.ToString()); sw.WriteLine(di.HIDInfo.ToString()); //sw.WriteLine(di.MouseInfo.ToString()); sw.WriteLine("========================================================================================================="); } Marshal.FreeHGlobal(pData); } Marshal.FreeHGlobal(pRawInputDeviceList); sw.Flush(); sw.Close(); file.Close(); return; } throw new Win32Exception(Marshal.GetLastWin32Error()); }
public static void DeviceAudit() { var file = new FileStream("DeviceAudit.txt", FileMode.Create, FileAccess.Write); var sw = new StreamWriter(file); var keyboardNumber = 0; uint deviceCount = 0; var dwSize = (Marshal.SizeOf(typeof(Rawinputdevicelist))); if (GetRawInputDeviceList(IntPtr.Zero, ref deviceCount, (uint)dwSize) == 0) { var pRawInputDeviceList = Marshal.AllocHGlobal((int)(dwSize * deviceCount)); GetRawInputDeviceList(pRawInputDeviceList, ref deviceCount, (uint)dwSize); for (var i = 0; i < deviceCount; i++) { uint pcbSize = 0; // On Window 8 64bit when compiling against .Net > 3.5 using .ToInt32 you will generate an arithmetic overflow. Leave as it is for 32bit/64bit applications var rid = (Rawinputdevicelist)Marshal.PtrToStructure(new IntPtr((pRawInputDeviceList.ToInt64() + (dwSize * i))), typeof(Rawinputdevicelist)); GetRawInputDeviceInfo(rid.hDevice, RawInputDeviceInfo.RIDI_DEVICENAME, IntPtr.Zero, ref pcbSize); if (pcbSize <= 0) { sw.WriteLine("pcbSize: " + pcbSize); sw.WriteLine(Marshal.GetLastWin32Error()); return; } var size = (uint)Marshal.SizeOf(typeof(DeviceInfo)); var di = new DeviceInfo { Size = Marshal.SizeOf(typeof(DeviceInfo)) }; if (GetRawInputDeviceInfo(rid.hDevice, (uint)RawInputDeviceInfo.RIDI_DEVICEINFO, ref di, ref size) <= 0) { sw.WriteLine(Marshal.GetLastWin32Error()); return; } var pData = Marshal.AllocHGlobal((int)pcbSize); GetRawInputDeviceInfo(rid.hDevice, RawInputDeviceInfo.RIDI_DEVICENAME, pData, ref pcbSize); var deviceName = Marshal.PtrToStringAnsi(pData); if (rid.dwType == DeviceType.RimTypekeyboard || rid.dwType == DeviceType.RimTypeHid) { var deviceDesc = GetDeviceDescription(deviceName); var dInfo = new KeyPressEvent { DeviceName = Marshal.PtrToStringAnsi(pData), DeviceHandle = rid.hDevice, DeviceType = GetDeviceType(rid.dwType), Name = deviceDesc, Source = keyboardNumber++.ToString(CultureInfo.InvariantCulture) }; sw.WriteLine(dInfo.ToString()); sw.WriteLine(di.ToString()); sw.WriteLine(di.KeyboardInfo.ToString()); sw.WriteLine(di.HIDInfo.ToString()); //sw.WriteLine(di.MouseInfo.ToString()); sw.WriteLine("========================================================================================================="); } Marshal.FreeHGlobal(pData); } Marshal.FreeHGlobal(pRawInputDeviceList); sw.Flush(); sw.Close(); file.Close(); return; } throw new Win32Exception(Marshal.GetLastWin32Error()); }