protected override void WndProc(ref System.Windows.Forms.Message m) { try { if (m.Msg == WM_DEVICECHANGE) { Thread.Sleep(500); DEV_BROADCAST_HDR pHdr = new DEV_BROADCAST_HDR(); pHdr = (DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_HDR)); switch ((int)m.WParam) { case UsbNotification.DbtDeviceremovecomplete: Console.WriteLine("Usb_DeviceRemoved"); break; case UsbNotification.DbtDevicearrival: Console.WriteLine(" Usb_DeviceAdded"); // this is where you do your magic //Console.WriteLine("Hello: {0}", pHdr.dbch_DeviceType); if (pHdr.dbch_DeviceType == 5) { //Console.WriteLine("Human Interface Device"); DEV_BROADCAST_DEVICEINTERFACE pDevInf = (DEV_BROADCAST_DEVICEINTERFACE)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_DEVICEINTERFACE)); string name = GetDeviceName(pDevInf); //Console.WriteLine("Name: {0}", name); //GetDeviceNameNew(pDevInf); //Console.WriteLine("Size: {0}\nDevice Type: {1}\nreserved: {2}", pDevInf.dbcc_size, pDevInf.dbcc_devicetype, pDevInf.dbcc_reserved); //Console.WriteLine("Details: {0}", pDevInf.dbcc_name); //Console.WriteLine("Class GUID: {0}", pDevInf.dbcc_classguid); string pid = ""; string vid = ""; getDetails(pDevInf.dbcc_name.ToString(), ref pid, ref vid); Guid DiskGUID = new Guid("A5DCBF10-6530-11D2-901F-00C04FB951ED"); IntPtr h = SetupDiGetClassDevs(ref DiskGUID, new IntPtr(0), IntPtr.Zero, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); //Console.WriteLine("Class GUID: {0}", DiskGUID); if (h != (IntPtr)INVALID_HANDLE_VALUE) { bool Success = true; uint i = 0; while (Success) { // create a Device Interface Data structure SP_DEVICE_INTERFACE_DATA dia = new SP_DEVICE_INTERFACE_DATA(); dia.cbSize = Marshal.SizeOf(dia); // start the enumeration Success = SetupDiEnumDeviceInterfaces(h, IntPtr.Zero, ref DiskGUID, i, ref dia); if (Success) { // build a DevInfo Data structure //Console.WriteLine("DiskGUID Agian: " + DiskGUID.ToString()); SP_DEVINFO_DATA da = new SP_DEVINFO_DATA(); da.cbSize = 28; // this becomes 32 for 64 bit systems; // build a Device Interface Detail Data structure SP_DEVICE_INTERFACE_DETAIL_DATA didd = new SP_DEVICE_INTERFACE_DETAIL_DATA(); didd.cbSize = 4 + Marshal.SystemDefaultCharSize; // trust me :) int nRequiredSize = 0; int nBytes = 256; //Buffer Size = 256 uint n_required_size = (uint)(int)nRequiredSize; uint nbytes = (uint)(int)nBytes; if (SetupDiGetDeviceInterfaceDetail(h, ref dia, ref didd, nbytes, out n_required_size, ref da)) { // Now we get the InstanceID of the USB level device IntPtr ptrInstanceBuf = Marshal.AllocHGlobal(nBytes); CM_Get_Device_ID(da.devInst, ptrInstanceBuf, nBytes, 0); string InstanceID = Marshal.PtrToStringAuto(ptrInstanceBuf); //Console.WriteLine("Instance ID: " + da.devInst); //Console.WriteLine("PID: {0}\nVID: {1}", pid, vid); string pid_temp = "", vid_temp = ""; int storageFlag = 0; getDetails(InstanceID.ToString(), ref pid_temp, ref vid_temp); if(pid == pid_temp && vid == vid_temp) { additionalFunctions sa = new additionalFunctions(); tree.node root = new tree.node(da.devInst); //sa.buildTree(root); //Console.WriteLine("Device Added: {0} \nGetting Details................{1}....{2}....", InstanceID, pid, vid); var test = da.devInst; Thread th = new Thread(() => { string serialNo = sd.getSerial(InstanceID); //Console.WriteLine("Serial Number: {0}", serialNo); sd.search(pid, vid, ref storageFlag, serialNo, test); //Search details of the Given PID VID From WMI }); th.Start(); th.Join(); Marshal.FreeHGlobal(ptrInstanceBuf); SetupDiDestroyDeviceInfoList(h); break; /* if (storageFlag == 1) { Console.WriteLine("TRYING TO EJECT!!-------------------" + da.devInst); additionalFunctions.checkEject(da.devInst); //Ejects the USB by calling the CM_Request_Device_Eject function Console.WriteLine("------------------------------------"); } */ /*const int BUFFER_SIZE = 256; UInt32 RequiredSize; UInt32 RegType = 0; byte[] ptrBuffer = new byte[BUFFER_SIZE]; IntPtr test = new IntPtr(BUFFER_SIZE); tree.node root1 = new tree.node(da.devInst); //additionalFunctions.buildTree(root1); if (SetupDiGetDeviceRegistryProperty(h, ref da,(uint) SetupDiGetDeviceRegistryPropertyEnum.SPDRP_DEVICEDESC, out RegType, ptrBuffer, BUFFER_SIZE, out RequiredSize)) { //string ControllerDeviceDesc = Marshal.PtrToStringAuto(ptrBuf); //Console.WriteLine("Controller Device Name: {0}", ControllerDeviceDesc); SetupDiGetDeviceRegistryProperty(h, ref da, (uint)SetupDiGetDeviceRegistryPropertyEnum.SPDRP_DEVICEDESC, out RegType, ptrBuffer, BUFFER_SIZE, out RequiredSize); byte[] data = ptrBuffer; IntPtr ptr = Marshal.AllocHGlobal(data.Length); try { //Console.WriteLine("Sibling Status: " + CM_Get_Child(out parentDevInt, da.devInst, 0)); UInt32 current = da.devInst; Microsoft.Win32.RegistryValueKind kind; uint length = 0; Program.CM_Get_DevNode_Registry_Property(da.devInst, 0x0000001A, out kind, IntPtr.Zero, ref length, 0); IntPtr buffer = Marshal.AllocHGlobal((int)length); Program.CM_Get_DevNode_Registry_Property(da.devInst, 0x0000001A, out kind, buffer, ref length, 0); byte[] test1 = new byte[BUFFER_SIZE]; Marshal.Copy(buffer,test1, 0, (int)length); //Console.WriteLine("dadas" + test1 + "DASdasd" + buffer); //Console.WriteLine("\t\tDevice PATH: " + "\t" + System.Text.Encoding.UTF8.GetString(test1).ToString()); //Console.WriteLine("The New Function------------------\t" + da.devInst); //tree.node root = new tree.node(da.devInst); //additionalFunctions.buildTree(root); String ControllerDesc = System.Text.Encoding.UTF8.GetString(ptrBuffer); //Console.WriteLine("Details: {0}", ControllerDesc); //Console.WriteLine("Sec Details: {0}", ptrBuffer); } finally { Marshal.FreeHGlobal(ptr); } //Console.WriteLine("Controller: " + RequiredSize); } else { if (GetLastError() == 13) { Console.WriteLine("The Property doesnot exist for the device"); } else { Console.WriteLine("SetupDiGetDeviceRegistryProperty Error: " + GetLastError().ToString()); } }*/ //Console.WriteLine("Pid: {0}\nVid:{1}", pid, vid); } Marshal.FreeHGlobal(ptrInstanceBuf); } } i++; } } SetupDiDestroyDeviceInfoList(h); } break; } } base.WndProc(ref m); } catch { } }
public int buildTree(tree.node root) { const int BUFFER_SIZE = 256; uint length = 0; Microsoft.Win32.RegistryValueKind kind; byte[] buf = new byte[BUFFER_SIZE]; UInt32 otherSiblings = 0; UInt32 firstChildInst = 0; if (Program.CM_Get_Child(out firstChildInst, root.getInst(), 0) == 0) { root.add(firstChildInst); //Program.CM_Get_Device_ID() Console.WriteLine("Child Added: "); //Get details about first child and then use CM_Get_Sibling to get rest of children Program.CM_Get_DevNode_Registry_Property(firstChildInst, 0x00000002, out kind, IntPtr.Zero, ref length, 0); IntPtr buffer = Marshal.AllocHGlobal((int)length); if (Program.CM_Get_DevNode_Registry_Property(firstChildInst, 0x00000002, out kind, buffer, ref length, 0) == 0) { string driver_name = Marshal.PtrToStringAnsi(buffer); Console.WriteLine("\tDRIVER NAME: {0}", driver_name.ToString()); desc += " " + driver_name.ToString(); } else { Console.WriteLine("\tCM_GET_REGISRTY: Fail"); } buildTree(new tree.node(firstChildInst)); //Get Details about rest of the Siblings while (Program.CM_Get_Sibling(out otherSiblings, firstChildInst, 0) == 0) { root.add(otherSiblings); Console.WriteLine("Sibling added: "); Program.CM_Get_DevNode_Registry_Property(firstChildInst, 0x00000002, out kind, IntPtr.Zero, ref length, 0); IntPtr buferTemp = Marshal.AllocHGlobal((int)length); if (Program.CM_Get_DevNode_Registry_Property(firstChildInst, 0x00000002, out kind, buferTemp, ref length, 0) == 0) { string driver_name = Marshal.PtrToStringAnsi(buferTemp); Console.WriteLine("\tDRIVER NAME: {0}", driver_name.ToString()); desc += " " + driver_name.ToString(); } else { Console.WriteLine("\tCM_GET_REGISRTY: Fail"); Console.WriteLine("Error: " + Program.CM_Get_Sibling(out otherSiblings, firstChildInst, 0)); } buildTree(new tree.node(otherSiblings)); firstChildInst = otherSiblings; otherSiblings = 0; } return(0); } else { Console.WriteLine("No Child ! !"); return(10); } }
protected override void WndProc(ref System.Windows.Forms.Message m) { try { if (m.Msg == WM_DEVICECHANGE) { Thread.Sleep(500); DEV_BROADCAST_HDR pHdr = new DEV_BROADCAST_HDR(); pHdr = (DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_HDR)); switch ((int)m.WParam) { case UsbNotification.DbtDeviceremovecomplete: Console.WriteLine("Usb_DeviceRemoved"); break; case UsbNotification.DbtDevicearrival: Console.WriteLine(" Usb_DeviceAdded"); // this is where you do your magic //Console.WriteLine("Hello: {0}", pHdr.dbch_DeviceType); if (pHdr.dbch_DeviceType == 5) { //Console.WriteLine("Human Interface Device"); DEV_BROADCAST_DEVICEINTERFACE pDevInf = (DEV_BROADCAST_DEVICEINTERFACE)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_DEVICEINTERFACE)); string name = GetDeviceName(pDevInf); //Console.WriteLine("Name: {0}", name); //GetDeviceNameNew(pDevInf); //Console.WriteLine("Size: {0}\nDevice Type: {1}\nreserved: {2}", pDevInf.dbcc_size, pDevInf.dbcc_devicetype, pDevInf.dbcc_reserved); //Console.WriteLine("Details: {0}", pDevInf.dbcc_name); //Console.WriteLine("Class GUID: {0}", pDevInf.dbcc_classguid); string pid = ""; string vid = ""; getDetails(pDevInf.dbcc_name.ToString(), ref pid, ref vid); Guid DiskGUID = new Guid("A5DCBF10-6530-11D2-901F-00C04FB951ED"); IntPtr h = SetupDiGetClassDevs(ref DiskGUID, new IntPtr(0), IntPtr.Zero, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); //Console.WriteLine("Class GUID: {0}", DiskGUID); if (h != (IntPtr)INVALID_HANDLE_VALUE) { bool Success = true; uint i = 0; while (Success) { // create a Device Interface Data structure SP_DEVICE_INTERFACE_DATA dia = new SP_DEVICE_INTERFACE_DATA(); dia.cbSize = Marshal.SizeOf(dia); // start the enumeration Success = SetupDiEnumDeviceInterfaces(h, IntPtr.Zero, ref DiskGUID, i, ref dia); if (Success) { // build a DevInfo Data structure //Console.WriteLine("DiskGUID Agian: " + DiskGUID.ToString()); SP_DEVINFO_DATA da = new SP_DEVINFO_DATA(); da.cbSize = 28; // this becomes 32 for 64 bit systems; // build a Device Interface Detail Data structure SP_DEVICE_INTERFACE_DETAIL_DATA didd = new SP_DEVICE_INTERFACE_DETAIL_DATA(); didd.cbSize = 4 + Marshal.SystemDefaultCharSize; // trust me :) int nRequiredSize = 0; int nBytes = 256; //Buffer Size = 256 uint n_required_size = (uint)(int)nRequiredSize; uint nbytes = (uint)(int)nBytes; if (SetupDiGetDeviceInterfaceDetail(h, ref dia, ref didd, nbytes, out n_required_size, ref da)) { // Now we get the InstanceID of the USB level device IntPtr ptrInstanceBuf = Marshal.AllocHGlobal(nBytes); CM_Get_Device_ID(da.devInst, ptrInstanceBuf, nBytes, 0); string InstanceID = Marshal.PtrToStringAuto(ptrInstanceBuf); //Console.WriteLine("Instance ID: " + da.devInst); //Console.WriteLine("PID: {0}\nVID: {1}", pid, vid); string pid_temp = "", vid_temp = ""; int storageFlag = 0; getDetails(InstanceID.ToString(), ref pid_temp, ref vid_temp); if (pid == pid_temp && vid == vid_temp) { additionalFunctions sa = new additionalFunctions(); tree.node root = new tree.node(da.devInst); //sa.buildTree(root); //Console.WriteLine("Device Added: {0} \nGetting Details................{1}....{2}....", InstanceID, pid, vid); var test = da.devInst; Thread th = new Thread(() => { string serialNo = sd.getSerial(InstanceID); //Console.WriteLine("Serial Number: {0}", serialNo); sd.search(pid, vid, ref storageFlag, serialNo, test); //Search details of the Given PID VID From WMI }); th.Start(); th.Join(); Marshal.FreeHGlobal(ptrInstanceBuf); SetupDiDestroyDeviceInfoList(h); break; /* * if (storageFlag == 1) * { * Console.WriteLine("TRYING TO EJECT!!-------------------" + da.devInst); * additionalFunctions.checkEject(da.devInst); //Ejects the USB by calling the CM_Request_Device_Eject function * Console.WriteLine("------------------------------------"); * } */ /*const int BUFFER_SIZE = 256; * UInt32 RequiredSize; * UInt32 RegType = 0; * byte[] ptrBuffer = new byte[BUFFER_SIZE]; * IntPtr test = new IntPtr(BUFFER_SIZE); * tree.node root1 = new tree.node(da.devInst); * //additionalFunctions.buildTree(root1); * * if (SetupDiGetDeviceRegistryProperty(h, ref da,(uint) SetupDiGetDeviceRegistryPropertyEnum.SPDRP_DEVICEDESC, out RegType, ptrBuffer, BUFFER_SIZE, out RequiredSize)) * { * //string ControllerDeviceDesc = Marshal.PtrToStringAuto(ptrBuf); * //Console.WriteLine("Controller Device Name: {0}", ControllerDeviceDesc); * SetupDiGetDeviceRegistryProperty(h, ref da, (uint)SetupDiGetDeviceRegistryPropertyEnum.SPDRP_DEVICEDESC, out RegType, ptrBuffer, BUFFER_SIZE, out RequiredSize); * byte[] data = ptrBuffer; * IntPtr ptr = Marshal.AllocHGlobal(data.Length); * try * { * * //Console.WriteLine("Sibling Status: " + CM_Get_Child(out parentDevInt, da.devInst, 0)); * UInt32 current = da.devInst; * Microsoft.Win32.RegistryValueKind kind; * uint length = 0; * * * Program.CM_Get_DevNode_Registry_Property(da.devInst, 0x0000001A, out kind, IntPtr.Zero, ref length, 0); * IntPtr buffer = Marshal.AllocHGlobal((int)length); * Program.CM_Get_DevNode_Registry_Property(da.devInst, 0x0000001A, out kind, buffer, ref length, 0); * byte[] test1 = new byte[BUFFER_SIZE]; * * Marshal.Copy(buffer,test1, 0, (int)length); * * //Console.WriteLine("dadas" + test1 + "DASdasd" + buffer); * //Console.WriteLine("\t\tDevice PATH: " + "\t" + System.Text.Encoding.UTF8.GetString(test1).ToString()); * * * //Console.WriteLine("The New Function------------------\t" + da.devInst); * * //tree.node root = new tree.node(da.devInst); * //additionalFunctions.buildTree(root); * * String ControllerDesc = System.Text.Encoding.UTF8.GetString(ptrBuffer); * //Console.WriteLine("Details: {0}", ControllerDesc); * //Console.WriteLine("Sec Details: {0}", ptrBuffer); * * * * * } * finally * { * Marshal.FreeHGlobal(ptr); * } * * //Console.WriteLine("Controller: " + RequiredSize); * } * else * { * if (GetLastError() == 13) * { * Console.WriteLine("The Property doesnot exist for the device"); * } * else * { * Console.WriteLine("SetupDiGetDeviceRegistryProperty Error: " + GetLastError().ToString()); * } * }*/ //Console.WriteLine("Pid: {0}\nVid:{1}", pid, vid); } Marshal.FreeHGlobal(ptrInstanceBuf); } } i++; } } SetupDiDestroyDeviceInfoList(h); } break; } } base.WndProc(ref m); } catch { } }