/*++

Copyright (c) 1998-2000 Microsoft Corporation All Rights Reserved

Module Name:

    WMI.C

Abstract:

    This module handle all the WMI Irps by passing the Irps down
    to the next driver in the stack.

Environment:

    Kernel mode

Revision History:

    Peter Lee (Compaq Computer Corp.) April 1999

--*/


#include "dummydma.h"


PCHAR
WMIMinorFunctionString (
    UCHAR MinorFunction
);

#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE,DummyDmaSystemControl)
#endif


NTSTATUS
DummyDmaSystemControl (
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    )
/*++
Routine Description

    We have just received a System Control IRP.

    Pass the Irp down to the next driver in the stack.

--*/
{
    PDUMMYDMA_DEVICE_EXTENSION  DeviceExtension = 
        (PDUMMYDMA_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
    NTSTATUS                status;
    PIO_STACK_LOCATION      stack;

    PAGED_CODE();

    stack = IoGetCurrentIrpStackLocation (Irp);

    DD_DebugPrint((2, "%s\n", 
                WMIMinorFunctionString(stack->MinorFunction)));

    DummyDmaIoIncrement (DeviceExtension);

    //
    // Pass the Irp down to the next driver.
    //
    IoSkipCurrentIrpStackLocation (Irp);
    status = IoCallDriver (DeviceExtension->NextLowerDriver, Irp);

    DummyDmaIoDecrement(DeviceExtension);

    return(status);
}


PCHAR
WMIMinorFunctionString (
    UCHAR MinorFunction
)
{
    switch (MinorFunction)
    {
        case IRP_MN_CHANGE_SINGLE_INSTANCE:
            return "IRP_MN_CHANGE_SINGLE_INSTANCE";
        case IRP_MN_CHANGE_SINGLE_ITEM:
            return "IRP_MN_CHANGE_SINGLE_ITEM";
        case IRP_MN_DISABLE_COLLECTION:
            return "IRP_MN_DISABLE_COLLECTION";
        case IRP_MN_DISABLE_EVENTS:
            return "IRP_MN_DISABLE_EVENTS";
        case IRP_MN_ENABLE_COLLECTION:
            return "IRP_MN_ENABLE_COLLECTION";
        case IRP_MN_ENABLE_EVENTS:
            return "IRP_MN_ENABLE_EVENTS";
        case IRP_MN_EXECUTE_METHOD:
            return "IRP_MN_EXECUTE_METHOD";
        case IRP_MN_QUERY_ALL_DATA:
            return "IRP_MN_QUERY_ALL_DATA";
        case IRP_MN_QUERY_SINGLE_INSTANCE:
            return "IRP_MN_QUERY_SINGLE_INSTANCE";
        case IRP_MN_REGINFO:
            return "IRP_MN_REGINFO";
        default:
            return "IRP_MN_?????";
    }
}


