阅读:7877回复:37
怎样写一个驱动就能禁止光驱、软驱、USB,高分相送
怎样写一个驱动就能禁止光驱、软驱、USB,高分相送
|
|
沙发#
发布于:2004-08-14 13:17
已经搞定,现在光驱、软驱测试通过
|
|
板凳#
发布于:2004-08-19 16:06
基本上就是用IoGetRelatedDeviceObject挂接设备
fileSysDevice = IoGetRelatedDeviceObject( fileObject ); pDriverObject = fileSysDevice->DriverObject; 然后拦截此DriverObject的IRP_MJ_CREATE、IRP_MJ_SET_INFORMATION、IRP_MJ_DEVICE_CONTROL |
|
地板#
发布于:2004-10-20 10:56
返回STATUS_INSUFFICIENT_RESOURCES就行了
|
|
地下室#
发布于:2004-10-22 10:35
对\\Device\\Floppy0拦截,应该可以的
|
|
5楼#
发布于:2004-11-24 14:37
U盘和移动硬盘可以通过应用程序判断,先取到盘符,再根据盘符
取得此盘符所在的位置,是USB口的就是移动硬盘了 |
|
6楼#
发布于:2004-11-24 14:39
当然要先判断一下是否为 可移动设备,如不是再做上面判断
|
|
7楼#
发布于:2004-11-25 13:04
不好意思,最近一直在外地出差,等回来把代码放上来
|
|
8楼#
发布于:2004-12-06 10:12
long GetBusType(char disk)
{ CHAR szDriveName[MAX_PATH]; sprintf (szDriveName,"\\\\.\\%c:", disk); HANDLE hDevice; hDevice = CreateFile (szDriveName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hDevice == INVALID_HANDLE_VALUE) { return -1; } else { DWORD dwBytesReturned, dwRetCode; int buf_size = 4096; char buf[4096]; STORAGE_PROPERTY_QUERY query; memset ((void *)&query, 0, sizeof (query)); query.PropertyId = StorageDeviceProperty; query.QueryType = PropertyStandardQuery; dwRetCode = DeviceIoControl (hDevice, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof (query), (STORAGE_DEVICE_DESCRIPTOR *) buf, buf_size, &dwBytesReturned, NULL); if(!dwRetCode) { CloseHandle (hDevice); return -1; } STORAGE_DEVICE_DESCRIPTOR *info= (STORAGE_DEVICE_DESCRIPTOR *)buf; CloseHandle (hDevice); return info->BusType; } } void test() { int iType = GetDriveType("C:\\"); switch( iType ) { case 0: case 1: break; case DRIVE_REMOVABLE: //这儿是USB break; case DRIVE_CDROM: break; case DRIVE_FIXED: long lBusType = GetBusType('C'); if(lBusType != BusTypeUsb) { //这儿是硬盘分区 } else { //这儿是移动硬盘分区 } break; case DRIVE_REMOTE: break; case DRIVE_RAMDISK: break; } } |
|
9楼#
发布于:2004-12-06 16:14
写个程序调用test()函数,应该不会出问题的
|
|