title: Serial number of the usb on windows Ce 6.0 in c#
body: <p>I need to get the serial number of a usb stick connected to a windows ce 6.0 device. I tried with <code>KernelIoControl</code> and i get the serial number of the window ce 6.0 device but not the usb connected to it. </p>
  
  <pre><code>    private static string GetDeviceID()
      {
          // Initialize the output buffer to the size of a  
          // Win32 DEVICE_ID structure. 
          byte[] outbuff = new byte[20];
          Int32 dwOutBytes;
          bool done = false;
  
          Int32 nBuffSize = outbuff.Length;
  
          // Set DEVICEID.dwSize to size of buffer.  Some platforms look at 
          // this field rather than the nOutBufSize param of KernelIoControl 
          // when determining if the buffer is large enough.
          BitConverter.GetBytes(nBuffSize).CopyTo(outbuff, 0);
          dwOutBytes = 0;
  
          // Loop until the device ID is retrieved or an error occurs. 
          while (!done)
          {
              if (KernelIoControl(IOCTL_HAL_GET_DEVICEID, IntPtr.Zero,
                  0, outbuff, nBuffSize, ref dwOutBytes))
              {
                  done = true;
              }
              else
              {
                  int error = Marshal.GetLastWin32Error();
                  switch (error)
                  {
                      case ERROR_NOT_SUPPORTED:
                          throw new NotSupportedException(
                              "IOCTL_HAL_GET_DEVICEID is not supported on this device",
                              new Win32Exception(error));
  
                      case ERROR_INSUFFICIENT_BUFFER:
  
                          // The buffer is not big enough for the data.  The 
                          // required size is in the first 4 bytes of the output 
                          // buffer (DEVICE_ID.dwSize).
                          nBuffSize = BitConverter.ToInt32(outbuff, 0);
                          outbuff = new byte[nBuffSize];
  
                          // Set DEVICEID.dwSize to size of buffer.  Some 
                          // platforms look at this field rather than the 
                          // nOutBufSize param of KernelIoControl when 
                          // determining if the buffer is large enough.
                          BitConverter.GetBytes(nBuffSize).CopyTo(outbuff, 0);
                          break;
  
                      default:
                          throw new Win32Exception(error, "Unexpected error");
                  }
              }
          }
  </code></pre>
  
  <p>When i connect the usb stick to the windows ce 6 device, it shows me a new hard disk recognize, i need to come to the properties of this new device registered, get control of the usb ports available on my windows ce 6 device.</p>