Create Usb bulk storage template.
Added: trunk/reactos/drivers/usb/usbstor/
Added: trunk/reactos/drivers/usb/usbstor/usbstor.c
Added: trunk/reactos/drivers/usb/usbstor/usbstor.def
Added: trunk/reactos/drivers/usb/usbstor/usbstor.h
Added: trunk/reactos/drivers/usb/usbstor/usbstor.rc
Added: trunk/reactos/drivers/usb/usbstor/usbstor.xml
_____
Added: trunk/reactos/drivers/usb/usbstor/usbstor.c
--- trunk/reactos/drivers/usb/usbstor/usbstor.c 2005-08-14 21:44:58 UTC
(rev 17389)
+++ trunk/reactos/drivers/usb/usbstor/usbstor.c 2005-08-14 22:27:15 UTC
(rev 17390)
@@ -0,0 +1,154 @@
+/*
+ * ReactOS kernel
+ * Copyright (C) 2001, 2002, 2003, 2004, 2005 ReactOS Team
+ *
+ * This program is free software; you can redistribute it and/or
modify
+ * it under the terms of the GNU General Public License as published
by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+/*
+ * Universal Serial Bus Bulk Storage Driver
+ *
+ * Written by James Tabor
+ *
+ */
+
+/* INCLUDES
******************************************************************/
+
+#define NDEBUG
+#define INITGUID
+#include "usbstor.h"
+
+/* PUBLIC AND PRIVATE FUNCTIONS
**********************************************/
+
+NTSTATUS STDCALL
+IrpStub(IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ NTSTATUS Status = STATUS_NOT_SUPPORTED;
+ Irp->IoStatus.Status = Status;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return Status;
+}
+
+NTSTATUS STDCALL
+AddDevice(IN PDRIVER_OBJECT DriverObject,
+ IN PDEVICE_OBJECT pdo)
+{
+return STATUS_SUCCESS;
+}
+
+VOID STDCALL
+DriverUnload(PDRIVER_OBJECT DriverObject)
+{
+}
+
+VOID STDCALL
+StartIo(PUSBSTOR_DEVICE_EXTENSION DeviceExtension,
+ PIRP Irp)
+{
+}
+
+static NTSTATUS STDCALL
+DispatchClose(PDEVICE_OBJECT DeviceObject, PIRP Irp)
+{
+ Irp->IoStatus.Information = 0;
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS STDCALL
+DispatchCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp)
+{
+return STATUS_SUCCESS;
+}
+
+static NTSTATUS STDCALL
+DispatchDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
+{
+return STATUS_SUCCESS;
+}
+
+
+static NTSTATUS STDCALL
+DispatchScsi(PDEVICE_OBJECT DeviceObject, PIRP Irp)
+{
+return STATUS_SUCCESS;
+}
+
+static NTSTATUS STDCALL
+DispatchReadWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp)
+{
+return STATUS_SUCCESS;
+}
+
+static NTSTATUS STDCALL
+DispatchSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
+{
+return STATUS_SUCCESS;
+}
+
+static NTSTATUS STDCALL
+DispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp)
+{
+return STATUS_SUCCESS;
+}
+
+static NTSTATUS STDCALL
+DispatchPower(PDEVICE_OBJECT fido, PIRP Irp)
+{
+ DPRINT1("USBSTOR: IRP_MJ_POWER unimplemented\n");
+ Irp->IoStatus.Information = 0;
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return STATUS_SUCCESS;
+}
+
+
+
+/*
+ * Standard DriverEntry method.
+ */
+NTSTATUS STDCALL
+DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegPath)
+{
+ ULONG i;
+ DPRINT("********* USB Storage *********\n");
+
+ DriverObject->DriverUnload = DriverUnload;
+ DriverObject->DriverExtension->AddDevice = AddDevice;
+
+ for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
+ DriverObject->MajorFunction[i] = IrpStub;
+
+ DriverObject->DriverStartIo = (PVOID)StartIo;
+
+ DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchClose;
+ DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchClose;
+ DriverObject->MajorFunction[IRP_MJ_CLEANUP] = DispatchCleanup;
+ DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] =
DispatchDeviceControl;
+ DriverObject->MajorFunction[IRP_MJ_READ] = DispatchReadWrite;
+ DriverObject->MajorFunction[IRP_MJ_WRITE] = DispatchReadWrite;
+
+/* Scsi Miniport support */
+ DriverObject->MajorFunction[IRP_MJ_SCSI] = DispatchScsi;
+ DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] =
DispatchSystemControl;
+
+ DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;
+ DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;
+
+ return STATUS_SUCCESS;
+}
+
_____
Added: trunk/reactos/drivers/usb/usbstor/usbstor.def
--- trunk/reactos/drivers/usb/usbstor/usbstor.def 2005-08-14
21:44:58 UTC (rev 17389)
+++ trunk/reactos/drivers/usb/usbstor/usbstor.def 2005-08-14
22:27:15 UTC (rev 17390)
@@ -0,0 +1,2 @@
+LIBRARY usbstor.sys
+EXPORTS
_____
Added: trunk/reactos/drivers/usb/usbstor/usbstor.h
--- trunk/reactos/drivers/usb/usbstor/usbstor.h 2005-08-14 21:44:58 UTC
(rev 17389)
+++ trunk/reactos/drivers/usb/usbstor/usbstor.h 2005-08-14 22:27:15 UTC
(rev 17390)
@@ -0,0 +1,83 @@
+#include <ddk/ntddk.h>
+#include <ddk/usbdi.h>
+#include <ddk/usbiodef.h>
+#include <initguid.h>
+#include <debug.h>
+
+#define USB_STOR_TAG TAG('u','s','b','s')
+#define USB_MAXCHILDREN (16)
+
+NTSTATUS STDCALL
+IoAttachDeviceToDeviceStackSafe(
+ IN PDEVICE_OBJECT SourceDevice,
+ IN PDEVICE_OBJECT TargetDevice,
+ OUT PDEVICE_OBJECT *AttachedToDeviceObject);
+
+typedef struct _USBSTOR_DEVICE_EXTENSION
+{
+ BOOLEAN IsFDO;
+ struct usb_device* dev;
+ PDEVICE_OBJECT LowerDevice;
+
+ PDEVICE_OBJECT Children[USB_MAXCHILDREN];
+
+ /* Fields valid only when IsFDO == FALSE */
+ UNICODE_STRING DeviceDescription; // REG_SZ
+ UNICODE_STRING DeviceId; // REG_SZ
+ UNICODE_STRING InstanceId; // REG_SZ
+ UNICODE_STRING HardwareIds; // REG_MULTI_SZ
+ UNICODE_STRING CompatibleIds; // REG_MULTI_SZ
+ UNICODE_STRING SymbolicLinkName;
+} USBSTOR_DEVICE_EXTENSION, *PUSBSTOR_DEVICE_EXTENSION;
+
+
+/* cleanup.c */
+NTSTATUS STDCALL
+UsbStorCleanup(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp);
+
+/* fdo.c */
+NTSTATUS STDCALL
+UsbStorPnpFdo(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp);
+
+NTSTATUS
+UsbStorDeviceControlFdo(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp);
+
+/* misc.c */
+NTSTATUS
+ForwardIrpAndWait(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp);
+
+NTSTATUS STDCALL
+ForwardIrpAndForget(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp);
+
+NTSTATUS
+UsbStorDuplicateUnicodeString(
+ OUT PUNICODE_STRING Destination,
+ IN PUNICODE_STRING Source,
+ IN POOL_TYPE PoolType);
+
+NTSTATUS
+UsbStorInitMultiSzString(
+ OUT PUNICODE_STRING Destination,
+ ... /* list of PCSZ */);
+
+/* pdo.c */
+NTSTATUS STDCALL
+UsbStorPnpPdo(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp);
+
+NTSTATUS
+UsbStorDeviceControlPdo(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp);
+
_____
Added: trunk/reactos/drivers/usb/usbstor/usbstor.rc
--- trunk/reactos/drivers/usb/usbstor/usbstor.rc 2005-08-14
21:44:58 UTC (rev 17389)
+++ trunk/reactos/drivers/usb/usbstor/usbstor.rc 2005-08-14
22:27:15 UTC (rev 17390)
@@ -0,0 +1,5 @@
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "USB Storage Device Driver\0"
+#define REACTOS_STR_INTERNAL_NAME "usbstor\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "usbstor.sys\0"
+#include <reactos/version.rc>
_____
Added: trunk/reactos/drivers/usb/usbstor/usbstor.xml
--- trunk/reactos/drivers/usb/usbstor/usbstor.xml 2005-08-14
21:44:58 UTC (rev 17389)
+++ trunk/reactos/drivers/usb/usbstor/usbstor.xml 2005-08-14
22:27:15 UTC (rev 17390)
@@ -0,0 +1,9 @@
+<module name="usbstor" type="kernelmodedriver"
installbase="system32/drivers" installname="usbstor.sys"
warnings="true">
+ <define name="__USE_W32API" />
+ <define name="DEBUG_MODE" />
+ <include base="ntoskrnl">include</include>
+ <library>ntoskrnl</library>
+ <library>hal</library>
+ <file>usbstor.c</file>
+ <file>usbstor.rc</file>
+</module>