我想让计算机显示蓝屏信息。
怎么样能蓝屏?
怎么样能蓝屏?
解决方案 »
- MFC static text 点击怎么设为选中状态?
- 从outlook的pst文件怎么得到vcf的地址簿
- 新手问题: 请问"abc"和TEXT("abc")有什么区别?
- 请教利用wise installation 9制作安装程序的一个问题
- 实在不知怎么解决
- 如何使ToolBar中的保存按钮在初始时无效?
- 我想在鼠标左键按下时显示一个对话框,但是我在LBUTTONDOWN()中加入了AfxMessageBox("aa");怎么没有反应
- cpp文件非常大,会不会影响程序的执行速度?
- 3D桌球游戏,不会让你失望.(只有760K)
- win7下怎么隐藏listctr控件的l滚动条
- 版本更新时,如果需要更新的文件正在被程序使用,那么该怎么办?
- 窗口放大的问题
=============================================
我想也是用驱动,但是我没做驱动,下了几本书,全是WDM,虚拟机,即插即用什么的。
我无从入手。能不给点代码?或写个简单的东西,我参考一下
用google搜索“蓝屏炸弹”
驱动入口函数
********************************************************************/
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
NTSTATUS status;
UNICODE_STRING uniNameString,uniDosNameString;
PDEVICE_OBJECT FdoDeviceObject;
PDEVICE_EXTENSION pdx; KdPrint(("进入驱动入口函数!\n"));
KdPrint(("RegistryPath=%wZ\n",RegistryPath)); //指定设备名字
RtlInitUnicodeString(&uniNameString,L"\\Device\\TestDriver");
//创建符号连接
RtlInitUnicodeString(&uniDosNameString,L"\\DosDevices\\TestDriver"); KdPrint(("uniNameString=%wZ\n",&uniNameString)); //创建设备
status=IoCreateDevice(DriverObject,
sizeof(DEVICE_EXTENSION),
&uniNameString,
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&FdoDeviceObject);
KdPrint(("创建设备完成!\n")); if(!NT_SUCCESS(status))
{
KdPrint(("!NT_SUCCESS(status)0x%8x\n",status));
return status;
} //创建扩展设备对象
pdx=(PDEVICE_EXTENSION)FdoDeviceObject->DeviceExtension; KdPrint(("PDEVICE_EXTENSION的地址为0x%8x\n",pdx)); //存储FdoDeviceObject
pdx->fdo=FdoDeviceObject; //存储连接符号
RtlInitUnicodeString(&pdx->ifSymLinkName,L"\\DosDevices\\TestDriver"); //存储下一个设备对象地址
//pdx->NextStackDevice=IoAttachDeviceToDeviceStack(FdoDeviceObject,Pdo); KdPrint(("创建扩展设备完成!\n")); KdPrint(("uniDosNameString=%wZ\n",&pdx->ifSymLinkName)); //创建符号连接
status = IoCreateSymbolicLink (&uniDosNameString, &uniNameString);
if (!NT_SUCCESS(status))
{
//IoDetachDevice(pdx->NextStackDevice);
IoDeleteDevice(FdoDeviceObject);
KdPrint(("status=0x%8x\n",status));
return status;
}
// 指定驱动程序有关操作的模块入口(函数指针)
//DriverObject->DriverExtension->AddDevice = TestAddDevice;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]=TestControl;
DriverObject->MajorFunction[IRP_MJ_CREATE]=TestCreate;
DriverObject->DriverUnload = TestDriverUnload; return STATUS_SUCCESS;
}/*
NTSTATUS TestAddDevice(IN PDRIVER_OBJECT DriverObject,IN PDEVICE_OBJECT Pdo)
{
KdPrint(("驱动进入AddDevice函数\n")); return STATUS_SUCCESS;
}
*///CreateFile()的分发例程
NTSTATUS TestCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
NTSTATUS status;
//PDEVICE_EXTENSION pdx; KdPrint(("驱动进入IRP_MJ_CREATE\n")); //创建一个设备扩展对象pdx,用于存储指向fdo扩展设备的指针:
//pdx=(PDEVICE_EXTENSION)DeviceObject->DeviceExtension; //IoSkipCurrentIrpStackLocation(Irp); /*status=IoCallDriver(pdx->NextStackDevice,Irp);
if(NT_SUCCESS(status))
{
KdPrint(("IoCallDriver()函数执行成功!\n"));
KdPrint(("status=0x%8x\n",status));
return status;
}
*/
IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_SUCCESS;
}NTSTATUS TestControl(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
PIO_STACK_LOCATION IrpStack;
ULONG dwIoControlCode;
PULONG pvIOBuffer;
NTSTATUS ntStatus;
//PDEVICE_EXTENSION dx=(PDEVICE_EXTENSION)DeviceObject->DeviceExtension; Irp->IoStatus.Status=STATUS_SUCCESS;
Irp->IoStatus.Information=0; KdPrint(("驱动进入DeviceIoControl函数控制区!\n")); IrpStack=IoGetCurrentIrpStackLocation(Irp); // 输入输出共用的缓冲区
// 因为我们在IOCTL中指定了METHOD_BUFFERED,
pvIOBuffer=Irp->AssociatedIrp.SystemBuffer;
dwIoControlCode=IrpStack->Parameters.DeviceIoControl.IoControlCode;
switch (dwIoControlCode)
{ case IOCTL_ONE:
KdPrint(("程序执行了IOCTL_ONE控制码!\n"));
KdPrint(("pvIOBuffer[0]=%ld\n",pvIOBuffer[0]));
KdPrint(("pvIOBuffer[1]=%ld\n",pvIOBuffer[1]));
pvIOBuffer[0]=120;
pvIOBuffer[1]=20;
Irp->IoStatus.Information = sizeof(pvIOBuffer)*2; // 输出长度4*2
break;
case IOCTL_TWO:
KdPrint(("程序执行了IOCTL_TWO控制码!\n"));
pvIOBuffer[0]=20;
pvIOBuffer[1]=120;
Irp->IoStatus.Information = sizeof(pvIOBuffer)*2; // 输出长度为8
break;
default:
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
}
ntStatus = Irp->IoStatus.Status; //IoSkipCurrentIrpStackLocation(Irp);
// IoCallDriver(dx->NextStackDevice,Irp);
IoCompleteRequest (Irp, IO_NO_INCREMENT); KdPrint(("完成IRP!\n"));
return ntStatus;
}void TestDriverUnload(IN PDRIVER_OBJECT DriverObject)
{
UNICODE_STRING uniDosNameString; KdPrint(("驱动卸载成功!\n")); RtlInitUnicodeString(&uniDosNameString,L"\\DosDevices\\TestDriver"); // 删除符号连接和设备
IoDeleteSymbolicLink (&uniDosNameString); //RtlFreeUnicodeString(&uniDosNameString); IoDeleteDevice(DriverObject->DeviceObject);
}
你可以按照这个示例(这个示例是正常工作的),随便改,立马蓝屏(我的机器是重起)