21,597
社区成员
发帖
与我相关
我的任务
分享
#include "ntddk.h"
#define DEVICE_NAME L"\\Device\\HelloWorld"
#define DEVICE_LINK L"\\DosDevices\\HelloWorld"
PDEVICE_OBJECT g_DeviceObject;
void DriverUnload(IN PDRIVER_OBJECT driverObject) {
KdPrint(("DriverUnload: 88!\n"));
}
NTSTATUS DrvDispatch(IN PDRIVER_OBJECT driverObject, IN PIRP pIrp) {
KdPrint(("Enter DrvDispatch\n"));
pIrp->IoStatus.Status = STATUS_SUCCESS;
pIrp->IoStatus.Information = 0;
IoCompleteRequest(pIrp,IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT driverObject, IN PUNICODE_STRING registryPath)
{
NTSTATUS ntStatus;
UNICODE_STRING devName;
UNICODE_STRING symLinkName;
int i = 0;
KdPrint(("DriverEntry: Hello world driver demo!\n"));
driverObject->DriverUnload = DriverUnload;
RtlInitUnicodeString(&devName, DEVICE_NAME);
ntStatus = IoCreateDevice(driverObject,
0,
&devName,
FILE_DEVICE_UNKNOWN,
0,
TRUE,
&g_DeviceObject);
if (!NT_SUCCESS(ntStatus)) {
return ntStatus;
}
RtlInitUnicodeString(&symLinkName, DEVICE_LINK);
ntStatus = IoCreateSymbolicLink(&symLinkName, &devName);
if (!NT_SUCCESS(ntStatus)) {
IoDeleteDevice(g_DeviceObject);
return ntStatus;
}
for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) {
driverObject->MajorFunction[i] = DrvDispatch;
}
return STATUS_SUCCESS;
}