/* * 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 * * 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 */