Advertisement
Guest User

Untitled

a guest
May 12th, 2018
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <ntddk.h>
  2.  
  3. PDEVICE_OBJECT pDeviceObject;
  4. PUNICODE_STRING dos;
  5. PUNICODE_STRING dev;
  6.  
  7. VOID Unload(IN PDRIVER_OBJECT pDriverObject)
  8. {
  9.     DbgPrint("DriverUnloaded!\r\n");
  10.  
  11.     IoDeleteSymbolicLink(dos);
  12.     IoDeleteDevice(dev);
  13. }
  14.  
  15. NTSTATUS CreateCall(IN PDEVICE_OBJECT pDeviceObject, IN PIRP irp)
  16. {
  17.     DbgPrint("Driver call created\r\n");
  18.    
  19.     irp->IoStatus.Status = STATUS_SUCCESS;
  20.     irp->IoStatus.Information = 0;
  21.  
  22.     IoCompleteRequest(irp, IO_NO_INCREMENT);
  23.     return STATUS_SUCCESS;
  24. }
  25.  
  26. NTSTATUS CloseCall(IN PDEVICE_OBJECT pDeviceObject, IN PIRP irp)
  27. {
  28.     DbgPrint("Drivre call closed\r\n");
  29.    
  30.     irp->IoStatus.Status = STATUS_SUCCESS;
  31.     irp->IoStatus.Information = 0;
  32.  
  33.     IoCompleteRequest(irp, IO_NO_INCREMENT);
  34.     return STATUS_SUCCESS;
  35. }
  36.  
  37. NTSTATUS IoControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP irp)
  38. {
  39.     NTSTATUS status = STATUS_SUCCESS;
  40.     ULONG bytesIo = 0;
  41.     ULONG control;
  42.  
  43.     PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(irp);
  44.  
  45.     control = stack->Parameters.DeviceIoControl.IoControlCode;
  46.  
  47.     irp->IoStatus.Status = status;
  48.     irp->IoStatus.Information = bytesIo;
  49.     IoCompleteRequest(irp, IO_NO_INCREMENT);
  50. }
  51.  
  52. NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING RegistryPath)
  53. {
  54.     NTSTATUS status;
  55.    
  56.     RtlInitString(dev, L"\\Device\\SimpleDriver");
  57.     RtlInitString(dos, L"\\DosDevice\\SimpleDriver");
  58.  
  59.     status = IoCreateDevice(pDriverObject, 0, dev, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, 0, pDeviceObject);
  60.     if (!NT_SUCCESS(status))
  61.     {
  62.         DbgPrintEx(0, 0, "Can't create device object\n");
  63.         return status;
  64.     }
  65.  
  66.     status = IoCreateSymbolicLink(dos, dev);
  67.     if(!NT_SUCCESS(status))
  68.     {
  69.         DbgPrint("Can't create symbolic link\r\n");
  70.         return status;
  71.     }
  72.  
  73.     pDriverObject->MajorFunction[IRP_MJ_CREATE] = CreateCall;
  74.     pDriverObject->MajorFunction[IRP_MJ_CLOSE] = CloseCall;
  75.     pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = IoControl;
  76.     pDriverObject->DriverUnload = Unload;
  77.    
  78.     pDeviceObject->Flags |= DO_DIRECT_IO;
  79.     pDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
  80.  
  81.     DbgPrint("Hello from Driver\r\n");
  82.  
  83.  
  84.     return STATUS_SUCCESS;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement