As with any other type of Windows driver, we are responsible for propagating our own execution. Accessing Resources While it may be obvious to some, our design is going to based upon how we get access to the resource that our virtual adapter is going to be exporting as a local SCSI device. The default for SynchronizationModel is StorSynchronizeHalfDuplex which is only intended for use if you are porting a Scsiport miniport driver to Storport. These optional interfaces listed below may be necessary depending upon the architecture of the miniport. If, for example, we were presenting a locally based file as a SCSI disk, then we would probably be doing file operations to satisfy the requested operation.

Uploader: Gulkree
Date Added: 27 November 2014
File Size: 14.79 Mb
Operating Systems: Windows NT/2000/XP/2003/2003/7/8/10 MacOS 10/X
Downloads: 71350
Price: Free* [*Free Regsitration Required]

MultipleRequestsPerLun – must be set to TRUE, and indicates that the miniport’s virtual adapter can queue multiple requests per logical unit.

Making SCSI Port Miniport Drivers Work with Storport – Windows drivers | Microsoft Docs

minipoft Do you find anything missing? These fields may be supplied but are not required for a SMD. Do they have to be performed synchronously or asynchronously?

Master – setting this field to TRUE indicates that our miniport’s virtual adapter is a bus master device. Are the resources that we’re exporting accessible locally or remotely?

This is the routine where we’ll register our miniport with Storport.

SCSI Miniport Drivers – Windows drivers | Microsoft Docs

This means that for any SRB we cannot complete immediately, we must miiport a way of processing it at a later time. HwProcessServiceRequest HwCompleteServiceIrp HwInitializeTracing HwCleanupTracing We’ll talk about each of the required entry points in subsequent sections of this article and we’ll leave the other entry points that we might implement for the follow on articles. If this is not set to TRUE, the virtual adapter will not fully initialize.


All this really means is that we either have to use system work items, or create sdsiport own worker threads to provide the background processing and this probably implies that some queuing is involved. Figure 1 illustrates the Storport model. When the SRB is eventually completed by our miniport?

SCSI Port’s Interface with SCSI Port Miniport Drivers

Are we performing the operation or are we passing the request to some other entity to perform the operation e. So we have to make sure that the operations we need to be performed can be performed at that IRQL, or there is some way that we can process the request later on at some lower IRQL. If remotely, how do we get to it? If the resource is local then we’ll have to decide whether we can use kernel APIs to access the resource Zw calls, memory accesses, or IRP based requestsor if we have to communicate with a user mode application or service to get access to the resource.

When processing a request, our driver has to be very cognizant of what IRQL it is being called at. Please find links to each article in the series here: The Storport driver will ensure that any buffers provided are aligned on at least this boundary. This can sometimes be a pain for users who implement ScsiPassThrough, due to the fact that their requests will fail if the input buffers are not correctly aligned.

We can use this area any way we want on a per SRB basis.

Thus, when designing our driver we must ensure that we have all the resources necessary to process a request in place before initiating the request. If on the other hand our devices are dynamic, then we’ll need to have a way to know when those dynamic devices have arrived or have departed, and notify Storport of those occurrences. This structure is defined in Figure 3.


While for some there may be some work involved, for others, this routine could merely notify Storport that the bus reset completed successfully. That other driver could be for some special device that exports both network and SCSI functionality and exists as a virtual bus driver which creates a virtual PDO that our miniport will be loaded to handle.

How the virtual adapter is initialized will depend upon the design of the miniport being developed.

SCSI Miniport Drivers

This routine is called by Storport to perform synchronous operations that control the state or the behavior of the adapter. An SRB being initiated does not mean completed. This first article in the series describes the architecture, flow of control, and key routines to be implemented when developing a virtual miniport.

AdapterScansDown – for a virtual adapter the setting of this field does not matter.

Storport is a welcome relief to storage driver writers wishing to develop a driver that exports a virtual device. HwAdapterControl This routine is called by Storport to perform synchronous operations that control the state or the behavior of the adapter.

In fact, if we wanted to, there would be no reason why we couldn’t communicate with a user mode service or some other driver on the system to provide access to our storage. If the SRB is not completed in the specified time, the request will be completed by Storport and the logical unit, target, and bus will be reset. Via minipoort driver, kernel APIs, or a user mode entity?