以前在xp下做过一个,用createFile打开设备,readFile,writeFile读写,但这个好像在98下不能使用,怎么办?
也就是说在98下不能用createFile打开u盘,求办法,谢谢!

解决方案 »

  1.   

    跟xp里面的名称是一样的
    这是我在xp下的代码
    BOOL CXsbBootDiskDlg::LoadImgFileUsb()
    {
    HANDLE hTemp;
        CString strTemp = "\\\\.\\";
        strTemp += m_CurrentDesDisk;
        strTemp += ":";
        DWORD dwReturn;
    DWORD dwTemp;
        char *pSource = new char[SIZE];       
        char *pDes   =  new char[SIZE];
        DWORD   dw;
             
      hTemp = CreateFile(m_strFileName , GENERIC_READ , FILE_SHARE_READ , NULL , OPEN_EXISTING,NULL,NULL);
    if (hTemp == INVALID_HANDLE_VALUE)
             {
                ShowInfomation(2);
                m_strFileName = SelectFile();
                hTemp = CreateFile(m_strFileName , GENERIC_READ , FILE_SHARE_READ , NULL , OPEN_EXISTING,NULL,NULL);
                
            }
        if(ReadFile(hTemp, pSource, SIZE, &dw, NULL ))
           {;}
        dwTemp = Decompress(pSource, pDes, dw);
        
        ShowInfomation(1);
    HANDLE hUsb;
    hUsb = CreateFile(strTemp, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL , OPEN_EXISTING,NULL,NULL);
    if (hUsb == INVALID_HANDLE_VALUE)
    {
    DWORD dw = GetLastError();
    if(21 == dw)
    {
    ShowInfomation(9);
    Sleep(5000);
    }
    return FALSE;
    }

        if(WriteFile(hUsb, pDes, dwTemp, &dwReturn, NULL ))
            {;} CloseHandle(hTemp);
    CloseHandle(hUsb);
    return TRUE;
    }
    cerateFile打开u盘,readFile读文件到内存,在用WriteFile写到u盘,但是在98下运行此程序不行
    msdn写到cerateFile
    Disk devices (Windows NT/2000 only) 
    即只能在Windows NT/2000 only打开u盘设备,
    故求个98下的方法
    不要说驱动没装,不是这个问题
      

  2.   

    CString strTemp = "\\\\.\\";
        strTemp += m_CurrentDesDisk;
        strTemp += ":";我觉的问题在这里,你应该直接指出路径就对了"\\\\.\\";是NT驱动路径的写法
    操作卷设备的花直接
    "f:\\asdas\\dsadsa\\dsadas.dsa"
      

  3.   

    使用DeviceIoControl吗?An application running on Windows Me/98/95 can use the DeviceIoControl function to send control codes directly to a virtual device driver (VxD). Any VxD can support any number of control codes, or none at all.
    The system VxD, VWIN32.VXD, supports the input and output control (IOCTL) functions originally provided by MS-DOS Interrupt 21h.
      

  4.   

    楼主现在是CreateFile都不行……
      

  5.   

    设备名称有没有问题?
    说实话,我也不知道如何获取某个设备的设备名称。
    athlonxp能否指点下?
      

  6.   

    to Featured
    用SetupAPI可以通过设备类型枚举得到设备的各种信息包括WIN32设备路径名称等此外如果是设备驱动还可以得到中断号码,内存范围 I/O端口等信息,总之可以用SetupAPI得到比设备管理器还要全面的信息。另外"\\\\.\\" 绝对是NT下才支持的.
    U盘是一种卷设备,操作他和操作你的C盘没有任何区别,所以设备名称直接写成"X:\sad\s\a\ffds.sdf"
      

  7.   

    当成卷设备(C: D: 都是卷设备)除非你要对U盘有特殊操作,才用DeviceIoControl,