Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
200
Добавлен:
20.02.2016
Размер:
2.12 Кб
Скачать
#include "stdafx.h"

#if DBG
#define DebugPrint(x) DbgPrint x
#else
#define DebugPrint(x)
#endif

NTSTATUS OnClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
VOID OnDrvUnload(IN PDRIVER_OBJECT DriverObject);
NTSTATUS OnCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING  RegistryPath)
{
	PDEVICE_OBJECT devO;
	UNICODE_STRING path;
	UNICODE_STRING syml;
	NTSTATUS st;

	DebugPrint(("Entry open"));
	RtlInitUnicodeString(&syml, L"\\Device\\Simple3");
	RtlInitUnicodeString(&path, L"\\DosDevices\\Simple3Link");

	st=IoCreateDevice(DriverObject, 0, &path, 40000,0, FALSE, &devO);
	if (!NT_SUCCESS(st)) return st;

	st=IoCreateSymbolicLink(&syml, &path);
	if (!NT_SUCCESS(st)) {
		DebugPrint(("Bad link"));
		IoDeleteDevice(devO);
		return st;
	}

	DriverObject->MajorFunction[IRP_MJ_CREATE] = OnCreate;
	DriverObject->MajorFunction[IRP_MJ_CLOSE] = OnClose;
	DriverObject->DriverUnload = OnDrvUnload;

	DebugPrint(("Entry close"));
	return STATUS_SUCCESS;
}

VOID OnDrvUnload(IN PDRIVER_OBJECT DriverObject){
	UNICODE_STRING dLUS;
	UNICODE_STRING syml;
	PDEVICE_OBJECT d_o;
	PIRP pNewIrp = NULL;
	ULONG m_size;
	NTSTATUS ntStatus;

	DebugPrint(("Unload open"));
	RtlInitUnicodeString(&syml, L"\\Device\\Simple3");
	IoDeleteSymbolicLink(&syml);

	d_o=DriverObject->DeviceObject;

	while (d_o){
		DbgPrint("delete %p", d_o);
		IoDeleteDevice(d_o);
		d_o=d_o->NextDevice;
	}

	DebugPrint(("Unload Close"));
	return STATUS_SUCCESS;
}

NTSTATUS OnCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp){
	DebugPrint(("Create open"));
	Irp->IoStatus.Status = STATUS_SUCCESS;
	Irp->IoStatus.Information = 0;
	IoCompleteRequest(Irp, IO_NO_INCREMENT);
	DebugPrint(("Create close"));
	return STATUS_SUCCESS;
}

NTSTATUS OnClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp){
    DebugPrint(("Close open"));
	Irp->IoStatus.Status = STATUS_SUCCESS;
	Irp->IoStatus.Information = 0;
	IoCompleteRequest(Irp, IO_NO_INCREMENT);
	DebugPrint(("Close close"));
	return STATUS_SUCCESS;
}
Соседние файлы в папке simple3
  • #
    20.02.2016727 б197buildchk.log
  • #
    20.02.20162.12 Кб200simple3.c
  • #
    20.02.2016148 б198simple3.reg
  • #
    20.02.20161.34 Кб198simple3.sln
  • #
    20.02.201610.24 Кб197simple3.suo
  • #
    20.02.20161.41 Кб197simple3.use
  • #
    20.02.20163.67 Кб197simple3.vcp