zhuymgis
驱动牛犊
驱动牛犊
  • 注册日期2007-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1669回复:2

(终于解决了)vista 下读写磁盘

楼主#
更多 发布于:2007-09-30 10:09
谁有vista 下读写磁盘的类呢?

最新喜欢:

LeopardLeopar...
zhuymgis
驱动牛犊
驱动牛犊
  • 注册日期2007-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-10-08 14:44
怎莫没有人解答一下呢?
具体情况如下:
          DWORD drive;
                     char devname[64];
    HANDLE handle;
    if (isalpha((char)drive))
        sprintf(devname,"\\\\.\\%c:", (char)drive);
    else
        sprintf(devname,"\\\\.\\PHYSICALDRIVE%d", drive);

handle = CreateFile(devname, GENERIC_READ|GENERIC_WRITE,
        FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
        FILE_FLAG_NO_BUFFERING|FILE_FLAG_WRITE_THROUGH,
        NULL);

在vista下获取的handle ==INVALID_HANDLE_VALUE怎摸回事呢?

麻烦大侠指点

   
zhuymgis
驱动牛犊
驱动牛犊
  • 注册日期2007-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-10-09 11:30
详细解决方法参见如下:http://topic.csdn.net/t/20061127/16/5188494.html

引用:basesky(闲云野鹤)回复于 2006-12-28 17:19:54

你应该  
  if(!hDevice)   GetLastError();    
  看一下错误是甚么,如果是   5,   则表明你的权限不够,你可以用如下方法通过   UAC   提升程序的权限  
  1.   直接用右键菜单中的   "Run   as   Administrator"(以管理员权限运行)执行程序,这种方法依赖用户主动提升程序权限,如果用在产品中估计不行.  
  2.   在你的程序文件连接相关的   Manifest   文件,Visual   Studio   2005   中有个工具   mt.exe,   较新的   SDK   也有这个工具,详情查看   MSDN.  
  3.   设置你的文件名,使其中包含   Setup/Install/Update   等字样,比如   FileUpdate.exe   or   DriverSetup.exe   等,   Vista   的   explorer   在启动类似名称的程序时   UAC   会提示提升权限.  
  4.   在你的程序中重新启动一个自身的副本   使用   ShellExecuteEx()  
    
  WINSHELLAPI   BOOL   WINAPI   ShellExecuteEx(  
      LPSHELLEXECUTEINFO   lpExecInfo    
  );  
    
  typedef   struct   _SHELLEXECUTEINFO   {    
      DWORD   cbSize;    
      ULONG   fMask;    
      HWND   hwnd;    
      LPCTSTR   lpVerb;    
      LPCTSTR   lpFile;    
      LPCTSTR   lpParameters;    
      LPCTSTR   lpDirectory;    
      int   nShow;    
      HINSTANCE   hInstApp;    
      LPVOID   lpIDList;    
      LPCTSTR   lpClass;    
      HKEY   hkeyClass;    
      DWORD   dwHotKey;    
      union   {  
          HANDLE   hIcon;  
          HANDLE   hMonitor;  
      }   DUMMYUNIONNAME;  
      HANDLE   hProcess;    
  }   SHELLEXECUTEINFO,   FAR*   LPSHELLEXECUTEINFO;  
    
  在填写这个结构的时候将   lpVerb   =   "Run   As";  
    
  主流方法就这几种,你可以自己去   UAC   team   的   blog   上看看  
    
  http://blogs.msdn.com/uac/


贴出来大家共享了
     
 
游客

返回顶部