(50分求助)非Administrator下获取设备句柄问题(在线等)
大家好,向大家请教个问题,下面的代码,在插入优盘时获取优盘盘符,并且锁盘;
在Administrator下可以用,但在非Administrator帐户下就不可以;
好像是获取设备句柄的API函数不可以使用;现在不知道如何解决这个问题?
想通过下面几种方式来解决这个问题:
(1)接收到插入优盘的系统消息以后,自动弹出优盘,下面一段代码在VC6.0下编译通过,
但是在VC++.Net下不可以使用,还有一个技术问题就是希望发一个消息,等同于点了删除设备,
让优盘自动退出;
(2)修改优盘的驱动程序;
(3)通过别的API函数来获取设备的句柄,或者在普通帐号下需要开启什么服务?
请大家分析下,不知道哪种方式可行?谢谢!
之前见过别人写的程序,在普通用户下的确可以锁移动存储设备。。。
if(GetDriveType((LPCTSTR)tmpdir)==DRIVE_REMOVABLE) //插入的设备是U盘
{
logicalDisk = L"\\\\.\\"+L"H:";
hDevice = CreateFile( //获取设备句柄
logicalDisk, //驱动器名称
GENERIC_READ|GENERIC_WRITE, //可读可写
FILE_SHARE_READ|FILE_SHARE_WRITE, //共享方式
NULL, //安全描述符指针
OPEN_EXISTING, //创建方式
0, //文件属性及标志
NULL //模板文件的句柄
);
bool_Ret = DeviceIoControl(hDevice,FSCTL_LOCK_VOLUME,NULL,0,NULL,0,&dwOutBytes,(LPOVERLAPPED)NULL);
}
void CProg001Dlg::OnButton5() //退出优盘
{
char strSystemDirectory[256];
GetSystemDirectory(strSystemDirectory, 256 );
CString strTemp = strSystemDirectory;
strTemp += "\\rundll32.exe shell32.dll,Control_RunDLL hotplug.dll";
WinExec( strTemp, SW_SHOW );
}