示例#1
0
        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());
        }
示例#2
0
        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());
        }
示例#3
0
文件: Win32.cs 项目: herisant/t22-4
        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());
        }