📄 eject_cdrom.c
字号:
#include <ntddk.h>
#include <ntddstor.h>
NTSYSAPI
NTSTATUS
NTAPI
ZwDeviceIoControlFile(
IN HANDLE hFile,
IN HANDLE hEvent OPTIONAL,
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
IN PVOID ApcContext OPTIONAL,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG IoControlCode,
IN PVOID InputBuffer OPTIONAL,
IN ULONG InputBufferLength,
OUT PVOID OutputBuffer OPTIONAL,
IN ULONG OutputBufferLength
);
PDEVICE_OBJECT DeviceObject;
UNICODE_STRING usDeviceName, usDeviceLinkName, usFileName, usName;;
VOID OnUnload(IN PDRIVER_OBJECT DriverObject)
{
IoDeleteSymbolicLink(&usDeviceLinkName);
DbgPrint("Symbolic link is deleted");
IoDeleteDevice(DeviceObject);
DbgPrint("Device is deleted");
DbgPrint("Driver is unloaded");
}
NTSTATUS DriverDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
PIO_STACK_LOCATION pisl;
pisl = IoGetCurrentIrpStackLocation(Irp);
if(pisl->MajorFunction == IRP_MJ_READ)
{
DbgPrint("IRP_MJ_READ is called");
}
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, 0);
return STATUS_SUCCESS;
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
PDRIVER_DISPATCH *ppdd;
OBJECT_ATTRIBUTES ob;
IO_STATUS_BLOCK iosb;
HANDLE hFile;
NTSTATUS ns;
RtlInitUnicodeString(&usDeviceName, L"\\Device\\TestDrv");
RtlInitUnicodeString(&usDeviceLinkName, L"\\DosDevices\\testdrv");
RtlInitUnicodeString(&usFileName, L"\\DosDevices\\C:\\log1.txt");
InitializeObjectAttributes(&ob, &usFileName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, 0, 0);
ns = IoCreateDevice(DriverObject, 0, &usDeviceName, 0x00001234, 0, TRUE, &DeviceObject);
if(NT_SUCCESS(ns))
{
DbgPrint("Device is created");
IoCreateSymbolicLink(&usDeviceLinkName, &usDeviceName);
DbgPrint("Symbol Link is created");
}
else
DbgPrint("Device & Symlink are already exists %d", ns);
if((ns = ZwCreateFile(&hFile,
GENERIC_WRITE | SYNCHRONIZE,
&ob, &iosb, 0,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_WRITE,
FILE_OPEN_IF,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL, 0)) == STATUS_SUCCESS)
{
DbgPrint("File is created - status %d", ns);
}
else
DbgPrint("Unable to create file %d", ns);
//open CDROM#################################################
RtlInitUnicodeString(&usName, L"\\Device\\CdRom0");
InitializeObjectAttributes(&ob, &usName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, 0, 0);
if((ns = ZwCreateFile(&hFile,
GENERIC_WRITE | SYNCHRONIZE,
&ob, &iosb, 0,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_WRITE,
FILE_OPEN,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL, 0)) == STATUS_SUCCESS)
{
if((ns = ZwDeviceIoControlFile(hFile, NULL, NULL, NULL,
&iosb, IOCTL_STORAGE_EJECT_MEDIA,
NULL, 0, NULL, 0)) == STATUS_SUCCESS)
{
DbgPrint("GOOD - Status - %d", ns);
}
else
DbgPrint("NO GOOD - Status - %d", ns);
}
else
DbgPrint("Unable to open file - %d", ns);
//##########################################################
ppdd = DriverObject->MajorFunction;
ppdd[IRP_MJ_READ] = DriverDispatch;
DriverObject->DriverUnload = OnUnload;
return STATUS_SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -