624 lines
11 KiB
C
624 lines
11 KiB
C
/*
|
|
* winnt4.h
|
|
*
|
|
* Definitions only used in Windows NT 4.0 and earlier versions
|
|
*
|
|
* This file is part of the w32api package.
|
|
*
|
|
* Contributors:
|
|
* Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
|
|
*
|
|
* THIS SOFTWARE IS NOT COPYRIGHTED
|
|
*
|
|
* This source code is offered for use in the public domain. You may
|
|
* use, modify or distribute it freely.
|
|
*
|
|
* This code is distributed in the hope that it will be useful but
|
|
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
|
* DISCLAIMED. This includes but is not limited to warranties of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
*
|
|
*/
|
|
|
|
#ifndef __WINNT4_H
|
|
#define __WINNT4_H
|
|
|
|
#if __GNUC__ >=3
|
|
#pragma GCC system_header
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct _ZONE_SEGMENT_HEADER {
|
|
SINGLE_LIST_ENTRY SegmentList;
|
|
PVOID Reserved;
|
|
} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
|
|
|
|
typedef struct _ZONE_HEADER {
|
|
SINGLE_LIST_ENTRY FreeList;
|
|
SINGLE_LIST_ENTRY SegmentList;
|
|
ULONG BlockSize;
|
|
ULONG TotalSegmentSize;
|
|
} ZONE_HEADER, *PZONE_HEADER;
|
|
|
|
static __inline PVOID
|
|
ExAllocateFromZone(
|
|
IN PZONE_HEADER Zone)
|
|
{
|
|
if (Zone->FreeList.Next)
|
|
Zone->FreeList.Next = Zone->FreeList.Next->Next;
|
|
return (PVOID) Zone->FreeList.Next;
|
|
}
|
|
|
|
NTOSAPI
|
|
NTSTATUS
|
|
DDKAPI
|
|
ExExtendZone(
|
|
IN PZONE_HEADER Zone,
|
|
IN PVOID Segment,
|
|
IN ULONG SegmentSize);
|
|
|
|
static __inline PVOID
|
|
ExFreeToZone(
|
|
IN PZONE_HEADER Zone,
|
|
IN PVOID Block)
|
|
{
|
|
((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
|
|
Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
|
|
return ((PSINGLE_LIST_ENTRY) Block)->Next;
|
|
}
|
|
|
|
NTOSAPI
|
|
NTSTATUS
|
|
DDKAPI
|
|
ExInitializeZone(
|
|
IN PZONE_HEADER Zone,
|
|
IN ULONG BlockSize,
|
|
IN PVOID InitialSegment,
|
|
IN ULONG InitialSegmentSize);
|
|
|
|
/*
|
|
* PVOID
|
|
* ExInterlockedAllocateFromZone(
|
|
* IN PZONE_HEADER Zone,
|
|
* IN PKSPIN_LOCK Lock)
|
|
*/
|
|
#define ExInterlockedAllocateFromZone(Zone, \
|
|
Lock) \
|
|
((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
|
|
|
|
NTOSAPI
|
|
NTSTATUS
|
|
DDKAPI
|
|
ExInterlockedExtendZone(
|
|
IN PZONE_HEADER Zone,
|
|
IN PVOID Segment,
|
|
IN ULONG SegmentSize,
|
|
IN PKSPIN_LOCK Lock);
|
|
|
|
NTOSAPI
|
|
PVOID
|
|
DDKAPI
|
|
ExInterlockedFreeToZone(
|
|
IN PZONE_HEADER Zone,
|
|
IN PVOID Block,
|
|
IN PKSPIN_LOCK Lock);
|
|
|
|
/*
|
|
* VOID
|
|
* ExInitializeWorkItem(
|
|
* IN PWORK_QUEUE_ITEM Item,
|
|
* IN PWORKER_THREAD_ROUTINE Routine,
|
|
* IN PVOID Context)
|
|
*/
|
|
#define ExInitializeWorkItem(Item, \
|
|
Routine, \
|
|
Context) \
|
|
{ \
|
|
(Item)->WorkerRoutine = Routine; \
|
|
(Item)->Parameter = Context; \
|
|
(Item)->List.Flink = NULL; \
|
|
}
|
|
|
|
/*
|
|
* BOOLEAN
|
|
* ExIsFullZone(
|
|
* IN PZONE_HEADER Zone)
|
|
*/
|
|
#define ExIsFullZone(Zone) \
|
|
((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
|
|
|
|
NTOSAPI
|
|
VOID
|
|
DDKAPI
|
|
ExQueueWorkItem(
|
|
IN PWORK_QUEUE_ITEM WorkItem,
|
|
IN WORK_QUEUE_TYPE QueueType);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
ExIsObjectInFirstZoneSegment(
|
|
IN PZONE_HEADER Zone,
|
|
IN PVOID Object);
|
|
|
|
NTOSAPI
|
|
VOID
|
|
DDKAPI
|
|
ExReleaseResource(
|
|
IN PERESOURCE Resource);
|
|
|
|
#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
|
|
#define ExAcquireResourceShared ExAcquireResourceSharedLite
|
|
#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
|
|
#define ExDeleteResource ExDeleteResourceLite
|
|
#define ExInitializeResource ExInitializeResourceLite
|
|
#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
|
|
#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
|
|
#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
|
|
#define ExReleaseResourceForThread ExReleaseResourceForThreadLite
|
|
|
|
NTOSAPI
|
|
INTERLOCKED_RESULT
|
|
DDKAPI
|
|
ExInterlockedDecrementLong(
|
|
IN PLONG Addend,
|
|
IN PKSPIN_LOCK Lock);
|
|
|
|
NTOSAPI
|
|
ULONG
|
|
DDKAPI
|
|
ExInterlockedExchangeUlong(
|
|
IN PULONG Target,
|
|
IN ULONG Value,
|
|
IN PKSPIN_LOCK Lock);
|
|
|
|
NTOSAPI
|
|
INTERLOCKED_RESULT
|
|
DDKAPI
|
|
ExInterlockedIncrementLong(
|
|
IN PLONG Addend,
|
|
IN PKSPIN_LOCK Lock);
|
|
|
|
NTOSAPI
|
|
PVOID
|
|
DDKAPI
|
|
HalAllocateCommonBuffer(
|
|
IN PADAPTER_OBJECT AdapterObject,
|
|
IN ULONG Length,
|
|
OUT PPHYSICAL_ADDRESS LogicalAddress,
|
|
IN BOOLEAN CacheEnabled);
|
|
|
|
NTOSAPI
|
|
NTSTATUS
|
|
DDKAPI
|
|
HalAssignSlotResources(
|
|
IN PUNICODE_STRING RegistryPath,
|
|
IN PUNICODE_STRING DriverClassName,
|
|
IN PDRIVER_OBJECT DriverObject,
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN INTERFACE_TYPE BusType,
|
|
IN ULONG BusNumber,
|
|
IN ULONG SlotNumber,
|
|
IN OUT PCM_RESOURCE_LIST *AllocatedResources);
|
|
|
|
NTOSAPI
|
|
VOID
|
|
DDKAPI
|
|
HalFreeCommonBuffer(
|
|
IN PADAPTER_OBJECT AdapterObject,
|
|
IN ULONG Length,
|
|
IN PHYSICAL_ADDRESS LogicalAddress,
|
|
IN PVOID VirtualAddress,
|
|
IN BOOLEAN CacheEnabled);
|
|
|
|
NTOSAPI
|
|
PADAPTER_OBJECT
|
|
DDKAPI
|
|
HalGetAdapter(
|
|
IN PDEVICE_DESCRIPTION DeviceDescription,
|
|
IN OUT PULONG NumberOfMapRegisters);
|
|
|
|
NTOSAPI
|
|
ULONG
|
|
DDKAPI
|
|
HalGetBusData(
|
|
IN BUS_DATA_TYPE BusDataType,
|
|
IN ULONG BusNumber,
|
|
IN ULONG SlotNumber,
|
|
IN PVOID Buffer,
|
|
IN ULONG Length);
|
|
|
|
NTOSAPI
|
|
ULONG
|
|
DDKAPI
|
|
HalGetBusDataByOffset(
|
|
IN BUS_DATA_TYPE BusDataType,
|
|
IN ULONG BusNumber,
|
|
IN ULONG SlotNumber,
|
|
IN PVOID Buffer,
|
|
IN ULONG Offset,
|
|
IN ULONG Length);
|
|
|
|
NTOSAPI
|
|
ULONG
|
|
DDKAPI
|
|
HalGetDmaAlignmentRequirement(
|
|
VOID);
|
|
|
|
NTOSAPI
|
|
ULONG
|
|
DDKAPI
|
|
HalGetInterruptVector(
|
|
IN INTERFACE_TYPE InterfaceType,
|
|
IN ULONG BusNumber,
|
|
IN ULONG BusInterruptLevel,
|
|
IN ULONG BusInterruptVector,
|
|
OUT PKIRQL Irql,
|
|
OUT PKAFFINITY Affinity);
|
|
|
|
NTOSAPI
|
|
ULONG
|
|
DDKAPI
|
|
HalReadDmaCounter(
|
|
IN PADAPTER_OBJECT AdapterObject);
|
|
|
|
NTOSAPI
|
|
ULONG
|
|
DDKAPI
|
|
HalSetBusData(
|
|
IN BUS_DATA_TYPE BusDataType,
|
|
IN ULONG BusNumber,
|
|
IN ULONG SlotNumber,
|
|
IN PVOID Buffer,
|
|
IN ULONG Length);
|
|
|
|
NTOSAPI
|
|
ULONG
|
|
DDKAPI
|
|
HalSetBusDataByOffset(
|
|
IN BUS_DATA_TYPE BusDataType,
|
|
IN ULONG BusNumber,
|
|
IN ULONG SlotNumber,
|
|
IN PVOID Buffer,
|
|
IN ULONG Offset,
|
|
IN ULONG Length);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
HalTranslateBusAddress(
|
|
IN INTERFACE_TYPE InterfaceType,
|
|
IN ULONG BusNumber,
|
|
IN PHYSICAL_ADDRESS BusAddress,
|
|
IN OUT PULONG AddressSpace,
|
|
OUT PPHYSICAL_ADDRESS TranslatedAddress);
|
|
|
|
NTOSAPI
|
|
NTSTATUS
|
|
DDKAPI
|
|
IoAllocateAdapterChannel(
|
|
IN PADAPTER_OBJECT AdapterObject,
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG NumberOfMapRegisters,
|
|
IN PDRIVER_CONTROL ExecutionRoutine,
|
|
IN PVOID Context);
|
|
|
|
NTOSAPI
|
|
NTSTATUS
|
|
DDKAPI
|
|
IoAssignResources(
|
|
IN PUNICODE_STRING RegistryPath,
|
|
IN PUNICODE_STRING DriverClassName OPTIONAL,
|
|
IN PDRIVER_OBJECT DriverObject,
|
|
IN PDEVICE_OBJECT DeviceObject OPTIONAL,
|
|
IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources,
|
|
IN OUT PCM_RESOURCE_LIST *AllocatedResources);
|
|
|
|
NTOSAPI
|
|
NTSTATUS
|
|
DDKAPI
|
|
IoAttachDeviceByPointer(
|
|
IN PDEVICE_OBJECT SourceDevice,
|
|
IN PDEVICE_OBJECT TargetDevice);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
IoFlushAdapterBuffers(
|
|
IN PADAPTER_OBJECT AdapterObject,
|
|
IN PMDL Mdl,
|
|
IN PVOID MapRegisterBase,
|
|
IN PVOID CurrentVa,
|
|
IN ULONG Length,
|
|
IN BOOLEAN WriteToDevice);
|
|
|
|
NTOSAPI
|
|
VOID
|
|
DDKAPI
|
|
IoFreeAdapterChannel(
|
|
IN PADAPTER_OBJECT AdapterObject);
|
|
|
|
NTOSAPI
|
|
VOID
|
|
DDKAPI
|
|
IoFreeMapRegisters(
|
|
IN PADAPTER_OBJECT AdapterObject,
|
|
IN PVOID MapRegisterBase,
|
|
IN ULONG NumberOfMapRegisters);
|
|
|
|
NTOSAPI
|
|
PHYSICAL_ADDRESS
|
|
DDKAPI
|
|
IoMapTransfer(
|
|
IN PADAPTER_OBJECT AdapterObject,
|
|
IN PMDL Mdl,
|
|
IN PVOID MapRegisterBase,
|
|
IN PVOID CurrentVa,
|
|
IN OUT PULONG Length,
|
|
IN BOOLEAN WriteToDevice);
|
|
|
|
NTOSAPI
|
|
PMDL
|
|
DDKAPI
|
|
MmCreateMdl(
|
|
IN PMDL MemoryDescriptorList OPTIONAL,
|
|
IN PVOID Base,
|
|
IN SIZE_T Length);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
MmIsNonPagedSystemAddressValid(
|
|
IN PVOID VirtualAddress);
|
|
|
|
NTOSAPI
|
|
LARGE_INTEGER
|
|
DDKAPI
|
|
RtlEnlargedIntegerMultiply(
|
|
IN LONG Multiplicand,
|
|
IN LONG Multiplier);
|
|
|
|
NTOSAPI
|
|
ULONG
|
|
DDKAPI
|
|
RtlEnlargedUnsignedDivide(
|
|
IN ULARGE_INTEGER Dividend,
|
|
IN ULONG Divisor,
|
|
IN OUT PULONG Remainder);
|
|
|
|
NTOSAPI
|
|
LARGE_INTEGER
|
|
DDKAPI
|
|
RtlEnlargedUnsignedMultiply(
|
|
IN ULONG Multiplicand,
|
|
IN ULONG Multiplier);
|
|
|
|
NTOSAPI
|
|
LARGE_INTEGER
|
|
DDKAPI
|
|
RtlExtendedIntegerMultiply(
|
|
IN LARGE_INTEGER Multiplicand,
|
|
IN LONG Multiplier);
|
|
|
|
NTOSAPI
|
|
LARGE_INTEGER
|
|
DDKAPI
|
|
RtlExtendedLargeIntegerDivide(
|
|
IN LARGE_INTEGER Dividend,
|
|
IN ULONG Divisor,
|
|
IN OUT PULONG Remainder);
|
|
|
|
NTOSAPI
|
|
LARGE_INTEGER
|
|
DDKAPI
|
|
RtlExtendedMagicDivide(
|
|
IN LARGE_INTEGER Dividend,
|
|
IN LARGE_INTEGER MagicDivisor,
|
|
IN CCHAR ShiftCount);
|
|
|
|
NTOSAPI
|
|
LARGE_INTEGER
|
|
DDKAPI
|
|
RtlLargeIntegerAdd(
|
|
IN LARGE_INTEGER Addend1,
|
|
IN LARGE_INTEGER Addend2);
|
|
|
|
NTOSAPI
|
|
VOID
|
|
DDKAPI
|
|
RtlLargeIntegerAnd(
|
|
IN OUT LARGE_INTEGER Result,
|
|
IN LARGE_INTEGER Source,
|
|
IN LARGE_INTEGER Mask);
|
|
|
|
NTOSAPI
|
|
LARGE_INTEGER
|
|
DDKAPI
|
|
RtlLargeIntegerArithmeticShift(
|
|
IN LARGE_INTEGER LargeInteger,
|
|
IN CCHAR ShiftCount);
|
|
|
|
NTOSAPI
|
|
LARGE_INTEGER
|
|
DDKAPI
|
|
RtlLargeIntegerDivide(
|
|
IN LARGE_INTEGER Dividend,
|
|
IN LARGE_INTEGER Divisor,
|
|
IN OUT PLARGE_INTEGER Remainder);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
RtlLargeIntegerEqualTo(
|
|
IN LARGE_INTEGER Operand1,
|
|
IN LARGE_INTEGER Operand2);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
RtlLargeIntegerEqualToZero(
|
|
IN LARGE_INTEGER Operand);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
RtlLargeIntegerGreaterOrEqualToZero(
|
|
IN LARGE_INTEGER Operand);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
RtlLargeIntegerGreaterThan(
|
|
IN LARGE_INTEGER Operand1,
|
|
IN LARGE_INTEGER Operand2);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
RtlLargeIntegerGreaterThanOrEqualTo(
|
|
IN LARGE_INTEGER Operand1,
|
|
IN LARGE_INTEGER Operand2);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
RtlLargeIntegerGreaterThanZero(
|
|
IN LARGE_INTEGER Operand);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
RtlLargeIntegerLessOrEqualToZero(
|
|
IN LARGE_INTEGER Operand);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
RtlLargeIntegerLessThan(
|
|
IN LARGE_INTEGER Operand1,
|
|
IN LARGE_INTEGER Operand2);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
RtlLargeIntegerLessThanOrEqualTo(
|
|
IN LARGE_INTEGER Operand1,
|
|
IN LARGE_INTEGER Operand2);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
RtlLargeIntegerLessThanZero(
|
|
IN LARGE_INTEGER Operand);
|
|
|
|
NTOSAPI
|
|
LARGE_INTEGER
|
|
DDKAPI
|
|
RtlLargeIntegerNegate(
|
|
IN LARGE_INTEGER Subtrahend);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
RtlLargeIntegerNotEqualTo(
|
|
IN LARGE_INTEGER Operand1,
|
|
IN LARGE_INTEGER Operand2);
|
|
|
|
NTOSAPI
|
|
BOOLEAN
|
|
DDKAPI
|
|
RtlLargeIntegerNotEqualToZero(
|
|
IN LARGE_INTEGER Operand);
|
|
|
|
NTOSAPI
|
|
LARGE_INTEGER
|
|
DDKAPI
|
|
RtlLargeIntegerShiftLeft(
|
|
IN LARGE_INTEGER LargeInteger,
|
|
IN CCHAR ShiftCount);
|
|
|
|
NTOSAPI
|
|
LARGE_INTEGER
|
|
DDKAPI
|
|
RtlLargeIntegerShiftRight(
|
|
IN LARGE_INTEGER LargeInteger,
|
|
IN CCHAR ShiftCount);
|
|
|
|
NTOSAPI
|
|
LARGE_INTEGER
|
|
DDKAPI
|
|
RtlLargeIntegerSubtract(
|
|
IN LARGE_INTEGER Minuend,
|
|
IN LARGE_INTEGER Subtrahend);
|
|
|
|
|
|
/*
|
|
* ULONG
|
|
* COMPUTE_PAGES_SPANNED(
|
|
* IN PVOID Va,
|
|
* IN ULONG Size)
|
|
*/
|
|
#define COMPUTE_PAGES_SPANNED(Va, \
|
|
Size) \
|
|
(ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
|
|
|
|
|
|
/*
|
|
** Architecture specific functions
|
|
*/
|
|
|
|
#ifdef _X86_
|
|
|
|
NTOSAPI
|
|
INTERLOCKED_RESULT
|
|
DDKAPI
|
|
Exi386InterlockedIncrementLong(
|
|
IN PLONG Addend);
|
|
|
|
NTOSAPI
|
|
INTERLOCKED_RESULT
|
|
DDKFASTAPI
|
|
Exfi386InterlockedIncrementLong(
|
|
IN PLONG Addend);
|
|
|
|
NTOSAPI
|
|
INTERLOCKED_RESULT
|
|
DDKAPI
|
|
Exi386InterlockedDecrementLong(
|
|
IN PLONG Addend);
|
|
|
|
NTOSAPI
|
|
INTERLOCKED_RESULT
|
|
DDKFASTAPI
|
|
Exfi386InterlockedDecrementLong(
|
|
IN PLONG Addend);
|
|
|
|
NTOSAPI
|
|
ULONG
|
|
DDKAPI
|
|
Exi386InterlockedExchangeUlong(
|
|
IN PULONG Target,
|
|
IN ULONG Value);
|
|
|
|
NTOSAPI
|
|
ULONG
|
|
DDKFASTAPI
|
|
Exfi386InterlockedExchangeUlong(
|
|
IN PULONG Target,
|
|
IN ULONG Value);
|
|
|
|
#define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
|
|
#define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
|
|
#define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
|
|
|
|
#endif /* _X86_ */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __WINNT4_H */
|