0环
#include <wdm.h>
void DriverUload(PDRIVER_OBJECT pdriver)
{
}
NTSTATUS MyRead(PDEVICE_OBJECT pobject, PIRP irp)
{
NTSTATUS status = STATUS_SUCCESS;
//实现简单操作 啥都不干
PIO_STACK_LOCATION psl = IoGetCurrentIrpStackLocation(irp);
ULONG readSize = psl->Parameters.Read.Length;
PCHAR readBuffer = irp->AssociatedIrp.SystemBuffer;
RtlCopyMemory(readBuffer,"this message from R0!",strlen("this message from R0!"));
irp->IoStatus.Status = status;
irp->IoStatus.Information = strlen("this message from R0!");
IoCompleteRequest(irp,IO_NO_INCREMENT);
return status;
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pdriver, PUNICODE_STRING path)
{
NTSTATUS status = STATUS_SUCCESS;
//设置支持缓冲区读写 否则报错
pdriver->Flags |= DO_BUFFERED_IO;
pdriver->DriverUnload = DriverUload;
pdriver->MajorFunction[IRP_MJ_READ] = MyRead;
return status;
}
0环
#include "windows.h"
#include <stdio.h>
int main()
{
HANDLE hdevice = NULL;
DWORD realRead = 0;
CHAR readBuffer[50] = {0};
hdevice = CreateFile("\\\\.\\MyDevice", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hdevice == INVALID_HANDLE_VALUE)
{
printf("Creat File Failed!!");
return 0;
}
system("pause");
//函数参数 1.文件句柄 2.缓冲区指针 3.要读取的字节数 4.真正读取的字节数
ReadFile(hdevice,(PVOID)readBuffer,50,&realRead,NULL);
printf("%s__%d",readBuffer,realRead);
CloseHandle(hdevice);
return 0;
}