92 lines
2.3 KiB
C
92 lines
2.3 KiB
C
|
|
|||
|
/*++
|
|||
|
|
|||
|
Copyright (C) Microsoft Corporation, 2000
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
dispatch.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This file contains code for dispatch routines for iScsiPort
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
kernel mode only
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include "port.h"
|
|||
|
|
|||
|
PDRIVER_DISPATCH FdoMajorFunctionTable[IRP_MJ_MAXIMUM_FUNCTION + 1];
|
|||
|
PDRIVER_DISPATCH PdoMajorFunctionTable[IRP_MJ_MAXIMUM_FUNCTION + 1];
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
iScsiPortInitializeDispatchTables()
|
|||
|
{
|
|||
|
ULONG inx;
|
|||
|
|
|||
|
//
|
|||
|
// Initialize FDO dispatch table
|
|||
|
//
|
|||
|
for (inx = 0; inx <= IRP_MJ_MAXIMUM_FUNCTION; inx++) {
|
|||
|
FdoMajorFunctionTable[inx] = iScsiPortDispatchUnsupported;
|
|||
|
}
|
|||
|
|
|||
|
FdoMajorFunctionTable[IRP_MJ_DEVICE_CONTROL] = iScsiPortFdoDeviceControl;
|
|||
|
FdoMajorFunctionTable[IRP_MJ_SCSI] = iScsiPortFdoDispatch;
|
|||
|
FdoMajorFunctionTable[IRP_MJ_PNP] = iScsiPortFdoPnp;
|
|||
|
FdoMajorFunctionTable[IRP_MJ_POWER] = iScsiPortPower;
|
|||
|
FdoMajorFunctionTable[IRP_MJ_CREATE] = iScsiPortFdoCreateClose;
|
|||
|
FdoMajorFunctionTable[IRP_MJ_CLOSE] = iScsiPortFdoCreateClose;
|
|||
|
FdoMajorFunctionTable[IRP_MJ_SYSTEM_CONTROL] = iScsiPortSystemControl;
|
|||
|
|
|||
|
//
|
|||
|
// Initialize PDO dispatch table
|
|||
|
//
|
|||
|
for(inx = 0; inx <= IRP_MJ_MAXIMUM_FUNCTION; inx++) {
|
|||
|
PdoMajorFunctionTable[inx] = iScsiPortDispatchUnsupported;
|
|||
|
}
|
|||
|
|
|||
|
PdoMajorFunctionTable[IRP_MJ_DEVICE_CONTROL] = iScsiPortPdoDeviceControl;
|
|||
|
PdoMajorFunctionTable[IRP_MJ_SCSI] = iScsiPortPdoDispatch;
|
|||
|
PdoMajorFunctionTable[IRP_MJ_PNP] = iScsiPortPdoPnp;
|
|||
|
PdoMajorFunctionTable[IRP_MJ_POWER] = iScsiPortPower;
|
|||
|
PdoMajorFunctionTable[IRP_MJ_CREATE] = iScsiPortPdoCreateClose;
|
|||
|
PdoMajorFunctionTable[IRP_MJ_CLOSE] = iScsiPortPdoCreateClose;
|
|||
|
PdoMajorFunctionTable[IRP_MJ_SYSTEM_CONTROL] = iScsiPortSystemControl;
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
iScsiPortGlobalDispatch(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
)
|
|||
|
{
|
|||
|
PCOMMON_EXTENSION commonExtension = DeviceObject->DeviceExtension;
|
|||
|
PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation(Irp);
|
|||
|
|
|||
|
return (commonExtension->MajorFunction[irpStack->MajorFunction])(DeviceObject,
|
|||
|
Irp);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
iScsiPortDispatchUnsupported(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN PIRP Irp
|
|||
|
)
|
|||
|
{
|
|||
|
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
|
|||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
|||
|
|
|||
|
return STATUS_INVALID_DEVICE_REQUEST;
|
|||
|
}
|