如何在底层禁止usb移动设备上的EXE文件运行? RT。驱动初学者,请多指教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 驱动程序初始化的时候调用PsSetLoadImageNotifyRoutine设置一个回调函数,当进程加载模块文件时会调用这个函数,函数参数中给出了要加载模块的完整路径,根据该路径可以判断是不是移动设备上的EXE文件,然后再结束进程。 多谢cnzdgs。可是我不明白如何判断是不是移动设备上的EXE文件,这个应该怎么做呢? 根据FullImageName参数,可以用ZwCreateFile、ZwQueryVolumeInformationFile来取FileFsDeviceInformation来判断其所在卷的Characteristics是不是FILE_REMOVABLE_MEDIA。 谢谢。我试了多次,但是ZwCreateFile始终没有返回STATUS_SUCCESS,不知是何缘故。 这是我的回调函数:NTSTATUS Status; OBJECT_ATTRIBUTES ObjectAttributes; PHANDLE FileHandle; HANDLE hProcess; IO_STATUS_BLOCK IoStatus; FILE_FS_DEVICE_INFORMATION DeviceInfo; CLIENT_ID ClientId; hProcess = NULL; FileHandle = NULL; ClientId.UniqueProcess = ProcessId; ClientId.UniqueThread = 0; InitializeObjectAttributes(&ObjectAttributes, FullImageName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL ); Status = ZwCreateFile(FileHandle, GENERIC_READ, &ObjectAttributes, &IoStatus, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OPEN, FILE_NO_INTERMEDIATE_BUFFERING | FILE_SYNCHRONOUS_IO_ALERT, NULL, 0 ); if (!NT_SUCCESS(Status)) { return; } Status = ZwQueryVolumeInformationFile(FileHandle, &IoStatus, &DeviceInfo, sizeof(FILE_FS_DEVICE_INFORMATION), FileFsDeviceInformation ); if (!NT_SUCCESS(Status)) { ZwClose(*FileHandle); *FileHandle = NULL; return; } if(DeviceInfo.Characteristics == FILE_REMOVABLE_MEDIA) { Status = ZwOpenProcess(&hProcess,PROCESS_ALL_ACCESS,&ObjectAttributes,&ClientId); ZwTerminateProcess(hProcess,0); ZwClose(hProcess); } ZwCreateFile的第1参数要给一个HANDLE型变量的地址,把FileHandle前面加上&号再试试。 可是我FileHandle变量的类型定义的是PHANDLE呀。 你把PHANDLE前面的P去掉,再按我上面说的来修改。如果定义PHANDLE类型,你需要给该变量赋值,不能是NULL。 成了。不过这种方式只能拦截U盘上的EXE文件运行,对于移动硬盘却没有什么效果。这又是为什么呢?感觉系统好像没有把移动硬盘认成移动设备而认成了本地磁盘了。这样理解可以么? 可能要取接口类型,或者从设备的GUID来判断,没做过这样的程序。 DBT_DEVTYP_VOLUME 和 DBT_DEVTYP_PORT //最近好像碰到有例外的,还没仔细调试。 嗯,那我再研究研究。这贴先到这里,多谢cnzdgs。 VC ADO给oracled存储过程传递数组参数问题 高手帮忙,关于文件查找问题 求教!!!!!!!! 如何亮色显示树控件中一个特定的Item 一个小问题需要大家的帮忙,谢谢! 关于MFC 关于Attach()的用法,高分相赠。 MFC中如何使用chm格式的帮助文件? VC++2008怎么知道别人的项目是基于什么创建的? 升级SDK的问题,急!!! ATL工程选了MFC支持,debug版可以编译,而release Mindependency却编译不过去...... 请教vc前辈关于LIst ctrl的倒序显示!急
NTSTATUS Status;
OBJECT_ATTRIBUTES ObjectAttributes;
PHANDLE FileHandle;
HANDLE hProcess;
IO_STATUS_BLOCK IoStatus;
FILE_FS_DEVICE_INFORMATION DeviceInfo;
CLIENT_ID ClientId;
hProcess = NULL;
FileHandle = NULL;
ClientId.UniqueProcess = ProcessId;
ClientId.UniqueThread = 0; InitializeObjectAttributes(&ObjectAttributes,
FullImageName,
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
NULL,
NULL
); Status = ZwCreateFile(FileHandle,
GENERIC_READ,
&ObjectAttributes,
&IoStatus,
NULL,
FILE_ATTRIBUTE_NORMAL,
0,
FILE_OPEN,
FILE_NO_INTERMEDIATE_BUFFERING | FILE_SYNCHRONOUS_IO_ALERT,
NULL,
0
);
if (!NT_SUCCESS(Status))
{
return;
} Status = ZwQueryVolumeInformationFile(FileHandle,
&IoStatus,
&DeviceInfo,
sizeof(FILE_FS_DEVICE_INFORMATION),
FileFsDeviceInformation
);
if (!NT_SUCCESS(Status))
{
ZwClose(*FileHandle);
*FileHandle = NULL;
return;
} if(DeviceInfo.Characteristics == FILE_REMOVABLE_MEDIA)
{
Status = ZwOpenProcess(&hProcess,PROCESS_ALL_ACCESS,&ObjectAttributes,&ClientId);
ZwTerminateProcess(hProcess,0);
ZwClose(hProcess);
}