0

WindowsCE6.0デバイスに接続されているUSBスティックのシリアル番号を取得する必要があります。試してみましKernelIoControlたが、window ce 6.0デバイスのシリアル番号を取得しましたが、接続されているUSBは取得しませんでした。

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

USBスティックをWindowsCE6デバイスに接続すると、新しいハードディスクが認識されます。登録されているこの新しいデバイスのプロパティにアクセスし、WindowsCE6デバイスで使用可能なUSBポートを制御する必要があります。

4

1 に答える 1

0

おそらく探しているのはUSB_DEVICE_DESCRIPTORです。大きなウィンドウでは、SetupDiGetDevicePropertyを使用してこの情報を取得しますが、CEでは、この値はドライバーのみが使用できます。CEのドライバーからこの情報を取り戻す一般的な方法はないと思います。ただし、ドライバには、その情報を取得するための特別なIOCTL_が含まれている場合があります。OEMに連絡してください。

于 2013-01-17T17:18:09.900 に答える