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