2013-01-16 6 views
0

Windows CE 6.0 장치에 연결된 USB 스틱의 일련 번호를 가져와야합니다. 내가 KernelIoControl와 함께 노력하고 윈도우 CE 6.0 장치의 시리얼 번호가 있지만 그것에 연결된 USB가 아니야.Windows에서 USB의 일련 번호 Ce 6.0 in C#

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"); 
       } 
      } 
     } 

에서 Windows CE 6 장치에 USB 메모리를 연결하면 새 하드 디스크, 내가 등록이 새로운 장치의 특성에 올 필요 인식에서 사용할 수있는 USB 포트의 제어를 저에게 보여줍니다 내 창문 6 장치.

+1

USB 장치에는 일련 번호가 없습니다. FAT32 볼륨의 일련 번호를 가져올 수는 있지만 사소하게 수정되어 라이센스 확인 작업을하는 데 쓸모가 없습니다. 대신 동글을 구입하십시오. –

답변

0

아마도 당신이 찾고있는 것은 USB_DEVICE_DESCRIPTOR입니다. 큰 창에서는 SetupDiGetDeviceProperty를 사용하여이 정보를 얻을 수 있지만 CE에서는이 값을 드라이버에서만 사용할 수 있습니다. 나는 CE에서 드라이버로부터이 정보를 다시 얻는 일반적인 방법이 있다고 생각하지 않는다. 운전 기사는 정보를 얻기 위해 특별한 IOCTL_을 포함 할 수 있습니다. OEM에 문의하십시오.

+0

및 dektop pc는 어떻게해야합니까? 어떻게하면 PC에 연결된 USB에서 일련 번호를 얻을 수 있습니까? 내가 원하는 것을 어떻게 선택할 수 있습니까? conected usb의 목록을 얻고 그들 사이에서 선택할 수 있습니다. C#에서. 네가 알면 나를 구할거야. – user1788654

+0

내가 말했듯이 큰 Windows (데스크톱 PC)에서는 SetupDiGetDeviceProperty를 사용할 수 있습니다. 예를 보려면 다음을 참조하십시오. http://stackoverflow.com/questions/3438366/setupdigetdeviceproperty – PaulH