在C#中,引用windows系统的API函数CreatFile()时,打不开设备,但是已经获得了设备路径"\\\\?\\hid#vid_09da&pid_000e#6&308e3cf5&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}",为什么还不行,望能人给予帮助!下面列出我的主要代码:        public void UsBMethod(int index)
        {
            HidD_GetHidGuid(ref guidHID);
            hDevInfo = SetupDiGetClassDevs(ref guidHID, 0, IntPtr.Zero, DIGCF.DIGCF_PRESENT | DIGCF.DIGCF_DEVICEINTERFACE);
            int bufferSize = 0;
            ArrayList HIDUSBAddress = new ArrayList();            //while (true)
            //{
            //获取设备,true获取到
            SP_DEVICE_INTERFACE_DATA DeviceInterfaceData = new SP_DEVICE_INTERFACE_DATA();
            DeviceInterfaceData.cbSize = Marshal.SizeOf(DeviceInterfaceData);
            //for (int i = 0; i < 3; i++)
            //{
            bool result = SetupDiEnumDeviceInterfaces(hDevInfo, IntPtr.Zero, ref guidHID, (UInt32)index, ref DeviceInterfaceData);
            //}
            //第一次调用出错,但可以返回正确的Size 
            SP_DEVINFO_DATA strtInterfaceData = new SP_DEVINFO_DATA();
            result = SetupDiGetDeviceInterfaceDetail(hDevInfo, ref DeviceInterfaceData, IntPtr.Zero, 0, ref bufferSize, strtInterfaceData);
            //第二次调用传递返回值,调用即可成功
            IntPtr detailDataBuffer = Marshal.AllocHGlobal(bufferSize);
            SP_DEVICE_INTERFACE_DETAIL_DATA detailData = new SP_DEVICE_INTERFACE_DETAIL_DATA();
            detailData.cbSize = Marshal.SizeOf(typeof(SP_DEVICE_INTERFACE_DETAIL_DATA));
            Marshal.StructureToPtr(detailData, detailDataBuffer, false);
            result = SetupDiGetDeviceInterfaceDetail(hDevInfo, ref DeviceInterfaceData, detailDataBuffer, bufferSize, ref bufferSize, strtInterfaceData);
            if (result == false)
            {
                return;
                //break;
            }
            //获取设备路径访
            IntPtr pdevicePathName = (IntPtr)((int)detailDataBuffer + 4);
            string devicePathName = Marshal.PtrToStringAuto(pdevicePathName);
            HIDUSBAddress.Add(devicePathName);
            //index++;
            //break;
            //}            //连接设备文件
            int aa = CT_CreateFile(devicePathName);
            if (aa == 1)
            {
                Console.WriteLine("read the message is successed!");
            }
            else Console.WriteLine("read message is failed!");
            bool bb = USBDataRead(HidHandle);
        }        //建立和设备的连接
        public unsafe int CT_CreateFile(string DeviceName)
        {
            HidHandle = CreateFile(
                DeviceName,
                GENERIC_READ,//| GENERIC_WRITE,//读写,或者一起
                //0,
                FILE_SHARE_READ,//| FILE_SHARE_WRITE,//共享读写,或者一起
                0,
                OPEN_EXISTING,
                0,
                //FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
                0);
            if (HidHandle == -1)
            {
                return 0;
                //Console.WriteLine("ERROR:{0}", GetLastError());
            }
            else
            {
                return 1;
            }
        }
运行后CreatFile函数不能打开设备,返回不了正确的句柄值!