尝试学习如何编写设备驱动程序 [英] Trying to learn how to write a device driver
本文介绍了尝试学习如何编写设备驱动程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试学习如何编写设备驱动程序,因此尝试了一个简单的示例来模拟磁带设备驱动程序,但是我无法以块大小答复它.
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屋!
查看全文