[ros-diffs] [sir_richard] 46541: [COMPBATT]: Helper code, CompBattGetDeviceObjectPointer and BatteryIoctl.

sir_richard at svn.reactos.org sir_richard at svn.reactos.org
Mon Mar 29 02:10:56 CEST 2010


Author: sir_richard
Date: Mon Mar 29 02:10:56 2010
New Revision: 46541

URL: http://svn.reactos.org/svn/reactos?rev=46541&view=rev
Log:
[COMPBATT]: Helper code, CompBattGetDeviceObjectPointer and BatteryIoctl.

Modified:
    trunk/reactos/drivers/bus/acpi/compbatt/compbatt.h
    trunk/reactos/drivers/bus/acpi/compbatt/compmisc.c
    trunk/reactos/drivers/bus/acpi/compbatt/comppnp.c

Modified: trunk/reactos/drivers/bus/acpi/compbatt/compbatt.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/bus/acpi/compbatt/compbatt.h?rev=46541&r1=46540&r2=46541&view=diff
==============================================================================
--- trunk/reactos/drivers/bus/acpi/compbatt/compbatt.h [iso-8859-1] (original)
+++ trunk/reactos/drivers/bus/acpi/compbatt/compbatt.h [iso-8859-1] Mon Mar 29 02:10:56 2010
@@ -132,7 +132,7 @@
 NTSTATUS
 NTAPI
 CompBattGetDeviceObjectPointer(
-    IN PCUNICODE_STRING DeviceName,
+    IN PUNICODE_STRING DeviceName,
     IN ACCESS_MASK DesiredAccess,
     OUT PFILE_OBJECT *FileObject,
     OUT PDEVICE_OBJECT *DeviceObject

Modified: trunk/reactos/drivers/bus/acpi/compbatt/compmisc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/bus/acpi/compbatt/compmisc.c?rev=46541&r1=46540&r2=46541&view=diff
==============================================================================
--- trunk/reactos/drivers/bus/acpi/compbatt/compmisc.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/bus/acpi/compbatt/compmisc.c [iso-8859-1] Mon Mar 29 02:10:56 2010
@@ -22,19 +22,102 @@
              IN ULONG OutputBufferLength,
              IN BOOLEAN InternalDeviceIoControl)
 {
-    UNIMPLEMENTED;
-    return STATUS_NOT_IMPLEMENTED;
+    IO_STATUS_BLOCK IoStatusBlock;
+    KEVENT Event;
+    NTSTATUS Status;
+    PIRP Irp;
+    PAGED_CODE();
+    if (CompBattDebug & 0x100) DbgPrint("CompBatt: ENTERING BatteryIoctl\n");
+
+    /* Initialize the event and IRP */
+    KeInitializeEvent(&Event, SynchronizationEvent, 0);
+    Irp = IoBuildDeviceIoControlRequest(IoControlCode,
+                                        DeviceObject,
+                                        InputBuffer,
+                                        InputBufferLength,
+                                        OutputBuffer,
+                                        OutputBufferLength,
+                                        InternalDeviceIoControl,
+                                        &Event,
+                                        &IoStatusBlock);
+    if (Irp)
+    {
+        /* Call the class driver miniport */
+        Status = IofCallDriver(DeviceObject, Irp);
+        if (Status == STATUS_PENDING)
+        {
+            /* Wait for result */
+            KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
+            Status = IoStatusBlock.Status;
+        }
+        
+        /* Print failure */
+        if (!(NT_SUCCESS(Status)) && (CompBattDebug & 8))
+            DbgPrint("BatteryIoctl: Irp failed - %x\n", Status);
+        
+        /* Done */
+        if (CompBattDebug & 0x100) DbgPrint("CompBatt: EXITING BatteryIoctl\n");
+    }
+    else
+    {
+        /* Out of memory */
+        if (CompBattDebug & 8) DbgPrint("BatteryIoctl: couldn't create Irp\n");
+        Status = STATUS_INSUFFICIENT_RESOURCES;
+    }
+    
+    /* Return status */
+    return Status;
 }
 
 NTSTATUS
 NTAPI
-CompBattGetDeviceObjectPointer(IN PCUNICODE_STRING DeviceName,
+CompBattGetDeviceObjectPointer(IN PUNICODE_STRING DeviceName,
                                IN ACCESS_MASK DesiredAccess,
                                OUT PFILE_OBJECT *FileObject,
                                OUT PDEVICE_OBJECT *DeviceObject)
 {
-    UNIMPLEMENTED;
-    return STATUS_NOT_IMPLEMENTED;
+    NTSTATUS Status;
+    OBJECT_ATTRIBUTES ObjectAttributes;
+    IO_STATUS_BLOCK IoStatusBlock;
+    PFILE_OBJECT LocalFileObject;
+    HANDLE DeviceHandle;
+    PAGED_CODE();
+    
+    /* Open a file object handle to the device */
+    InitializeObjectAttributes(&ObjectAttributes, DeviceName, 0, NULL, NULL);
+    Status = ZwCreateFile(&DeviceHandle,
+                          DesiredAccess,
+                          &ObjectAttributes,
+                          &IoStatusBlock,
+                          NULL,
+                          0,
+                          FILE_SHARE_READ | FILE_SHARE_WRITE,
+                          FILE_OPEN,
+                          0,
+                          NULL,
+                          0);
+    if (NT_SUCCESS(Status))
+    {
+        /* Reference the file object */
+        Status = ObReferenceObjectByHandle(DeviceHandle,
+                                           0,
+                                           IoFileObjectType,
+                                           KernelMode,
+                                           (PVOID)&LocalFileObject,
+                                           NULL);
+        if (NT_SUCCESS(Status))
+        {
+            /* Return the FO and the associated DO */
+            *FileObject = LocalFileObject;
+            *DeviceObject = IoGetRelatedDeviceObject(LocalFileObject);
+        }
+      
+        /* Close the handle */
+        ZwClose(DeviceHandle);
+    }
+    
+    /* Return status */
+    return Status;
 }
 
 /* EOF */

Modified: trunk/reactos/drivers/bus/acpi/compbatt/comppnp.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/bus/acpi/compbatt/comppnp.c?rev=46541&r1=46540&r2=46541&view=diff
==============================================================================
--- trunk/reactos/drivers/bus/acpi/compbatt/comppnp.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/bus/acpi/compbatt/comppnp.c [iso-8859-1] Mon Mar 29 02:10:56 2010
@@ -102,7 +102,7 @@
 
 NTSTATUS
 NTAPI
-CompBattAddNewBattery(IN PCUNICODE_STRING BatteryName,
+CompBattAddNewBattery(IN PUNICODE_STRING BatteryName,
                       IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
 {
     NTSTATUS Status = STATUS_SUCCESS;




More information about the Ros-diffs mailing list