阅读:1669回复:2
(终于解决了)vista 下读写磁盘
谁有vista 下读写磁盘的类呢?
|
|
最新喜欢:Leopar... |
沙发#
发布于: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怎摸回事呢? 麻烦大侠指点 |
|
板凳#
发布于: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/ 贴出来大家共享了 |
|