📄 rw.c
字号:
//
//
// IOCTL read /write interface for Win32 access.
//
//
// Programmer:桂凯 西安电子科技大学
//
// email:wwwguikai@21cn.com
// All right reserved
#include <ntddk.h>
#include <ndis.h>
#include <pci9052hw.h>
#include <pci9052sw.h>
// 读出
NTSTATUS
Read9052(
IN PDEVICE_OBJECT DeviceObject,
PIRP Irp
)
{
PDEVICE_EXTENSION deviceExt = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; // 获得device-extention
PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp); //关键是得到传送的数据字节数目,和Irp->AssociatedIrp.SystemBuffer
PULONG dataptr = NULL;
UCHAR data[4];
PULONG port = (PULONG)deviceExt->PlxRegisterBaseAddr + INTCSR; // interrupt control/status register.
ULONG value[1] ;
if( irpSp->Parameters.Read.Length != 4)// 判断要读取的数据长度
{
KdPrint(( "Read9052 \n"));
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
Irp->IoStatus.Information = 0;
// IoCompleteRequest( Irp, IO_NO_INCREMENT);
return(STATUS_UNSUCCESSFUL);
}
if( deviceExt->data_ready == FALSE ) // 判断数据现在有没有,没有的话自然就不能传送数据啦
{
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
Irp->IoStatus.Information = 0;
// IoCompleteRequest( Irp, IO_NO_INCREMENT);
return(STATUS_UNSUCCESSFUL);
}
value[0] = 0x0;
memcpy( port, value, 4);
KdPrint(( "Read9052 \n"));
dataptr = (PULONG)Irp->AssociatedIrp.SystemBuffer;
if ( dataptr == NULL)
{ KdPrint(( "Out Buffer is Empty \n"));
return (STATUS_UNSUCCESSFUL);
}
else
{
memcpy(dataptr, (PULONG)deviceExt->data, 4);
Irp->IoStatus.Information = 4;
deviceExt->data_ready = FALSE;
Irp->IoStatus.Status = STATUS_SUCCESS;
// IoCompleteRequest( Irp, IO_NO_INCREMENT);
value[0] = 0x0143;
memcpy( port, value, 4);
return(STATUS_SUCCESS);
}
}
NTSTATUS
Write9052(
IN PDEVICE_OBJECT DeviceObject,
PIRP Irp
)
{
KdPrint(( "Write9052 \n"));
return(STATUS_SUCCESS);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -