#include <ntddk.h>
+#include <ntdddisk.h>
#include "ramdrv.h"
#include <debug.h>
-#include <rosrtl/string.h>
#include "../../lib/bzip2/bzlib.h"
-NTSTATUS STDCALL RamdrvDispatchDeviceControl(PDEVICE_OBJECT DeviceObject,
+static NTSTATUS STDCALL RamdrvDispatchDeviceControl(PDEVICE_OBJECT DeviceObject,
PIRP Irp)
{
PIO_STACK_LOCATION IrpStack;
Status = STATUS_INVALID_DEVICE_REQUEST;
}
Irp->IoStatus.Status = Status;
- IoCompleteRequest(Irp, NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT);
+ IoCompleteRequest(Irp, NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT);
return Status;
}
-NTSTATUS STDCALL RamdrvDispatchReadWrite(PDEVICE_OBJECT DeviceObject,
+static NTSTATUS STDCALL RamdrvDispatchReadWrite(PDEVICE_OBJECT DeviceObject,
PIRP Irp)
{
PRAMDRV_DEVICE_EXTENSION devext = (PRAMDRV_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
Stk->Parameters.Read.Length = devext->Size - Stk->Parameters.Read.ByteOffset.u.LowPart;
if( Stk->MajorFunction == IRP_MJ_READ )
RtlCopyMemory( MmGetSystemAddressForMdl( Irp->MdlAddress ),
- devext->Buffer + Stk->Parameters.Read.ByteOffset.u.LowPart,
+ (PVOID)((ULONG_PTR)devext->Buffer + Stk->Parameters.Read.ByteOffset.u.LowPart),
Stk->Parameters.Read.Length );
- else RtlCopyMemory( devext->Buffer + Stk->Parameters.Read.ByteOffset.u.LowPart,
+ else RtlCopyMemory( (PVOID)((ULONG_PTR)devext->Buffer + Stk->Parameters.Read.ByteOffset.u.LowPart),
MmGetSystemAddressForMdl( Irp->MdlAddress ),
Stk->Parameters.Read.Length );
Irp->IoStatus.Status = STATUS_SUCCESS;
return STATUS_SUCCESS;
}
-NTSTATUS STDCALL RamdrvDispatchOpenClose(PDEVICE_OBJECT DeviceObject,
+static NTSTATUS STDCALL RamdrvDispatchOpenClose(PDEVICE_OBJECT DeviceObject,
PIRP Irp)
{
DPRINT("RamdrvDispatchOpenClose\n");
NTSTATUS STDCALL DriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
- UNICODE_STRING DeviceName = ROS_STRING_INITIALIZER(L"\\Device\\Ramdisk");
+ UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\Ramdisk");
NTSTATUS Status;
PDEVICE_OBJECT DeviceObject;
PRAMDRV_DEVICE_EXTENSION devext;
- UNICODE_STRING LinkName;
+ UNICODE_STRING LinkName = RTL_CONSTANT_STRING(L"\\??\\Z:");
+ UNICODE_STRING ImageName = RTL_CONSTANT_STRING(L"\\Device\\Floppy0\\ramdisk.bz2");
HANDLE file;
OBJECT_ATTRIBUTES objattr;
IO_STATUS_BLOCK iosb;
void *tbuff;
unsigned int dstlen = 1024 * 1440;
FILE_STANDARD_INFORMATION finfo;
- DWORD err;
-
+ ULONG err;
+
DPRINT("Ramdisk driver\n");
-
+
/* Export other driver entry points... */
- DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH)RamdrvDispatchOpenClose;
- DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH)RamdrvDispatchOpenClose;
- DriverObject->MajorFunction[IRP_MJ_READ] = (PDRIVER_DISPATCH)RamdrvDispatchReadWrite;
- DriverObject->MajorFunction[IRP_MJ_WRITE] = (PDRIVER_DISPATCH)RamdrvDispatchReadWrite;
- DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = (PDRIVER_DISPATCH)RamdrvDispatchDeviceControl;
-
-
+ DriverObject->MajorFunction[IRP_MJ_CREATE] = RamdrvDispatchOpenClose;
+ DriverObject->MajorFunction[IRP_MJ_CLOSE] = RamdrvDispatchOpenClose;
+ DriverObject->MajorFunction[IRP_MJ_READ] = RamdrvDispatchReadWrite;
+ DriverObject->MajorFunction[IRP_MJ_WRITE] = RamdrvDispatchReadWrite;
+ DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = RamdrvDispatchDeviceControl;
+
+
// create device and symbolic link
Status = IoCreateDevice( DriverObject,
sizeof( RAMDRV_DEVICE_EXTENSION ),
Status = STATUS_INSUFFICIENT_RESOURCES;
goto cleandevice;
}
- RtlRosInitUnicodeStringFromLiteral( &LinkName, L"\\??\\Z:" );
IoCreateSymbolicLink( &LinkName, &DeviceName );
- RtlRosInitUnicodeStringFromLiteral( &LinkName, L"\\Device\\Floppy0\\ramdisk.bz2" );
InitializeObjectAttributes( &objattr,
- &LinkName,
+ &ImageName,
0,
0,
0 );
allocsize.u.LowPart = allocsize.u.HighPart = 0;
- Status = NtOpenFile( &file,
+ Status = ZwOpenFile( &file,
GENERIC_READ,
&objattr,
&iosb,
0,
0,
0 );
- Status = NtCreateEvent( &event,
+ Status = ZwCreateEvent( &event,
0,
&objattr,
- TRUE,
+ NotificationEvent,
FALSE );
if( !NT_SUCCESS( Status ) )
{
goto cleanfile;
}
- Status = NtQueryInformationFile( file,
+ Status = ZwQueryInformationFile( file,
&iosb,
&finfo,
sizeof( finfo ),
goto cleanevent;
}
- Status = NtReadFile( file,
+ Status = ZwReadFile( file,
event,
0,
0,
DPRINT( "Failed to read floppy\n" );
goto cleantbuff;
}
- Status = NtWaitForSingleObject( event, FALSE, 0 );
+ Status = ZwWaitForSingleObject( event, FALSE, 0 );
if( Status != STATUS_WAIT_0 || !NT_SUCCESS( iosb.Status ) )
{
DPRINT( "Failed to read floppy\n" );
}
else DbgPrint( "RAMDRV: Failed to decomparess image, error: %d\n", err );
ExFreePool( tbuff );
- NtClose( file );
- NtClose( event );
+ ZwClose( file );
+ ZwClose( event );
return STATUS_SUCCESS;
cleantbuff:
ExFreePool( tbuff );
cleanevent:
- NtClose( event );
+ ZwClose( event );
cleanfile:
- NtClose( file );
+ ZwClose( file );
cleanbuffer:
ExFreePool( devext->Buffer );