尝试学习如何编写设备驱动程序 [英] Trying to learn how to write a device driver

查看:83
本文介绍了尝试学习如何编写设备驱动程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我正在尝试学习如何编写设备驱动程序,因此尝试了一个简单的示例来模拟磁带设备驱动程序,但是我无法以块大小答复它.

Hi,
I am trying to learn how to write a device driver, so I tried a simple example to emulate a tape device driver, but I failed to get it to reply with a block size.

NTSTATUS IoCtlCamel(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
	NTSTATUS NtStatus = STATUS_NOT_SUPPORTED;
	PIO_STACK_LOCATION pIoStackIrp = NULL;
	unsigned int dwDataWritten = 0;
	TAPE_GET_DRIVE_PARAMETERS *tapeparams = NULL;
	TAPE_PREPARE *tapeprepare = NULL;

	DbgPrint("* IoCtlCamel\n");

	pIoStackIrp = IoGetCurrentIrpStackLocation(Irp);    

	if(pIoStackIrp) /* Should Never Be NULL! */
	{
		switch(pIoStackIrp->Parameters.DeviceIoControl.IoControlCode)
		{
			case IOCTL_TAPE_GET_STATUS:
				DbgPrint("IOCTL_TAPE_GET_STATUS\n");
				NtStatus = STATUS_SUCCESS;
				break;
			case IOCTL_TAPE_GET_POSITION:
				DbgPrint("IOCTL_TAPE_GET_POSITION\n");
				NtStatus = STATUS_SUCCESS;
				break;
			case IOCTL_TAPE_PREPARE:
				DbgPrint("IOCTL_TAPE_PREPARE\n");
				NtStatus = STATUS_SUCCESS;
				break;
			case IOCTL_TAPE_GET_DRIVE_PARAMS:
				DbgPrint("IOCTL_TAPE_GET_DRIVE_PARAMS\n");
				if(pIoStackIrp->Parameters.DeviceIoControl.OutputBufferLength>= sizeof(TAPE_GET_DRIVE_PARAMETERS))
				{
					tapeparams=(TAPE_GET_DRIVE_PARAMETERS *)Irp->AssociatedIrp.SystemBuffer;
					if(tapeparams->ECC)
						DbgPrint("TRUE\n");
					tapeparams->ECC=TRUE;
				}
				DbgPrint("return STATUS_SUCCESS\n");
				NtStatus = STATUS_SUCCESS;
				break;
			case IOCTL_TAPE_GET_MEDIA_PARAMS:
				DbgPrint("IOCTL_TAPE_GET_MEDIA_PARAMS\n");
				NtStatus = STATUS_SUCCESS;
				break;
			case IOCTL_TAPE_CREATE_PARTITION:
				DbgPrint("IOCTL_TAPE_CREATE_PARTITION\n");
				NtStatus = STATUS_SUCCESS;
				break;
		}
	}
	
	Irp->IoStatus.Status = NtStatus;
	Irp->IoStatus.Information = dwDataWritten;

	IoCompleteRequest(Irp, IO_NO_INCREMENT);

	return NtStatus;
}



mt工具是否仍然启用了ECC?



The mt tool still replies that ECC is enabled?

C:\> mt  drivestatus
Hardware ECC            : Yes
Compression             : Yes



有什么建议可以解决这个问题吗?



Any suggestions to resolve this?

推荐答案

我必须根据文档返回相同结构的状态
I have to return status on same structure according to documentation


这篇关于尝试学习如何编写设备驱动程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆