xref: /reactos/drivers/base/condrv/dispatch.c (revision 69931a4a)
1 /*
2  * COPYRIGHT:       See COPYING in the top level directory
3  * PROJECT:         ReactOS Console Driver
4  * FILE:            drivers/base/condrv/dispatch.c
5  * PURPOSE:         Console Driver - Dispatching interface
6  * PROGRAMMERS:     Hermes Belusca-Maito (hermes.belusca@sfr.fr)
7  */
8 
9 /* INCLUDES *******************************************************************/
10 
11 #include "condrv.h"
12 
13 #define NDEBUG
14 #include <debug.h>
15 
16 /* FUNCTIONS ******************************************************************/
17 
18 NTSTATUS NTAPI
19 CompleteRequest(IN PIRP      Irp,
20                 IN NTSTATUS  Status,
21                 IN ULONG_PTR Information)
22 {
23     Irp->IoStatus.Status      = Status;
24     Irp->IoStatus.Information = Information;
25     IoCompleteRequest(Irp, IO_NO_INCREMENT);
26 
27     return Status;
28 }
29 
30 NTSTATUS NTAPI
31 ConDrvDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
32 {
33 #define HANDLE_CTRL_CODE(Code)  \
34     case Code :                 \
35     {                           \
36         DPRINT1("ConDrv: " #Code ", stack->FileObject = 0x%p\n", stack->FileObject);        \
37         if (stack->FileObject)                                                              \
38         {                                                                                   \
39             DPRINT1("stack->FileObject->FileName = %wZ\n", &stack->FileObject->FileName);   \
40         }                                                                                   \
41         break;                                                                              \
42     }
43 
44     PIO_STACK_LOCATION stack    = IoGetCurrentIrpStackLocation(Irp);
45     // ULONG              ctrlCode = stack->Parameters.DeviceIoControl.IoControlCode;
46     ULONG MajorFunction         = stack->MajorFunction;
47 
48     /* Just display all the IRP codes for now... */
49     switch (MajorFunction)
50     {
51         HANDLE_CTRL_CODE(IRP_MJ_CREATE);
52         HANDLE_CTRL_CODE(IRP_MJ_CREATE_NAMED_PIPE);
53         HANDLE_CTRL_CODE(IRP_MJ_CLOSE);
54         HANDLE_CTRL_CODE(IRP_MJ_READ);
55         HANDLE_CTRL_CODE(IRP_MJ_WRITE);
56         HANDLE_CTRL_CODE(IRP_MJ_QUERY_INFORMATION);
57         HANDLE_CTRL_CODE(IRP_MJ_SET_INFORMATION);
58         HANDLE_CTRL_CODE(IRP_MJ_QUERY_EA);
59         HANDLE_CTRL_CODE(IRP_MJ_SET_EA);
60         HANDLE_CTRL_CODE(IRP_MJ_FLUSH_BUFFERS);
61         HANDLE_CTRL_CODE(IRP_MJ_QUERY_VOLUME_INFORMATION);
62         HANDLE_CTRL_CODE(IRP_MJ_SET_VOLUME_INFORMATION);
63         HANDLE_CTRL_CODE(IRP_MJ_DIRECTORY_CONTROL);
64         HANDLE_CTRL_CODE(IRP_MJ_FILE_SYSTEM_CONTROL);
65         HANDLE_CTRL_CODE(IRP_MJ_DEVICE_CONTROL);
66         HANDLE_CTRL_CODE(IRP_MJ_INTERNAL_DEVICE_CONTROL);
67         HANDLE_CTRL_CODE(IRP_MJ_SHUTDOWN);
68         HANDLE_CTRL_CODE(IRP_MJ_LOCK_CONTROL);
69         HANDLE_CTRL_CODE(IRP_MJ_CLEANUP);
70         HANDLE_CTRL_CODE(IRP_MJ_CREATE_MAILSLOT);
71         HANDLE_CTRL_CODE(IRP_MJ_QUERY_SECURITY);
72         HANDLE_CTRL_CODE(IRP_MJ_SET_SECURITY);
73         HANDLE_CTRL_CODE(IRP_MJ_POWER);
74         HANDLE_CTRL_CODE(IRP_MJ_SYSTEM_CONTROL);
75         HANDLE_CTRL_CODE(IRP_MJ_DEVICE_CHANGE);
76         HANDLE_CTRL_CODE(IRP_MJ_QUERY_QUOTA);
77         HANDLE_CTRL_CODE(IRP_MJ_SET_QUOTA);
78         HANDLE_CTRL_CODE(IRP_MJ_PNP);
79         // case IRP_MJ_PNP_POWER:
80         // case IRP_MJ_MAXIMUM_FUNCTION:
81 
82         default:
83         {
84             DPRINT1("Unknown Major %lu\n", MajorFunction);
85             break;
86         }
87     }
88 
89     return CompleteRequest(Irp, STATUS_SUCCESS, 0);
90 }
91 
92 /* EOF */
93