1 Star 0 Fork 2

shuaige/block-process-execute

forked from zys/block-process-execute 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
main.c 3.25 KB
一键复制 编辑 原始数据 按行查看 历史
0xdrR 提交于 2016-04-07 21:35 . first commit
#include <ntifs.h>
#include <wdm.h>
#include <ntimage.h>
#include <windef.h>
#include <ioctls.h>
#include <process_block.h>
#define DEVICE_NAME L"\\Device\\simpledev"
#define DOS_DEVICE_NAME L"\\DosDevices\\simpledev"
DRIVER_INITIALIZE DriverEntry;
DRIVER_UNLOAD DrvUnload;
__drv_dispatchType(IRP_MJ_CREATE)
__drv_dispatchType(IRP_MJ_CLOSE)
__drv_dispatchType(IRP_MJ_DEVICE_CONTROL)
DRIVER_DISPATCH DrvDispatch;
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, DrvUnload)
#pragma alloc_text(PAGE, DrvDispatch)
void DebugInfo(char *str) {
DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "simpledev: %s\n", str);
}
NTSTATUS DrvDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp) {
PIO_STACK_LOCATION iostack;
NTSTATUS status = STATUS_NOT_SUPPORTED;
PVOID buf;
ULONG len;
PEPROCESS currentProcess;
PAGED_CODE();
currentProcess = PsGetCurrentProcess();
iostack = IoGetCurrentIrpStackLocation(Irp);
switch(iostack->MajorFunction) {
case IRP_MJ_CREATE:
status = STATUS_SUCCESS;
break;
case IRP_MJ_CLOSE:
status = STATUS_SUCCESS;
break;
case IRP_MJ_DEVICE_CONTROL:{
buf = Irp->AssociatedIrp.SystemBuffer;
len = iostack->Parameters.DeviceIoControl.InputBufferLength;
// check io ctl
status = STATUS_SUCCESS;
break;
}
default:
status = STATUS_INVALID_DEVICE_REQUEST;
}
Irp->IoStatus.Status = status;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return status;
}
VOID DrvUnload(PDRIVER_OBJECT DriverObject)
{
UNICODE_STRING dosdev;
PAGED_CODE();
DebugInfo("driver unloading");
RtlInitUnicodeString(&dosdev, DOS_DEVICE_NAME);
IoDeleteSymbolicLink(&dosdev);
PsSetCreateProcessNotifyRoutineEx((PCREATE_PROCESS_NOTIFY_ROUTINE_EX)MyCreateProcessNotifyEx, TRUE);
IoDeleteDevice(DriverObject->DeviceObject);
}
NTSTATUS DriverEntry(
__in PDRIVER_OBJECT DriverObject,
__in PUNICODE_STRING RegistryPath
)
{
UNICODE_STRING devname, dosname;
PDEVICE_OBJECT devobj;
NTSTATUS status;
DebugInfo("driver initializing");
DriverObject->MajorFunction[IRP_MJ_CREATE] = DrvDispatch;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = DrvDispatch;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DrvDispatch;
DriverObject->DriverUnload = DrvUnload;
RtlInitUnicodeString(&devname, DEVICE_NAME);
RtlInitUnicodeString(&dosname, DOS_DEVICE_NAME);
status = IoCreateDevice(DriverObject, 0, &devname, FILE_DEVICE_UNKNOWN,
FILE_DEVICE_SECURE_OPEN, FALSE, &devobj);
if (!NT_SUCCESS(status)) {
DebugInfo("error creating device");
return status;
}
status = IoCreateSymbolicLink(&dosname, &devname);
if (!NT_SUCCESS(status)) {
DebugInfo("error creating symbolic link");
return status;
}
status = PsSetCreateProcessNotifyRoutineEx((PCREATE_PROCESS_NOTIFY_ROUTINE_EX)MyCreateProcessNotifyEx, FALSE);
DbgPrint("PsSetCreateProcessNotifyRoutineEx: %x", status);
return STATUS_SUCCESS;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/iamasbcx/block-process-execute.git
git@gitee.com:iamasbcx/block-process-execute.git
iamasbcx
block-process-execute
block-process-execute
master

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385