57 LunExtension->Common.LowerDevice->DeviceExtension;
71 LunExtension->DeviceClaimed =
FALSE;
79 if (LunExtension->DeviceClaimed)
91 LunExtension->DeviceClaimed =
TRUE;
133 PIRP NextIrp, IrpList;
146 DPRINT1(
"ScsiPortDispatchScsi() called with Srb = NULL!\n");
150 Irp->IoStatus.Information = 0;
165 DPRINT(
"ScsiPortDispatchScsi() called with an invalid LUN\n");
170 Irp->IoStatus.Information = 0;
181 DPRINT(
" SRB_FUNCTION_SHUTDOWN or FLUSH\n");
182 if (portExt->CachesData ==
FALSE)
194 DPRINT(
" SRB_FUNCTION_EXECUTE_SCSI or SRB_FUNCTION_IO_CONTROL\n");
212 &
Irp->Tail.Overlay.DeviceQueueEntry,
226 DPRINT(
" SRB_FUNCTION_CLAIM_DEVICE or ATTACH\n");
233 DPRINT(
" SRB_FUNCTION_RELEASE_DEVICE\n");
240 DPRINT(
" SRB_FUNCTION_RELEASE_QUEUE\n");
247 DPRINT(
"Queue is not frozen really\n");
257 lunExt->
Flags &= ~LUNEX_FROZEN_QUEUE;
266 DPRINT(
"The queue has active request\n");
275 DPRINT(
" SRB_FUNCTION_FLUSH_QUEUE\n");
282 DPRINT(
"Queue is not frozen really\n");
307 NextIrp->Tail.Overlay.ListEntry.Flink = (
PLIST_ENTRY)IrpList;
312 lunExt->
Flags &= ~LUNEX_FROZEN_QUEUE;
321 IrpList = (
PIRP)NextIrp->Tail.Overlay.ListEntry.Flink;
355 if (LunExtension->QueueCount >= LunExtension->MaxQueueCount ||
367 if (LunExtension->Flags &
372 if (
IsListEmpty(&LunExtension->SrbInfo.Requests) &&
373 !(LunExtension->Flags &
383 NextIrp = LunExtension->PendingRequest;
384 LunExtension->PendingRequest =
NULL;
387 LunExtension->AttemptCount = 0;
413 LunExtension->Flags &= ~SCSI_PORT_LU_ACTIVE;
416 LunExtension->AttemptCount = 0;
432 LunExtension->SortKey++;
469 DPRINT(
"SpiCompletionRoutine() entered, IRP %p \n",
Irp);
508 lunExt->
Flags &= ~LUNEX_FROZEN_QUEUE;
509 lunExt->
Flags &= ~LUNEX_NEED_REQUEST_SENSE;
514 InitialSrb->
SrbStatus &= ~SRB_STATUS_QUEUE_FROZEN;
547 DPRINT(
"SpiSendRequestSense() entered, InitialSrb %p\n", InitialSrb);
556 LunExtension->Common.DeviceObject,
557 InitialSrb->SenseInfoBuffer,
558 InitialSrb->SenseInfoBufferLength,
571 DPRINT(
"SpiSendRequestSense() failed, Srb %p\n",
Srb);
602 Srb->
Lun = InitialSrb->Lun;
641 DPRINT(
"SpiSendRequestSense() done\n");
666 DeviceExtension->MapBuffers &&
683 if (SrbInfo->BaseOfMapRegister && SrbInfo->ScatterGather)
685 ULONG transferLen = 0;
693 transferLen += SrbInfo->ScatterGather[
i].Length;
698 SrbInfo->BaseOfMapRegister,
718 DeviceExtension->TimerCount = -1;
725 !(*NeedToCallStartIo))
736 SrbInfo->ScatterGather =
NULL;
740 if (SrbInfo->NumberOfMapRegisters)
743 SrbInfo->BaseOfMapRegister,
744 SrbInfo->NumberOfMapRegisters);
778 SrbInfo->SequenceNumber = 0;
787 SrbInfo->Requests.Blink =
NULL;
788 SrbInfo->Requests.Flink = (
PLIST_ENTRY)DeviceExtension->FreeSrbInfo;
789 DeviceExtension->FreeSrbInfo = SrbInfo;
798 DeviceExtension->Flags &= ~SCSI_PORT_REQUEST_PENDING;
801 *NeedToCallStartIo =
TRUE;
821 DPRINT(
"IoCompleting request IRP 0x%p\n",
Irp);
829 !DeviceExtension->MapRegisters &&
830 DeviceExtension->AdapterObject !=
NULL)
833 DeviceExtension->MapRegisterBase =
NULL;
845 !DeviceExtension->MapRegisters &&
846 DeviceExtension->AdapterObject !=
NULL)
849 DeviceExtension->MapRegisterBase =
NULL;
868 DPRINT(
"it's being requeued\n");
874 &
Irp->Tail.Overlay.DeviceQueueEntry,
909 LunExtension->
Flags &= ~LUNEX_FULL_QUEUE;
947 DPRINT(
"Requeuing busy request to allow request sense\n");
950 &LunExtension->
BusyRequest->Tail.Overlay.DeviceQueueEntry,
999 DPRINT(
"ScsiPortStartPacket() called\n");
1004 if (CommonExtension->
IsFDO)
1053 if (SrbInfo ==
NULL ||
1063 DPRINT(
"Request has been already completed, but abort request came\n");
1089 LunExtension->
Flags &= ~LUNEX_NEED_REQUEST_SENSE;
1095 DeviceExtension->Flags &= ~SCSI_PORT_DISCONNECT_ALLOWED;
1106 DeviceExtension->Flags &= ~SCSI_PORT_DISCONNECT_ALLOWED;
1117 SrbInfo = &DeviceExtension->SrbInfo[
Srb->
QueueTag - 1];
1160 *InterruptContext->
InterruptData = DeviceExtension->InterruptData;
1163 DeviceExtension->InterruptData.Flags &=
1165 DeviceExtension->InterruptData.CompletedAbort =
NULL;
1166 DeviceExtension->InterruptData.ReadyLun =
NULL;
1167 DeviceExtension->InterruptData.CompletedRequests =
NULL;
1274 DPRINT(
"ScsiPortDpcForIsr(Dpc %p DpcDeviceObject %p DpcIrp %p DpcContext %p)\n",
1275 Dpc, DpcDeviceObject, DpcIrp, DpcContext);
1285 Context.InterruptData = &InterruptData;
1286 Context.DeviceExtension = DeviceExtension;
1294 DPRINT(
"ScsiPortDpcForIsr() done\n");
1316 DeviceExtension->HwScsiTimer = InterruptData.
HwScsiTimer;
1331 &DeviceExtension->MiniportTimerDpc);
1339 if ((DeviceExtension->Flags &
1344 DeviceExtension->Flags &= ~SCSI_PORT_DEVICE_BUSY;
1349 DeviceExtension->TimerCount = -1;
1355 DeviceExtension->Flags &= ~SCSI_PORT_DEVICE_BUSY;
1356 InterruptData.
Flags &= ~SCSI_PORT_NEXT_REQUEST_READY;
1364 DeviceExtension->TimerCount = 4;
1375 LunExtension = InterruptData.
ReadyLun;
1400 NeedToStartIo =
FALSE;
1454 DeviceExtension->Flags &= ~SCSI_PORT_DISABLE_INT_REQUESET;
1460 SpiEnableInterrupts,
1473 DPRINT(
"ScsiPortDpcForIsr() done\n");
1490 if (DeviceExtension->NeedSrbDataAlloc)
1516 SrbInfo = DeviceExtension->FreeSrbInfo;
1518 if (SrbInfo ==
NULL)
1552 SrbInfo = &LunExtension->SrbInfo;
1558 SrbInfo = &LunExtension->SrbInfo;
1562 if (DeviceExtension->NeedSrbExtensionAlloc)
1565 SrbExtension = DeviceExtension->FreeSrbExtensions;
1568 if (SrbExtension ==
NULL)
1576 DeviceExtension->FreeSrbInfo = SrbInfo;
1587 DeviceExtension->FreeSrbExtensions = *((
PVOID *)SrbExtension);
1595 DeviceExtension->SupportsAutoSense)
1637 DPRINT(
"ScsiPortStartIo() called!\n");
1643 ASSERT(DeviceExtension->Common.IsFDO);
1646 DPRINT(
"LunExtension %p DeviceExtension %p\n", LunExtension, DeviceExtension);
1653 if (DeviceExtension->NeedSrbDataAlloc ||
1654 DeviceExtension->NeedSrbExtensionAlloc)
1662 if (SrbInfo ==
NULL)
1675 SrbInfo = &LunExtension->
SrbInfo;
1684 DeviceExtension->SequenceNumber++;
1694 DPRINT1(
"Abort command! Unimplemented now\n");
1706 if (DeviceExtension->MapBuffers)
1723 if (DeviceExtension->MapRegisters)
1732 DeviceExtension->Common.DeviceObject,
1739 DPRINT1(
"IoAllocateAdapterChannel() failed!\n");
1743 DeviceExtension + 1,
1747 DeviceExtension + 1);
1761 if (CounterResult == 0 &&
1763 !DeviceExtension->MapRegisters)
1782 DPRINT(
"Synchronization failed!\n");
1785 Irp->IoStatus.Information = 0;
1797 DPRINT(
"ScsiPortStartIo() done\n");
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define InterlockedIncrement
#define InterlockedDecrement
VOID __cdecl ScsiPortNotification(IN SCSI_NOTIFICATION_TYPE NotificationType, IN PVOID HwDeviceExtension, IN ...)
#define SCSI_PORT_NEXT_REQUEST_READY
_In_ PSCSI_REQUEST_BLOCK Srb
#define SCSISTAT_CHECK_CONDITION
#define SCSIOP_REQUEST_SENSE
#define SCSISTAT_QUEUE_FULL
#define STATUS_NOT_IMPLEMENTED
PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue)
BOOLEAN NTAPI KeInsertByKeyDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue, IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, IN ULONG SortKey)
PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveByKeyDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue, IN ULONG SortKey)
#define NT_SUCCESS(StatCode)
#define SRB_STATUS_INVALID_LUN
#define SRB_STATUS_REQUEST_FLUSHED
#define SRB_FUNCTION_ATTACH_DEVICE
struct _SCSI_REQUEST_BLOCK SCSI_REQUEST_BLOCK
#define SRB_FLAGS_IS_ACTIVE
#define SRB_STATUS_NO_HBA
#define SRB_FUNCTION_RELEASE_DEVICE
#define SRB_STATUS_INVALID_TARGET_ID
#define SRB_FUNCTION_CLAIM_DEVICE
#define SRB_FLAGS_SGLIST_FROM_POOL
#define SRB_FUNCTION_IO_CONTROL
#define SRB_FUNCTION_RELEASE_QUEUE
#define SRB_FLAGS_BYPASS_FROZEN_QUEUE
#define SRB_FUNCTION_EXECUTE_SCSI
#define SRB_STATUS_DATA_OVERRUN
#define SRB_FLAGS_DATA_OUT
#define SRB_FLAGS_DISABLE_DISCONNECT
#define SRB_STATUS_PENDING
#define SRB_STATUS_BAD_SRB_BLOCK_LENGTH
#define SRB_FLAGS_QUEUE_ACTION_ENABLE
#define SRB_FUNCTION_RESET_BUS
#define SRB_FUNCTION_FLUSH
#define SRB_FUNCTION_FLUSH_QUEUE
#define SRB_STATUS_TIMEOUT
#define SRB_FUNCTION_SHUTDOWN
#define SRB_STATUS_AUTOSENSE_VALID
#define SRB_FLAGS_DISABLE_AUTOSENSE
struct _SCSI_REQUEST_BLOCK * PSCSI_REQUEST_BLOCK
#define SRB_FLAGS_BYPASS_LOCKED_QUEUE
#define SRB_FLAGS_DATA_IN
#define SRB_STATUS_ABORT_FAILED
#define SRB_STATUS_SELECTION_TIMEOUT
#define SRB_STATUS_BAD_FUNCTION
#define SRB_FLAGS_UNSPECIFIED_DIRECTION
#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER
#define SRB_STATUS(Status)
#define SRB_STATUS_COMMAND_TIMEOUT
#define SRB_STATUS_REQUEST_SENSE_FAILED
#define SRB_STATUS_QUEUE_FROZEN
#define SRB_STATUS_NO_DEVICE
#define SRB_FLAGS_NO_QUEUE_FREEZE
#define SRB_STATUS_SUCCESS
#define SRB_STATUS_INVALID_REQUEST
#define SRB_FUNCTION_ABORT_COMMAND
IO_ALLOCATION_ACTION NTAPI SpiAdapterControl(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID MapRegisterBase, PVOID Context)
IO_ALLOCATION_ACTION NTAPI ScsiPortAllocateAdapterChannel(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID MapRegisterBase, IN PVOID Context)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
#define KeRaiseIrql(irql, oldIrql)
struct _DEVICE_OBJECT * PDEVICE_OBJECT
#define KeReleaseSpinLock(sl, irql)
#define KeLowerIrql(oldIrql)
#define KeAcquireSpinLock(sl, irql)
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
BOOLEAN NTAPI IoFlushAdapterBuffers(IN PADAPTER_OBJECT AdapterObject, IN PMDL Mdl, IN PVOID MapRegisterBase, IN PVOID CurrentVa, IN ULONG Length, IN BOOLEAN WriteToDevice)
VOID NTAPI IoFreeMapRegisters(IN PADAPTER_OBJECT AdapterObject, IN PVOID MapRegisterBase, IN ULONG NumberOfMapRegisters)
VOID NTAPI IoFreeAdapterChannel(IN PADAPTER_OBJECT AdapterObject)
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
VOID NTAPI MmUnlockPages(IN PMDL Mdl)
#define ExFreePoolWithTag(_P, _T)
#define Int32x32To64(a, b)
NTSTATUS NTAPI IoAllocateAdapterChannel(IN PADAPTER_OBJECT AdapterObject, IN PDEVICE_OBJECT DeviceObject, IN ULONG NumberOfMapRegisters, IN PDRIVER_CONTROL ExecutionRoutine, IN PVOID Context)
VOID NTAPI IoStartPacket(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PULONG Key, IN PDRIVER_CANCEL CancelFunction)
VOID NTAPI IoStartNextPacket(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN Cancelable)
#define IoCompleteRequest
PIRP NTAPI IoBuildAsynchronousFsdRequest(IN ULONG MajorFunction, IN PDEVICE_OBJECT DeviceObject, IN PVOID Buffer, IN ULONG Length, IN PLARGE_INTEGER StartingOffset, IN PIO_STATUS_BLOCK IoStatusBlock)
VOID NTAPI IoFreeIrp(IN PIRP Irp)
BOOLEAN NTAPI KeSynchronizeExecution(IN OUT PKINTERRUPT Interrupt, IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, IN PVOID SynchronizeContext OPTIONAL)
#define STATUS_DEVICE_DOES_NOT_EXIST
_In_opt_ WDFREQUEST _In_ ULONG _In_ BOOLEAN _In_ PCDB Cdb
DRIVER_DISPATCH ScsiPortDispatchScsi
#define SCSI_PORT_DISCONNECT_ALLOWED
#define SCSI_PORT_DEVICE_BUSY
struct _SCSI_REQUEST_BLOCK_INFO * PSCSI_REQUEST_BLOCK_INFO
#define SCSI_PORT_TIMER_NEEDED
#define SCSI_PORT_NOTIFICATION_NEEDED
DRIVER_STARTIO ScsiPortStartIo
KSYNCHRONIZE_ROUTINE ScsiPortStartPacket
#define SCSI_PORT_RESET_REQUEST
#define SCSI_PORT_DISABLE_INTERRUPTS
#define SCSI_PORT_MAP_TRANSFER
#define LUNEX_FROZEN_QUEUE
#define LUNEX_NEED_REQUEST_SENSE
#define SCSI_PORT_FLUSH_ADAPTERS
#define SCSI_PORT_REQUEST_PENDING
#define SCSI_PORT_RESET_REPORTED
IO_DPC_ROUTINE ScsiPortDpcForIsr
#define SCSI_PORT_LU_ACTIVE
#define LUNEX_REQUEST_PENDING
#define SCSI_PORT_DISABLE_INT_REQUESET
#define SCSI_PORT_ENABLE_INT_REQUEST
#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
#define KeAcquireSpinLockAtDpcLevel(SpinLock)
#define KeReleaseSpinLockFromDpcLevel(SpinLock)
#define STATUS_DEVICE_NOT_READY
#define STATUS_MORE_PROCESSING_REQUIRED
#define STATUS_BUFFER_OVERFLOW
PSCSI_REQUEST_BLOCK_INFO SpiGetSrbData(_In_ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, _In_ PSCSI_PORT_LUN_EXTENSION LunExtension, _In_ UCHAR QueueTag)
VOID SpiGetNextRequestFromLun(_In_ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, _Inout_ PSCSI_PORT_LUN_EXTENSION LunExtension, _Inout_opt_ PKIRQL OldIrql)
static NTSTATUS SpiHandleAttachRelease(_In_ PSCSI_PORT_LUN_EXTENSION LunExtension, _Inout_ PIRP Irp)
static VOID SpiProcessCompletedRequest(_In_ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, _Inout_ PSCSI_REQUEST_BLOCK_INFO SrbInfo, _Out_ PBOOLEAN NeedToCallStartIo)
BOOLEAN NTAPI SpiSaveInterruptData(IN PVOID Context)
static NTSTATUS SpiStatusSrbToNt(_In_ UCHAR SrbStatus)
static PSCSI_REQUEST_BLOCK_INFO SpiAllocateSrbStructures(_Inout_ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, _Inout_ PSCSI_PORT_LUN_EXTENSION LunExtension, _Inout_ PSCSI_REQUEST_BLOCK Srb)
static VOID SpiSendRequestSense(_In_ PSCSI_PORT_LUN_EXTENSION LunExtension, _In_ PSCSI_REQUEST_BLOCK InitialSrb)
IO_COMPLETION_ROUTINE SpiSenseCompletionRoutine
base of all file and directory entries
PVOID MiniPortDeviceExtension
PADAPTER_OBJECT AdapterObject
PHW_INTERRUPT HwInterrupt
IO_SCSI_CAPABILITIES PortCapabilities
ULONG MaximumPhysicalPages
struct _IO_STACK_LOCATION::@3983::@4005 Scsi
PDEVICE_OBJECT DeviceObject
struct _IO_STACK_LOCATION::@3983::@4022 Others
union _IO_STACK_LOCATION::@1584 Parameters
struct _LIST_ENTRY * Blink
struct _LIST_ENTRY * Flink
PDEVICE_OBJECT LowerDevice
PSCSI_PORT_LUN_EXTENSION ReadyLun
PSCSI_PORT_LUN_EXTENSION CompletedAbort
PSCSI_REQUEST_BLOCK_INFO CompletedRequests
KDEVICE_QUEUE DeviceQueue
SCSI_PORT_COMMON_EXTENSION Common
SCSI_REQUEST_BLOCK_INFO SrbInfo
struct _SCSI_PORT_LUN_EXTENSION * CompletedAbortRequests
struct _SCSI_PORT_LUN_EXTENSION * ReadyLun
struct _SCSI_PORT_DEVICE_EXTENSION * DeviceExtension
PSCSI_PORT_INTERRUPT_DATA InterruptData
ULONG NumberOfMapRegisters
struct _SCSI_REQUEST_BLOCK_INFO * CompletedRequests
UCHAR SenseInfoBufferLength
struct _SCSI_REQUEST_BLOCK * NextSrb
BOOLEAN NTAPI KeSetTimer(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN PKDPC Dpc OPTIONAL)
BOOLEAN NTAPI KeCancelTimer(IN OUT PKTIMER Timer)
struct _LIST_ENTRY * PLIST_ENTRY
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_IO_DEVICE_ERROR
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_DEVICE_NOT_CONNECTED
#define STATUS_IO_TIMEOUT
#define STATUS_NO_SUCH_DEVICE
#define STATUS_UNSUCCESSFUL
#define STATUS_DEVICE_BUSY
struct _CDB::_CDB6INQUIRY CDB6INQUIRY
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
FORCEINLINE VOID IoRequestDpc(_Inout_ PDEVICE_OBJECT DeviceObject, _In_opt_ PIRP Irp, _In_opt_ __drv_aliasesMem PVOID Context)
#define IO_DISK_INCREMENT
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define MmGetSystemAddressForMdl(Mdl)
#define MmGetMdlVirtualAddress(_Mdl)
#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size)