mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 20:25:39 +00:00
- Move more stuff to wdm.h
- Improve IoAcquireRemoveLock(EX) and several Io* - Convert some macros to inline functions svn path=/branches/header-work/; revision=45793
This commit is contained in:
parent
d944603372
commit
e4fb241c6b
2 changed files with 691 additions and 678 deletions
|
@ -5652,6 +5652,697 @@ WRITE_REGISTER_USHORT(
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/** Io access routines **/
|
||||||
|
|
||||||
|
#if !defined(_M_AMD64)
|
||||||
|
NTHALAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
READ_PORT_BUFFER_UCHAR(
|
||||||
|
IN PUCHAR Port,
|
||||||
|
IN PUCHAR Buffer,
|
||||||
|
IN ULONG Count);
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
READ_PORT_BUFFER_ULONG(
|
||||||
|
IN PULONG Port,
|
||||||
|
IN PULONG Buffer,
|
||||||
|
IN ULONG Count);
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
READ_PORT_BUFFER_USHORT(
|
||||||
|
IN PUSHORT Port,
|
||||||
|
IN PUSHORT Buffer,
|
||||||
|
IN ULONG Count);
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
UCHAR
|
||||||
|
NTAPI
|
||||||
|
READ_PORT_UCHAR(
|
||||||
|
IN PUCHAR Port);
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
ULONG
|
||||||
|
NTAPI
|
||||||
|
READ_PORT_ULONG(
|
||||||
|
IN PULONG Port);
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
USHORT
|
||||||
|
NTAPI
|
||||||
|
READ_PORT_USHORT(
|
||||||
|
IN PUSHORT Port);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
READ_REGISTER_BUFFER_UCHAR(
|
||||||
|
IN PUCHAR Register,
|
||||||
|
IN PUCHAR Buffer,
|
||||||
|
IN ULONG Count);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
READ_REGISTER_BUFFER_ULONG(
|
||||||
|
IN PULONG Register,
|
||||||
|
IN PULONG Buffer,
|
||||||
|
IN ULONG Count);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
READ_REGISTER_BUFFER_USHORT(
|
||||||
|
IN PUSHORT Register,
|
||||||
|
IN PUSHORT Buffer,
|
||||||
|
IN ULONG Count);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
UCHAR
|
||||||
|
NTAPI
|
||||||
|
READ_REGISTER_UCHAR(
|
||||||
|
IN PUCHAR Register);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
ULONG
|
||||||
|
NTAPI
|
||||||
|
READ_REGISTER_ULONG(
|
||||||
|
IN PULONG Register);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
USHORT
|
||||||
|
NTAPI
|
||||||
|
READ_REGISTER_USHORT(
|
||||||
|
IN PUSHORT Register);
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
WRITE_PORT_BUFFER_UCHAR(
|
||||||
|
IN PUCHAR Port,
|
||||||
|
IN PUCHAR Buffer,
|
||||||
|
IN ULONG Count);
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
WRITE_PORT_BUFFER_ULONG(
|
||||||
|
IN PULONG Port,
|
||||||
|
IN PULONG Buffer,
|
||||||
|
IN ULONG Count);
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
WRITE_PORT_BUFFER_USHORT(
|
||||||
|
IN PUSHORT Port,
|
||||||
|
IN PUSHORT Buffer,
|
||||||
|
IN ULONG Count);
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
WRITE_PORT_UCHAR(
|
||||||
|
IN PUCHAR Port,
|
||||||
|
IN UCHAR Value);
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
WRITE_PORT_ULONG(
|
||||||
|
IN PULONG Port,
|
||||||
|
IN ULONG Value);
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
WRITE_PORT_USHORT(
|
||||||
|
IN PUSHORT Port,
|
||||||
|
IN USHORT Value);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
WRITE_REGISTER_BUFFER_UCHAR(
|
||||||
|
IN PUCHAR Register,
|
||||||
|
IN PUCHAR Buffer,
|
||||||
|
IN ULONG Count);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
WRITE_REGISTER_BUFFER_ULONG(
|
||||||
|
IN PULONG Register,
|
||||||
|
IN PULONG Buffer,
|
||||||
|
IN ULONG Count);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
WRITE_REGISTER_BUFFER_USHORT(
|
||||||
|
IN PUSHORT Register,
|
||||||
|
IN PUSHORT Buffer,
|
||||||
|
IN ULONG Count);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
WRITE_REGISTER_UCHAR(
|
||||||
|
IN PUCHAR Register,
|
||||||
|
IN UCHAR Value);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
WRITE_REGISTER_ULONG(
|
||||||
|
IN PULONG Register,
|
||||||
|
IN ULONG Value);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
WRITE_REGISTER_USHORT(
|
||||||
|
IN PUSHORT Register,
|
||||||
|
IN USHORT Value);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
READ_PORT_BUFFER_UCHAR(
|
||||||
|
IN PUCHAR Port,
|
||||||
|
IN PUCHAR Buffer,
|
||||||
|
IN ULONG Count)
|
||||||
|
{
|
||||||
|
__inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
READ_PORT_BUFFER_ULONG(
|
||||||
|
IN PULONG Port,
|
||||||
|
IN PULONG Buffer,
|
||||||
|
IN ULONG Count)
|
||||||
|
{
|
||||||
|
__indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
READ_PORT_BUFFER_USHORT(
|
||||||
|
IN PUSHORT Port,
|
||||||
|
IN PUSHORT Buffer,
|
||||||
|
IN ULONG Count)
|
||||||
|
{
|
||||||
|
__inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
UCHAR
|
||||||
|
READ_PORT_UCHAR(
|
||||||
|
IN PUCHAR Port)
|
||||||
|
{
|
||||||
|
return __inbyte((USHORT)(ULONG_PTR)Port);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
ULONG
|
||||||
|
READ_PORT_ULONG(
|
||||||
|
IN PULONG Port)
|
||||||
|
{
|
||||||
|
return __indword((USHORT)(ULONG_PTR)Port);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
USHORT
|
||||||
|
READ_PORT_USHORT(
|
||||||
|
IN PUSHORT Port)
|
||||||
|
{
|
||||||
|
return __inword((USHORT)(ULONG_PTR)Port);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
READ_REGISTER_BUFFER_UCHAR(
|
||||||
|
IN PUCHAR Register,
|
||||||
|
IN PUCHAR Buffer,
|
||||||
|
IN ULONG Count)
|
||||||
|
{
|
||||||
|
__movsb(Register, Buffer, Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
READ_REGISTER_BUFFER_ULONG(
|
||||||
|
IN PULONG Register,
|
||||||
|
IN PULONG Buffer,
|
||||||
|
IN ULONG Count)
|
||||||
|
{
|
||||||
|
__movsd(Register, Buffer, Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
READ_REGISTER_BUFFER_USHORT(
|
||||||
|
IN PUSHORT Register,
|
||||||
|
IN PUSHORT Buffer,
|
||||||
|
IN ULONG Count)
|
||||||
|
{
|
||||||
|
__movsw(Register, Buffer, Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
UCHAR
|
||||||
|
READ_REGISTER_UCHAR(
|
||||||
|
IN PUCHAR Register)
|
||||||
|
{
|
||||||
|
return *Register;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
ULONG
|
||||||
|
READ_REGISTER_ULONG(
|
||||||
|
IN PULONG Register)
|
||||||
|
{
|
||||||
|
return *Register;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
USHORT
|
||||||
|
READ_REGISTER_USHORT(
|
||||||
|
IN PUSHORT Register)
|
||||||
|
{
|
||||||
|
return *Register;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
WRITE_PORT_BUFFER_UCHAR(
|
||||||
|
IN PUCHAR Port,
|
||||||
|
IN PUCHAR Buffer,
|
||||||
|
IN ULONG Count)
|
||||||
|
{
|
||||||
|
__outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
WRITE_PORT_BUFFER_ULONG(
|
||||||
|
IN PULONG Port,
|
||||||
|
IN PULONG Buffer,
|
||||||
|
IN ULONG Count)
|
||||||
|
{
|
||||||
|
__outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
WRITE_PORT_BUFFER_USHORT(
|
||||||
|
IN PUSHORT Port,
|
||||||
|
IN PUSHORT Buffer,
|
||||||
|
IN ULONG Count)
|
||||||
|
{
|
||||||
|
__outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
WRITE_PORT_UCHAR(
|
||||||
|
IN PUCHAR Port,
|
||||||
|
IN UCHAR Value)
|
||||||
|
{
|
||||||
|
__outbyte((USHORT)(ULONG_PTR)Port, Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
WRITE_PORT_ULONG(
|
||||||
|
IN PULONG Port,
|
||||||
|
IN ULONG Value)
|
||||||
|
{
|
||||||
|
__outdword((USHORT)(ULONG_PTR)Port, Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
WRITE_PORT_USHORT(
|
||||||
|
IN PUSHORT Port,
|
||||||
|
IN USHORT Value)
|
||||||
|
{
|
||||||
|
__outword((USHORT)(ULONG_PTR)Port, Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
WRITE_REGISTER_BUFFER_UCHAR(
|
||||||
|
IN PUCHAR Register,
|
||||||
|
IN PUCHAR Buffer,
|
||||||
|
IN ULONG Count)
|
||||||
|
{
|
||||||
|
LONG Synch;
|
||||||
|
__movsb(Register, Buffer, Count);
|
||||||
|
InterlockedOr(&Synch, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
WRITE_REGISTER_BUFFER_ULONG(
|
||||||
|
IN PULONG Register,
|
||||||
|
IN PULONG Buffer,
|
||||||
|
IN ULONG Count)
|
||||||
|
{
|
||||||
|
LONG Synch;
|
||||||
|
__movsd(Register, Buffer, Count);
|
||||||
|
InterlockedOr(&Synch, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
WRITE_REGISTER_BUFFER_USHORT(
|
||||||
|
IN PUSHORT Register,
|
||||||
|
IN PUSHORT Buffer,
|
||||||
|
IN ULONG Count)
|
||||||
|
{
|
||||||
|
LONG Synch;
|
||||||
|
__movsw(Register, Buffer, Count);
|
||||||
|
InterlockedOr(&Synch, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
WRITE_REGISTER_UCHAR(
|
||||||
|
IN PUCHAR Register,
|
||||||
|
IN UCHAR Value)
|
||||||
|
{
|
||||||
|
LONG Synch;
|
||||||
|
*Register = Value;
|
||||||
|
InterlockedOr(&Synch, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
WRITE_REGISTER_ULONG(
|
||||||
|
IN PULONG Register,
|
||||||
|
IN ULONG Value)
|
||||||
|
{
|
||||||
|
LONG Synch;
|
||||||
|
*Register = Value;
|
||||||
|
InterlockedOr(&Synch, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
WRITE_REGISTER_USHORT(
|
||||||
|
IN PUSHORT Register,
|
||||||
|
IN USHORT Value)
|
||||||
|
{
|
||||||
|
LONG Sync;
|
||||||
|
*Register = Value;
|
||||||
|
InterlockedOr(&Sync, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** I/O manager routines **/
|
||||||
|
|
||||||
|
#if (NTDDI_VERSION >= NTDDI_WIN2K)
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
IoAcquireCancelSpinLock(
|
||||||
|
OUT PKIRQL Irql);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
IoAcquireRemoveLockEx(
|
||||||
|
IN PIO_REMOVE_LOCK RemoveLock,
|
||||||
|
IN PVOID Tag OPTIONAL,
|
||||||
|
IN PCSTR File,
|
||||||
|
IN ULONG Line,
|
||||||
|
IN ULONG RemlockSize);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NTSTATUS
|
||||||
|
* IoAcquireRemoveLock(
|
||||||
|
* IN PIO_REMOVE_LOCK RemoveLock,
|
||||||
|
* IN OPTIONAL PVOID Tag)
|
||||||
|
*/
|
||||||
|
#if DBG
|
||||||
|
#define IoAcquireRemoveLock(RemoveLock, Tag) \
|
||||||
|
IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
|
||||||
|
#else
|
||||||
|
#define IoAcquireRemoveLock(RemoveLock, Tag) \
|
||||||
|
IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* VOID
|
||||||
|
* IoAdjustPagingPathCount(
|
||||||
|
* IN PLONG Count,
|
||||||
|
* IN BOOLEAN Increment)
|
||||||
|
*/
|
||||||
|
#define IoAdjustPagingPathCount(_Count, \
|
||||||
|
_Increment) \
|
||||||
|
{ \
|
||||||
|
if (_Increment) \
|
||||||
|
{ \
|
||||||
|
InterlockedIncrement(_Count); \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
InterlockedDecrement(_Count); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
|
||||||
|
FORCEINLINE
|
||||||
|
NTSTATUS
|
||||||
|
IoAllocateAdapterChannel(
|
||||||
|
IN PDMA_ADAPTER DmaAdapter,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
|
IN ULONG NumberOfMapRegisters,
|
||||||
|
IN PDRIVER_CONTROL ExecutionRoutine,
|
||||||
|
IN PVOID Context)
|
||||||
|
{
|
||||||
|
PALLOCATE_ADAPTER_CHANNEL allocateAdapterChannel;
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
|
allocateAdapterChannel = *(DmaAdapter)->DmaOperations->AllocateAdapterChannel;
|
||||||
|
|
||||||
|
ASSERT( allocateAdapterChannel != NULL );
|
||||||
|
|
||||||
|
status = allocateAdapterChannel( DmaAdapter,
|
||||||
|
DeviceObject,
|
||||||
|
NumberOfMapRegisters,
|
||||||
|
ExecutionRoutine,
|
||||||
|
Context );
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (NTDDI_VERSION >= NTDDI_WIN2K)
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
IoAllocateDriverObjectExtension(
|
||||||
|
IN PDRIVER_OBJECT DriverObject,
|
||||||
|
IN PVOID ClientIdentificationAddress,
|
||||||
|
IN ULONG DriverObjectExtensionSize,
|
||||||
|
OUT PVOID *DriverObjectExtension);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
PVOID
|
||||||
|
IoAllocateErrorLogEntry(
|
||||||
|
IN PVOID IoObject,
|
||||||
|
IN UCHAR EntrySize);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
PIRP
|
||||||
|
IoAllocateIrp(
|
||||||
|
IN CCHAR StackSize,
|
||||||
|
IN BOOLEAN ChargeQuota);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
PMDL
|
||||||
|
IoAllocateMdl(
|
||||||
|
IN PVOID VirtualAddress OPTIONAL,
|
||||||
|
IN ULONG Length,
|
||||||
|
IN BOOLEAN SecondaryBuffer,
|
||||||
|
IN BOOLEAN ChargeQuota,
|
||||||
|
IN OUT PIRP Irp OPTIONAL);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
PIO_WORKITEM
|
||||||
|
IoAllocateWorkItem(
|
||||||
|
IN PDEVICE_OBJECT DeviceObject);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
IoAttachDevice(
|
||||||
|
IN PDEVICE_OBJECT SourceDevice,
|
||||||
|
IN PUNICODE_STRING TargetDevice,
|
||||||
|
OUT PDEVICE_OBJECT *AttachedDevice);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
PDEVICE_OBJECT
|
||||||
|
IoAttachDeviceToDeviceStack(
|
||||||
|
IN PDEVICE_OBJECT SourceDevice,
|
||||||
|
IN PDEVICE_OBJECT TargetDevice);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
PIRP
|
||||||
|
IoBuildAsynchronousFsdRequest(
|
||||||
|
IN ULONG MajorFunction,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
|
IN OUT PVOID Buffer OPTIONAL,
|
||||||
|
IN ULONG Length OPTIONAL,
|
||||||
|
IN PLARGE_INTEGER StartingOffset OPTIONAL,
|
||||||
|
IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
PIRP
|
||||||
|
IoBuildDeviceIoControlRequest(
|
||||||
|
IN ULONG IoControlCode,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
|
IN PVOID InputBuffer OPTIONAL,
|
||||||
|
IN ULONG InputBufferLength,
|
||||||
|
OUT PVOID OutputBuffer OPTIONAL,
|
||||||
|
IN ULONG OutputBufferLength,
|
||||||
|
IN BOOLEAN InternalDeviceIoControl,
|
||||||
|
IN PKEVENT Event,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatusBlock);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
IoBuildPartialMdl(
|
||||||
|
IN PMDL SourceMdl,
|
||||||
|
IN OUT PMDL TargetMdl,
|
||||||
|
IN PVOID VirtualAddress,
|
||||||
|
IN ULONG Length);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
PIRP
|
||||||
|
IoBuildSynchronousFsdRequest(
|
||||||
|
IN ULONG MajorFunction,
|
||||||
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
|
IN OUT PVOID Buffer OPTIONAL,
|
||||||
|
IN ULONG Length OPTIONAL,
|
||||||
|
IN PLARGE_INTEGER StartingOffset OPTIONAL,
|
||||||
|
IN PKEVENT Event,
|
||||||
|
OUT PIO_STATUS_BLOCK IoStatusBlock);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
FASTCALL
|
||||||
|
IofCallDriver(
|
||||||
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
|
IN OUT PIRP Irp);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
BOOLEAN
|
||||||
|
IoCancelIrp(
|
||||||
|
IN PIRP Irp);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
IoCheckShareAccess(
|
||||||
|
IN ACCESS_MASK DesiredAccess,
|
||||||
|
IN ULONG DesiredShareAccess,
|
||||||
|
IN OUT PFILE_OBJECT FileObject,
|
||||||
|
IN OUT PSHARE_ACCESS ShareAccess,
|
||||||
|
IN BOOLEAN Update);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
FASTCALL
|
||||||
|
IofCompleteRequest(
|
||||||
|
IN PIRP Irp,
|
||||||
|
IN CCHAR PriorityBoost);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
|
IoConnectInterrupt(
|
||||||
|
OUT PKINTERRUPT *InterruptObject,
|
||||||
|
IN PKSERVICE_ROUTINE ServiceRoutine,
|
||||||
|
IN PVOID ServiceContext OPTIONAL,
|
||||||
|
IN PKSPIN_LOCK SpinLock OPTIONAL,
|
||||||
|
IN ULONG Vector,
|
||||||
|
IN KIRQL Irql,
|
||||||
|
IN KIRQL SynchronizeIrql,
|
||||||
|
IN KINTERRUPT_MODE InterruptMode,
|
||||||
|
IN BOOLEAN ShareVector,
|
||||||
|
IN KAFFINITY ProcessorEnableMask,
|
||||||
|
IN BOOLEAN FloatingSave);
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
NTSTATUS
|
||||||
|
IoCreateDevice(
|
||||||
|
IN PDRIVER_OBJECT DriverObject,
|
||||||
|
IN ULONG DeviceExtensionSize,
|
||||||
|
IN PUNICODE_STRING DeviceName OPTIONAL,
|
||||||
|
IN DEVICE_TYPE DeviceType,
|
||||||
|
IN ULONG DeviceCharacteristics,
|
||||||
|
IN BOOLEAN Exclusive,
|
||||||
|
OUT PDEVICE_OBJECT *DeviceObject);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NTSTATUS
|
||||||
|
* IoCallDriver(
|
||||||
|
* IN PDEVICE_OBJECT DeviceObject,
|
||||||
|
* IN OUT PIRP Irp)
|
||||||
|
*/
|
||||||
|
#define IoCallDriver IofCallDriver
|
||||||
|
|
||||||
|
/*
|
||||||
|
* VOID
|
||||||
|
* IoCompleteRequest(
|
||||||
|
* IN PIRP Irp,
|
||||||
|
* IN CCHAR PriorityBoost)
|
||||||
|
*/
|
||||||
|
#define IoCompleteRequest IofCompleteRequest
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
PIO_STACK_LOCATION
|
||||||
|
IoGetCurrentIrpStackLocation(
|
||||||
|
IN PIRP Irp)
|
||||||
|
{
|
||||||
|
ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1);
|
||||||
|
return Irp->Tail.Overlay.CurrentStackLocation;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
PIO_STACK_LOCATION
|
||||||
|
IoGetNextIrpStackLocation(
|
||||||
|
IN PIRP Irp)
|
||||||
|
{
|
||||||
|
ASSERT(Irp->CurrentLocation > 0);
|
||||||
|
return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
IoCopyCurrentIrpStackLocationToNext(
|
||||||
|
IN PIRP Irp)
|
||||||
|
{
|
||||||
|
PIO_STACK_LOCATION irpSp;
|
||||||
|
PIO_STACK_LOCATION nextIrpSp;
|
||||||
|
irpSp = IoGetCurrentIrpStackLocation(Irp);
|
||||||
|
nextIrpSp = IoGetNextIrpStackLocation(Irp);
|
||||||
|
RtlCopyMemory( nextIrpSp, irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine));
|
||||||
|
nextIrpSp->Control = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* RTL Types *
|
* RTL Types *
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
|
@ -2555,480 +2555,8 @@ HalPutDmaAdapter(
|
||||||
PADAPTER_OBJECT AdapterObject
|
PADAPTER_OBJECT AdapterObject
|
||||||
);
|
);
|
||||||
|
|
||||||
/** Io access routines **/
|
|
||||||
|
|
||||||
#if !defined(_M_AMD64)
|
|
||||||
NTHALAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
READ_PORT_BUFFER_UCHAR(
|
|
||||||
IN PUCHAR Port,
|
|
||||||
IN PUCHAR Buffer,
|
|
||||||
IN ULONG Count);
|
|
||||||
|
|
||||||
NTHALAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
READ_PORT_BUFFER_ULONG(
|
|
||||||
IN PULONG Port,
|
|
||||||
IN PULONG Buffer,
|
|
||||||
IN ULONG Count);
|
|
||||||
|
|
||||||
NTHALAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
READ_PORT_BUFFER_USHORT(
|
|
||||||
IN PUSHORT Port,
|
|
||||||
IN PUSHORT Buffer,
|
|
||||||
IN ULONG Count);
|
|
||||||
|
|
||||||
NTHALAPI
|
|
||||||
UCHAR
|
|
||||||
NTAPI
|
|
||||||
READ_PORT_UCHAR(
|
|
||||||
IN PUCHAR Port);
|
|
||||||
|
|
||||||
NTHALAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
READ_PORT_ULONG(
|
|
||||||
IN PULONG Port);
|
|
||||||
|
|
||||||
NTHALAPI
|
|
||||||
USHORT
|
|
||||||
NTAPI
|
|
||||||
READ_PORT_USHORT(
|
|
||||||
IN PUSHORT Port);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
READ_REGISTER_BUFFER_UCHAR(
|
|
||||||
IN PUCHAR Register,
|
|
||||||
IN PUCHAR Buffer,
|
|
||||||
IN ULONG Count);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
READ_REGISTER_BUFFER_ULONG(
|
|
||||||
IN PULONG Register,
|
|
||||||
IN PULONG Buffer,
|
|
||||||
IN ULONG Count);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
READ_REGISTER_BUFFER_USHORT(
|
|
||||||
IN PUSHORT Register,
|
|
||||||
IN PUSHORT Buffer,
|
|
||||||
IN ULONG Count);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
UCHAR
|
|
||||||
NTAPI
|
|
||||||
READ_REGISTER_UCHAR(
|
|
||||||
IN PUCHAR Register);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
READ_REGISTER_ULONG(
|
|
||||||
IN PULONG Register);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
USHORT
|
|
||||||
NTAPI
|
|
||||||
READ_REGISTER_USHORT(
|
|
||||||
IN PUSHORT Register);
|
|
||||||
|
|
||||||
NTHALAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
WRITE_PORT_BUFFER_UCHAR(
|
|
||||||
IN PUCHAR Port,
|
|
||||||
IN PUCHAR Buffer,
|
|
||||||
IN ULONG Count);
|
|
||||||
|
|
||||||
NTHALAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
WRITE_PORT_BUFFER_ULONG(
|
|
||||||
IN PULONG Port,
|
|
||||||
IN PULONG Buffer,
|
|
||||||
IN ULONG Count);
|
|
||||||
|
|
||||||
NTHALAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
WRITE_PORT_BUFFER_USHORT(
|
|
||||||
IN PUSHORT Port,
|
|
||||||
IN PUSHORT Buffer,
|
|
||||||
IN ULONG Count);
|
|
||||||
|
|
||||||
NTHALAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
WRITE_PORT_UCHAR(
|
|
||||||
IN PUCHAR Port,
|
|
||||||
IN UCHAR Value);
|
|
||||||
|
|
||||||
NTHALAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
WRITE_PORT_ULONG(
|
|
||||||
IN PULONG Port,
|
|
||||||
IN ULONG Value);
|
|
||||||
|
|
||||||
NTHALAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
WRITE_PORT_USHORT(
|
|
||||||
IN PUSHORT Port,
|
|
||||||
IN USHORT Value);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
WRITE_REGISTER_BUFFER_UCHAR(
|
|
||||||
IN PUCHAR Register,
|
|
||||||
IN PUCHAR Buffer,
|
|
||||||
IN ULONG Count);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
WRITE_REGISTER_BUFFER_ULONG(
|
|
||||||
IN PULONG Register,
|
|
||||||
IN PULONG Buffer,
|
|
||||||
IN ULONG Count);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
WRITE_REGISTER_BUFFER_USHORT(
|
|
||||||
IN PUSHORT Register,
|
|
||||||
IN PUSHORT Buffer,
|
|
||||||
IN ULONG Count);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
WRITE_REGISTER_UCHAR(
|
|
||||||
IN PUCHAR Register,
|
|
||||||
IN UCHAR Value);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
WRITE_REGISTER_ULONG(
|
|
||||||
IN PULONG Register,
|
|
||||||
IN ULONG Value);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
WRITE_REGISTER_USHORT(
|
|
||||||
IN PUSHORT Register,
|
|
||||||
IN USHORT Value);
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
READ_PORT_BUFFER_UCHAR(
|
|
||||||
IN PUCHAR Port,
|
|
||||||
IN PUCHAR Buffer,
|
|
||||||
IN ULONG Count)
|
|
||||||
{
|
|
||||||
__inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
READ_PORT_BUFFER_ULONG(
|
|
||||||
IN PULONG Port,
|
|
||||||
IN PULONG Buffer,
|
|
||||||
IN ULONG Count)
|
|
||||||
{
|
|
||||||
__indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
READ_PORT_BUFFER_USHORT(
|
|
||||||
IN PUSHORT Port,
|
|
||||||
IN PUSHORT Buffer,
|
|
||||||
IN ULONG Count)
|
|
||||||
{
|
|
||||||
__inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
UCHAR
|
|
||||||
READ_PORT_UCHAR(
|
|
||||||
IN PUCHAR Port)
|
|
||||||
{
|
|
||||||
return __inbyte((USHORT)(ULONG_PTR)Port);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
ULONG
|
|
||||||
READ_PORT_ULONG(
|
|
||||||
IN PULONG Port)
|
|
||||||
{
|
|
||||||
return __indword((USHORT)(ULONG_PTR)Port);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
USHORT
|
|
||||||
READ_PORT_USHORT(
|
|
||||||
IN PUSHORT Port)
|
|
||||||
{
|
|
||||||
return __inword((USHORT)(ULONG_PTR)Port);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
READ_REGISTER_BUFFER_UCHAR(
|
|
||||||
IN PUCHAR Register,
|
|
||||||
IN PUCHAR Buffer,
|
|
||||||
IN ULONG Count)
|
|
||||||
{
|
|
||||||
__movsb(Register, Buffer, Count);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
READ_REGISTER_BUFFER_ULONG(
|
|
||||||
IN PULONG Register,
|
|
||||||
IN PULONG Buffer,
|
|
||||||
IN ULONG Count)
|
|
||||||
{
|
|
||||||
__movsd(Register, Buffer, Count);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
READ_REGISTER_BUFFER_USHORT(
|
|
||||||
IN PUSHORT Register,
|
|
||||||
IN PUSHORT Buffer,
|
|
||||||
IN ULONG Count)
|
|
||||||
{
|
|
||||||
__movsw(Register, Buffer, Count);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
UCHAR
|
|
||||||
READ_REGISTER_UCHAR(
|
|
||||||
IN PUCHAR Register)
|
|
||||||
{
|
|
||||||
return *Register;
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
ULONG
|
|
||||||
READ_REGISTER_ULONG(
|
|
||||||
IN PULONG Register)
|
|
||||||
{
|
|
||||||
return *Register;
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
USHORT
|
|
||||||
READ_REGISTER_USHORT(
|
|
||||||
IN PUSHORT Register)
|
|
||||||
{
|
|
||||||
return *Register;
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
WRITE_PORT_BUFFER_UCHAR(
|
|
||||||
IN PUCHAR Port,
|
|
||||||
IN PUCHAR Buffer,
|
|
||||||
IN ULONG Count)
|
|
||||||
{
|
|
||||||
__outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
WRITE_PORT_BUFFER_ULONG(
|
|
||||||
IN PULONG Port,
|
|
||||||
IN PULONG Buffer,
|
|
||||||
IN ULONG Count)
|
|
||||||
{
|
|
||||||
__outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
WRITE_PORT_BUFFER_USHORT(
|
|
||||||
IN PUSHORT Port,
|
|
||||||
IN PUSHORT Buffer,
|
|
||||||
IN ULONG Count)
|
|
||||||
{
|
|
||||||
__outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
WRITE_PORT_UCHAR(
|
|
||||||
IN PUCHAR Port,
|
|
||||||
IN UCHAR Value)
|
|
||||||
{
|
|
||||||
__outbyte((USHORT)(ULONG_PTR)Port, Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
WRITE_PORT_ULONG(
|
|
||||||
IN PULONG Port,
|
|
||||||
IN ULONG Value)
|
|
||||||
{
|
|
||||||
__outdword((USHORT)(ULONG_PTR)Port, Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
WRITE_PORT_USHORT(
|
|
||||||
IN PUSHORT Port,
|
|
||||||
IN USHORT Value)
|
|
||||||
{
|
|
||||||
__outword((USHORT)(ULONG_PTR)Port, Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
WRITE_REGISTER_BUFFER_UCHAR(
|
|
||||||
IN PUCHAR Register,
|
|
||||||
IN PUCHAR Buffer,
|
|
||||||
IN ULONG Count)
|
|
||||||
{
|
|
||||||
LONG Synch;
|
|
||||||
__movsb(Register, Buffer, Count);
|
|
||||||
InterlockedOr(&Synch, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
WRITE_REGISTER_BUFFER_ULONG(
|
|
||||||
IN PULONG Register,
|
|
||||||
IN PULONG Buffer,
|
|
||||||
IN ULONG Count)
|
|
||||||
{
|
|
||||||
LONG Synch;
|
|
||||||
__movsd(Register, Buffer, Count);
|
|
||||||
InterlockedOr(&Synch, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
WRITE_REGISTER_BUFFER_USHORT(
|
|
||||||
IN PUSHORT Register,
|
|
||||||
IN PUSHORT Buffer,
|
|
||||||
IN ULONG Count)
|
|
||||||
{
|
|
||||||
LONG Synch;
|
|
||||||
__movsw(Register, Buffer, Count);
|
|
||||||
InterlockedOr(&Synch, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
WRITE_REGISTER_UCHAR(
|
|
||||||
IN PUCHAR Register,
|
|
||||||
IN UCHAR Value)
|
|
||||||
{
|
|
||||||
LONG Synch;
|
|
||||||
*Register = Value;
|
|
||||||
InterlockedOr(&Synch, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
WRITE_REGISTER_ULONG(
|
|
||||||
IN PULONG Register,
|
|
||||||
IN ULONG Value)
|
|
||||||
{
|
|
||||||
LONG Synch;
|
|
||||||
*Register = Value;
|
|
||||||
InterlockedOr(&Synch, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
FORCEINLINE
|
|
||||||
VOID
|
|
||||||
WRITE_REGISTER_USHORT(
|
|
||||||
IN PUSHORT Register,
|
|
||||||
IN USHORT Value)
|
|
||||||
{
|
|
||||||
LONG Sync;
|
|
||||||
*Register = Value;
|
|
||||||
InterlockedOr(&Sync, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** I/O manager routines **/
|
/** I/O manager routines **/
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
IoAcquireCancelSpinLock(
|
|
||||||
OUT PKIRQL Irql);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
IoAcquireRemoveLockEx(
|
|
||||||
IN PIO_REMOVE_LOCK RemoveLock,
|
|
||||||
IN OPTIONAL PVOID Tag OPTIONAL,
|
|
||||||
IN PCSTR File,
|
|
||||||
IN ULONG Line,
|
|
||||||
IN ULONG RemlockSize);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NTSTATUS
|
|
||||||
* IoAcquireRemoveLock(
|
|
||||||
* IN PIO_REMOVE_LOCK RemoveLock,
|
|
||||||
* IN OPTIONAL PVOID Tag)
|
|
||||||
*/
|
|
||||||
#define IoAcquireRemoveLock(_RemoveLock, \
|
|
||||||
_Tag) \
|
|
||||||
IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
|
|
||||||
|
|
||||||
/*
|
|
||||||
* VOID
|
|
||||||
* IoAdjustPagingPathCount(
|
|
||||||
* IN PLONG Count,
|
|
||||||
* IN BOOLEAN Increment)
|
|
||||||
*/
|
|
||||||
#define IoAdjustPagingPathCount(_Count, \
|
|
||||||
_Increment) \
|
|
||||||
{ \
|
|
||||||
if (_Increment) \
|
|
||||||
{ \
|
|
||||||
InterlockedIncrement(_Count); \
|
|
||||||
} \
|
|
||||||
else \
|
|
||||||
{ \
|
|
||||||
InterlockedDecrement(_Count); \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef DMA_MACROS_DEFINED
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
IoAllocateAdapterChannel(
|
|
||||||
IN PADAPTER_OBJECT AdapterObject,
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN ULONG NumberOfMapRegisters,
|
|
||||||
IN PDRIVER_CONTROL ExecutionRoutine,
|
|
||||||
IN PVOID Context);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -3038,45 +2566,6 @@ IoAllocateController(
|
||||||
IN PDRIVER_CONTROL ExecutionRoutine,
|
IN PDRIVER_CONTROL ExecutionRoutine,
|
||||||
IN PVOID Context);
|
IN PVOID Context);
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
IoAllocateDriverObjectExtension(
|
|
||||||
IN PDRIVER_OBJECT DriverObject,
|
|
||||||
IN PVOID ClientIdentificationAddress,
|
|
||||||
IN ULONG DriverObjectExtensionSize,
|
|
||||||
OUT PVOID *DriverObjectExtension);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
PVOID
|
|
||||||
NTAPI
|
|
||||||
IoAllocateErrorLogEntry(
|
|
||||||
IN PVOID IoObject,
|
|
||||||
IN UCHAR EntrySize);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
PIRP
|
|
||||||
NTAPI
|
|
||||||
IoAllocateIrp(
|
|
||||||
IN CCHAR StackSize,
|
|
||||||
IN BOOLEAN ChargeQuota);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
PMDL
|
|
||||||
NTAPI
|
|
||||||
IoAllocateMdl(
|
|
||||||
IN PVOID VirtualAddress,
|
|
||||||
IN ULONG Length,
|
|
||||||
IN BOOLEAN SecondaryBuffer,
|
|
||||||
IN BOOLEAN ChargeQuota,
|
|
||||||
IN OUT PIRP Irp OPTIONAL);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
PIO_WORKITEM
|
|
||||||
NTAPI
|
|
||||||
IoAllocateWorkItem(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* VOID IoAssignArcName(
|
* VOID IoAssignArcName(
|
||||||
* IN PUNICODE_STRING ArcName,
|
* IN PUNICODE_STRING ArcName,
|
||||||
|
@ -3085,82 +2574,6 @@ IoAllocateWorkItem(
|
||||||
#define IoAssignArcName(_ArcName, _DeviceName) ( \
|
#define IoAssignArcName(_ArcName, _DeviceName) ( \
|
||||||
IoCreateSymbolicLink((_ArcName), (_DeviceName)))
|
IoCreateSymbolicLink((_ArcName), (_DeviceName)))
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
IoAttachDevice(
|
|
||||||
IN PDEVICE_OBJECT SourceDevice,
|
|
||||||
IN PUNICODE_STRING TargetDevice,
|
|
||||||
OUT PDEVICE_OBJECT *AttachedDevice);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
PDEVICE_OBJECT
|
|
||||||
NTAPI
|
|
||||||
IoAttachDeviceToDeviceStack(
|
|
||||||
IN PDEVICE_OBJECT SourceDevice,
|
|
||||||
IN PDEVICE_OBJECT TargetDevice);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
PIRP
|
|
||||||
NTAPI
|
|
||||||
IoBuildAsynchronousFsdRequest(
|
|
||||||
IN ULONG MajorFunction,
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN OUT PVOID Buffer OPTIONAL,
|
|
||||||
IN ULONG Length OPTIONAL,
|
|
||||||
IN PLARGE_INTEGER StartingOffset OPTIONAL,
|
|
||||||
IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
PIRP
|
|
||||||
NTAPI
|
|
||||||
IoBuildDeviceIoControlRequest(
|
|
||||||
IN ULONG IoControlCode,
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PVOID InputBuffer OPTIONAL,
|
|
||||||
IN ULONG InputBufferLength,
|
|
||||||
OUT PVOID OutputBuffer OPTIONAL,
|
|
||||||
IN ULONG OutputBufferLength,
|
|
||||||
IN BOOLEAN InternalDeviceIoControl,
|
|
||||||
IN PKEVENT Event,
|
|
||||||
OUT PIO_STATUS_BLOCK IoStatusBlock);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
IoBuildPartialMdl(
|
|
||||||
IN PMDL SourceMdl,
|
|
||||||
IN OUT PMDL TargetMdl,
|
|
||||||
IN PVOID VirtualAddress,
|
|
||||||
IN ULONG Length);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
PIRP
|
|
||||||
NTAPI
|
|
||||||
IoBuildSynchronousFsdRequest(
|
|
||||||
IN ULONG MajorFunction,
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN OUT PVOID Buffer OPTIONAL,
|
|
||||||
IN ULONG Length OPTIONAL,
|
|
||||||
IN PLARGE_INTEGER StartingOffset OPTIONAL,
|
|
||||||
IN PKEVENT Event,
|
|
||||||
OUT PIO_STATUS_BLOCK IoStatusBlock);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
FASTCALL
|
|
||||||
IofCallDriver(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN OUT PIRP Irp);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NTSTATUS
|
|
||||||
* IoCallDriver(
|
|
||||||
* IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
* IN OUT PIRP Irp)
|
|
||||||
*/
|
|
||||||
#define IoCallDriver IofCallDriver
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -3168,103 +2581,12 @@ IoCancelFileOpen(
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN PFILE_OBJECT FileObject);
|
IN PFILE_OBJECT FileObject);
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
IoCancelIrp(
|
|
||||||
IN PIRP Irp);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
IoCheckShareAccess(
|
|
||||||
IN ACCESS_MASK DesiredAccess,
|
|
||||||
IN ULONG DesiredShareAccess,
|
|
||||||
IN OUT PFILE_OBJECT FileObject,
|
|
||||||
IN OUT PSHARE_ACCESS ShareAccess,
|
|
||||||
IN BOOLEAN Update);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
VOID
|
|
||||||
FASTCALL
|
|
||||||
IofCompleteRequest(
|
|
||||||
IN PIRP Irp,
|
|
||||||
IN CCHAR PriorityBoost);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* VOID
|
|
||||||
* IoCompleteRequest(
|
|
||||||
* IN PIRP Irp,
|
|
||||||
* IN CCHAR PriorityBoost)
|
|
||||||
*/
|
|
||||||
#define IoCompleteRequest IofCompleteRequest
|
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
IoConnectInterrupt(
|
|
||||||
OUT PKINTERRUPT *InterruptObject,
|
|
||||||
IN PKSERVICE_ROUTINE ServiceRoutine,
|
|
||||||
IN PVOID ServiceContext,
|
|
||||||
IN PKSPIN_LOCK SpinLock OPTIONAL,
|
|
||||||
IN ULONG Vector,
|
|
||||||
IN KIRQL Irql,
|
|
||||||
IN KIRQL SynchronizeIrql,
|
|
||||||
IN KINTERRUPT_MODE InterruptMode,
|
|
||||||
IN BOOLEAN ShareVector,
|
|
||||||
IN KAFFINITY ProcessorEnableMask,
|
|
||||||
IN BOOLEAN FloatingSave);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* PIO_STACK_LOCATION
|
|
||||||
* IoGetCurrentIrpStackLocation(
|
|
||||||
* IN PIRP Irp)
|
|
||||||
*/
|
|
||||||
#define IoGetCurrentIrpStackLocation(_Irp) \
|
|
||||||
((_Irp)->Tail.Overlay.CurrentStackLocation)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* PIO_STACK_LOCATION
|
|
||||||
* IoGetNextIrpStackLocation(
|
|
||||||
* IN PIRP Irp)
|
|
||||||
*/
|
|
||||||
#define IoGetNextIrpStackLocation(_Irp) \
|
|
||||||
((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* VOID
|
|
||||||
* IoCopyCurrentIrpStackLocationToNext(
|
|
||||||
* IN PIRP Irp)
|
|
||||||
*/
|
|
||||||
#define IoCopyCurrentIrpStackLocationToNext(_Irp) \
|
|
||||||
{ \
|
|
||||||
PIO_STACK_LOCATION _IrpSp; \
|
|
||||||
PIO_STACK_LOCATION _NextIrpSp; \
|
|
||||||
_IrpSp = IoGetCurrentIrpStackLocation(_Irp); \
|
|
||||||
_NextIrpSp = IoGetNextIrpStackLocation(_Irp); \
|
|
||||||
RtlCopyMemory(_NextIrpSp, _IrpSp, \
|
|
||||||
FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
|
|
||||||
_NextIrpSp->Control = 0; \
|
|
||||||
}
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
PCONTROLLER_OBJECT
|
PCONTROLLER_OBJECT
|
||||||
NTAPI
|
NTAPI
|
||||||
IoCreateController(
|
IoCreateController(
|
||||||
IN ULONG Size);
|
IN ULONG Size);
|
||||||
|
|
||||||
NTKERNELAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
IoCreateDevice(
|
|
||||||
IN PDRIVER_OBJECT DriverObject,
|
|
||||||
IN ULONG DeviceExtensionSize,
|
|
||||||
IN PUNICODE_STRING DeviceName OPTIONAL,
|
|
||||||
IN DEVICE_TYPE DeviceType,
|
|
||||||
IN ULONG DeviceCharacteristics,
|
|
||||||
IN BOOLEAN Exclusive,
|
|
||||||
OUT PDEVICE_OBJECT *DeviceObject);
|
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue