我在win7上写了个application.是对SD卡进行操作的!
往里面写返回的error code 是5
1.我已经调用了DeviceIoControl(hDevice,FSCTL_LOCK_VOLUME,NULL,0,NULL,0,&dwOutBytes,()NULL)
2.uAC也已经拉到最低(关了)
但仍然是error code 5
请问怎么解决

解决方案 »

  1.   

    5: Access is denied. 
    权限问题
      

  2.   

    Access Deny, 看是否禁止访问或硬件权限控制等
      

  3.   

    win7很多问题都是权限的问题error code 5:Access is denied
      

  4.   

    怎么解决呢?各位?实际不要理论!谢谢各位大牛!
    在MSDN上说是LOCK or DISMOUNT,我试过都不行!
      

  5.   

    CreateFile的参数怎么写的?第2参数用GENERIC_READ|GENERIC_WRITE。最好把这段代码都贴出来。
      

  6.   


    BOOL SetDriveMark(DWORD PhysicalNumber, LARGE_INTEGER TotalSector,UCHAR *buf)
    {
    HANDLE hDevice;               // handle to the drive to be examined 
    DWORD junk;                   // discard results
    TCHAR PhycialDriver[256]={0};
    LARGE_INTEGER DistanceToMove, NewPos;
    DWORD dwOutBytes;
    wsprintf(PhycialDriver, TEXT("\\\\.\\PhysicalDrive%d"), PhysicalNumber);
    hDevice = CreateFile(PhycialDriver,  // drive to open
                       GENERIC_READ | GENERIC_WRITE,                // access to the drive
                        FILE_SHARE_READ | // share mode
                        FILE_SHARE_WRITE, 
                        NULL,             // default security attributes
                        OPEN_EXISTING,    // disposition
                        0,                // file attributes
                        NULL);            // do not copy file attributes if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
    {
    return (FALSE);
    } DistanceToMove.QuadPart = (TotalSector.QuadPart-1)*512;
    if(SetFilePointerEx(hDevice, DistanceToMove, &NewPos, FILE_BEGIN) == 0)
    {
    odprintf("FilePosition fail %d\n", GetLastError());
    CloseHandle(hDevice);
    return (FALSE);
    }
    odprintf("FilePosition new %I64d\n", NewPos);
    if(DeviceIoControl(hDevice,FSCTL_DISMOUNT_VOLUME,NULL,0,NULL,0,&dwOutBytes,(LPOVERLAPPED)NULL))
    {
    odprintf("ok");
    } if(WriteFile(hDevice, buf, 512, &junk, NULL) == 0)
    {
    odprintf("WriteFile fail %d\n", GetLastError());
    CloseHandle(hDevice);
    return (FALSE);
    } CloseHandle(hDevice); return TRUE;
    }上面代码执行的结果是:
    ok
    WriteFile fail 5
    很茫然不知所错!
      

  7.   

    share mode 先置0,attribute置为   FILE_ATTRIBUTE_NORMAL试下
      

  8.   

    还是不行啊!
    MSDN论坛上也有人遇到相同的问题!应该是有办法来解决这个问题的.HxD就可以来操作磁盘的sector!不知道怎么来做?!!!!!!!!!!!!!!!!
      

  9.   

    在Windows7系统中,对于已装载的逻辑磁盘中的扇区,不允许以物理方式改写,只能以逻辑盘形式打开改写,例如该扇区属于X:盘,则打开\\.\X:来改写。早期的操作系统没有这个限制。
      

  10.   

    同命相连呀,我也遇到这个问题了,WriteFile fail 5。引个链接,互相参考一下:http://topic.csdn.net/u/20110412/21/7b4949d5-a438-479b-94e4-d07c2105c7b0.html另外,这个问题写驱动好像可以解决,但是这就比较麻烦了,不用些驱动的话还是希望可以不写。希望楼主得到解决办法之后也能告知我一下呀。谢谢了!
      

  11.   


    wsprintf(PhycialDriver, TEXT("\\\\.\\PhysicalDrive%d"), PhysicalNumber);对吗?
      

  12.   


    if(DeviceIoControl(hDevice,FSCTL_DISMOUNT_VOLUME,NULL,0,NULL,0,&dwOutBytes,(LPOVERLAPPED)NULL))
    {
            odprintf("ok");
    }
    执行结果有打印ok!
    锁定我也试过!FSCTL_LOCK_VOLUME.这么用应该是对的吧?~!我也试过将两者结合使用,但依然没效果!
      

  13.   

    我只是写个小AP,没必要这么麻烦了!不过在WINCE6.0 引入后,对系统寄存器的访问也不行。不知道win7是不是也加入了这些安全机制的检查!都需要写一些傀儡driver来访问!微软的东西真难用啊!
      

  14.   

    要锁定的设备叫\\.\C:之类的,不是叫\\\.\PhysicalDrive