145 lines
2.9 KiB
C
145 lines
2.9 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1996-2001 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
OCRW.C
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This source file contains the dispatch routines which handle
|
||
|
opening, closing, reading, and writing to the device, i.e.:
|
||
|
|
||
|
IRP_MJ_CREATE
|
||
|
IRP_MJ_CLOSE
|
||
|
IRP_MJ_READ
|
||
|
IRP_MJ_WRITE
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
kernel mode
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
06-01-98 : started rewrite
|
||
|
|
||
|
--*/
|
||
|
|
||
|
//*****************************************************************************
|
||
|
// I N C L U D E S
|
||
|
//*****************************************************************************
|
||
|
|
||
|
#include <ntddk.h>
|
||
|
#include <usbdi.h>
|
||
|
#include <usbdlib.h>
|
||
|
|
||
|
#include "usbmass.h"
|
||
|
|
||
|
#ifdef ALLOC_PRAGMA
|
||
|
#pragma alloc_text(PAGE, USBSTOR_Create)
|
||
|
#pragma alloc_text(PAGE, USBSTOR_Close)
|
||
|
#pragma alloc_text(PAGE, USBSTOR_ReadWrite)
|
||
|
#endif
|
||
|
|
||
|
//******************************************************************************
|
||
|
//
|
||
|
// USBSTOR_Create()
|
||
|
//
|
||
|
// Dispatch routine which handles IRP_MJ_CREATE
|
||
|
//
|
||
|
//******************************************************************************
|
||
|
|
||
|
NTSTATUS
|
||
|
USBSTOR_Create (
|
||
|
IN PDEVICE_OBJECT DeviceObject,
|
||
|
IN PIRP Irp
|
||
|
)
|
||
|
{
|
||
|
DBGPRINT(2, ("enter: USBSTOR_Create\n"));
|
||
|
|
||
|
LOGENTRY('CREA', DeviceObject, Irp, 0);
|
||
|
|
||
|
DBGFBRK(DBGF_BRK_CREATE);
|
||
|
|
||
|
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||
|
Irp->IoStatus.Information = 0;
|
||
|
|
||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||
|
|
||
|
DBGPRINT(2, ("exit: USBSTOR_Create\n"));
|
||
|
|
||
|
LOGENTRY('crea', 0, 0, 0);
|
||
|
|
||
|
return STATUS_SUCCESS;
|
||
|
}
|
||
|
|
||
|
|
||
|
//******************************************************************************
|
||
|
//
|
||
|
// USBSTOR_Close()
|
||
|
//
|
||
|
// Dispatch routine which handles IRP_MJ_CLOSE
|
||
|
//
|
||
|
//******************************************************************************
|
||
|
|
||
|
NTSTATUS
|
||
|
USBSTOR_Close (
|
||
|
IN PDEVICE_OBJECT DeviceObject,
|
||
|
IN PIRP Irp
|
||
|
)
|
||
|
{
|
||
|
DBGPRINT(2, ("enter: USBSTOR_Close\n"));
|
||
|
|
||
|
LOGENTRY('CLOS', DeviceObject, Irp, 0);
|
||
|
|
||
|
DBGFBRK(DBGF_BRK_CLOSE);
|
||
|
|
||
|
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||
|
Irp->IoStatus.Information = 0;
|
||
|
|
||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||
|
|
||
|
DBGPRINT(2, ("exit: USBSTOR_Close\n"));
|
||
|
|
||
|
LOGENTRY('clos', 0, 0, 0);
|
||
|
|
||
|
return STATUS_SUCCESS;
|
||
|
}
|
||
|
|
||
|
|
||
|
//******************************************************************************
|
||
|
//
|
||
|
// USBSTOR_ReadWrite()
|
||
|
//
|
||
|
// Dispatch routine which handles IRP_MJ_READ and IRP_MJ_WRITE
|
||
|
//
|
||
|
//******************************************************************************
|
||
|
|
||
|
NTSTATUS
|
||
|
USBSTOR_ReadWrite (
|
||
|
IN PDEVICE_OBJECT DeviceObject,
|
||
|
IN PIRP Irp
|
||
|
)
|
||
|
{
|
||
|
NTSTATUS ntStatus;
|
||
|
|
||
|
DBGPRINT(2, ("enter: USBSTOR_ReadWrite\n"));
|
||
|
|
||
|
LOGENTRY('RW ', DeviceObject, Irp, 0);
|
||
|
|
||
|
DBGFBRK(DBGF_BRK_READWRITE);
|
||
|
|
||
|
ntStatus = STATUS_INVALID_PARAMETER;
|
||
|
Irp->IoStatus.Status = ntStatus;
|
||
|
Irp->IoStatus.Information = 0;
|
||
|
|
||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||
|
|
||
|
DBGPRINT(2, ("exit: USBSTOR_ReadWrite %08X\n", ntStatus));
|
||
|
|
||
|
LOGENTRY('rw ', ntStatus, 0, 0);
|
||
|
|
||
|
return ntStatus;
|
||
|
}
|