win7 writefile failed error code 5

子愚 2011-04-08 04:39:59
我在win7上写了个application.是对SD卡进行操作的!
往里面写返回的error code 是5
1.我已经调用了DeviceIoControl(hDevice,FSCTL_LOCK_VOLUME,NULL,0,NULL,0,&dwOutBytes,()NULL)
2.uAC也已经拉到最低(关了)
但仍然是error code 5
请问怎么解决
...全文
1637 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
sudazzj 2012-08-02
  • 打赏
  • 举报
回复
我这边怎么解决不了,楼主,你能把解决后的详细代码发出来看看么?
Lactoferrin 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 hugh512 的回复:]

引用 18 楼 lactoferrin 的回复:

引用 17 楼 lactoferrin 的回复:

引用 16 楼 cnzdgs 的回复:

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

锁定或卸载后就可以写

是锁定写操作落在的卷,不……
[/Quote]
要锁定的设备叫\\.\C:之类的,不是叫\\\.\PhysicalDrive
子愚 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 goddea 的回复:]

同命相连呀,我也遇到这个问题了,WriteFile fail 5。

引个链接,互相参考一下:http://topic.csdn.net/u/20110412/21/7b4949d5-a438-479b-94e4-d07c2105c7b0.html

另外,这个问题写驱动好像可以解决,但是这就比较麻烦了,不用些驱动的话还是希望可以不写。

希望楼主得到解决办法之后也能告知我一下呀。谢……
[/Quote]
我只是写个小AP,没必要这么麻烦了!不过在WINCE6.0 引入后,对系统寄存器的访问也不行。不知道win7是不是也加入了这些安全机制的检查!都需要写一些傀儡driver来访问!微软的东西真难用啊!
子愚 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lactoferrin 的回复:]

引用 17 楼 lactoferrin 的回复:

引用 16 楼 cnzdgs 的回复:

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

锁定或卸载后就可以写

是锁定写操作落在的卷,不是整个物理设备
[/Quote]

if(DeviceIoControl(hDevice,FSCTL_DISMOUNT_VOLUME,NULL,0,NULL,0,&dwOutBytes,(LPOVERLAPPED)NULL))
{
odprintf("ok");
}


执行结果有打印ok!
锁定我也试过!FSCTL_LOCK_VOLUME.这么用应该是对的吧?~!我也试过将两者结合使用,但依然没效果!
子愚 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 cnzdgs 的回复:]

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

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

对吗?
子愚 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 lactoferrin 的回复:]

引用 21 楼 hugh512 的回复:

引用 18 楼 lactoferrin 的回复:

引用 17 楼 lactoferrin 的回复:

引用 16 楼 cnzdgs 的回复:

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

锁定……
[/Quote]
可以用的!谢谢!结贴给分!
Goddea 2011-04-12
  • 打赏
  • 举报
回复
同命相连呀,我也遇到这个问题了,WriteFile fail 5。

引个链接,互相参考一下:http://topic.csdn.net/u/20110412/21/7b4949d5-a438-479b-94e4-d07c2105c7b0.html

另外,这个问题写驱动好像可以解决,但是这就比较麻烦了,不用些驱动的话还是希望可以不写。

希望楼主得到解决办法之后也能告知我一下呀。谢谢了!
Lactoferrin 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 lactoferrin 的回复:]

引用 16 楼 cnzdgs 的回复:

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

锁定或卸载后就可以写
[/Quote]
是锁定写操作落在的卷,不是整个物理设备
Lactoferrin 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 cnzdgs 的回复:]

在Windows7系统中,对于已装载的逻辑磁盘中的扇区,不允许以物理方式改写,只能以逻辑盘形式打开改写,例如该扇区属于X:盘,则打开\\.\X:来改写。早期的操作系统没有这个限制。
[/Quote]
锁定或卸载后就可以写
子愚 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xuddk727 的回复:]

share mode 先置0,attribute置为 FILE_ATTRIBUTE_NORMAL试下
[/Quote]
还是不行啊!
MSDN论坛上也有人遇到相同的问题!应该是有办法来解决这个问题的.HxD就可以来操作磁盘的sector!不知道怎么来做?!!!!!!!!!!!!!!!!
cnzdgs 2011-04-12
  • 打赏
  • 举报
回复
在Windows7系统中,对于已装载的逻辑磁盘中的扇区,不允许以物理方式改写,只能以逻辑盘形式打开改写,例如该扇区属于X:盘,则打开\\.\X:来改写。早期的操作系统没有这个限制。
子愚 2011-04-11
  • 打赏
  • 举报
回复

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
很茫然不知所错!
许文君 2011-04-11
  • 打赏
  • 举报
回复
share mode 先置0,attribute置为 FILE_ATTRIBUTE_NORMAL试下
子愚 2011-04-11
  • 打赏
  • 举报
回复
读是可以的!悲剧@
Lactoferrin 2011-04-11
  • 打赏
  • 举报
回复
读数据行不行?
子愚 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lactoferrin 的回复:]

先锁定,再卸载试试
[/Quote]
试过了,还是不行啊!很怪异啊!
Lactoferrin 2011-04-11
  • 打赏
  • 举报
回复
先锁定,再卸载试试
Lactoferrin 2011-04-09
  • 打赏
  • 举报
回复
DeviceIoControl是否成功
cnzdgs 2011-04-08
  • 打赏
  • 举报
回复
CreateFile的参数怎么写的?第2参数用GENERIC_READ|GENERIC_WRITE。最好把这段代码都贴出来。
子愚 2011-04-08
  • 打赏
  • 举报
回复
怎么解决呢?各位?实际不要理论!谢谢各位大牛!
在MSDN上说是LOCK or DISMOUNT,我试过都不行!
加载更多回复(5)
SimpleBrowser是专门为自动化任务而设计的一个灵活而直观的浏览器引擎,内置.Net 4 framework。示例代码:class Program {     static void Main(string[] args)     {         var browser = new Browser();         try         {             // log the browser request/response data to files so we can interrogate them in case of an issue with our scraping             browser.RequestLogged  = OnBrowserRequestLogged;             browser.MessageLogged  = new Action(OnBrowserMessageLogged);             // we'll fake the user agent for websites that alter their content for unrecognised browsers             browser.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10";             // browse to GitHub             browser.Navigate("http://github.com/");             if(LastRequestFailed(browser)) return; // always check the last request in case the page failed to load             // click the login link and click it             browser.Log("First we need to log in, so browse to the login page, fill in the login details and submit the form.");             var loginLink = browser.Find("a", FindBy.Text, "Login");             if(!loginLink.Exists)                 browser.Log("Can't find the login link! Perhaps the site is down for maintenance?");             else             {                 loginLink.Click();                 if(LastRequestFailed(browser)) return;                 // fill in the form and click the login button - the fields are easy to locate because they have ID attributes                 browser.Find("login_field").Value = "youremail@domain.com";                 browser.Find("password").Value = "yourpassword";                 browser.Find(ElementType.Button, "name", "commit").Click();                 if(LastRequestFailed(browser)) return;                 // see if the login succeeded - ContainsText() is very forgiving, so don't worry about whitespace, casing, html tags separating the text, etc.                 if(browser.ContainsText("Incorrect login or password"))                 {                     browser.Log("Login failed!", LogMessageType.Error);                 }                 else                 {                     // After logging in, we should check that the page contains elements that we recognise                     if(!browser.ContainsText("Your Repositories"))                         browser.Log("There wasn't the usual login failure message, but the text we normally expect isn't present on the page");                     else                     {                         browser.Log("Your News Feed:");                         // we can use simple jquery selectors, though advanced selectors are yet to be implemented                         foreach(var item in browser.Select("div.news .title"))                             browser.Log("* "   item.Value);                     }                 }             }         }         catch(Exception ex)         {             browser.Log(ex.Message, LogMessageType.Error);             browser.Log(ex.StackTrace, LogMessageType.StackTrace);         }         finally         {             var path = WriteFile("log-"   DateTime.UtcNow.Ticks   ".html", browser.RenderHtmlLogFile("SimpleBrowser Sample - Request Log"));             Process.Start(path);         }     }     static bool LastRequestFailed(Browser browser)     {         if(browser.LastWebException != null)         {             browser.Log("There was an error loading the page: "   browser.LastWebException.Message);             return true;         }         return false;     }     static void OnBrowserMessageLogged(Browser browser, string log)     {         Console.WriteLine(log);     }     static void OnBrowserRequestLogged(Browser req, HttpRequestLog log)     {         Console.WriteLine(" -> "   log.Method   " request to "   log.Url);         Console.WriteLine(" <- Response status code: "   log.ResponseCode);     }     static string WriteFile(string filename, string text)     {         var dir = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs"));         if(!dir.Exists) dir.Create();         var path = Path.Combine(dir.FullName, filename);         File.WriteAllText(path, text);         return path;     } }

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧