|
|
От: | Аноним | |
| Дата: | 27.10.11 11:08 | ||
| Оценка: | |||
O>C:\Windows\System32\cmd.exe — путь к программе cmd на вашем компьютере.O>@echo off
O>C:\Windows\System32\cmd.exe /k C:\WinDDK\bin\setenv.bat C:\WinDDK\ fre x86 WIN7 no_oacr
#include <ntddk.h>
#include <MyDriverMessages.h>
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath);
NTSTATUS CreateMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS ReadMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS WriteMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS ShutdownMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS CleanupMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS IoCtlMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
VOID MyDriverUnload (IN PDRIVER_OBJECT DeviceObject);
BOOLEAN GetMessage(IN NTSTATUS ErrorCode, IN PVOID IoObject, IN PIRP Irp);
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, GetMessage)
#endif
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
UNICODE_STRING nameString, linkString;
PDEVICE_OBJECT deviceObject;
NTSTATUS status;
GetMessage(MSG_DRIVER_ENTRY, DriverObject, NULL);
RtlInitUnicodeString(&nameString, L"\\Device\\MyDriver");
status = IoCreateDevice(DriverObject, sizeof(65533), &nameString,
0, 0, FALSE, &deviceObject);
if (!NT_SUCCESS(status))
return status;
deviceObject->Flags |= DO_DIRECT_IO;
deviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
RtlInitUnicodeString(&linkString, L"\\DosDevices\\MyDriver");
status = IoCreateSymbolicLink(&linkString, &nameString);
if (!NT_SUCCESS(status))
{
IoDeleteDevice(DriverObject->DeviceObject);
return status;
}
DriverObject->MajorFunction[IRP_MJ_CREATE] = CreateMyDriver;
DriverObject->MajorFunction[IRP_MJ_READ] = ReadMyDriver;
DriverObject->MajorFunction[IRP_MJ_WRITE] = WriteMyDriver;
DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = ShutdownMyDriver;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = IoCtlMyDriver;
DriverObject->DriverUnload = MyDriverUnload;
return STATUS_SUCCESS;
}
NTSTATUS CreateMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{
GetMessage(MSG_CREATE, (PVOID)DeviceObject, NULL);
IoCompleteRequest(Irp, IO_NO_INCREMENT);
Return STATUS_SUCCESS;
}
NTSTATUS ReadMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{
GetMessage(MSG_READ, DeviceObject, NULL);
return STATUS_SUCCESS;
}
NTSTATUS WriteMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{
GetMessage(MSG_WRITE, DeviceObject, NULL);
return STATUS_SUCCESS;
};
NTSTATUS ShutdownMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{
GetMessage(MSG_SHUTDOWN, DeviceObject, NULL);
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
NTSTATUS IoCtlMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{
GetMessage(MSG_IOCTL, DeviceObject, NULL);
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
VOID MyDriverUnload (IN PDRIVER_OBJECT DriverObject);
{
UNICODE_STRING linkString;
GetMessage(MSG_DRIVERUNLLOAD, DriverObject, NULL);
RtlInitUnicodeString(&linkString, L"\\DosDDevices\\MyDriver");
IoDeleteSymbolicLink(&linkString);
IoDeleteDevice(DriverObject->DeviceObject);
}
BOOLEAN GetMessage(IN NTSTATUS ErrorCode, IN PVOID IoObject, IN PIRP Irp);
{
PIO_ERROR_LOG_PACKET Log_Packet;
PIO_STACK_LOCATION IrpStackLocation;
PWCHAR pInsertString;
STRING AnsiInsertString;
UNICODE_STRING UniInsertString;
UCHAR Size_of_Packet;
Size_of_Packet = sizeof(IO_ERROR_LOG_PACKET);
Log_Packet = IoAllocateErrorLogEntry(IoObject, Size_of_Packet);
If (Log_Packet == NULL)
return FALSE;
Log_Packet->ErrorCode = ErrorCode;
Log_Packet->UniqueErrorValue = 0;
Log_Packet->RetryCount = 0;
Log_Packet->SequenceNumber = 0;
Log_Packet->IoControlCode = 0;
Log_Packet->DumpDataSize = 0;
if (Irp != NULL)
{
IrpStack = IoGetCurrentIrpStackLocation(Irp);
Log_Packet->MajorFunctionCode = IrpStack->MajorFunction;
Log_Packet->FinalStatus = Irp->IoStatus.Status;
}
else
{
Log_Packet->MajorFunctionCode = 0;
Log_Packet->FinalStatus = 0;
}
IoWriteErrorLogEntry(Log_Packet);
return TRUE;
}