#include <NTDDK.h>\r
}\r
#include "sdpdriver.h"\r
-#include "SdpLib.h"\r
+#include "SdpShared.h"\r
#include "SdpTrace.h"\r
\r
-NTSTATUS CreateDevice (IN PDRIVER_OBJECT pDriverObject);\r
+SdpDriver *g_pSdpDriver = NULL;\r
\r
VOID DriverUnload (\r
IN PDRIVER_OBJECT pDriverObject \r
IoDeleteDevice(pDevObj);\r
}\r
}\r
+ g_pSdpDriver = pSdpDriver;\r
return rc;\r
\r
}\r
PIO_STACK_LOCATION pIrpSp;\r
pIrp->IoStatus.Status = STATUS_SUCCESS;\r
pIrp->IoStatus.Information = 0;\r
+ PVOID pInputBuffer = NULL;\r
+ PVOID pOutputBuffer = NULL;\r
+ ULONG OutputDataSize = 0;\r
+\r
\r
\r
pIrpSp = IoGetCurrentIrpStackLocation(pIrp);\r
// Handle the mode of the request and get it's params\r
\r
\r
- // Handle the request itslef\r
+ // Handle the request itself\r
+ rc = g_pSdpDriver->DispatchDeviceIoControl(\r
+ pIrpSp->FileObject,\r
+ pIrp,\r
+ pInputBuffer,\r
+ pIrpSp->Parameters.DeviceIoControl.InputBufferLength,\r
+ pOutputBuffer,\r
+ pIrpSp->Parameters.DeviceIoControl.OutputBufferLength,\r
+ pIrpSp->Parameters.DeviceIoControl.IoControlCode,\r
+ OutputDataSize\r
+ );\r
+\r
+ break;\r
+ \r
} \r
}\r
\r
+ if (rc != STATUS_PENDING) {\r
+ pIrp->IoStatus.Status = rc;\r
+ pIrp->IoStatus.Information = OutputDataSize;\r
+ IoCompleteRequest(pIrp, IO_NO_INCREMENT);\r
+ }\r
return rc;\r
}\r
\r
+\r
+NTSTATUS SdpDriver::DispatchDeviceIoControl(\r
+ IN PFILE_OBJECT pDeviceObject,\r
+ IN PIRP pIrp,\r
+ PVOID pInputBuffer,\r
+ ULONG InputBufferLength,\r
+ PVOID pOutputBuffer,\r
+ ULONG OutputBufferLength,\r
+ ULONG IoControlCode,\r
+ ULONG &OutputDataSize\r
+ )\r
+{\r
+ NTSTATUS rc = STATUS_SUCCESS;\r
+ switch (IoControlCode) {\r
+ case IOCTL_WSP_SOCKET :\r
+ SDP_PRINT(SDP_DEBUG, SDP_DRIVER, ("DispatchDeviceIoControl IOCTL_WSP_SOCKET recieved\n" )); \r
+\r
+\r
+ break;\r
+ default:\r
+ // This is an unrecgnized IOCTL\r
+ ASSERT(FALSE);\r
+ SDP_PRINT(SDP_ERR, SDP_DRIVER, ("DispatchDeviceIoControl unknow IOCTL code = 0x%x\n", IoControlCode ));\r
+ rc = STATUS_INVALID_PARAMETER;\r
+ goto Cleanup;\r
+\r
+ \r
+ }\r
+Cleanup:\r
+ return rc;\r
+}\r
+\r
+\r
IN PIRP pIrp\r
);\r
\r
+ NTSTATUS DispatchDeviceIoControl(\r
+ IN PFILE_OBJECT pDeviceObject,\r
+ IN PIRP pIrp,\r
+ PVOID pInputBuffer,\r
+ ULONG InputBufferLength,\r
+ PVOID pOutputBuffer,\r
+ ULONG OutputBufferLength,\r
+ ULONG IoControlCode,\r
+ ULONG &OutputDataSize\r
+ );\r
+ \r
+ \r
+\r
\r
\r
private:\r
PDEVICE_OBJECT m_pDevObj;\r
};\r
\r
+extern SdpDriver *g_pSdpDriver;\r
+\r
#endif //H_SDP_DRIVER_H\r