- Eliminate function pointer typecasts in csqtest
[reactos.git] / reactos / drivers / test / csqtest / csqtest.c
index c362561..3a6c217 100644 (file)
@@ -28,6 +28,9 @@ IO_CSQ Csq;
 LIST_ENTRY IrpQueue;
 KSPIN_LOCK IrpQueueLock;
 
+/* Device object */
+PDEVICE_OBJECT DeviceObject;
+
 /* 
  * CSQ Callbacks 
  */
@@ -155,7 +158,18 @@ NTSTATUS NTAPI DispatchIoctl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
 }
 
 VOID NTAPI Unload(PDRIVER_OBJECT DriverObject)
+/*
+ * Function: called by the OS to release resources before unload
+ */
 {
+       UNICODE_STRING LinkName;
+
+       RtlInitUnicodeString(&LinkName, DOS_DEVICE_NAME);
+
+       IoDeleteSymbolicLink(&LinkName);
+
+       if(DeviceObject)
+               IoDeleteDevice(DeviceObject);
 }
 
 /*
@@ -167,18 +181,17 @@ NTSTATUS NTAPI DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING Registry
        NTSTATUS Status;
        UNICODE_STRING NtName;
        UNICODE_STRING DosName;
-       PDEVICE_OBJECT DeviceObject;
-
-       DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH)DispatchCreateCloseCleanup;
-       DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH)DispatchCreateCloseCleanup;
-       DriverObject->MajorFunction[IRP_MJ_CLEANUP] = (PDRIVER_DISPATCH)DispatchCreateCloseCleanup;
-       DriverObject->MajorFunction[IRP_MJ_READ] = (PDRIVER_DISPATCH)DispatchReadWrite;
-       DriverObject->MajorFunction[IRP_MJ_WRITE] = (PDRIVER_DISPATCH)DispatchReadWrite;
-       DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = (PDRIVER_DISPATCH)DispatchIoctl;
-       DriverObject->DriverUnload = (PDRIVER_UNLOAD)Unload;
-
-       Status = IoCsqInitialize(&Csq, (PIO_CSQ_INSERT_IRP)CsqInsertIrp, CsqRemoveIrp, CsqPeekNextIrp, 
-                                                                                                        CsqAcquireLock, (PIO_CSQ_RELEASE_LOCK)CsqReleaseLock, CsqCompleteCancelledIrp);
+
+       DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreateCloseCleanup;
+       DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchCreateCloseCleanup;
+       DriverObject->MajorFunction[IRP_MJ_CLEANUP] = DispatchCreateCloseCleanup;
+       DriverObject->MajorFunction[IRP_MJ_READ] = DispatchReadWrite;
+       DriverObject->MajorFunction[IRP_MJ_WRITE] = DispatchReadWrite;
+       DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchIoctl;
+       DriverObject->DriverUnload = Unload;
+
+       Status = IoCsqInitialize(&Csq, CsqInsertIrp, CsqRemoveIrp, CsqPeekNextIrp, 
+                                                                                                        CsqAcquireLock, CsqReleaseLock, CsqCompleteCancelledIrp);
 
        if(Status != STATUS_SUCCESS)
                KdPrint(("csqtest: IoCsqInitalize failed: 0x%x\n", Status));